public string GetItemUrl(Item item, bool enableLanguageEmbedding = false)
        {
            if (item == null)
            {
                return(null);
            }

            EnterspeedSitecoreConfiguration configuration = _enterspeedConfigurationService.GetConfiguration();
            EnterspeedSiteInfo siteInfo = configuration.GetSite(item);

            var urlBuilderOptions = new ItemUrlBuilderOptions
            {
                SiteResolving          = true,
                AlwaysIncludeServerUrl = true,
                LowercaseUrls          = true,
                LanguageEmbedding      = enableLanguageEmbedding ? LanguageEmbedding.Always : LanguageEmbedding.Never
            };

            if (siteInfo != null)
            {
                SiteContext siteContext = _siteContextFactory.GetSiteContext(siteInfo.Name);

                urlBuilderOptions.Site = siteContext;
            }

            return(_linkManager.GetItemUrl(item, urlBuilderOptions));
        }
Example #2
0
        public IEnterspeedProperty Convert(Item item, Field field, EnterspeedSiteInfo siteInfo, List <IEnterspeedFieldValueConverter> fieldValueConverters)
        {
            if (string.IsNullOrEmpty(field?.Value))
            {
                return(null);
            }

            NameValueCollection values = HttpUtility.ParseQueryString(field.Value);

            if (values.Count == 0)
            {
                return(null);
            }

            var list = new List <StringEnterspeedProperty>();

            foreach (string key in values)
            {
                if (string.IsNullOrEmpty(key))
                {
                    continue;
                }

                string value = values[key];
                if (string.IsNullOrEmpty(value))
                {
                    continue;
                }

                list.Add(new StringEnterspeedProperty(key, value));
            }

            return(new ArrayEnterspeedProperty(_fieldService.GetFieldName(field), list.ToArray()));
        }
        public IDictionary <string, IEnterspeedProperty> GetProperties(Item item)
        {
            if (item.IsDictionaryItem())
            {
                IDictionary <string, IEnterspeedProperty> dictionaryProperties = _fieldConverter.ConvertFields(item, null, _fieldValueConverters.ToList());

                return(dictionaryProperties);
            }

            EnterspeedSiteInfo siteOfItem = _enterspeedConfigurationService
                                            .GetConfiguration()
                                            .GetSite(item);

            if (siteOfItem == null)
            {
                return(null);
            }

            IDictionary <string, IEnterspeedProperty> properties = _fieldConverter.ConvertFields(item, siteOfItem, _fieldValueConverters.ToList());

            properties.Add(MetaData, CreateMetaData(item));

            IEnterspeedProperty renderings = CreateRenderings(item);

            if (renderings != null)
            {
                properties.Add(Renderings, renderings);
            }

            return(properties);
        }
Example #4
0
        public SitecoreContentEntity Map(Item input)
        {
            var output = new SitecoreContentEntity
            {
                Id         = _enterspeedIdentityService.GetId(input),
                Type       = input.TemplateName,
                Properties = _enterspeedPropertyService.GetProperties(input)
            };

            EnterspeedSiteInfo siteInfo = _enterspeedConfigurationService.GetConfiguration().GetSite(input);

            if (siteInfo != null)
            {
                if (input.Paths.FullPath.StartsWith(siteInfo.HomeItemPath, StringComparison.OrdinalIgnoreCase))
                {
                    // Routable content resides on or below the Home item path.
                    output.Url = _urlService.GetItemUrl(input);
                }

                if (!input.Paths.FullPath.Equals(siteInfo.SiteItemPath, StringComparison.OrdinalIgnoreCase))
                {
                    // If the input item is the Site item, we do not set a parent ID.
                    output.ParentId = _enterspeedIdentityService.GetId(input.Parent);
                }
            }

            return(output);
        }
Example #5
0
        private bool IsItemReferencedFromEnabledContent(Item item, EnterspeedSitecoreConfiguration configuration)
        {
            GetLinksStrategy linksStrategy = _linkStrategyFactory.Resolve(item);

            var strategyContextArgs = new StrategyContextArgs(item);

            linksStrategy.ProcessReferrers(strategyContextArgs);

            if (strategyContextArgs.Result != null &&
                strategyContextArgs.Result.Any())
            {
                foreach (ItemLink itemLink in strategyContextArgs.Result)
                {
                    Item sourceItem = itemLink?.GetSourceItem();
                    if (sourceItem == null)
                    {
                        continue;
                    }

                    EnterspeedSiteInfo site = configuration.GetSite(sourceItem);
                    if (site != null)
                    {
                        // This rendering is referenced on content from an enabled site
                        return(true);
                    }
                }
            }

            return(false);
        }
Example #6
0
        public IDictionary <string, IEnterspeedProperty> ConvertFields(Item item, EnterspeedSiteInfo siteInfo, List <IEnterspeedFieldValueConverter> fieldValueConverters)
        {
            var output = new Dictionary <string, IEnterspeedProperty>();

            FieldCollection fieldsCollection = item.Fields;

            if (fieldsCollection == null || !fieldsCollection.Any())
            {
                return(output);
            }

            // Mapping all fields, by default
            List <Field> fields = fieldsCollection.ToList();

            if (item.IsDictionaryItem())
            {
                // Only include dictionary fields
                fields = fields.Where(field =>
                                      field.InnerItem != null &&
                                      field.InnerItem.Paths.FullPath.StartsWith("/sitecore/templates/System/Dictionary", StringComparison.OrdinalIgnoreCase))
                         .ToList();
            }
            else if (item.IsContentItem() || item.IsRenderingItem())
            {
                // Exclude system fields for content and renderings
                fields = fields.Where(field =>
                                      field.InnerItem != null &&
                                      !field.InnerItem.Paths.FullPath.StartsWith("/sitecore/templates/system", StringComparison.OrdinalIgnoreCase))
                         .ToList();
            }

            if (!fields.Any())
            {
                return(output);
            }

            foreach (Field field in fields)
            {
                if (field == null)
                {
                    continue;
                }

                IEnterspeedFieldValueConverter converter = fieldValueConverters.FirstOrDefault(x => x.CanConvert(field));

                var value = converter?.Convert(item, field, siteInfo, fieldValueConverters);
                if (value == null)
                {
                    continue;
                }

                output.Add(_fieldService.GetFieldName(field), value);
            }

            return(output);
        }
        public IEnterspeedProperty Convert(Item item, Field field, EnterspeedSiteInfo siteInfo, List <IEnterspeedFieldValueConverter> fieldValueConverters)
        {
            var value = 0;

            if (!string.IsNullOrEmpty(field.Value))
            {
                value = int.Parse(field.Value);
            }

            return(new NumberEnterspeedProperty(_fieldService.GetFieldName(field), value));
        }
Example #8
0
        public IEnterspeedProperty Convert(Item item, Field field, EnterspeedSiteInfo siteInfo, List <IEnterspeedFieldValueConverter> fieldValueConverters)
        {
            ReferenceField referenceField = field;

            if (string.IsNullOrEmpty(referenceField?.Value))
            {
                return(null);
            }

            return(new StringEnterspeedProperty(_fieldService.GetFieldName(field), referenceField.Value));
        }
Example #9
0
        public IEnterspeedProperty Convert(Item item, Field field, EnterspeedSiteInfo siteInfo, List <IEnterspeedFieldValueConverter> fieldValueConverters)
        {
            ReferenceField referenceField = field;

            if (referenceField?.TargetItem == null)
            {
                return(null);
            }

            return(new StringEnterspeedProperty(_fieldService.GetFieldName(field), _enterspeedIdentityService.GetId(referenceField.TargetItem)));
        }
Example #10
0
        public IEnterspeedProperty Convert(Item item, Field field, EnterspeedSiteInfo siteInfo, List <IEnterspeedFieldValueConverter> fieldValueConverters)
        {
            DateField dateField = field;

            if (dateField == null ||
                dateField.DateTime == DateTime.MinValue)
            {
                return(null);
            }

            return(new StringEnterspeedProperty(_fieldService.GetFieldName(field), _dateFormatter.FormatDate(dateField.DateTime)));
        }
        public IEnterspeedProperty Convert(Item item, Field field, EnterspeedSiteInfo siteInfo, List <IEnterspeedFieldValueConverter> fieldValueConverters)
        {
            string value = FieldRenderer.Render(item, field.Name);

            if (siteInfo != null)
            {
                value = PrefixRelativeImagesWithDomain(value, siteInfo.BaseUrl);

                value = PrefixRelativeLinksWithDomain(value, siteInfo.BaseUrl);
            }

            return(new StringEnterspeedProperty(_fieldService.GetFieldName(field), value));
        }
        public IEnterspeedProperty Convert(Item item, Field field, EnterspeedSiteInfo siteInfo, List <IEnterspeedFieldValueConverter> fieldValueConverters)
        {
            if (string.IsNullOrEmpty(field?.Value))
            {
                return(null);
            }

            NameValueCollection values = HttpUtility.ParseQueryString(field.Value);

            if (values.Count == 0)
            {
                return(null);
            }

            var items = new List <Item>();

            foreach (string key in values)
            {
                if (string.IsNullOrEmpty(key))
                {
                    continue;
                }

                string value = values[key];
                if (string.IsNullOrEmpty(value))
                {
                    continue;
                }

                if (!Guid.TryParse(value, out var itemId))
                {
                    continue;
                }

                Item referencedItem = _itemManager.GetItem(new ID(itemId), item.Language, Version.Latest, item.Database);
                if (referencedItem == null ||
                    referencedItem.Versions.Count == 0)
                {
                    continue;
                }

                items.Add(referencedItem);
            }

            var referenceIds = items.Select(x => new StringEnterspeedProperty(null, _enterspeedIdentityService.GetId(x))).ToArray();

            return(new ArrayEnterspeedProperty(_fieldService.GetFieldName(field), referenceIds));
        }
Example #13
0
        public IEnterspeedProperty Convert(Item item, Field field, EnterspeedSiteInfo siteInfo, List <IEnterspeedFieldValueConverter> fieldValueConverters)
        {
            FileField fileField = field;

            if (fileField?.MediaItem == null)
            {
                return(null);
            }

            string mediaUrl = _urlService.GetMediaUrl(fileField.MediaItem);

            if (string.IsNullOrEmpty(mediaUrl))
            {
                return(null);
            }

            return(new StringEnterspeedProperty(_fieldService.GetFieldName(field), mediaUrl));
        }
Example #14
0
        public IEnterspeedProperty Convert(Item item, Field field, EnterspeedSiteInfo siteInfo, List <IEnterspeedFieldValueConverter> fieldValueConverters)
        {
            if (string.IsNullOrEmpty(field.Value))
            {
                return(null);
            }

            var value = 0d;

            if (field.Value.Contains("."))
            {
                double.TryParse(field.Value, NumberStyles.Any, CultureInfo.InvariantCulture, out value);
            }
            else if (field.Value.Contains(","))
            {
                double.TryParse(field.Value, NumberStyles.Any, new CultureInfo("da-DK"), out value);
            }

            return(new NumberEnterspeedProperty(_fieldService.GetFieldName(field), value));
        }
        public IEnterspeedProperty Convert(Item item, Field field, EnterspeedSiteInfo siteInfo, List <IEnterspeedFieldValueConverter> fieldValueConverters)
        {
            MultilistField multilistField = field;

            if (multilistField == null)
            {
                return(null);
            }

            var items = multilistField.GetItems()?.ToList() ?? new List <Item>();

            if (!items.Any())
            {
                return(null);
            }

            var referenceIds = items.Select(x => new StringEnterspeedProperty(null, _enterspeedIdentityService.GetId(x))).ToArray();

            return(new ArrayEnterspeedProperty(_fieldService.GetFieldName(field), referenceIds));
        }
Example #16
0
        private void HandleContentItem(Item item, EnterspeedSitecoreConfiguration configuration, bool itemIsDeleted, bool itemIsPublished)
        {
            try
            {
                if (item == null)
                {
                    return;
                }

                // Skip, if the item published is not a content item
                if (!item.IsContentItem())
                {
                    return;
                }

                EnterspeedSiteInfo siteOfItem = configuration.GetSite(item);
                if (siteOfItem == null)
                {
                    // If no enabled site was found for this item, skip it
                    return;
                }

                SitecoreContentEntity sitecoreContentEntity = _sitecoreContentEntityModelMapper.Map(item);
                if (sitecoreContentEntity == null)
                {
                    return;
                }

                if (itemIsDeleted)
                {
                    string id = _identityService.GetId(item);
                    _loggingService.Info($"Beginning to delete content entity ({id}).");
                    Response deleteResponse = _enterspeedIngestService.Delete(id);

                    if (!deleteResponse.Success)
                    {
                        _loggingService.Warn($"Failed deleting content entity ({id}). Message: {deleteResponse.Message}", deleteResponse.Exception);
                    }
                    else
                    {
                        _loggingService.Debug($"Successfully deleting content entity ({id})");
                    }

                    return;
                }

                if (itemIsPublished)
                {
                    string id = _identityService.GetId(item);
                    _loggingService.Info($"Beginning to ingest content entity ({id}).");
                    Response saveResponse = _enterspeedIngestService.Save(sitecoreContentEntity);

                    if (!saveResponse.Success)
                    {
                        _loggingService.Warn($"Failed ingesting content entity ({id}). Message: {saveResponse.Message}", saveResponse.Exception);
                    }
                    else
                    {
                        _loggingService.Debug($"Successfully ingested content entity ({id})");
                    }
                }
            }
            catch (Exception exception)
            {
                Debug.WriteLine(exception.ToString());
            }
        }
        public IEnterspeedProperty Convert(Item item, Field field, EnterspeedSiteInfo siteInfo, List <IEnterspeedFieldValueConverter> fieldValueConverters)
        {
            LinkField linkField = field;

            if (linkField == null)
            {
                return(null);
            }

            var properties = new Dictionary <string, IEnterspeedProperty>();

            if (!string.IsNullOrEmpty(linkField.Target))
            {
                properties.Add(PropertyTarget, new StringEnterspeedProperty(PropertyTarget, linkField.Target));
            }

            if (!string.IsNullOrEmpty(linkField.Anchor))
            {
                properties.Add(PropertyAnchor, new StringEnterspeedProperty(PropertyAnchor, linkField.Anchor));
            }

            if (!string.IsNullOrEmpty(linkField.Text))
            {
                properties.Add(PropertyText, new StringEnterspeedProperty(PropertyText, linkField.Text));
            }

            if (!string.IsNullOrEmpty(linkField.Title))
            {
                properties.Add(PropertyTitle, new StringEnterspeedProperty(PropertyTitle, linkField.Title));
            }

            if (!string.IsNullOrEmpty(linkField.Class))
            {
                properties.Add(PropertyClass, new StringEnterspeedProperty(PropertyClass, linkField.Class));
            }

            string url = null;

            if (linkField.LinkType == "media")
            {
                url = _urlService.GetMediaUrl(linkField.TargetItem);
            }
            else if (linkField.LinkType == "internal")
            {
                url = _urlService.GetItemUrl(linkField.TargetItem);

                if (linkField.TargetItem != null)
                {
                    properties.Add(PropertyTargetType, new StringEnterspeedProperty(PropertyTargetType, linkField.TargetItem.TemplateName));
                    properties.Add(PropertyTargetId, new StringEnterspeedProperty(PropertyTargetId, _enterspeedIdentityService.GetId(linkField.TargetItem)));
                }
            }
            else if (linkField.LinkType == "external" ||
                     linkField.LinkType == "anchor" ||
                     linkField.LinkType == "mailto" ||
                     linkField.LinkType == "javascript")
            {
                url = linkField.GetFriendlyUrl();
            }

            if (!string.IsNullOrEmpty(url))
            {
                properties.Add(PropertyUrl, new StringEnterspeedProperty(PropertyUrl, url));
            }
            else
            {
                return(null);
            }

            return(new ObjectEnterspeedProperty(_fieldService.GetFieldName(field), properties));
        }
        public IEnterspeedProperty Convert(Item item, Field field, EnterspeedSiteInfo siteInfo, List <IEnterspeedFieldValueConverter> fieldValueConverters)
        {
            bool value = item[field.Name] == "1";

            return(new BooleanEnterspeedProperty(_fieldService.GetFieldName(field), value));
        }
Example #19
0
        public EnterspeedSitecoreConfiguration GetConfiguration()
        {
            Item enterspeedConfigurationItem = _itemManager.GetItem(EnterspeedIDs.Items.EnterspeedConfigurationID, Language.Parse("en"), Version.Latest, _factory.GetDatabase("web"));

            if (enterspeedConfigurationItem == null || enterspeedConfigurationItem.Versions.Count == 0)
            {
                return(new EnterspeedSitecoreConfiguration());
            }

            string enabled = enterspeedConfigurationItem[EnterspeedIDs.Fields.EnterspeedEnabledFieldID] ?? string.Empty;

            if (enabled != "1")
            {
                return(new EnterspeedSitecoreConfiguration());
            }

            if (!IsConfigurationUpdated(enterspeedConfigurationItem, out Guid currentRevisionId))
            {
                return(_configuration);
            }

            var config = new EnterspeedSitecoreConfiguration
            {
                IsEnabled = true
            };

            string configApiBaseUrl = enterspeedConfigurationItem[EnterspeedIDs.Fields.EnterspeedApiBaseUrlFieldID];

            config.BaseUrl = (configApiBaseUrl ?? string.Empty).Trim();

            string configApiKey = enterspeedConfigurationItem[EnterspeedIDs.Fields.EnterspeedApiKeyFieldID];

            config.ApiKey = (configApiKey ?? string.Empty).Trim();

            config.ItemNotFoundUrl = GetItemNotFoundUrl(_settings);

            MultilistField enabledSitesField = enterspeedConfigurationItem.Fields[EnterspeedIDs.Fields.EnterspeedEnabledSitesFieldID];

            var enabledSites = enabledSitesField?.GetItems()?.ToList() ?? new List <Item>();

            if (enabledSites.Any())
            {
                List <SiteInfo> allSiteInfos = _siteContextFactory.GetSites();

                foreach (Item enabledSite in enabledSites)
                {
                    SiteInfo matchingSite = allSiteInfos.FirstOrDefault(x => x.RootPath.Equals(enabledSite.Paths.FullPath, StringComparison.OrdinalIgnoreCase));
                    if (matchingSite == null)
                    {
                        continue;
                    }

                    SiteContext siteContext = _siteContextFactory.GetSiteContext(matchingSite.Name);

                    Language siteLanguage = _languageManager.GetLanguage(siteContext.Language);

                    Item homeItem = _itemManager.GetItem(siteContext.StartPath, siteLanguage, Version.Latest, siteContext.Database);
                    if (homeItem == null || homeItem.Versions.Count == 0)
                    {
                        // TODO - KEK: throw exception here?
                        continue;
                    }

                    string name         = siteContext.SiteInfo.Name;
                    string startPathUrl = _linkManager.GetItemUrl(homeItem, new ItemUrlBuilderOptions
                    {
                        SiteResolving          = true,
                        Site                   = siteContext,
                        AlwaysIncludeServerUrl = true,
                        LowercaseUrls          = true,
                        LanguageEmbedding      = LanguageEmbedding.Never
                    });

                    var enterspeedSiteInfo = new EnterspeedSiteInfo
                    {
                        Name         = name,
                        BaseUrl      = startPathUrl,
                        HomeItemPath = siteContext.StartPath,
                        SiteItemPath = siteContext.RootPath
                    };

                    if (siteContext.Properties["scheme"] != null &&
                        siteContext.Properties["scheme"].Equals("https", StringComparison.OrdinalIgnoreCase))
                    {
                        enterspeedSiteInfo.IsHttpsEnabled = true;
                    }

                    config.SiteInfos.Add(enterspeedSiteInfo);
                }
            }

            // Settings caching values
            _configuration           = config;
            _configurationRevisionId = currentRevisionId;

            return(_configuration);
        }
        public IEnterspeedProperty Convert(Item item, Field field, EnterspeedSiteInfo siteInfo, List <IEnterspeedFieldValueConverter> fieldValueConverters)
        {
            string value = FieldRenderer.Render(item, field.Name);

            return(new StringEnterspeedProperty(_fieldService.GetFieldName(field), value));
        }