Beispiel #1
0
        public override void Execute(CommandContext context)
        {
            string           formValue        = WebUtil.GetFormValue("scLayout");
            string           xml              = WebEditUtil.ConvertJSONLayoutToXML(formValue);
            string           id               = ShortID.Decode(WebUtil.GetFormValue("scDeviceID"));
            LayoutDefinition layoutDefinition = LayoutDefinition.Parse(xml);

            if (layoutDefinition == null)
            {
                ReturnLayout();
                return;
            }
            DeviceDefinition device = layoutDefinition.GetDevice(id);

            if (device == null)
            {
                ReturnLayout();
                return;
            }
            string uniqueId = Guid.Parse(context.Parameters["renderingUid"]).ToString("B").ToUpperInvariant();
            RenderingDefinition renderingByUniqueId = device.GetRenderingByUniqueId(uniqueId);

            if (renderingByUniqueId == null)
            {
                ReturnLayout();
                return;
            }
            if (string.IsNullOrEmpty(renderingByUniqueId.Parameters))
            {
                if (!string.IsNullOrEmpty(renderingByUniqueId.ItemID))
                {
                    RenderingItem renderingItem = Client.ContentDatabase.GetItem(renderingByUniqueId.ItemID);
                    renderingByUniqueId.Parameters = ((renderingItem != null) ? renderingItem.Parameters : string.Empty);
                }
                else
                {
                    renderingByUniqueId.Parameters = string.Empty;
                }
            }
            NameValueCollection nameValueCollection = WebUtil.ParseUrlParameters(renderingByUniqueId.Parameters);
            string input = nameValueCollection["FieldNames"];
            string text  = context.Parameters["variant"];

            if (Guid.TryParse(input, out Guid result) && result == Guid.Parse(text))
            {
                ReturnLayout();
                return;
            }
            nameValueCollection["FieldNames"] = text;
            renderingByUniqueId.Parameters    = new UrlString(nameValueCollection.EscapeDataValues()).GetUrl();
            formValue = WebEditUtil.ConvertXMLLayoutToJSON(layoutDefinition.ToXml());
            ReturnLayout(formValue);
        }
Beispiel #2
0
        private Db GetDatabase(out RenderingDefinition sourceRendering, out Item targetRenderingItem, out DeviceDefinition device)
        {
            var db = new Db();

            var page = new DbItem("page", _pageId);

            db.Add(page);

            db.Add(new DbItem("sourceRendering", _sourceRenderingItemId));
            db.Add(new DbItem("targetRendering", _targetRenderingItemId));

            page.Add(new DbField("__Renderings", Sitecore.FieldIDs.LayoutField)
            {
                Value = string.Format(@"<r xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:s=""s"">
	<d id=""{{E68F244A-399C-4B86-B517-5B116547CECE}}"">
		<r uid=""{1}"" s:id=""{2}"" s:ph=""pagebody"" />
		<r uid=""{{CDFD3A99-7A88-4D72-8E5C-2E0F3565C052}}"" s:ds=""{{7D426874-C107-4A7A-A0C0-D0E041C649C2}}"" s:id=""{{D97EB6F7-26BF-4347-8988-D6019C3E2E0B}}"" s:ph=""{3}_{0:d}"" />
		<r uid=""{{305AE5CD-9555-4258-91A6-FF939BC0650F}}"" s:ds=""{{E3B3F0F6-CB76-4EA6-A3F6-681490B2345B}}"" s:id=""{{D97EB6F7-26BF-4347-8988-D6019C3E2E0B}}"" s:ph=""{4}_{0:d}"" />
		<r uid=""{{8F5FE967-B933-4E77-8731-D10EABEEBE9A}}"" s:ds=""{{143B554C-E9BF-414D-81B8-CDCFFD2702F4}}"" s:id=""{{D97EB6F7-26BF-4347-8988-D6019C3E2E0B}}"" s:ph=""{4}_{0:d}"" />
		<r uid=""{{C4718241-6719-4ED0-A5D5-5875F834D89D}}"" s:ds=""{{E4E35B2C-709E-4547-B217-155604766169}}"" s:id=""{{D97EB6F7-26BF-4347-8988-D6019C3E2E0B}}"" s:ph=""{4}_{0:d}"" />
		<r uid=""{{E1891090-34EA-4DB3-91E9-D3D312EA2B4F}}"" s:ds=""{{D46A9CBF-F999-440B-B551-91667A6C1FCA}}"" s:id=""{{D97EB6F7-26BF-4347-8988-D6019C3E2E0B}}"" s:ph=""{4}_{0:d}"" />
		<r uid=""{{F30E85D9-7F9D-4FAE-B70B-DF57DC4CF78C}}"" s:ds=""{{2825111A-5285-48DE-A5F5-F28B7C3181A6}}"" s:id=""{{D97EB6F7-26BF-4347-8988-D6019C3E2E0B}}"" s:ph=""{4}_{0:d}"" />
	</d>
</r>",
                                      _renderingUniqueId,
                                      ID.Parse(_renderingUniqueId),
                                      _sourceRenderingItemId,
                                      _placeholderKeyWith1Rendering,
                                      _placeholderKeyWith4Renderings
                                      )
            });

            device = new DeviceDefinition
            {
                ID         = ID.NewID.ToString(),
                Renderings = new ArrayList
                {
                    new RenderingDefinition {
                        UniqueId = ID.Parse(_renderingUniqueId).ToString(), ItemID = _sourceRenderingItemId.ToString(), Placeholder = "pagebody"
                    },
                    new RenderingDefinition {
                        Placeholder = string.Format("{0}_{1}", _placeholderKeyWith1Rendering, _renderingUniqueId), UniqueId = ID.NewID.ToString(), ItemID = ID.NewID.ToString()
                    },
                    new RenderingDefinition {
                        Placeholder = string.Format("{0}_{1}", _placeholderKeyWith4Renderings, _renderingUniqueId), UniqueId = ID.NewID.ToString(), ItemID = ID.NewID.ToString()
                    },
                    new RenderingDefinition {
                        Placeholder = string.Format("{0}_{1}", _placeholderKeyWith4Renderings, _renderingUniqueId), UniqueId = ID.NewID.ToString(), ItemID = ID.NewID.ToString()
                    },
                    new RenderingDefinition {
                        Placeholder = string.Format("{0}_{1}", _placeholderKeyWith4Renderings, _renderingUniqueId), UniqueId = ID.NewID.ToString(), ItemID = ID.NewID.ToString()
                    },
                    new RenderingDefinition {
                        Placeholder = string.Format("{0}_{1}", _placeholderKeyWith4Renderings, _renderingUniqueId), UniqueId = ID.NewID.ToString(), ItemID = ID.NewID.ToString()
                    },
                    new RenderingDefinition {
                        Placeholder = string.Format("/pagebody/{0}_{1}", _placeholderKeyNestedWith1Rendering, _renderingUniqueId), UniqueId = ID.NewID.ToString(), ItemID = ID.NewID.ToString()
                    },
                }
            };
            targetRenderingItem = db.GetItem(_targetRenderingItemId);
            sourceRendering     = device.GetRenderingByUniqueId(new ID(_renderingUniqueId).ToString());

            return(db);
        }
Beispiel #3
0
        // update datasource references on target page item
        private void UpdateDatasourcePaths(Item target)
        {
            try
            {
                if (target != null)
                {
                    //Log.Info("target: " + target.ID + " - " + target.Name, this);

                    // get all target's renderings
                    RenderingReference[] renderings = target.Visualization.GetRenderings(Context.Device, true);
                    //Log.Info("Total # target's renderings: " + renderings.Length + ".", this);

                    Item   targetResourceFolder = GetResourceFolder(target.Paths.Path);
                    string targetDatasourceID   = string.Empty;

                    // Get the layout definitions and the device
                    LayoutDefinition sharedLayout = LayoutDefinition.Parse(LayoutField.GetFieldValue(target.Fields[FieldIDs.LayoutField]));
                    LayoutDefinition finalLayout  = LayoutDefinition.Parse(LayoutField.GetFieldValue(target.Fields[FieldIDs.FinalLayoutField]));
                    DeviceDefinition device       = finalLayout.Devices[0] as DeviceDefinition;

                    //int count = 1;
                    foreach (RenderingReference rend in renderings)
                    {
                        string renderingDatasourceID = rend.Settings.DataSource;
                        if (!String.IsNullOrEmpty(renderingDatasourceID))
                        {
                            //Log.Info("rend[" + count + "] = " + rend.RenderingItem.Name + " = " + rend.RenderingID.ToString(), this);

                            string renderingUID = rend.UniqueId;
                            //Log.Info("rend.UniqueId = " + renderingUID, this);


                            // get target datasource ID
                            if (targetResourceFolder != null && targetResourceFolder.HasChildren)
                            {
                                //Log.Info("targetResourceFolder has " + targetResourceFolder.Children.Count + " children.", this);
                                targetDatasourceID = GetTargetDatasourceID(targetResourceFolder.Paths.Path, renderingDatasourceID);
                            }
                            else
                            {
                                if (ItemIsSourceRootChild(renderingDatasourceID))
                                {
                                    targetDatasourceID = GetTargetDatasourceID(renderingDatasourceID);
                                }
                                else
                                {
                                    return;
                                }                // datasource exists in area of content tree that was not copied, do not update
                            }
                            //Log.Info("targetDatasourceID: " + targetDatasourceID, this);

                            // Update rendering datasource value accordingly and verify
                            if (!String.IsNullOrEmpty(targetDatasourceID))
                            {
                                //Log.Info("Datasource should be pointing to : " + targetDatasourceID + " | but it is pointing to: " + renderingDatasourceID, this);
                                device.GetRenderingByUniqueId(renderingUID).Datasource = targetDatasourceID;
                                VerifyReferenceUpdate(target, device.GetRenderingByUniqueId(renderingUID).Datasource);

                                // Save the layout changes
                                target.Editing.BeginEdit();
                                ItemUtil.SetLayoutDetails(target, sharedLayout.ToXml(), finalLayout.ToXml());
                                target.Editing.EndEdit();
                            }
                        }
                        //count++;
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Error("Failed to update item references after CopyTo - " + target.ID.ToString() + " - " + ex.Message, ex, this);
            }
        }