Exemple #1
0
        private string GetCvlFieldValue(string cvlId, string value, bool addValue)
        {
            if (string.IsNullOrWhiteSpace(value))
            {
                return(null);
            }

            string key = value.RemoveSpecialCharacters();

            if (string.IsNullOrWhiteSpace(key))
            {
                return(null);
            }

            CVL cvl = _cvlRepository.GetCVL(cvlId);

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

            CVLValue cvlValue = _cvlRepository.GetCVLValueByKey(cvl.Id, key);

            if (cvlValue != null)
            {
                return(cvlValue.Key);
            }

            if (!addValue)
            {
                return(null);
            }

            if (cvl.DataType == DataType.String)
            {
                cvlValue = new CVLValue {
                    CVLId = cvl.Id, Key = key, Value = value
                };
            }
            else if (cvl.DataType == DataType.LocaleString)
            {
                var localeString = new LocaleString();
                foreach (CultureInfo culture in _supportedCultures.Values)
                {
                    localeString[culture] = value;
                }

                cvlValue = new CVLValue {
                    CVLId = cvl.Id, Key = key, Value = localeString
                };
            }
            else
            {
                return(null);
            }

            _cvlRepository.AddCVLValue(cvlValue);

            return(key);
        }
Exemple #2
0
        public string GetCVLValue(string cvlId, object key)
        {
            if (key == null)
            {
                return(string.Empty);
            }

            CVLValue cv = CVLValues.FirstOrDefault(cvl => cvl.CVLId.Equals(cvlId) && cvl.Key.Equals(key));

            if (cv == null)
            {
                return(string.Empty);
            }

            return(cv.Value.ToString());
        }
        public CVLValue AddCVLValue(CVLValue cvlValue)
        {
            if (!_cvlValues.TryGetValue(cvlValue.CVLId, out List <CVLValue> cvlValues))
            {
                return(null);
            }

            if (cvlValues.Any(cv => cv.Key == cvlValue.Key))
            {
                return(null);
            }

            cvlValues.Add(cvlValue);

            return(cvlValue);
        }
        private IEnumerable <string> GetCvlValues(FieldType fieldType, string[] newValues)
        {
            if (fieldType == null)
            {
                throw new ArgumentNullException(nameof(fieldType));
            }

            if (newValues == null ||
                newValues.Length == 0)
            {
                yield break;
            }

            string          cvlId       = fieldType.CVLId;
            List <CVLValue> knownValues = Context.ExtensionManager.ModelService.GetCVLValuesForCVL(cvlId);

            foreach (string newValue in newValues)
            {
                string cvlKey = newValue.RemoveSpecialCharacters();

                // If the key is already known, return it.
                if (knownValues.Any(v => v.Key == cvlKey))
                {
                    yield return(cvlKey);

                    continue;
                }

                // If the key is not known and adding new values is disabled, skip this.
                if (!AddUnknownCvlValues)
                {
                    continue;
                }

                // Add the new CVLValue and return the key.
                CVLValue cvlValue = new CVLValue {
                    CVLId = cvlId, Key = cvlKey, Value = newValue
                };
                cvlValue = Context.ExtensionManager.ModelService.AddCVLValue(cvlValue);
                Context.Log(LogLevel.Information, $"A new CVL value was added (Key: {cvlKey}; Value: {newValue}). ");

                yield return(cvlValue.Key);
            }
        }
        public CVLValue AddCVLValue(CVLValue cvlValue)
        {
            if (!_cvlValues.TryGetValue(cvlValue.CVLId, out Dictionary <string, CVLValue> cvlValues))
            {
                // Initialize list of CVL values.
                GetCVLValuesForCVL(cvlValue.CVLId);

                return(cvlValue);
            }

            if (cvlValues.TryGetValue(cvlValue.Key, out CVLValue existingCvlValue))
            {
                return(existingCvlValue);
            }

            cvlValue = _inRiverManager.ModelService.AddCVLValue(cvlValue);
            cvlValues.Add(cvlValue.Key, cvlValue);

            return(cvlValue);
        }
        private void AddCvlValue(string cvlId, string newCVLValueKey, string newCVLValue)
        {
            CVL      cvl    = RemoteManager.ModelService.GetCVL(cvlId);
            CVLValue cvlVal = new CVLValue()
            {
                CVLId = cvlId, Key = newCVLValueKey
            };

            if (cvl.DataType == DataType.String)
            {
                cvlVal.Value = newCVLValue;
            }
            else if (cvl.DataType == DataType.LocaleString)
            {
                LocaleString locale      = new LocaleString(RemoteManager.UtilityService.GetAllLanguages());
                CultureInfo  cultureInfo = new CultureInfo("en");
                locale[cultureInfo] = newCVLValue;
                cvlVal.Value        = locale;
            }

            RemoteManager.ModelService.AddCVLValue(cvlVal);
        }
Exemple #7
0
        private static void AddCvlValue(string cvlId, string newCVLValueKey, string newCVLValue)
        {
            CVL      cvl      = remoteManager.ModelService.GetCVL(cvlId);
            bool     newValue = false;
            CVLValue cvlVal   = remoteManager.ModelService.GetCVLValueByKey(newCVLValueKey, cvlId);

            if (cvlVal == null)
            {
                newValue = true;
                cvlVal   = new CVLValue()
                {
                    CVLId = cvlId, Key = newCVLValueKey
                };
            }


            if (cvl.DataType == DataType.String)
            {
                cvlVal.Value = newCVLValue;
            }
            else if (cvl.DataType == DataType.LocaleString)
            {
                LocaleString locale      = new LocaleString(remoteManager.UtilityService.GetAllLanguages());
                CultureInfo  cultureInfo = new CultureInfo("en");
                locale[cultureInfo]           = newCVLValue;
                locale[new CultureInfo("sv")] = newCVLValue + "_SV";
                cvlVal.Value = locale;
            }

            if (newValue)
            {
                remoteManager.ModelService.AddCVLValue(cvlVal);
            }
            else
            {
                remoteManager.ModelService.UpdateCVLValue(cvlVal);
            }
        }
Exemple #8
0
 public CVLValue UpdateCVLValue(CVLValue cvlValue)
 {
     throw new NotImplementedException();
 }
Exemple #9
0
 public CVLValue AddCVLValue(CVLValue cvlValue)
 {
     return(cvlValue);
 }
Exemple #10
0
        public List <XElement> GetCVLValues(Field field, Configuration configuration)
        {
            List <XElement> elemets = new List <XElement>();

            if (field == null || field.IsEmpty())
            {
                if (field != null)
                {
                    CVL cvl = CvLs.FirstOrDefault(c => c.Id.Equals(field.FieldType.CVLId));
                    if (cvl == null)
                    {
                        return(elemets);
                    }

                    if (cvl.DataType == DataType.LocaleString)
                    {
                        Dictionary <string, XElement> valuesPerLanguage = new Dictionary <string, XElement>
                        {
                            {
                                configuration.ChannelDefaultLanguage.Name,
                                new XElement("Data", new XAttribute("language", configuration.ChannelDefaultLanguage.Name.ToLower()))
                            }
                        };
                        if (!configuration.ActiveCVLDataMode.Equals(CVLDataMode.Keys))
                        {
                            foreach (KeyValuePair <CultureInfo, CultureInfo> keyValuePair in configuration.LanguageMapping)
                            {
                                if (!valuesPerLanguage.ContainsKey(keyValuePair.Key.Name))
                                {
                                    valuesPerLanguage.Add(
                                        keyValuePair.Key.Name,
                                        new XElement("Data", new XAttribute("language", keyValuePair.Key.Name.ToLower())));
                                }
                            }

                            if (valuesPerLanguage.Count > 0)
                            {
                                foreach (string key in valuesPerLanguage.Keys)
                                {
                                    elemets.Add(valuesPerLanguage[key]);
                                }
                            }
                        }
                    }
                    else
                    {
                        XElement dataElement = new XElement(
                            "Data",
                            new XAttribute("language", configuration.ChannelDefaultLanguage.Name.ToLower()));

                        elemets.Add(dataElement);
                    }
                }

                return(elemets);
            }

            if (configuration.ActiveCVLDataMode.Equals(CVLDataMode.Keys) ||
                (field.FieldType.Settings.ContainsKey("EPiMetaFieldName") && field.FieldType.Settings["EPiMetaFieldName"].Equals("_ExcludedCatalogEntryMarkets")))
            {
                XElement dataElement = new XElement(
                    "Data",
                    new XAttribute("language", configuration.ChannelDefaultLanguage.Name.ToLower()));
                if (field.FieldType.Multivalue)
                {
                    foreach (string cvlKey in field.Data.ToString().Split(';'))
                    {
                        dataElement.Add(new XElement("Item", new XAttribute("value", cvlKey)));
                    }
                }
                else
                {
                    dataElement.Add(new XAttribute("value", field.Data));
                }

                elemets.Add(dataElement);
            }
            else
            {
                CVL cvl = CvLs.FirstOrDefault(c => c.Id.Equals(field.FieldType.CVLId));
                if (cvl == null)
                {
                    return(elemets);
                }

                string[] keys = field.FieldType.Multivalue
                                    ? field.Data.ToString().Split(';')
                                    : new[] { field.Data.ToString() };

                Dictionary <string, XElement> valuesPerLanguage = new Dictionary <string, XElement>
                {
                    {
                        configuration.ChannelDefaultLanguage.Name,
                        new XElement("Data", new XAttribute("language", configuration.ChannelDefaultLanguage.Name.ToLower()))
                    }
                };

                foreach (string key in keys)
                {
                    CVLValue cvlValue = CVLValues.FirstOrDefault(cv => cv.CVLId.Equals(cvl.Id) && cv.Key.Equals(key));
                    if (cvlValue == null || cvlValue.Value == null)
                    {
                        continue;
                    }

                    if (cvl.DataType.Equals(DataType.LocaleString))
                    {
                        LocaleString ls = (LocaleString)cvlValue.Value;
                        foreach (KeyValuePair <CultureInfo, CultureInfo> keyValuePair in configuration.LanguageMapping)
                        {
                            if (!valuesPerLanguage.ContainsKey(keyValuePair.Key.Name))
                            {
                                valuesPerLanguage.Add(
                                    keyValuePair.Key.Name,
                                    new XElement("Data", new XAttribute("language", keyValuePair.Key.Name.ToLower())));
                            }

                            string value = ls[keyValuePair.Value];
                            if (configuration.ActiveCVLDataMode.Equals(CVLDataMode.KeysAndValues))
                            {
                                value = key + Configuration.CVLKeyDelimiter + value;
                            }

                            // MultiValue uses <Item> elements, SingleValue stores the value in the <Data> element.
                            if (field.FieldType.Multivalue)
                            {
                                valuesPerLanguage[keyValuePair.Key.Name].Add(
                                    new XElement("Item", new XAttribute("value", value)));
                            }
                            else
                            {
                                valuesPerLanguage[keyValuePair.Key.Name].Add(new XAttribute("value", value));
                            }
                        }
                    }
                    else
                    {
                        string value = cvlValue.Value.ToString();
                        if (configuration.ActiveCVLDataMode.Equals(CVLDataMode.KeysAndValues))
                        {
                            value = key + Configuration.CVLKeyDelimiter + value;
                        }

                        // MultiValue uses <Item> elements, SingleValue stores the value in the <Data> element.
                        if (field.FieldType.Multivalue)
                        {
                            valuesPerLanguage[configuration.ChannelDefaultLanguage.Name].Add(
                                new XElement("Item", new XAttribute("value", value)));
                        }
                        else
                        {
                            valuesPerLanguage[configuration.ChannelDefaultLanguage.Name].Add(new XAttribute("value", value));
                        }
                    }
                }

                if (valuesPerLanguage.Count > 0)
                {
                    foreach (string key in valuesPerLanguage.Keys)
                    {
                        elemets.Add(valuesPerLanguage[key]);
                    }
                }
            }

            return(elemets);
        }
Exemple #11
0
        /// <summary>
        /// Returns the parsed cvl value.
        /// Checks if the values exist in the CVL. If not they get added if the setting CREATE_MISSING_CVL_KEYS is true.
        /// returns valid CVL values or null.
        /// </summary>
        /// <param name="field"></param>
        /// <param name="values"></param>
        /// <param name="result"></param>
        /// <param name="singleVal">returns the first valid CVL value</param>
        /// <returns></returns>
        private string GeParsedCvlValueForField(Field field, List <string> values, WorkerResult result, out string singleVal)
        {
            singleVal = string.Empty;

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

            List <string>   validatedCvlKeys = new List <string>(values.Count);
            List <CVLValue> cvlValues        = _inRiverContext.ExtensionManager.ModelService.GetCVLValuesForCVL(field.FieldType.CVLId, true);

            foreach (string cvlKey in values)
            {
                if (string.IsNullOrWhiteSpace(cvlKey))
                {
                    continue;
                }

                if (cvlValues.Any(c => c.Key.Equals(cvlKey)))
                {
                    validatedCvlKeys.Add(cvlKey);
                    continue;
                }

                string cleanCvlKey = cvlKey.ToStringWithoutControlCharactersForCvlKey();
                if (cvlValues.Any(c => c.Key.Equals(cleanCvlKey)))
                {
                    validatedCvlKeys.Add(cleanCvlKey);
                    continue;
                }

                // create new CVL value when the setting CREATE_MISSING_CVL_KEYS is true
                if (GetConfiguredCreateMissingCvlKeys())
                {
                    CVLValue newCvlValue = new CVLValue()
                    {
                        CVLId = field.FieldType.CVLId,
                        Key   = cleanCvlKey,
                        Value = cvlKey
                    };

                    try
                    {
                        newCvlValue = _inRiverContext.ExtensionManager.ModelService.AddCVLValue(newCvlValue);
                        cvlValues.Add(newCvlValue);
                        validatedCvlKeys.Add(newCvlValue.Key);
                    }
                    catch (Exception e)
                    {
                        result.Messages.Add($"Could not add CVLKey '{cleanCvlKey}' ({cvlKey}).");
                        _inRiverContext.Log(LogLevel.Error, $"Could not add CVLKey '{cleanCvlKey}' ({cvlKey}).", e);
                    }
                }
                else
                {
                    result.Messages.Add($"Missing CVLKey '{cleanCvlKey}' ({cvlKey}) has not been added.");
                }
            }

            if (validatedCvlKeys.Any())
            {
                if (field.FieldType.Multivalue)
                {
                    // cvlkeys are always separated by semicolon in inRiver
                    return(string.Join(";", validatedCvlKeys));
                }
                else
                {
                    singleVal = validatedCvlKeys.FirstOrDefault();
                    return(singleVal);
                }
            }

            return(null);
        }