Esempio n. 1
0
        public void Process(PipelineArgs args)
        {
            ExecuteInsertRenderingArgs insertRenderingArg = args as ExecuteInsertRenderingArgs; // IInsertRenderingArgs;

            if (insertRenderingArg == null)
            {
                return;
            }

            var renderingItem = insertRenderingArg.RenderingItem;

            if (!_prefabService.IsPrefab(renderingItem))
            {
                return;
            }

            var index = GetIndex(insertRenderingArg.Device, insertRenderingArg.Result.UniqueId);

            if (index != -1)
            {
                // SXA adds prefab proxy in previous processor... remove it
                insertRenderingArg.Device.Renderings.RemoveAt(index);
            }
            else
            {
                index = ConvertPosition(insertRenderingArg.Device, insertRenderingArg.PlaceholderKey, insertRenderingArg.Position);
            }

            // manipulate layoutDefinition via device reference
            _prefabService.InjectPrefab(
                renderingItem,
                insertRenderingArg.Device,
                insertRenderingArg.PlaceholderKey,
                index,
                insertRenderingArg.ContextItem
                );

            // Switch context from prefab proxy to first rendering of prefab
            var resultIndex = index >= 0 ? index : insertRenderingArg.Device.Renderings.Count - 1;

            insertRenderingArg.Result = new RenderingReference(
                (RenderingDefinition)insertRenderingArg.Device.Renderings[resultIndex],
                insertRenderingArg.Language,
                insertRenderingArg.ContentDatabase
                );

            insertRenderingArg.PerformInlineRendering = true;
            insertRenderingArg.AbortPipeline();
        }
        protected void PrefabInject(ClientPipelineArgs args)
        {
            var doFollowUp = false;
            var lastIndex  = -1;

            Assert.ArgumentNotNull(args, "args");
            if (args.IsPostBack && args.HasResult)
            {
                string[] strArrays       = args.Result.Split(new char[] { ',' });
                string   renderingItemId = strArrays[0];
                string   placeholderPath = strArrays[1].Replace("-c-", ",");

                var layoutDefinition = GetLayoutDefinition_exposed();
                var deviceRenderings = layoutDefinition.GetDevice(this.DeviceID);

                var renderingItem = Client.ContentDatabase.GetItem(renderingItemId);

                if (_prefabService.IsPrefab(renderingItem))
                {
                    var item = UIUtil.GetItemFromQueryString(Client.ContentDatabase);

                    doFollowUp = true;

                    // manipulate layoutDefinition via device reference
                    _prefabService.InjectPrefab(renderingItem, deviceRenderings, placeholderPath, this.SelectedIndex, item);

                    lastIndex = deviceRenderings.Renderings.Count;

                    SetDefinition_exposed(layoutDefinition);

                    // Never allow editor to open
                    if (args.Result.EndsWith("1"))
                    {
                        args.Result = string.Concat(args.Result.TrimEnd('1'), "0");
                    }
                }
            }

            // Call overridden method for all other logic and most importantly refresh() - NOTE: this adds our proxy item... so remove it next
            this.Add(args);

            // Remove robot (prefab proxy item) [this is because we can't call refresh() and exit above - it's private]
            if (doFollowUp)
            {
                this.SelectedIndex = lastIndex; // set index to delete (last item always)
                Remove(Message.Empty);          // unfortunately this always selects the last element
            }
        }