public CamlExpression GetExpression(Func <SPModelQueryFieldInfo, CamlExpression> expressionFactory, bool checkOrderable)
        {
            CommonHelper.AccessNotNull(expressionFactory, "expressionFactory");

            if (this.FieldAssociations == null)
            {
                CommonHelper.AccessNotNull(this.Field.FieldRef, "FieldRef");
                return(expressionFactory(this.Field));
            }
            if (!this.FieldAssociations.Queryable)
            {
                throw new Exception(String.Format("Member '{0}' must have exactly one SPFieldAttribute with IncludeInQuery set to true", this.Member.Name));
            }
            if (this.FieldAssociations.Fields.Count > 1 && checkOrderable)
            {
                throw new Exception(String.Format("Member '{0}' cannot be used in ordering", this.Member.Name));
            }
            CamlExpression expression = Caml.False;

            foreach (SPModelFieldAssociation association in this.FieldAssociations)
            {
                SPModelQueryFieldInfo fieldInfo = new SPModelQueryFieldInfo(visitor.Manager.Site, association);
                if (this.FieldAssociations.Fields.Count == 1)
                {
                    return(expressionFactory(fieldInfo));
                }
                expression |= (association.Descriptor.GetContentTypeExpression(visitor.Manager.Descriptor) + expressionFactory(fieldInfo));
            }
            return(expression);
        }
Exemple #2
0
        public SPModelQueryFieldInfo(SPSite site, SPModelFieldAssociation association)
            : this()
        {
            CommonHelper.ConfirmNotNull(site, "site");
            CommonHelper.AccessNotNull(association.Attribute, "Attribute");

            FieldRef      = association.Attribute.ListFieldInternalName;
            QueryProperty = association.QueryProperty;
            if (association.Attribute is SPBuiltInFieldAttribute)
            {
                SPFieldType fieldType;
                if (KnownFields.FieldTypeDictionary.TryGetValue(association.Attribute.InternalName, out fieldType))
                {
                    FieldType         = fieldType;
                    FieldTypeAsString = fieldType.ToString();
                    if (fieldType == SPFieldType.DateTime)
                    {
                        IncludeTimeValue = !KnownFields.DateOnlyFields.Contains(association.Attribute.InternalName);
                    }
                }
                else
                {
                    SPField field = site.RootWeb.Fields.GetFieldByInternalName(association.Attribute.InternalName);
                    FieldType         = field.Type;
                    FieldTypeAsString = field.TypeAsString;
                    if (field.Type == SPFieldType.DateTime)
                    {
                        IncludeTimeValue = ((SPFieldDateTime)field).DisplayFormat == SPDateTimeFieldFormatType.DateTime;
                    }
                }
            }
            else
            {
                FieldType         = association.Attribute.Type;
                FieldTypeAsString = association.Attribute.TypeAsString;
                if (association.Attribute.Type == SPFieldType.DateTime)
                {
                    IncludeTimeValue = ((SPDateTimeFieldAttribute)association.Attribute).DisplayFormat == SPDateTimeFieldFormatType.DateTime;
                }
            }
        }
        public TaxonomyNavigationRequestContext()
        {
            this.context   = TaxonomyNavigationContext.Current;
            this.variation = VariationContext.Current;
            if (context.HasNavigationContext)
            {
                this.navigationTerm = context.NavigationTerm;
            }
            else
            {
                using (new SPSecurity.GrantAdditionalPermissionsInScope(SPBasePermissions.FullMask)) {
                    SPWeb  currentWeb = SPContext.Current.Web;
                    string url        = TaxonomyNavigationHelper.ResolveFriendlyUrl(currentWeb, SPUrlUtility.CombineUrl(currentWeb.ServerRelativeUrl, currentWeb.RootFolder.WelcomePage));
                    TaxonomyNavigationHelper.TryGetNavigationTerm(url, out this.navigationTerm, out url);
                }
            }
            if (this.navigationTerm == null)
            {
                NavigationTermSet termSet;
                TaxonomyNavigationHelper.IsRequestingNavigationTermSet(out termSet);
                this.navigationTermSetItem = termSet;
            }
            else
            {
                this.navigationTermSetItem = navigationTerm;
            }

            if (context.HasFriendlyUrl || context.HasCatalogUrl)
            {
                this.serverRelativeRequestUrl = context.ResolvedDisplayUrl;
            }
            else if (navigationTermSetItem != null)
            {
                this.serverRelativeRequestUrl = navigationTermSetItem.GetResolvedDisplayUrl(null);
            }
            else
            {
                this.serverRelativeRequestUrl = SPUtility.OriginalServerRelativeRequestPath;
            }
            this.variationRelativeRequestUrl = PublishingWebHelper.TrimVariationFromPath(serverRelativeRequestUrl);

            this.query = HttpUtility.ParseQueryString(HttpContext.Current.Request.Url.Query);
            query.Remove(null);
            query.Remove("TermStoreId");
            query.Remove("TermSetId");
            query.Remove("TermId");
            this.queryString = query.AllKeys.Length > 0 ? "?" + query : String.Empty;

            SPListItem listItem = SPContext.Current.ListItem;

            if (listItem != null)
            {
                this.currentItem = SPModel.TryCreate(listItem);
            }
            if (currentItem is ICatalogPage)
            {
                ICatalogPageFilter filter = CommonHelper.AccessNotNull(((ICatalogPage)currentItem).Filter, "Filter");
                SetCatalogPageFilter(filter);
            }
            if (currentItem is ISeoMetaProvider)
            {
                seoMeta.Add((ISeoMetaProvider)currentItem);
            }
            seoMeta.Add(new SeoMetaListItem(listItem));
            for (NavigationTerm t = navigationTerm; t != null; t = t.Parent)
            {
                seoMeta.Add(new SeoMetaNavigationTerm(listItem.Web, t));
            }
        }