예제 #1
0
        private List <UsedByRelation> PageRelation(SiteDb sitedb, string by, Guid PageId)
        {
            string baseurl = sitedb.WebSite.BaseUrl();

            byte consttype = ConstObjectType.GetByte(by);

            List <UsedByRelation> result = new List <UsedByRelation>();

            var relations = sitedb.Relations.GetRelations(PageId, consttype);

            foreach (var item in relations)
            {
                var objectinfo = ObjectService.GetObjectInfo(sitedb, item.objectYId, item.ConstTypeY);

                if (objectinfo != null)
                {
                    UsedByRelation relation = new UsedByRelation();
                    relation.Name = objectinfo.DisplayName;
                    relation.Url  = objectinfo.Url;
                    if (!string.IsNullOrEmpty(relation.Url))
                    {
                        relation.Url = Lib.Helper.UrlHelper.Combine(baseurl, relation.Url);
                    }
                    relation.ModelType = objectinfo.ModelType;
                    relation.ObjectId  = objectinfo.ObjectId;
                    relation.ConstType = objectinfo.ConstType;
                    result.Add(relation);
                }
            }
            return(result);
        }
예제 #2
0
        private List <UsedByRelation> _GetUsedBy(T value)
        {
            List <UsedByRelation> result = new List <UsedByRelation>();

            if (value == null)
            {
                return(result);
            }

            if (value.IsEmbedded)
            {
                var samestyles = this.GetSameEmbedded(value.BodyHash);

                foreach (var item in samestyles)
                {
                    UsedByRelation relation = new UsedByRelation();
                    relation.ObjectId  = item.OwnerObjectId;
                    relation.ConstType = item.OwnerConstType;
                    Helper.RelationHelper.SetNameUrl(SiteDb, relation);
                    relation.Remark = item.KoobooOpenTag;
                    result.Add(relation);
                }

                return(result);
            }
            else
            {
                return(base.GetUsedBy(value.Id));
            }
        }
예제 #3
0
        public static void SetNameUrl(SiteDb SiteDb, UsedByRelation relation)
        {
            if (relation.ObjectId == default(Guid) || relation.ConstType == default(byte))
            {
                return;
            }
            var objectinfo = Service.ObjectService.GetObjectInfo(SiteDb, relation.ObjectId, relation.ConstType);

            if (objectinfo != null)
            {
                relation.Name = objectinfo.DisplayName;
                relation.Url  = objectinfo.Url;
            }
        }
예제 #4
0
        public static List <UsedByRelation> ShowUsedBy(SiteDb sitedb, List <Relation.ObjectRelation> objectrelations)
        {
            List <UsedByRelation> relations = new List <UsedByRelation>();

            foreach (var item in objectrelations)
            {
                UsedByRelation relation = new UsedByRelation();

                if (item.ConstTypeX == ConstObjectType.CssRule)
                {
                    CmsCssRule cssrule = sitedb.CssRules.Get(item.objectXId);
                    if (cssrule == null)
                    {
                        continue;
                    }
                    var declarations = Kooboo.Dom.CSS.CSSSerializer.deserializeDeclarationBlock(cssrule.CssText);

                    string remark = cssrule.SelectorText + "{";
                    foreach (var decl in declarations.item)
                    {
                        if (Sites.Tag.Property.CanHaveUri(decl.propertyname))
                        {
                            remark += decl.propertyname + ":" + decl.value;
                        }
                    }
                    remark         += "}";
                    relation.Remark = remark;
                }

                var objectinfo = Sites.Service.ObjectService.GetObjectInfo(sitedb, item.objectXId, item.ConstTypeX);

                if (objectinfo != null)
                {
                    relation.Name      = objectinfo.DisplayName;
                    relation.Url       = objectinfo.Url;
                    relation.ModelType = objectinfo.ModelType;
                    relation.ObjectId  = objectinfo.ObjectId;
                    relation.ConstType = objectinfo.ConstType;
                }

                relations.Add(relation);
            }

            return(relations);
        }
        public override List <UsedByRelation> GetUsedBy(Guid ObjectId)
        {
            var viewmethods = this.SiteDb.ViewDataMethods.Query.Where(o => o.MethodId == ObjectId).SelectAll();

            List <UsedByRelation> relations = new List <UsedByRelation>();

            foreach (var item in viewmethods)
            {
                UsedByRelation relation = new UsedByRelation();

                var objectinfo = Sites.Service.ObjectService.GetObjectInfo(this.SiteDb, item.ViewId, ConstObjectType.View);
                relation.Name      = objectinfo.DisplayName;
                relation.Url       = objectinfo.Url;
                relation.ModelType = objectinfo.ModelType;
                relation.ObjectId  = objectinfo.ObjectId;
                relation.ConstType = objectinfo.ConstType;

                relations.Add(relation);
            }

            return(relations);
        }
예제 #6
0
        private List <UsedByRelation> _GetUsedBy(Form form)
        {
            List <UsedByRelation> result = new List <UsedByRelation>();

            if (form == null)
            {
                return(result);
            }

            /// for embedded style, this is belong to one parent object.
            if (form.IsEmbedded)
            {
                var sameform = this.GetSameEmbedded(form.BodyHash);

                foreach (var item in sameform)
                {
                    UsedByRelation relation = new UsedByRelation();
                    relation.ObjectId  = item.OwnerObjectId;
                    relation.ConstType = item.OwnerConstType;
                    Sites.Helper.RelationHelper.SetNameUrl(SiteDb, relation);
                    relation.Remark = item.KoobooOpenTag;
                    result.Add(relation);
                }

                return(result);
            }

            var relations = this.SiteDb.Relations.GetReferredBy(form);

            foreach (var item in relations)
            {
                UsedByRelation relation = new UsedByRelation();
                relation.ObjectId  = item.objectXId;
                relation.ConstType = item.ConstTypeX;
                Sites.Helper.RelationHelper.SetNameUrl(SiteDb, relation);
                result.Add(relation);
            }
            return(result);
        }
예제 #7
0
        public List <UsedByRelation> GetUsedBy(Style Style)
        {
            List <UsedByRelation> result = new List <UsedByRelation>();

            if (Style == null)
            {
                return(result);
            }

            /// for embedded style, this is belong to one parent object.
            if (Style.IsEmbedded)
            {
                var samestyles = this.GetSameEmbedded(Style.BodyHash);

                foreach (var item in samestyles)
                {
                    UsedByRelation relation = new UsedByRelation();
                    relation.ObjectId  = item.OwnerObjectId;
                    relation.ConstType = item.OwnerConstType;
                    Helper.RelationHelper.SetNameUrl(this.SiteDb, relation);
                    relation.Remark = item.KoobooOpenTag;
                    result.Add(relation);
                }

                return(result);
            }

            var relations = this.SiteDb.Relations.GetReferredBy(Style);

            foreach (var item in relations)
            {
                ///import rule has relation to cssrule only.
                ///this style if reference by another style using import rule.
                if (item.ConstTypeX == ConstObjectType.CssRule)
                {
                    CmsCssRule cssrule = this.SiteDb.CssRules.Get(item.objectXId);
                    if (cssrule.ParentStyleId != default(Guid))
                    {
                        Style ParentStyle = this.SiteDb.Styles.Get(cssrule.ParentStyleId);

                        if (ParentStyle != null)
                        {
                            var parentresults = this.GetUsedBy(ParentStyle);
                            if (parentresults != null && parentresults.Count() > 0)
                            {
                                result.AddRange(parentresults);
                            }

                            UsedByRelation relation = new UsedByRelation();
                            relation.ObjectId  = ParentStyle.Id;
                            relation.ConstType = ParentStyle.ConstType;
                            Helper.RelationHelper.SetNameUrl(this.SiteDb, relation);
                            relation.Remark = cssrule.CssText;
                            result.Add(relation);
                        }
                    }
                }
                else
                {
                    UsedByRelation relation = new UsedByRelation();
                    relation.ObjectId  = item.objectXId;
                    relation.ConstType = item.ConstTypeX;
                    Helper.RelationHelper.SetNameUrl(this.SiteDb, relation);
                    result.Add(relation);
                }
            }
            return(result);
        }
예제 #8
0
        public List <UsedByRelation> ShowRelations(CmsCssRule cssrule)
        {
            List <UsedByRelation> result = new List <UsedByRelation>();

            if (cssrule == null || cssrule.ruleType != RuleType.StyleRule)
            {
                return(result);
            }

            if (cssrule.IsInline)
            {
                var            objectinfo = Service.ObjectService.GetObjectInfo(SiteDb, cssrule.OwnerObjectId, cssrule.OwnerObjectConstType);
                UsedByRelation usedby     = new UsedByRelation();
                usedby.Name      = objectinfo.Name;
                usedby.Remark    = cssrule.KoobooOpenTag;
                usedby.ObjectId  = objectinfo.ObjectId;
                usedby.ConstType = objectinfo.ConstType;
                usedby.Url       = objectinfo.Url;
                result.Add(usedby);
                return(result);
            }

            Style style = SiteDb.Styles.Get(cssrule.ParentStyleId);

            var relations = SiteDb.Styles.GetUsedBy(style);

            foreach (var item in relations)
            {
                var      siteobject = Service.ObjectService.GetSiteObject(SiteDb, item.ObjectId, item.ConstType);
                Document dom        = null;
                if (siteobject is IDomObject)
                {
                    var domobject = siteobject as IDomObject;
                    dom = domobject.Dom;
                }

                if (dom != null)
                {
                    var elements = dom.getElementsByCSSSelector(cssrule.SelectorText);

                    string name      = null;
                    byte   consttype = 0;
                    Guid   ObjectId  = default(Guid);
                    string url       = null;

                    if (elements != null && elements.length > 0)
                    {
                        var objectinfo = Service.ObjectService.GetObjectInfo(SiteDb, siteobject);
                        name      = objectinfo.Name;
                        consttype = objectinfo.ConstType;
                        ObjectId  = objectinfo.ObjectId;
                        url       = objectinfo.Url;
                    }

                    foreach (var eitem in elements.item)
                    {
                        var            objectinfo = Service.ObjectService.GetObjectInfo(SiteDb, cssrule);
                        UsedByRelation usedby     = new UsedByRelation();
                        usedby.Name      = name;
                        usedby.ObjectId  = ObjectId;
                        usedby.ConstType = consttype;
                        usedby.Remark    = Service.DomService.GetOpenTag(eitem);
                        usedby.Url       = url;
                        result.Add(usedby);
                    }
                }
            }
            return(result);
        }