예제 #1
0
        public int UpdateDeleteOrReorderElement([FromBody] ElementSettingsModel settings, int presentationId, int slideId, int?id = null)
        {
            int ret = 0, firstId = -1, secondId = -1, firstOrder = -1, secondOrder = -1;

            if (id.HasValue && base.ControllerContext.Request.Method == HttpMethod.Delete)
            {
                DeleteElement(presentationId, slideId, id.Value, HttpContext.Current.Request.QueryString["also"]);
            }
            else if (base.ControllerContext.Request.Method == HttpMethod.Put &&
                     base.ControllerContext.Request.RequestUri.AbsolutePath.TrimEnd('/').EndsWith("/reoder", System.StringComparison.OrdinalIgnoreCase) &&
                     int.TryParse(HttpContext.Current.Request.QueryString["firstId"], out firstId) && int.TryParse(HttpContext.Current.Request.QueryString["secondId"], out secondId))
            {
                int.TryParse(HttpContext.Current.Request.QueryString["firstOrder"], out firstOrder);
                int.TryParse(HttpContext.Current.Request.QueryString["secondOrder"], out secondOrder);

                ReoderElements(presentationId, slideId, firstId, secondId, firstOrder, secondOrder);
            }
            else
            {
                ret = UpdateSettings(settings, presentationId, slideId, id);
            }

            return(ret);
        }
예제 #2
0
        public int UpdateSettings([FromBody] ElementSettingsModel settings, int presentationId, int slideId, int?id = null)
        {
            int          ret = 0;
            Slide        s   = null;
            Element      e   = null;
            Presentation p   = null;

            if (settings != null && presentationId > 0)
            {
                p = base.Service.Read(presentationId);

                if (p != null)
                {
                    s = p.Slides.FirstOrDefault(candidate => candidate.Id == slideId);

                    if (s != null)
                    {
                        e = id.HasValue ? s.Elements.FirstOrDefault(candidate => candidate.Id == id.Value) : new Element();

                        if (e != null)
                        {
                            e.Name            = settings.Name;
                            e.Position        = settings.Position;
                            e.Type            = settings.Type;
                            e.Order           = settings.Order;
                            e.NavigateSlideId = settings.NavigateSlideId;
                            e.RealtimeData    = settings.RealtimeData;
                            e.Offset          = settings.Offset;

                            if (e.Offset == null)
                            {
                                e.Offset = new ElementOffset();
                            }

                            e.Properties.Clear();

                            if (settings.Properties != null)
                            {
                                foreach (var prop in settings.Properties)
                                {
                                    e.Properties.Add(new ElementProperty()
                                    {
                                        Name  = prop.Name,
                                        Value = prop.Value
                                    });
                                }
                            }

                            if (e.Id <= 0)
                            {
                                s.Elements.Add(e);
                            }

                            base.Service.CreateOrUpdate(p);

                            ret = s.Elements.First(candidate => candidate == e).Id;

                            if (e.Type == ElementType.Widget)
                            {
                                NotifyAboutWidgetUsage(presentationId, slideId, e);
                            }
                        }
                    }
                }
            }

            return(ret);
        }
예제 #3
0
        public void BulkUpdateElementPosition([FromBody] ElementSettingsModel settings, int presentationId, int slideId, int id, string also)
        {
            Slide                 s        = null;
            Presentation          p        = null;
            IEnumerable <Element> elements = null;
            IDictionary <int, Tuple <double, double> > positionMap = new Dictionary <int, Tuple <double, double> >();

            string[] components = (also ?? string.Empty).Split(new char[] { '#' }, StringSplitOptions.RemoveEmptyEntries);
            List <Tuple <int, double, double> > positions = components.Select(c =>
            {
                string[] parts = c.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries);
                return(new Tuple <int, double, double>(int.Parse(parts[0]), double.Parse(parts[1]), double.Parse(parts[2])));
            }).ToList();

            positions.Add(new Tuple <int, double, double>(id, settings.Offset.Left, settings.Offset.Top));

            foreach (var pos in positions)
            {
                if (!positionMap.ContainsKey(pos.Item1))
                {
                    positionMap.Add(pos.Item1, new Tuple <double, double>(pos.Item2, pos.Item3));
                }
            }

            p = base.Service.Read(presentationId);

            if (p != null)
            {
                s = p.Slides.FirstOrDefault(candidate => candidate.Id == slideId);

                if (s != null && s.Elements != null)
                {
                    elements = s.Elements.Where(e => positionMap.ContainsKey(e.Id));

                    if (elements.Any())
                    {
                        foreach (var elm in elements)
                        {
                            elm.Position = ElementPosition.Free;

                            if (elm.Offset == null)
                            {
                                elm.Offset = new ElementOffset();
                            }

                            elm.Offset.Left = positionMap[elm.Id].Item1;
                            elm.Offset.Top  = positionMap[elm.Id].Item2;

                            if (elm.Offset.Viewport == null)
                            {
                                elm.Offset.Viewport = new ElementOffsetViewport();
                            }

                            elm.Offset.Viewport.Width  = settings.Offset.Viewport.Width;
                            elm.Offset.Viewport.Height = settings.Offset.Viewport.Height;
                        }

                        base.Service.CreateOrUpdate(p);
                    }
                }
            }
        }