private static dynamic ResolveToken(IToken token)
        {
            dynamic ret = new ExpandoObject();

            ret.Label = token.Token;
            ret.Icon  = "";
            ID tokenBackingItemId = token.GetBackingItemId();

            if (tokenBackingItemId != (ID)null)
            {
                var tokenItem = TokenKeeper.CurrentKeeper.GetDatabase().GetItem(token.GetBackingItemId());
                ret.Icon = "";
                if (tokenItem != null)
                {
                    ret.Icon = GetIcon(tokenItem[FieldIDs.Icon]);
                    if (string.IsNullOrWhiteSpace(ret.Icon))
                    {
                        ret.Icon = GetIcon(tokenItem.Template.InnerItem[FieldIDs.Icon]);
                    }
                }
            }
            AutoToken autoToken = token as AutoToken;

            if (autoToken != null)
            {
                ret.Icon = GetIcon(autoToken.TokenIcon);
            }
            if (string.IsNullOrWhiteSpace(ret.Icon))
            {
                ret.Icon = TokenKeeper.IsSc8 ? GetIcon("Office/32x32/package.png") : GetIcon("People/32x32/cube_green.png");
            }
            return(ret);
        }
 public AutoTokenCollection(AutoToken token)
 {
     _label = token.CollectionName;
 }
        public IEnumerable <ID> LoadAutoToken(AutoToken token)
        {
            using (new SecurityDisabler())
            {
                if (TokenCollections.ContainsKey(token.CollectionName))
                {
                    TokenCollections[token.CollectionName].AddOrUpdateToken(token.Token, token);
                }
                else
                {
                    TokenCollections[token.CollectionName] = new AutoTokenCollection(token);
                    TokenCollections[token.CollectionName].AddOrUpdateToken(token.Token, token);
                }
                var db = Factory.GetDatabase("core", false);
                if (db == null)
                {
                    yield break;
                }

                TokenButton tb = token.TokenButton();
                foreach (Item parent in db.DataManager.DataEngine
                         .GetItem(new ID(Constants.Core.RteParent), LanguageManager.DefaultLanguage, Sitecore.Data.Version.Latest).Axes
                         .GetDescendants().Where(x =>
                                                 x.Name == "Toolbar 1" && x.TemplateID.ToString() == "{0E0DA701-BC94-4855-A0C3-92063E64BA1F}"))
                {
                    ID buttonId = GuidUtility.GetId("tokenmanager", $"{token.CollectionName}{token.Token}{parent.ID}");

                    Item button = db.DataManager.DataEngine.GetItem(buttonId, LanguageManager.DefaultLanguage, Sitecore.Data.Version.Latest);

                    if (tb != null)
                    {
                        yield return(buttonId);

                        if (button != null)
                        {
                            if (
                                button["Click"] == $"TokenSelector{Regex.Replace(token.CollectionName, "[^A-Za-z0-9_]", "")}{Regex.Replace(token.Token, "[^A-Za-z0-9_]", "")}" &&
                                button[FieldIDs.DisplayName] == tb.Name &&
                                button["Shortcut"] == $"?Category={token.CollectionName}&Token={token.Token}" &&
                                button[FieldIDs.Sortorder] == tb.SortOrder.ToString() &&
                                button[FieldIDs.Icon] == (string.IsNullOrWhiteSpace(tb.Icon) ? token.TokenIcon : tb.Icon))
                            {
                                continue;
                            }
                        }
                        else
                        {
                            button = db.DataManager.DataEngine.CreateItem(tb.Name, parent, new ID(Constants.Core.ButtonTemplate), buttonId);
                        }

                        button.Editing.BeginEdit();
                        button["Click"] = $"TokenSelector{Regex.Replace(token.CollectionName, "[^A-Za-z0-9_]", "")}{Regex.Replace(token.Token, "[^A-Za-z0-9_]", "")}";
                        button[FieldIDs.DisplayName] = tb.Name;
                        button["Shortcut"]           = $"?Category={token.CollectionName}&Token={token.Token}";
                        button[FieldIDs.Sortorder]   = tb.SortOrder.ToString();
                        button[FieldIDs.Icon]        = string.IsNullOrWhiteSpace(tb.Icon) ? token.TokenIcon : tb.Icon;
                        button.Editing.EndEdit(false, true);
                        button.Database.Caches.ItemCache.RemoveItem(buttonId);
                        button.Database.Caches.DataCache.RemoveItemInformation(buttonId);
                    }
                    else
                    {
                        button?.Recycle();
                    }
                }
            }
        }
Beispiel #4
0
        public void LoadAutoToken(AutoToken token)
        {
            using (new SecurityDisabler())
            {
                if (TokenCollections.ContainsKey(token.CollectionName))
                {
                    TokenCollections[token.CollectionName].AddOrUpdateToken(token.Token, token);
                }
                else
                {
                    TokenCollections[token.CollectionName] = new AutoTokenCollection(token);
                    TokenCollections[token.CollectionName].AddOrUpdateToken(token.Token, token);
                }
                var db = Factory.GetDatabase("core", false);
                if (db == null)
                {
                    return;
                }

                TokenButton tb = token.TokenButton();

                ID buttonId = GuidUtility.GetId("tokenmanager", $"{token.CollectionName}{token.Token}");

                Item button = db.DataManager.DataEngine.GetItem(buttonId, LanguageManager.DefaultLanguage, Sitecore.Data.Version.Latest);

                if (tb != null)
                {
                    if (button != null)
                    {
                        if (
                            button["Click"] == $"TokenSelector{Regex.Replace(token.CollectionName, "[^A-Za-z0-9_]", "")}{Regex.Replace(token.Token, "[^A-Za-z0-9_]", "")}" &&
                            button[FieldIDs.DisplayName] == tb.Name &&
                            button["Shortcut"] == $"?Category={token.CollectionName}&Token={token.Token}" &&
                            button[FieldIDs.Sortorder] == tb.SortOrder.ToString() &&
                            button[FieldIDs.Icon] == (string.IsNullOrWhiteSpace(tb.Icon) ? token.TokenIcon : tb.Icon))
                        {
                            return;
                        }
                    }
                    else
                    {
                        Item parent = db.DataManager.DataEngine.GetItem(new ID(Constants.Core.RteParent), LanguageManager.DefaultLanguage, Sitecore.Data.Version.Latest);

                        if (parent == null)
                        {
                            return;
                        }

                        button = db.DataManager.DataEngine.CreateItem(tb.Name, parent, new ID(Constants.Core.ButtonTemplate), buttonId);
                    }

                    button.Editing.BeginEdit();
                    button["Click"] = $"TokenSelector{Regex.Replace(token.CollectionName, "[^A-Za-z0-9_]", "")}{Regex.Replace(token.Token, "[^A-Za-z0-9_]", "")}";
                    button[FieldIDs.DisplayName] = tb.Name;
                    button["Shortcut"]           = $"?Category={token.CollectionName}&Token={token.Token}";
                    button[FieldIDs.Sortorder]   = tb.SortOrder.ToString();
                    button[FieldIDs.Icon]        = string.IsNullOrWhiteSpace(tb.Icon) ? token.TokenIcon : tb.Icon;
                    button.Editing.EndEdit(false, true);
                    button.Database.Caches.ItemCache.RemoveItem(buttonId);
                    button.Database.Caches.DataCache.RemoveItemInformation(buttonId);
                }
                else if (button != null)
                {
                    button.Recycle();
                }
            }
        }