win32 to unix line delimiters changed
[mailer.git] / 0.2.1 / inc / load_extensions.php
index 8bffaaa7fbc235d997724e7e5bc0efb8a86e6b70..91a3fb690cd07b10325107e7ced61ec730342d45 100644 (file)
-<?php\r
-/************************************************************************\r
- * MXChange v0.2.1                                    Start: 06/26/2004 *\r
- * ===============                              Last change: 07/01/2005 *\r
- *                                                                      *\r
- * -------------------------------------------------------------------- *\r
- * File              : load_extensions.php                              *\r
- * -------------------------------------------------------------------- *\r
- * Short description : Load all extensions                              *\r
- * -------------------------------------------------------------------- *\r
- * Kurzbeschreibung  : Alle Erweiterungen laden                         *\r
- * -------------------------------------------------------------------- *\r
- *                                                                      *\r
- * -------------------------------------------------------------------- *\r
- * Copyright (c) 2003 - 2008 by Roland Haeder                           *\r
- * For more information visit: http://www.mxchange.org                  *\r
- *                                                                      *\r
- * This program is free software; you can redistribute it and/or modify *\r
- * it under the terms of the GNU General Public License as published by *\r
- * the Free Software Foundation; either version 2 of the License, or    *\r
- * (at your option) any later version.                                  *\r
- *                                                                      *\r
- * This program is distributed in the hope that it will be useful,      *\r
- * but WITHOUT ANY WARRANTY; without even the implied warranty of       *\r
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        *\r
- * GNU General Public License for more details.                         *\r
- *                                                                      *\r
- * You should have received a copy of the GNU General Public License    *\r
- * along with this program; if not, write to the Free Software          *\r
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,               *\r
- * MA  02110-1301  USA                                                  *\r
- ************************************************************************/\r
-\r
-// Some security stuff...\r
-if (ereg(basename(__FILE__), $_SERVER['PHP_SELF']))\r
-{\r
-       $INC = substr(dirname(__FILE__), 0, strpos(dirname(__FILE__), "/inc") + 4) . "/security.php";\r
-       require($INC);\r
-}\r
-//\r
-global $EXT_CSS_FILES;\r
-$EXT_CSS_FILES = array();\r
-$ADD = "";\r
-\r
-// Skip loading extensions\r
-if ((!mxchange_installed) || (mxchange_installing)) return;\r
-\r
-// Load default sql_patches extension if present\r
-if (file_exists(PATH."inc/extensions/ext-sql_patches.php") && is_readable(PATH."inc/extensions/ext-sql_patches.php"))\r
-{\r
-       // Load it...\r
-       $EXT_LOAD_MODE = "";\r
-       require_once(PATH."inc/extensions/ext-sql_patches.php");\r
-       $KEEP_ACTIVE = array('sql_patches' => "Y"); // KEEP THIS ALWAYS ACTIVE!\r
-}\r
- else\r
-{\r
-       // Initialize array for "always keep active extensions"\r
-       $KEEP_ACTIVE = array();\r
-}\r
-\r
-//\r
-// Load extensions\r
-//\r
-if (EXT_IS_ACTIVE("cache"))\r
-{\r
-       // Load cache extension alone\r
-       include_once(PATH."inc/libs/cache_functions.php");\r
-       $CACHE_FILE = "";\r
-       include_once(PATH."inc/extensions/ext-cache.php");\r
-       switch($CACHE->cache_file("extensions", true))\r
-       {\r
-               case true : $CACHE_FILE = "load"; break;\r
-               case false: $CACHE_FILE = "init"; break;\r
-       }\r
-\r
-       // Do not recreate cache file when it's switched off!\r
-       if (($CACHE_FILE == "init") && ($CONFIG['cache_exts'] == "N")) $CACHE_FILE = "skip";\r
-\r
-       // Load language\r
-       if ($CACHE_FILE == "load") include(PATH."inc/language/cache_".GET_LANGUAGE().".php");\r
-}\r
- else\r
-{\r
-       $CACHE_FILE = "no";\r
-}\r
-\r
-if ($CACHE_FILE == "load")\r
-{\r
-       // Load more cache files (like admins)\r
-       require_once(PATH."inc/load_cache.php");\r
-\r
-       // Re-initialize handler\r
-       $CACHE->cache_file("extensions", true);\r
-\r
-       // Load extension data from cache file\r
-       $EXT_DUMMY = $CACHE->cache_load();\r
-       foreach ($EXT_DUMMY['ext_name'] as $k=>$name)\r
-       {\r
-               // Load functions file\r
-               if ($EXT_DUMMY['ext_funcs'][$k] == "Y") require_once(PATH."inc/libs/".$name."_functions.php");\r
-\r
-               // Load Language file\r
-               if ($EXT_DUMMY['ext_lang'][$k] == "Y")\r
-               {\r
-                       $INC = sprintf(PATH."inc/language/%s_%s.php", $name, GET_LANGUAGE());\r
-                       if (file_exists($INC)) require_once($INC);\r
-               }\r
-\r
-               // Load CSS file\r
-               if ($EXT_DUMMY['ext_css'][$k] == "Y") $EXT_CSS_FILES[] = "".$name.".css";\r
-\r
-               // Load extension file itself\r
-               if (($EXT_DUMMY['ext_active'][$k] == "Y") || ($EXT_DUMMY['ext_keep'][$k] == "Y") || (IS_ADMIN()))\r
-               {\r
-                       require_once(PATH."inc/extensions/ext-".$name.".php");\r
-               }\r
-\r
-               // Transfer version number and active status\r
-               $EXT_DUMMY['ext_version'][$name] = $EXT_DUMMY['ext_version'][$k];\r
-               unset($EXT_DUMMY['ext_version'][$k]);\r
-               $EXT_DUMMY['ext_active'][$name] = $EXT_DUMMY['ext_active'][$k];\r
-               unset($EXT_DUMMY['ext_active'][$k]);\r
-               $EXT_DUMMY['ext_menu'][$name] = $EXT_DUMMY['ext_menu'][$k];\r
-               unset($EXT_DUMMY['ext_menu'][$k]);\r
-               $KEEP_ACTIVE['$name'] = $EXT_DUMMY['ext_keep'][$k];\r
-               unset($EXT_DUMMY['ext_keep'][$k]);\r
-               $k2 = $EXT_DUMMY['ext_id'][$k];\r
-               $EXT_DUMMY['ext_id'][$k2] = $name;\r
-               if ($k2 != $k) unset($EXT_DUMMY['ext_id'][$k]);\r
-\r
-               // Remove unneccessary data from memory\r
-               unset($EXT_DUMMY['ext_lang'][$k]);\r
-               unset($EXT_DUMMY['ext_css'][$k]);\r
-               unset($EXT_DUMMY['ext_funcs'][$k]);\r
-       }\r
-\r
-       // Close cache file\r
-       $CACHE->cache_close();\r
-\r
-       // Loading cache is done so let's free some memory!\r
-       unset($EXT_DUMMY['ext_lang']);\r
-       unset($EXT_DUMMY['ext_keep']);\r
-       unset($EXT_DUMMY['ext_css']);\r
-       unset($EXT_DUMMY['ext_funcs']);\r
-       $EXTENSIONS = $EXT_DUMMY;\r
-       unset($EXT_DUMMY);\r
-\r
-       // No database load needed\r
-       $res_ext_crt = false;\r
-}\r
- else\r
-{\r
-       // If current user is not admin load only activated extensions\r
-       // The admin shall use every available extension for testing purposes\r
-       if (!IS_ADMIN()) $ADD = " WHERE ext_active='Y'";\r
-\r
-       if (GET_EXT_VERSION("sql_patches") >= "0.0.6")\r
-       {\r
-               // Query with CSS file from DB\r
-               $res_ext_crt = SQL_QUERY("SELECT id, ext_name, ext_lang_file, ext_has_css, ext_active, ext_version\r
-FROM "._MYSQL_PREFIX."_extensions".$ADD."\r
-ORDER BY ext_name", __FILE__, __LINE__);\r
-       }\r
-        else\r
-       {\r
-               // Old obsulete query string\r
-               $res_ext_crt = SQL_QUERY("SELECT id, ext_name, ext_lang_file, ext_name, ext_active, ext_version\r
-FROM "._MYSQL_PREFIX."_extensions".$ADD."\r
-ORDER BY ext_name", __FILE__, __LINE__);\r
-       }\r
-}\r
-\r
-// Array for removed but not uninstalled extensions\r
-$DEL = array();\r
-\r
-// At least one found?\r
-if ((SQL_NUMROWS($res_ext_crt) > 0) && (($CACHE_FILE == "init") || ($CACHE_FILE == "no")) && ($CSS != "1") && ($CSS != "-1"))\r
-{\r
-       // Load theme management\r
-       require_once(PATH."inc/theme-manager.php");\r
-\r
-       // If we need to init the cache init it now\r
-       if ($CACHE_FILE == "init") $CACHE->cache_init("EXTENSIONS");\r
-\r
-       // Extensions are registered so we load them\r
-       while (list($EXT_ID, $name, $lang, $css, $active, $version) = SQL_FETCHROW($res_ext_crt))\r
-       {\r
-               // Get menu entry\r
-               $result_menu = SQL_QUERY_ESC("SELECT has_menu FROM "._MYSQL_PREFIX."_mod_reg WHERE module='%s' LIMIT 1",\r
-                array($name), __FILE__, __LINE__);\r
-               list($menu) = SQL_FETCHROW($result_menu);\r
-               //* DEBUG: */ echo "*".$name."/".$menu."*<br>";\r
-\r
-               // An empty menu entry will be interpreted as N (no menu) to avoid problems\r
-               if (empty($menu)) $menu = "N";\r
-\r
-               // Load extensions\r
-               $file1 = sprintf(PATH."inc/extensions/ext-%s.php", $name);\r
-               $file2 = $file1; $EXT_CSS = "N"; $EXT_ALWAYS_ACTIVE = "N";\r
-\r
-               // Special functions file\r
-               $file3 = sprintf(PATH."inc/libs/%s_functions.php", $name);\r
-\r
-               // Does the extension file exists?\r
-               if (file_exists($file1) && is_readable($file1))\r
-               {\r
-                       // If there's no language file specified we don't need to load one... ;-)\r
-                       if (!empty($lang)) {\r
-                               // Create language file\r
-                               $file2 = sprintf(PATH."inc/language/%s_%s.php", $lang, GET_LANGUAGE());\r
-                       }\r
-\r
-                       if (file_exists($file3) && is_readable($file3))\r
-                       {\r
-                               // Special functions file\r
-                               $funcs = "Y";\r
-                               require_once($file3);\r
-                       }\r
-                        else\r
-                       {\r
-                               // Don't load functions file\r
-                               $funcs = "N";\r
-                       }\r
-\r
-                       // Do we need a language file?\r
-                       if (($file1 != $file2) && (file_exists($file2)) && (is_readable($file2)))\r
-                       {\r
-                               // Load language file\r
-                               $lang = "Y";\r
-                               include($file2);\r
-                       }\r
-                        else\r
-                       {\r
-                               // Don't load language file\r
-                               $lang = "N";\r
-                       }\r
-\r
-                       // Load extension\r
-                       if ($name != "sql_patches")\r
-                       {\r
-                               // Load extension's file\r
-                               include_once($file1);\r
-                       }\r
-                        else\r
-                       {\r
-                               // KEEP sql_patches ALWAYS ACTIVE!\r
-                               $EXT_ALWAYS_ACTIVE = "Y";\r
-                       }\r
-\r
-                       if ($css == "Y")\r
-                       {\r
-                               $CSS_FILE = PATH."theme/".GET_CURR_THEME()."/css/".$name.".css";\r
-                               if (file_exists($CSS_FILE))\r
-                               {\r
-                                       // CSS file for extension was found (use only relative path for now!)\r
-                                       $EXT_CSS_FILES[] = $name.".css";\r
-                               }\r
-                                else\r
-                               {\r
-                                       // Don't load CSS file\r
-                                       $css = "N";\r
-                               }\r
-                       }\r
-\r
-                       // Add cache row\r
-                       if ($CACHE_FILE == "init")\r
-                       {\r
-                               $CACHE->add_row(array(\r
-                                       'ext_id'      => $EXT_ID,\r
-                                       'ext_name'    => $name,\r
-                                       'ext_lang'    => $lang,\r
-                                       'ext_css'     => $css,\r
-                                       'ext_menu'    => $menu,\r
-                                       'ext_funcs'   => $funcs,\r
-                                       'ext_active'  => $active,\r
-                                       'ext_version' => $version,\r
-                                       'ext_keep'    => $EXT_ALWAYS_ACTIVE,\r
-                               ));\r
-                       }\r
-                        elseif ($CACHE_FILE == "no")\r
-                       {\r
-                               // Remember this value for later usage\r
-                               $KEEP_ACTIVE[$name] = $EXT_ALWAYS_ACTIVE;\r
-                       }\r
-               }\r
-                elseif (!file_exists($file1))\r
-               {\r
-                       // Deleted extension file so we mark it for removal from DB\r
-                       $DEL[] = $name;\r
-               }\r
-       }\r
-\r
-       if ($CACHE_FILE == "init")\r
-       {\r
-               // Close cache file\r
-               $CACHE->cache_close();\r
-\r
-               // Load more cache files (like admins)\r
-               require_once(PATH."inc/load_cache.php");\r
-       }\r
-}\r
-\r
-// Free memory\r
-SQL_FREERESULT($res_ext_crt);\r
-\r
-// Compile configuration system\r
-/**\r
- * Commented out...\r
- *\r
- *foreach ($CONFIG as $k=>$v)\r
- *{\r
- *     $CONFIG[$k] = COMPILE_CODE($v);\r
- *}\r
- */\r
-\r
-// Load include files\r
-if (!empty($INC_POOL[0]))\r
-{\r
-       foreach ($INC_POOL as $inc)\r
-       {\r
-               require_once($inc);\r
-       }\r
-}\r
-\r
-// Uninstall extensions that are no longer in our system\r
-if (!empty($DEL[0]))\r
-{\r
-       // Remove extensions from two tables: extension registry and tasks table\r
-       foreach ($DEL as $name)\r
-       {\r
-               // First remove entry from extensions table\r
-               $result = SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM "._MYSQL_PREFIX."_extensions WHERE ext_name='%s' LIMIT 1",\r
-                array($name), __FILE__, __LINE__);\r
-\r
-               // Remove (maybe?) found tasks (main task and possible updates\r
-               $result = SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM "._MYSQL_PREFIX."_task_system WHERE subject LIKE '[%s:] %' AND (task_type='EXTENSION' OR task_type='EXTENSION_UPDATE')",\r
-                array($name), __FILE__, __LINE__);\r
-       }\r
-\r
-       // I think it's not neccessary to run the optimization function here\r
-       // because we didn't delete so much data from database. Can you aggree?\r
-}\r
-//\r
-?>\r
+<?php
+/************************************************************************
+ * MXChange v0.2.1                                    Start: 06/26/2004 *
+ * ===============                              Last change: 07/01/2005 *
+ *                                                                      *
+ * -------------------------------------------------------------------- *
+ * File              : load_extensions.php                              *
+ * -------------------------------------------------------------------- *
+ * Short description : Load all extensions                              *
+ * -------------------------------------------------------------------- *
+ * Kurzbeschreibung  : Alle Erweiterungen laden                         *
+ * -------------------------------------------------------------------- *
+ *                                                                      *
+ * -------------------------------------------------------------------- *
+ * Copyright (c) 2003 - 2008 by Roland Haeder                           *
+ * For more information visit: http://www.mxchange.org                  *
+ *                                                                      *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or    *
+ * (at your option) any later version.                                  *
+ *                                                                      *
+ * This program is distributed in the hope that it will be useful,      *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of       *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        *
+ * GNU General Public License for more details.                         *
+ *                                                                      *
+ * You should have received a copy of the GNU General Public License    *
+ * along with this program; if not, write to the Free Software          *
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,               *
+ * MA  02110-1301  USA                                                  *
+ ************************************************************************/
+
+// Some security stuff...
+if (ereg(basename(__FILE__), $_SERVER['PHP_SELF']))
+{
+       $INC = substr(dirname(__FILE__), 0, strpos(dirname(__FILE__), "/inc") + 4) . "/security.php";
+       require($INC);
+}
+//
+global $EXT_CSS_FILES;
+$EXT_CSS_FILES = array();
+$ADD = "";
+
+// Skip loading extensions
+if ((!mxchange_installed) || (mxchange_installing)) return;
+
+// Load default sql_patches extension if present
+if (file_exists(PATH."inc/extensions/ext-sql_patches.php") && is_readable(PATH."inc/extensions/ext-sql_patches.php"))
+{
+       // Load it...
+       $EXT_LOAD_MODE = "";
+       require_once(PATH."inc/extensions/ext-sql_patches.php");
+       $KEEP_ACTIVE = array('sql_patches' => "Y"); // KEEP THIS ALWAYS ACTIVE!
+}
+ else
+{
+       // Initialize array for "always keep active extensions"
+       $KEEP_ACTIVE = array();
+}
+
+//
+// Load extensions
+//
+if (EXT_IS_ACTIVE("cache"))
+{
+       // Load cache extension alone
+       include_once(PATH."inc/libs/cache_functions.php");
+       $CACHE_FILE = "";
+       include_once(PATH."inc/extensions/ext-cache.php");
+       switch($CACHE->cache_file("extensions", true))
+       {
+               case true : $CACHE_FILE = "load"; break;
+               case false: $CACHE_FILE = "init"; break;
+       }
+
+       // Do not recreate cache file when it's switched off!
+       if (($CACHE_FILE == "init") && ($CONFIG['cache_exts'] == "N")) $CACHE_FILE = "skip";
+
+       // Load language
+       if ($CACHE_FILE == "load") include(PATH."inc/language/cache_".GET_LANGUAGE().".php");
+}
+ else
+{
+       $CACHE_FILE = "no";
+}
+
+if ($CACHE_FILE == "load")
+{
+       // Load more cache files (like admins)
+       require_once(PATH."inc/load_cache.php");
+
+       // Re-initialize handler
+       $CACHE->cache_file("extensions", true);
+
+       // Load extension data from cache file
+       $EXT_DUMMY = $CACHE->cache_load();
+       foreach ($EXT_DUMMY['ext_name'] as $k=>$name)
+       {
+               // Load functions file
+               if ($EXT_DUMMY['ext_funcs'][$k] == "Y") require_once(PATH."inc/libs/".$name."_functions.php");
+
+               // Load Language file
+               if ($EXT_DUMMY['ext_lang'][$k] == "Y")
+               {
+                       $INC = sprintf(PATH."inc/language/%s_%s.php", $name, GET_LANGUAGE());
+                       if (file_exists($INC)) require_once($INC);
+               }
+
+               // Load CSS file
+               if ($EXT_DUMMY['ext_css'][$k] == "Y") $EXT_CSS_FILES[] = "".$name.".css";
+
+               // Load extension file itself
+               if (($EXT_DUMMY['ext_active'][$k] == "Y") || ($EXT_DUMMY['ext_keep'][$k] == "Y") || (IS_ADMIN()))
+               {
+                       require_once(PATH."inc/extensions/ext-".$name.".php");
+               }
+
+               // Transfer version number and active status
+               $EXT_DUMMY['ext_version'][$name] = $EXT_DUMMY['ext_version'][$k];
+               unset($EXT_DUMMY['ext_version'][$k]);
+               $EXT_DUMMY['ext_active'][$name] = $EXT_DUMMY['ext_active'][$k];
+               unset($EXT_DUMMY['ext_active'][$k]);
+               $EXT_DUMMY['ext_menu'][$name] = $EXT_DUMMY['ext_menu'][$k];
+               unset($EXT_DUMMY['ext_menu'][$k]);
+               $KEEP_ACTIVE['$name'] = $EXT_DUMMY['ext_keep'][$k];
+               unset($EXT_DUMMY['ext_keep'][$k]);
+               $k2 = $EXT_DUMMY['ext_id'][$k];
+               $EXT_DUMMY['ext_id'][$k2] = $name;
+               if ($k2 != $k) unset($EXT_DUMMY['ext_id'][$k]);
+
+               // Remove unneccessary data from memory
+               unset($EXT_DUMMY['ext_lang'][$k]);
+               unset($EXT_DUMMY['ext_css'][$k]);
+               unset($EXT_DUMMY['ext_funcs'][$k]);
+       }
+
+       // Close cache file
+       $CACHE->cache_close();
+
+       // Loading cache is done so let's free some memory!
+       unset($EXT_DUMMY['ext_lang']);
+       unset($EXT_DUMMY['ext_keep']);
+       unset($EXT_DUMMY['ext_css']);
+       unset($EXT_DUMMY['ext_funcs']);
+       $EXTENSIONS = $EXT_DUMMY;
+       unset($EXT_DUMMY);
+
+       // No database load needed
+       $res_ext_crt = false;
+}
+ else
+{
+       // If current user is not admin load only activated extensions
+       // The admin shall use every available extension for testing purposes
+       if (!IS_ADMIN()) $ADD = " WHERE ext_active='Y'";
+
+       if (GET_EXT_VERSION("sql_patches") >= "0.0.6")
+       {
+               // Query with CSS file from DB
+               $res_ext_crt = SQL_QUERY("SELECT id, ext_name, ext_lang_file, ext_has_css, ext_active, ext_version
+FROM "._MYSQL_PREFIX."_extensions".$ADD."
+ORDER BY ext_name", __FILE__, __LINE__);
+       }
+        else
+       {
+               // Old obsulete query string
+               $res_ext_crt = SQL_QUERY("SELECT id, ext_name, ext_lang_file, ext_name, ext_active, ext_version
+FROM "._MYSQL_PREFIX."_extensions".$ADD."
+ORDER BY ext_name", __FILE__, __LINE__);
+       }
+}
+
+// Array for removed but not uninstalled extensions
+$DEL = array();
+
+// At least one found?
+if ((SQL_NUMROWS($res_ext_crt) > 0) && (($CACHE_FILE == "init") || ($CACHE_FILE == "no")) && ($CSS != "1") && ($CSS != "-1"))
+{
+       // Load theme management
+       require_once(PATH."inc/theme-manager.php");
+
+       // If we need to init the cache init it now
+       if ($CACHE_FILE == "init") $CACHE->cache_init("EXTENSIONS");
+
+       // Extensions are registered so we load them
+       while (list($EXT_ID, $name, $lang, $css, $active, $version) = SQL_FETCHROW($res_ext_crt))
+       {
+               // Get menu entry
+               $result_menu = SQL_QUERY_ESC("SELECT has_menu FROM "._MYSQL_PREFIX."_mod_reg WHERE module='%s' LIMIT 1",
+                array($name), __FILE__, __LINE__);
+               list($menu) = SQL_FETCHROW($result_menu);
+               //* DEBUG: */ echo "*".$name."/".$menu."*<br>";
+
+               // An empty menu entry will be interpreted as N (no menu) to avoid problems
+               if (empty($menu)) $menu = "N";
+
+               // Load extensions
+               $file1 = sprintf(PATH."inc/extensions/ext-%s.php", $name);
+               $file2 = $file1; $EXT_CSS = "N"; $EXT_ALWAYS_ACTIVE = "N";
+
+               // Special functions file
+               $file3 = sprintf(PATH."inc/libs/%s_functions.php", $name);
+
+               // Does the extension file exists?
+               if (file_exists($file1) && is_readable($file1))
+               {
+                       // If there's no language file specified we don't need to load one... ;-)
+                       if (!empty($lang)) {
+                               // Create language file
+                               $file2 = sprintf(PATH."inc/language/%s_%s.php", $lang, GET_LANGUAGE());
+                       }
+
+                       if (file_exists($file3) && is_readable($file3))
+                       {
+                               // Special functions file
+                               $funcs = "Y";
+                               require_once($file3);
+                       }
+                        else
+                       {
+                               // Don't load functions file
+                               $funcs = "N";
+                       }
+
+                       // Do we need a language file?
+                       if (($file1 != $file2) && (file_exists($file2)) && (is_readable($file2)))
+                       {
+                               // Load language file
+                               $lang = "Y";
+                               include($file2);
+                       }
+                        else
+                       {
+                               // Don't load language file
+                               $lang = "N";
+                       }
+
+                       // Load extension
+                       if ($name != "sql_patches")
+                       {
+                               // Load extension's file
+                               include_once($file1);
+                       }
+                        else
+                       {
+                               // KEEP sql_patches ALWAYS ACTIVE!
+                               $EXT_ALWAYS_ACTIVE = "Y";
+                       }
+
+                       if ($css == "Y")
+                       {
+                               $CSS_FILE = PATH."theme/".GET_CURR_THEME()."/css/".$name.".css";
+                               if (file_exists($CSS_FILE))
+                               {
+                                       // CSS file for extension was found (use only relative path for now!)
+                                       $EXT_CSS_FILES[] = $name.".css";
+                               }
+                                else
+                               {
+                                       // Don't load CSS file
+                                       $css = "N";
+                               }
+                       }
+
+                       // Add cache row
+                       if ($CACHE_FILE == "init")
+                       {
+                               $CACHE->add_row(array(
+                                       'ext_id'      => $EXT_ID,
+                                       'ext_name'    => $name,
+                                       'ext_lang'    => $lang,
+                                       'ext_css'     => $css,
+                                       'ext_menu'    => $menu,
+                                       'ext_funcs'   => $funcs,
+                                       'ext_active'  => $active,
+                                       'ext_version' => $version,
+                                       'ext_keep'    => $EXT_ALWAYS_ACTIVE,
+                               ));
+                       }
+                        elseif ($CACHE_FILE == "no")
+                       {
+                               // Remember this value for later usage
+                               $KEEP_ACTIVE[$name] = $EXT_ALWAYS_ACTIVE;
+                       }
+               }
+                elseif (!file_exists($file1))
+               {
+                       // Deleted extension file so we mark it for removal from DB
+                       $DEL[] = $name;
+               }
+       }
+
+       if ($CACHE_FILE == "init")
+       {
+               // Close cache file
+               $CACHE->cache_close();
+
+               // Load more cache files (like admins)
+               require_once(PATH."inc/load_cache.php");
+       }
+}
+
+// Free memory
+SQL_FREERESULT($res_ext_crt);
+
+// Compile configuration system
+/**
+ * Commented out...
+ *
+ *foreach ($CONFIG as $k=>$v)
+ *{
+ *     $CONFIG[$k] = COMPILE_CODE($v);
+ *}
+ */
+
+// Load include files
+if (!empty($INC_POOL[0]))
+{
+       foreach ($INC_POOL as $inc)
+       {
+               require_once($inc);
+       }
+}
+
+// Uninstall extensions that are no longer in our system
+if (!empty($DEL[0]))
+{
+       // Remove extensions from two tables: extension registry and tasks table
+       foreach ($DEL as $name)
+       {
+               // First remove entry from extensions table
+               $result = SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM "._MYSQL_PREFIX."_extensions WHERE ext_name='%s' LIMIT 1",
+                array($name), __FILE__, __LINE__);
+
+               // Remove (maybe?) found tasks (main task and possible updates
+               $result = SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM "._MYSQL_PREFIX."_task_system WHERE subject LIKE '[%s:] %' AND (task_type='EXTENSION' OR task_type='EXTENSION_UPDATE')",
+                array($name), __FILE__, __LINE__);
+       }
+
+       // I think it's not neccessary to run the optimization function here
+       // because we didn't delete so much data from database. Can you aggree?
+}
+//
+?>