Esempio n. 1
0
        public void Globalization_ResKeyParser()
        {
            string className, name, src;

            var ok = SenseNetResourceManager.ParseResourceKey(src = "$Resources:ClassName,Key", out className, out name);

            Assert.IsTrue(ok, "Failed to parse: " + src);
            Assert.IsTrue(className == "ClassName", String.Format("ClassName is '{0}', expected: 'ClassName', src: {1}", className, src));
            Assert.IsTrue(name == "Key", String.Format("Name is '{0}', expected: 'Key', src: {1}", name, src));

            ok = SenseNetResourceManager.ParseResourceKey(src = "$   Resources:   ClassName  ,  Key   ", out className, out name);
            Assert.IsTrue(ok, "Failed to parse: " + src);
            Assert.IsTrue(className == "ClassName", String.Format("ClassName is '{0}', expected: 'ClassName', src: {1}", className, src));
            Assert.IsTrue(name == "Key", String.Format("Name is '{0}', expected: 'Key', src: {1}", name, src));

            ok = SenseNetResourceManager.ParseResourceKey(src = "$ClassName,Key", out className, out name);
            Assert.IsTrue(ok, "Failed to parse: " + src);
            Assert.IsTrue(className == "ClassName", String.Format("ClassName is '{0}', expected: 'ClassName', src: {1}", className, src));
            Assert.IsTrue(name == "Key", String.Format("Name is '{0}', expected: 'Key', src: {1}", name, src));

            ok = SenseNetResourceManager.ParseResourceKey(src = "$      ClassName   ,   Key   ", out className, out name);
            Assert.IsTrue(ok, "Failed to parse: " + src);
            Assert.IsTrue(className == "ClassName", String.Format("ClassName is '{0}', expected: 'ClassName', src: {1}", className, src));
            Assert.IsTrue(name == "Key", String.Format("Name is '{0}', expected: 'Key', src: {1}", name, src));
        }
Esempio n. 2
0
        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);

            var voting = Node.LoadNode(Content.Id) as Voting;

            if (voting == null)
            {
                Controls.Add(new Literal {
                    Text = "Error with loading the content with ID: " + Content.Id
                });
                return;
            }

            var dt = new DataTable();

            dt.Columns.AddRange(new[] {
                new DataColumn("Question", typeof(String)),
                new DataColumn("Count", typeof(Double))
            });

            var sum = voting.Result.Sum(item => Convert.ToDouble(item.Value));

            var formatString = string.Concat("N",
                                             DecimalsInResult < 0 || DecimalsInResult > 5
                                                    ? 0
                                                    : DecimalsInResult);

            foreach (var item in voting.Result)
            {
                string classname;
                string keyname;
                var    itemText = item.Key;
                if (SenseNetResourceManager.ParseResourceKey(itemText, out classname, out keyname))
                {
                    itemText = SenseNetResourceManager.Current.GetString(classname, keyname);
                }

                dt.Rows.Add(new[] {
                    itemText,
                    sum == 0 || Convert.ToInt32(item.Value) == 0 ? 0.ToString() : ((Convert.ToDouble(item.Value) / sum) * 100).ToString(formatString)
                });
            }

            var lv = FindControl("ResultList") as ListView;

            if (lv != null)
            {
                lv.DataSource = dt.DefaultView;
                lv.DataBind();
            }
        }
Esempio n. 3
0
        public override void SetData(object data)
        {
            var displayName = data as string;

            _innerData = displayName;
            string className;
            string name;

            if (SenseNetResourceManager.ParseResourceKey(displayName, out className, out name))
            {
                var rescontrol = GetResourceEditorLinkControl();
                if (rescontrol != null)
                {
                    // write resourcesJSON to hidden textbox
                    var resourcesData = new SenseNet.Portal.ResourceEditorController.ResourceKeyData
                    {
                        Datas = ResourceEditorController.GetResources(className, name).Select(p => new SenseNet.Portal.ResourceEditorController.ResourceData {
                            Lang = p.Key, Value = p.Value
                        }).ToList(),
                        Name = displayName
                    };
                    var resourcesJSON = new JavaScriptSerializer().Serialize(resourcesData);
                    GetResourcesBoxControl().Text = resourcesJSON;

                    // send optionsJSON to client when clicked
                    string currentlang  = CultureInfo.CurrentUICulture.Name;
                    string currentlangp = CultureInfo.CurrentUICulture.Parent == null ? string.Empty : CultureInfo.CurrentUICulture.Parent.Name;
                    string dialogtitle  = SenseNetResourceManager.Current.GetString("Controls", "FieldControl-EditValue-Title");
                    var    title        = string.Format(dialogtitle, this.Field.DisplayName);

                    var optionsJSon = "{'link':$(this), 'currentlang':'" + currentlang + "','currentlangp':'" + currentlangp + "','title':'" + title + "'}";

                    rescontrol.OnClientClick = "SN.ResourceEditor.editResource('" + className + "','" + name + "'," + optionsJSon + "); return false;";
                    rescontrol.Text          = SenseNetResourceManager.Current.GetString(className, name);
                }
                var innerControl = GetInnerControl() as TextBox;
                innerControl.Style.Add("display", "none");
            }
            else
            {
                var resourceDiv = GetResourceDivControl();
                if (resourceDiv != null)
                {
                    resourceDiv.Visible = false;
                }
            }

            base.SetData(data);
        }
Esempio n. 4
0
        /// <summary>
        /// Returns object data which is a transfer object.
        /// </summary>
        public virtual object GetData(bool localized)
        {
            if (!LocalizationEnabled || !localized || !SenseNetResourceManager.Running)
            {
                return(Value);
            }
            if (!(Value is string stringData))
            {
                return(Value);
            }

            return(SenseNetResourceManager.ParseResourceKey(stringData, out var className, out var name)
                ? SenseNetResourceManager.Current.GetString(className, name)
                : Value);
        }
Esempio n. 5
0
        public string GetLocalizedValue(CultureInfo cultureInfo = null)
        {
            if (!LocalizationEnabled || !SenseNetResourceManager.Running)
            {
                return(GetStoredValue());
            }
            string className, name;
            var    stringData = this.GetStoredValue();

            if (SenseNetResourceManager.ParseResourceKey(stringData, out className, out name))
            {
                if (cultureInfo == null)
                {
                    return(SenseNetResourceManager.Current.GetString(className, name));
                }
                return(SenseNetResourceManager.Current.GetString(className, name, cultureInfo));
            }
            return(stringData);
        }
Esempio n. 6
0
        public static string GetOptionLocalizedText(IEnumerable <ChoiceOption> options, string langKey)
        {
            // If there is no option for the specified language (this may happen if
            // the language key is missing from the option list of the Language field
            // in the Site CTD), use the language code itself.
            var choiceOption = options?.FirstOrDefault(o => o.Value == langKey);
            var text         = choiceOption == null ? langKey : choiceOption.StoredText;

            // choiceOption.Text contains the localized value, but since we are in resource editing mode, it will be a generated link to edit it
            // so let's manually resolve the localized text, because we don't want that link in the resource editor itself
            string className;
            string name;

            if (SenseNetResourceManager.ParseResourceKey(text, out className, out name))
            {
                var localizedText = SenseNetResourceManager.Current.GetObjectOrNull(className, name, CultureInfo.CurrentUICulture, false) as string;
                return(string.IsNullOrEmpty(localizedText) ? text : localizedText);
            }
            return(text);
        }
Esempio n. 7
0
        private static string GetValidName(string title, bool removeResourceClass = true)
        {
            // check for resource key
            string className, key;

            if (removeResourceClass && SenseNetResourceManager.ParseResourceKey(title, out className, out key))
            {
                if (key.StartsWith("Category_"))
                {
                    key = key.Remove(0, 9);
                }

                title = key;
            }

            var name = title;

            name = new Regex(ContentNaming.InvalidNameCharsPattern).Replace(name, string.Empty);
            name = name.Replace(" ", string.Empty);
            return(name);
        }
Esempio n. 8
0
        //========================================================================= Data handling

        /// <summary>
        /// Returns object data which is a transfer object.
        /// </summary>
        public virtual object GetData(bool localized = true)
        {
            if (!LocalizationEnabled || !localized || !SenseNetResourceManager.Running)
            {
                return(Value);
            }
            var stringData = Value as string;

            if (stringData == null)
            {
                return(Value);
            }

            string className, name;

            if (SenseNetResourceManager.ParseResourceKey(stringData, out className, out name))
            {
                return(SenseNetResourceManager.Current.GetString(className, name));
            }

            return(Value);
        }
Esempio n. 9
0
        public override object GetData()
        {
            if (this.ControlMode == FieldControlControlMode.Browse || this.ReadOnly)
            {
                return(_innerData);
            }

            var nameAvailableControl = GetNameAvailableControl();

            // name control is available
            var nameControlAvailable = false;

            if (nameAvailableControl != null)
            {
                if (nameAvailableControl.Text != "0")
                {
                    nameControlAvailable = true;
                }
            }

            var displayName  = string.Empty;
            var innerControl = GetInnerControl() as TextBox;

            displayName = innerControl.Text;

            string className;
            string name;

            if (SenseNetResourceManager.ParseResourceKey(displayName, out className, out name))
            {
                // get resources
                var allresStr = GetResourcesBoxControl().Text;

                // if resources JSON is empty, we just entered a resource key into displayname control, but it does not yet come from the resource editor
                if (!string.IsNullOrEmpty(allresStr))
                {
                    var ser    = new JavaScriptSerializer();
                    var allres = ser.Deserialize <SenseNet.Portal.ResourceEditorController.ResourceKeyData>(allresStr);

                    // value comes from the resource editor ui
                    displayName = allres.Name;

                    // if the entered value is a resource key, then update corresponding resources
                    if (SenseNetResourceManager.ParseResourceKey(displayName, out className, out name))
                    {
                        ResourceEditorController.SaveResource(className, name, allres.Datas);
                    }
                }
            }

            if (!nameControlAvailable && (this.Content.Id == 0 || AlwaysUpdateName))
            {
                // content name should be set automatically generated from displayname
                var newName = ContentNamingHelper.GetNameFromDisplayName(this.Content.Name, displayName);
                if (newName.Length > 0)
                {
                    this.Content["Name"] = newName;
                }
            }

            return(displayName);
        }
Esempio n. 10
0
        public override IEnumerable <IndexFieldInfo> GetIndexFieldInfos(SnCR.Field snField, out string textExtract)
        {
            string className, name;

            if (SenseNetResourceManager.Running && snField.LocalizationEnabled && snField.IsLocalized && SenseNetResourceManager.ParseResourceKey(snField.GetStoredValue(), out className, out name))
            {
                var strings = SenseNetResourceManager.Current.GetStrings(className, name);
                textExtract = string.Join(" ", strings);
                return(CreateFieldInfo(snField.Name, strings));
            }
            var data        = snField.GetData();
            var stringValue = data == null ? String.Empty : data.ToString().ToLower();

            textExtract = stringValue;

            return(CreateFieldInfo(snField.Name, stringValue));
        }
Esempio n. 11
0
        public override IEnumerable <IndexFieldInfo> GetIndexFieldInfos(SnCR.Field snField, out string textExtract)
        {
            var data = snField.GetData() ?? string.Empty;

            var stringData = data as string;

            if (stringData != null)
            {
                textExtract = stringData.ToLower();
                return(CreateFieldInfo(snField.Name, textExtract));
            }

            var listData = data as IEnumerable <string>;

            if (listData != null)
            {
                // words to choice field
                var wordList = new List <string>();
                // words to sort field
                var sortList = new List <string>();
                // words to full text field
                var localizedWords = new List <string>();
                foreach (var inputWord in listData)
                {
                    // process every word
                    var cfs = snField.FieldSetting as SnCR.Fields.ChoiceFieldSetting;
                    if (cfs != null)
                    {
                        // field with ChoiceFieldSetting
                        var optionKey = cfs.Options.Where(x => x.Value == inputWord).Select(x => x.StoredText).FirstOrDefault();
                        if (optionKey != null)
                        {
                            // identified option
                            var optionTerm = "$" + inputWord.ToLower();
                            wordList.Add(optionTerm);
                            sortList.Add(optionTerm);
                            string className;
                            string name;
                            var    localized = SenseNetResourceManager.ParseResourceKey(optionKey, out className, out name);
                            if (localized && className != null && name != null)
                            {
                                // localized texts: add all known mutations
                                var lw = SenseNetResourceManager.Current.GetStrings(className, name);
                                localizedWords.AddRange(lw.Select(x => x.ToLower()));
                            }
                            else
                            {
                                // not localized: add the word
                                localizedWords.Add(optionKey.ToLower());
                            }
                        }
                        else
                        {
                            // unidentified option: extra value
                            if (inputWord.StartsWith(SnCR.Fields.ChoiceField.EXTRAVALUEPREFIX))
                            {
                                // drives ordering (additional '~' hides this information)
                                sortList.Add("~" + inputWord);
                                // add
                                var splitted = inputWord.Split('.');
                                wordList.Add(splitted[0]);
                                localizedWords.Add(splitted[1].ToLower());
                            }
                            else
                            {
                                // add as a lowercase word
                                wordList.Add(inputWord.ToLower());
                                localizedWords.Add(inputWord.ToLower());
                            }
                        }
                    }
                    else
                    {
                        // field with another field setting
                        wordList.Add(inputWord.ToLower());
                    }
                }
                sortList.Sort();
                var sortTerm = String.Join("-", sortList);
                textExtract = String.Join(" ", localizedWords);
                wordList.AddRange(localizedWords);
                return(CreateFieldInfo(snField.Name, wordList, sortTerm));
            }

            var enumerableData = data as System.Collections.IEnumerable;

            if (enumerableData != null)
            {
                var words = new List <string>();
                foreach (var item in enumerableData)
                {
                    words.Add(Convert.ToString(item, System.Globalization.CultureInfo.InvariantCulture).ToLower());
                }
                var wordArray = words.ToArray();
                textExtract = String.Join(" ", wordArray);
                return(CreateFieldInfo(snField.Name, words));
            }

            throw new NotSupportedException(String.Concat("Cannot create index from this type: ", data.GetType().FullName,
                                                          ". Indexable data can be string, IEnumerable<string> or IEnumerable."));
        }