예제 #1
0
        /// <summary>
        /// Creates a copy of the given scriptlet
        /// </summary>
        /// <param name="themeId">Name/Identifier of the theme</param>
        /// <param name="identifier">Identifier of scriptlet to create copy of</param>
        /// <param name="scriptletType">Type of scriptlet to create copy of</param>
        /// <returns>Copy of the given scriptlet</returns>
        public static Scriptlet Copy(string themeId, string identifier, ScriptletType scriptletType)
        {
            Scriptlet copy = ScriptletDataSource.Load(themeId, identifier, scriptletType, false);

            if (copy != null)
            {
                copy.Identifier = "Copy of " + copy.Identifier;
                copy.IsCustom   = true;
                copy.ClearLoadedState();
                return(copy);
            }
            return(null);
        }
        private static ScriptletCollection GetCachedScriptlets(string themeId)
        {
            StoreSettingCollection settings = Token.Instance.Store.Settings;
            HttpContext            context  = HttpContext.Current;
            ScriptletCollection    scriptlets;

            if (themeId == null)
            {
                themeId = string.Empty;
            }

            string pathPart;

            if (string.IsNullOrEmpty(themeId))
            {
                pathPart = "App_Data\\Scriptlets";
            }
            else
            {
                pathPart = "App_Themes\\" + themeId + "\\Scriptlets";
                if (!Directory.Exists(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, pathPart)))
                {
                    pathPart = "App_Data\\Scriptlets";
                }
            }

            if (context != null)
            {
                scriptlets = context.Cache[_CacheKey + themeId] as ScriptletCollection;
                if (scriptlets == null)
                {
                    scriptlets = ScriptletDataSource.LoadAll(themeId);
                    if (scriptlets.Count > 0)
                    {
                        scriptlets.Sort("Identifier", GenericComparer.SortDirection.ASC);
                        CacheDependency   dep      = new CacheDependency(GetScriptletDirectories(context.Server.MapPath("~/" + pathPart.Replace('\\', '/'))));
                        CacheItemPriority priority = scriptlets.Count < 400 ? CacheItemPriority.NotRemovable : CacheItemPriority.High;
                        context.Cache.Insert(_CacheKey + themeId, scriptlets, dep, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, priority, null);
                    }
                }
                return(scriptlets);
            }

            //CALLED FROM NON-WEB CONTEXT, LOAD STORE SETTINGS
            scriptlets = ScriptletDataSource.LoadAll(themeId);
            scriptlets.Sort("Identifier", GenericComparer.SortDirection.ASC);
            return(scriptlets);
        }
        /// <summary>
        /// Loads all Scriptlet objects for the given theme
        /// </summary>
        /// <returns>A collection of all Scriptlet objects in the store</returns>
        public static ScriptletCollection LoadAll(string themeId)
        {
            StoreSettingCollection settings = Token.Instance.Store.Settings;
            Hashtable           ht          = new Hashtable();
            ScriptletCollection results     = new ScriptletCollection();
            //LOAD CUSTOM SCRIPTLETS FIRST
            string pathPart;

            if (string.IsNullOrEmpty(themeId))
            {
                pathPart = "App_Data\\Scriptlets";
            }
            else
            {
                pathPart = "App_Themes\\" + themeId + "\\Scriptlets";
                if (!Directory.Exists(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, pathPart)))
                {
                    pathPart = "App_Data\\Scriptlets";
                }
            }

            DirectoryInfo di = new DirectoryInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, pathPart + "\\Custom"));

            if (di.Exists)
            {
                DirectoryInfo[] folders = di.GetDirectories();
                foreach (DirectoryInfo folder in folders)
                {
                    ScriptletType scriptletType;
                    try
                    {
                        scriptletType = (ScriptletType)Enum.Parse(typeof(ScriptletType), folder.Name, true);
                    }
                    catch (ArgumentException)
                    {
                        //FOLDER IS NOT A RECOGNIZED SCRIPTLET TYPE
                        scriptletType = ScriptletType.Unspecified;
                    }
                    if (scriptletType != ScriptletType.Unspecified)
                    {
                        FileInfo[] files = folder.GetFiles("*.htm");
                        foreach (FileInfo file in files)
                        {
                            string    identifier = Path.GetFileNameWithoutExtension(file.Name);
                            string    hashkey    = scriptletType.ToString() + "_" + identifier;
                            Scriptlet s          = ScriptletDataSource.Load(themeId, identifier, scriptletType, BitFieldState.True, false);
                            if (s != null)
                            {
                                ht.Add(s.ScriptletType + "_" + s.Identifier, true);
                                results.Add(s);
                            }
                        }
                    }
                }
            }
            //LOAD DEFAULT SCRIPTLETS NEXT
            di = new DirectoryInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, pathPart + "\\Default"));
            if (di.Exists)
            {
                DirectoryInfo[] folders = di.GetDirectories();
                foreach (DirectoryInfo folder in folders)
                {
                    ScriptletType scriptletType;
                    try
                    {
                        scriptletType = (ScriptletType)Enum.Parse(typeof(ScriptletType), folder.Name, true);
                    }
                    catch (ArgumentException)
                    {
                        //FOLDER IS NOT A RECOGNIZED SCRIPTLET TYPE
                        scriptletType = ScriptletType.Unspecified;
                    }
                    if (scriptletType != ScriptletType.Unspecified)
                    {
                        FileInfo[] files = folder.GetFiles("*.htm");
                        foreach (FileInfo file in files)
                        {
                            string identifier = Path.GetFileNameWithoutExtension(file.Name);
                            string hashkey    = scriptletType.ToString() + "_" + identifier;
                            if (!ht.ContainsKey(hashkey))
                            {
                                Scriptlet s = ScriptletDataSource.Load(themeId, identifier, scriptletType, BitFieldState.False, false);
                                if (s != null)
                                {
                                    ht.Add(hashkey, true);
                                    results.Add(s);
                                }
                            }
                        }
                    }
                }
            }
            return(results);
        }