protected virtual FieldDescriptor GetFieldDescriptor(Field field, GetRenderingPropertiesArgs args)
        {
            if (field.Name == "Additional Parameters")
            {
                return null;
            }
            if (field.Name == "Personalization" && !UserOptions.View.ShowPersonalizationSection)
            {
                return null;
            }
            if (field.Name == "Tests" && !UserOptions.View.ShowTestLabSection)
            {
                return null;
            }
            if (!RenderingItem.IsAvalableNotBlobNotSystemField(field))
            {
                return null;
            }

            var value = GetValue(field.Name, args);

            var fieldDescriptor = new FieldDescriptor(args.StandardValuesItem, field.Name)
            {
                Value = value ?? field.Value,
                ContainsStandardValue = (value == null) ? true : false,
            };

            return fieldDescriptor;
        }
 public virtual void Process(GetRenderingPropertiesArgs args)
 {
     Assert.ArgumentNotNull(args, "args");
     Assert.ArgumentNotNull(args.RenderingDefinition, "args.RenderingDefinition");
     Assert.ArgumentNotNull(args.StandardValuesItem, "args.StandardValuesItem");
     args.RenderingParameters = GetRenderingParameters(args);
     args.FieldDescriptors = GetFieldDescriptors(args);
 }
        protected virtual void AddFieldsIncludedBySection(FieldCollection fieldCol, List<Field> includedFields, GetRenderingPropertiesArgs args)
        {
            var sectionsParam = args.ClientParameters["sections"];
            if (string.IsNullOrEmpty(sectionsParam))
            {
                return;
            }

            var sectionNames = sectionsParam.Split(new[] { '|' }).Where(name => !string.IsNullOrWhiteSpace(name)).ToList();
            var fields = fieldCol.Where(f => sectionNames.Contains(f.Section));
            includedFields.AddRange(fields);
        }
        protected virtual bool ShowDialog(ClientPipelineArgs args, int selectedIndex, Item item)
        {
            var handleNameParam = args.Parameters["handleName"];
            var deviceIdParam = args.Parameters["deviceId"];

            if (args.IsPostBack)
            {
                if (args.HasResult)
                {
                    Save(handleNameParam, deviceIdParam, args.Parameters, selectedIndex, args.Result);
                }
                return true;
            }

            if (selectedIndex < 0)
            {
                return true;
            }
            var args2 = new GetRenderingPropertiesArgs()
            {
                ClientParameters = args.Parameters,
                HandleName = handleNameParam,
                DeviceId = deviceIdParam,
                SelectedIndex = selectedIndex,
            };
            CorePipeline.Run("getRenderingPropertiesFieldEditor", args2);
            var fields = args2.FieldDescriptors;
            var dialogTitle = GetDialogTitle(args);

            var options = new RenderingParametersFieldEditorOptions(fields)
            {
                DialogTitle = dialogTitle,
                HandleName = handleNameParam,
                PreserveSections = true
            };

            this.SetCustomParameters(args2.RenderingDefinition, options, item);

            var url = options.ToUrlString();
            SheerResponse.ShowModalDialog(url.ToString(), "720", "480", string.Empty, true);

            args.WaitForPostBack();
            return false;
        }
        protected virtual string GetValue(string fieldName, GetRenderingPropertiesArgs args)
        {
            Assert.ArgumentNotNull(fieldName, "fieldName");
            Assert.ArgumentNotNull(args, "args");
            Assert.ArgumentNotNull(args.RenderingDefinition, "args.RenderingDefinition");
            Assert.ArgumentNotNull(args.RenderingParameters, "args.RenderingParameters");

            var renderingDef = args.RenderingDefinition;
            switch (fieldName.ToLowerInvariant())
            {
                case "placeholder":
                    return renderingDef.Placeholder ?? string.Empty;
                case "data source":
                    return renderingDef.Datasource ?? string.Empty;
                case "caching":
                    return GetCaching(renderingDef);
                case "personalization":
                    return renderingDef.Conditions ?? string.Empty;
                case "tests":
                    return renderingDef.MultiVariateTest ?? string.Empty;
            }
            string value;
            args.RenderingParameters.TryGetValue(fieldName, out value);
            return value;
        }
 protected virtual Dictionary<string, string> GetRenderingParameters(GetRenderingPropertiesArgs args)
 {
     Assert.ArgumentNotNull(args, "args");
     Assert.ArgumentNotNull(args.RenderingDefinition, "args.RenderingDefinition");
     var parameters = new Dictionary<string, string>();
     var parameterCol = Sitecore.Web.WebUtil.ParseUrlParameters(args.RenderingDefinition.Parameters ?? string.Empty);
     foreach (string key in parameterCol.Keys)
     {
         if (!string.IsNullOrEmpty(key))
         {
             parameters[key] = parameterCol[key];
         }
     }
     return parameters;
 }
        protected virtual List<Field> GetIncludedFields(FieldCollection fieldCol, GetRenderingPropertiesArgs args)
        {
            var includedFields = new List<Field>();
            var parameters = args.ClientParameters;
            if (parameters == null || parameters.Count == 0)
            {
                return includedFields;
            }

            AddFieldsIncludedByName(fieldCol, includedFields, args);
            AddFieldsIncludedBySection(fieldCol, includedFields, args);
            return includedFields;
        }
        protected virtual List<FieldDescriptor> GetFieldDescriptors(GetRenderingPropertiesArgs args)
        {
            var fieldDescriptors = new List<FieldDescriptor>();
            var additionalParameters = new Dictionary<string, string>(args.RenderingParameters);

            var fieldCol = args.StandardValuesItem.Fields;
            fieldCol.ReadAll();
            fieldCol.Sort();

            var includedFields = GetIncludedFields(fieldCol, args);
            if (includedFields == null || includedFields.Count == 0)
            {
                return fieldDescriptors;
            }

            foreach (Field field in fieldCol)
            {
                if (includedFields.Contains(field))
                {
                    var fieldDescriptor = GetFieldDescriptor(field, args);
                    if (fieldDescriptor != null)
                    {
                        fieldDescriptors.Add(fieldDescriptor);
                    }
                }
                additionalParameters.Remove(field.Name);
            }
            var additionalParametersField = includedFields.FirstOrDefault(f => f.Name.Equals("Additional Parameters", StringComparison.OrdinalIgnoreCase));
            if (additionalParametersField != null)
            {
                var additionalParametersDescriptor = GetAdditionalParameters(args.StandardValuesItem, additionalParameters);
                if (additionalParametersDescriptor != null)
                {
                    fieldDescriptors.Add(additionalParametersDescriptor);
                }
            }
            return fieldDescriptors;
        }