Пример #1
0
        //============================

        public static List <ObjectProperty> GetWidgetProperties(Widget w, Guid guidContentID)
        {
            Object widget = new Object();

            List <WidgetProps> lstProps = w.ParseDefaultControlProperties();

            if (w.ControlPath.Contains(":"))
            {
                if (w.ControlPath.ToUpperInvariant().StartsWith("CLASS:"))
                {
                    try {
                        string className = w.ControlPath.Replace("CLASS:", "");
                        Type   t         = ReflectionUtilities.GetTypeFromString(className);
                        widget = Activator.CreateInstance(t);
                    } catch (Exception ex) { }
                }
                else
                {
                    try {
                        string[] path         = w.ControlPath.Split(':');
                        string   objectPrefix = path[0];
                        string   objectClass  = path[1];

                        Type t = ReflectionUtilities.GetTypeFromString(objectClass);

                        Object obj    = Activator.CreateInstance(t);
                        Object attrib = ReflectionUtilities.GetAttribute <WidgetActionSettingModelAttribute>(t, objectPrefix);

                        if (attrib != null && attrib is WidgetActionSettingModelAttribute)
                        {
                            string attrClass = (attrib as WidgetActionSettingModelAttribute).ClassName;
                            Type   s         = ReflectionUtilities.GetTypeFromString(attrClass);

                            widget = Activator.CreateInstance(s);
                        }
                    } catch (Exception ex) { }
                }
            }
            else
            {
                if (w.ControlPath.Contains("|"))
                {
                    try {
                        string[] path       = w.ControlPath.Split('|');
                        string   viewPath   = path[0];
                        string   modelClass = String.Empty;
                        if (path.Length > 1)
                        {
                            modelClass = path[1];
                            Type objType = ReflectionUtilities.GetTypeFromString(modelClass);

                            widget = Activator.CreateInstance(objType);
                        }
                    } catch (Exception ex) { }
                }
            }

            if (widget is IAdminModule)
            {
                var w1 = (IAdminModule)widget;
                w1.SiteID = SiteData.CurrentSiteID;
            }

            if (widget is IWidget)
            {
                var w1 = (IWidget)widget;
                w1.SiteID            = SiteData.CurrentSiteID;
                w1.RootContentID     = w.Root_ContentID;
                w1.PageWidgetID      = w.Root_WidgetID;
                w1.IsDynamicInserted = true;
            }

            if (widget is IWidgetRawData)
            {
                var w1 = (IWidgetRawData)widget;
                w1.RawWidgetData = w.ControlProperties;
            }

            List <ObjectProperty> lstDefProps = ObjectProperty.GetObjectProperties(widget);

            //require that widget be attributed to be on the list
            List <string> limitedPropertyList = (from ww in widget.GetType().GetProperties()
                                                 where Attribute.IsDefined(ww, typeof(WidgetAttribute))
                                                 select ww.Name.ToLowerInvariant()).ToList();

            List <ObjectProperty> lstPropsToEdit = (from p in lstDefProps
                                                    join l in limitedPropertyList on p.Name.ToLowerInvariant() equals l.ToLowerInvariant()
                                                    where p.CanRead == true &&
                                                    p.CanWrite == true
                                                    select p).ToList();

            foreach (var dp in lstPropsToEdit)
            {
                string             sName      = dp.Name.ToLowerInvariant();
                List <WidgetProps> lstItmVals = lstProps.Where(x => x.KeyName.ToLowerInvariant().StartsWith(sName + "|") || x.KeyName.ToLowerInvariant() == sName).ToList();

                ObjectProperty sourceProperty = new ObjectProperty();

                string sListSourcePropertyName = (from p in lstDefProps
                                                  where p.Name.ToLowerInvariant() == sName.ToLowerInvariant() &&
                                                  !String.IsNullOrEmpty(p.CompanionSourceFieldName)
                                                  select p.CompanionSourceFieldName).FirstOrDefault();

                if (String.IsNullOrEmpty(sListSourcePropertyName))
                {
                    sListSourcePropertyName = String.Empty;
                }

                sourceProperty = (from p in lstDefProps
                                  where p.CanRead == true &&
                                  p.CanWrite == false &&
                                  p.Name.ToLowerInvariant() == sListSourcePropertyName.ToLowerInvariant()
                                  select p).FirstOrDefault();

                if (dp.FieldMode != WidgetAttribute.FieldMode.CheckBoxList)
                {
                    string sDefTxt = String.Empty;

                    if (lstItmVals != null && lstItmVals.Any())
                    {
                        dp.TextValue = lstItmVals != null?lstItmVals.FirstOrDefault().KeyValue : String.Empty;

                        dp.DefValue = dp.TextValue;
                    }
                    else
                    {
                        if (dp.DefValue != null)
                        {
                            sDefTxt = dp.DefValue.ToString();

                            if (dp.PropertyType == typeof(Boolean))
                            {
                                bool vB = Convert.ToBoolean(dp.DefValue.ToString());
                                sDefTxt = vB.ToString();
                            }
                            if (dp.PropertyType == typeof(System.Drawing.Color))
                            {
                                System.Drawing.Color vC = (System.Drawing.Color)dp.DefValue;
                                sDefTxt = System.Drawing.ColorTranslator.ToHtml(vC);
                            }
                        }

                        dp.TextValue = sDefTxt;
                    }
                }

                Type pt = dp.PropertyType;

                if (sourceProperty != null)
                {
                    if (sourceProperty.DefValue is Dictionary <string, string> )
                    {
                        dp.Options = OptionSelections.GetOptionsFromDictionary((Dictionary <string, string>)sourceProperty.DefValue);

                        // work with a checkbox list, allow more than one value
                        if (dp.FieldMode == WidgetAttribute.FieldMode.CheckBoxList)
                        {
                            // since this is a multi selected capable field, look for anything that starts with the
                            // field name and has the delimiter trailing

                            if (lstItmVals.Any() && dp.Options.Any())
                            {
                                foreach (var v in dp.Options)
                                {
                                    v.Selected = (from p in lstItmVals
                                                  where p.KeyValue == v.Key
                                                  select p.KeyValue).Any();
                                }
                            }
                        }
                    }
                }

                if (dp.FieldMode == WidgetAttribute.FieldMode.Unknown)
                {
                    if (pt == typeof(String) || pt == typeof(DateTime) ||
                        pt == typeof(Int16) || pt == typeof(Int32) || pt == typeof(Int64) ||
                        pt == typeof(float) || pt == typeof(Decimal) ||
                        pt == typeof(Guid) || pt == typeof(System.Drawing.Color))
                    {
                        dp.FieldMode = WidgetAttribute.FieldMode.TextBox;
                    }
                }

                if ((pt == typeof(Boolean)) || dp.FieldMode == WidgetAttribute.FieldMode.CheckBox)
                {
                    dp.FieldMode     = WidgetAttribute.FieldMode.CheckBox;
                    dp.CheckBoxState = Convert.ToBoolean(dp.TextValue);
                }
            }

            return(lstPropsToEdit);
        }