Beispiel #1
0
        public void ShouldNotThrowOnGetTemplateFieldItem()
        {
            using (var db = new Db
            {
                new DbItem("home")
                {
                    new DbField("field")
                }
            })
            {
                var home = db.GetItem("/sitecore/content/home");

                FieldTypeManager.GetTemplateFieldItem(home.Fields["field"]);
            }
        }
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType     = "application/json";
            context.Response.ContentEncoding = Encoding.UTF8;
            isJSONP            = false;
            this._itemsPerPage = 20; // Constants.SettingsItem.Fields[Constants.ItemsPerPageText].Value.IsNumeric() ? int.Parse(Constants.SettingsItem.Fields[Constants.ItemsPerPageText].Value) : 20;
            this.ExtractSearchQuery(context.Request.QueryString);
            this._stopwatch = new Stopwatch();
            this._stopwatch.Start();
            this.StoreUserContextSearches();
            int hitCount;
            var debugMode = SearchHelper.GetDebug(this._searchQuery).IsNotEmpty();

            if (debugMode)
            {
                if (!Config.EnableBucketDebug)
                {
                    Constants.EnableTemporaryBucketDebug = true;
                }
            }

            this._itemsPerPage = SearchHelper.GetPageSize(this._searchQuery).IsNumeric() ? int.Parse(SearchHelper.GetPageSize(this._searchQuery)) : 20;
            var items        = Context.Item.FullSearch(this._searchQuery, out hitCount, pageNumber: int.Parse(this._pageNumber), pageSize: this._itemsPerPage, sortField: SearchHelper.GetSort(this._searchQuery), sortDirection: SearchHelper.GetOrderDirection(this._searchQuery));
            var itemsCount   = hitCount;
            var pageNumbers  = ((itemsCount % this._itemsPerPage) == 0) ? (itemsCount / this._itemsPerPage) : ((itemsCount / this._itemsPerPage) + 1);
            var currentPage  = int.Parse(this._pageNumber);
            var startItemIdx = (currentPage - 1) * this._itemsPerPage;

            if (startItemIdx >= itemsCount)
            {
                currentPage = 1;
            }

            if (!this._runFacet)
            {
                if (items.IsNotNull())
                {
                    var refinement = new SafeDictionary <string> {
                        { Constants.IsSearchImage.ToLowerInvariant(), "1" }
                    };
                    int hitsCount;
                    var templateSearch  = Context.ContentDatabase.GetItem(ItemIDs.TemplateRoot).Search(refinement, out hitsCount, location: ItemIDs.TemplateRoot.ToString(), numberOfItemsToReturn: 200, pageNumber: 1);
                    var showFieldsQuick = templateSearch.Select(i => FieldTypeManager.GetTemplateFieldItem(new Field(i.GetItem().ID, i.GetItem())));
                    foreach (var sitecoreItem in items)
                    {
                        var innerItem = sitecoreItem.GetItem();
                        if (innerItem != null)
                        {
                            sitecoreItem.TemplateName = innerItem.TemplateName;
                            sitecoreItem.Name         = innerItem.DisplayName;
                            var parentBucketItemOrParent = innerItem.GetParentBucketItemOrParent();
                            if (parentBucketItemOrParent.IsNotNull())
                            {
                                sitecoreItem.Bucket = parentBucketItemOrParent.Name;
                            }
                            else
                            {
                                sitecoreItem.Bucket = "sitecore";
                            }
                            sitecoreItem.Cre = innerItem.Statistics.Created.ToString();
                            //sitecoreItem.Language = innerItem.Language.CultureInfo.TwoLetterISOLanguageName;
                            sitecoreItem.Path = innerItem.Paths.IsMediaItem
                                                    ? innerItem.Paths.MediaPath
                                                    : innerItem.Paths.FullPath;
                            sitecoreItem.CreBy = innerItem.Statistics.CreatedBy != string.Empty ? innerItem.Statistics.CreatedBy : innerItem.Statistics.UpdatedBy;

                            foreach (var fieldItem in showFieldsQuick)
                            {
                                if (innerItem.Fields[fieldItem.Name].IsNotNull())
                                {
                                    if (fieldItem.Type != "Thumbnail" && fieldItem.Type.ToLowerInvariant() != Constants.AttachmentFieldType && fieldItem.Type != Constants.ImageFieldType || fieldItem.Type == "Multilist" || fieldItem.Type == "Checkbox")
                                    {
                                        if (fieldItem.Type == "Multilist" || fieldItem.Type == "Checkbox")
                                        {
                                            sitecoreItem.Content += "<p><strong>" + fieldItem.Name + ":</strong> " + FieldParser.ParseIdsForFieldFriendlyValue(innerItem, fieldItem.Name) +
                                                                    "</p><br/>";
                                        }
                                        else
                                        {
                                            sitecoreItem.Content += "<p><strong>" + fieldItem.Name + ":</strong> " + innerItem.Fields[fieldItem.Name].Value +
                                                                    "</p><br/>";
                                        }
                                    }

                                    if (fieldItem.Type.ToLowerInvariant() == Constants.AttachmentFieldType || fieldItem.Type == Constants.ImageFieldType || fieldItem.Type == "Multilist" || fieldItem.Type == "Thumbnail")
                                    {
                                        if ((innerItem.Fields[fieldItem.Name] != null) && (((ImageField)innerItem.Fields[fieldItem.Name]).MediaItem != null))
                                        {
                                            sitecoreItem.ImagePath = MediaManager.GetMediaUrl(((ImageField)innerItem.Fields[fieldItem.Name]).MediaItem);
                                        }

                                        if (innerItem.Fields[fieldItem.Name].Type.ToLowerInvariant() == Constants.AttachmentFieldType)
                                        {
                                            sitecoreItem.ImagePath = MediaManager.GetMediaUrl(new MediaItem(innerItem));
                                        }

                                        if ((innerItem.Fields[fieldItem.Name] != null) && (((ThumbnailField)innerItem.Fields[fieldItem.Name]).MediaItem != null))
                                        {
                                            sitecoreItem.ImagePath = MediaManager.GetMediaUrl(((ThumbnailField)innerItem.Fields[fieldItem.Name]).MediaItem);
                                        }
                                        else if (fieldItem.Type == "Multilist")
                                        {
                                            if (sitecoreItem.ImagePath.IsNullOrEmpty())
                                            {
                                                var multiPath = FieldParser.ParseIdsForImage(innerItem, fieldItem.Name);
                                                if (multiPath.IsNotNull())
                                                {
                                                    sitecoreItem.ImagePath = MediaManager.GetMediaUrl(multiPath);
                                                }
                                            }
                                        }
                                    }
                                }
                            }

                            if (sitecoreItem.Content.IsNullOrEmpty())
                            {
                                sitecoreItem.Content = string.Empty;
                            }

                            if (sitecoreItem.ImagePath.IsNullOrEmpty())
                            {
                                sitecoreItem.ImagePath = "/temp/IconCache/" + sitecoreItem.GetItem().Template.Icon;
                            }
                        }
                    }
                }
            }

            if (Config.SecuredItems == "hide")
            {
                items = items.RemoveWhere(item => item.Name.IsNull());
            }

            if (!this._runFacet)
            {
                context.Response.Write(callback + "(" + JsonConvert.SerializeObject(new FullSearch
                {
                    PageNumbers = pageNumbers,
                    items       = items,
                    tips        = GetRandomTips((!Config.EnableTips || Sitecore.Context.User.Profile.GetCustomProperty("Tips Enabled") == "")? 0 : 2),
                    launchType  = GetEditorLaunchType(),
                    SearchTime  = this.SearchTime,
                    SearchCount = itemsCount.ToString(),
                    CurrentPage = currentPage,
                    Location    = Context.ContentDatabase.GetItem(this.LocationFilter).IsNotNull() ? Context.ContentDatabase.GetItem(this.LocationFilter).Name : "Unknown"
                }) + ")");

                this._stopwatch.Stop();
                if (Config.EnableBucketDebug || Sitecore.ItemBucket.Kernel.Util.Constants.EnableTemporaryBucketDebug)
                {
                    Sitecore.Diagnostics.Log.Info("Search Took : " + this._stopwatch.ElapsedMilliseconds + "ms", this);
                }
            }
            else
            {
                if (SearchHelper.GetID(this._searchQuery).Count() == 0)
                {
                    if (itemsCount > 0)
                    {
                        context.Response.Write(callback + "(" + JsonConvert.SerializeObject(new FullSearch
                        {
                            PageNumbers = pageNumbers,
                            facets      = this.GetFacets(),
                            SearchCount = itemsCount.ToString(),
                            CurrentPage = currentPage
                        }) + ")");
                    }
                    else
                    {
                        context.Response.Write(JsonConvert.SerializeObject(new FullSearch
                        {
                            PageNumbers = pageNumbers,
                            facets      = new List <List <FacetReturn> >(),
                            SearchCount = itemsCount.ToString(),
                            CurrentPage = currentPage
                        }));
                    }
                }
            }

            if (debugMode)
            {
                Constants.EnableTemporaryBucketDebug = false;
            }
        }