2 /************************************************************************
3 * MXChange v0.2.1 Start: 10/11/2004 *
4 * ================ Last change: 10/11/2004 *
6 * -------------------------------------------------------------------- *
7 * File : ext-cache.php *
8 * -------------------------------------------------------------------- *
9 * Short description : Caching system for SQL tables on hard disc *
10 * -------------------------------------------------------------------- *
11 * Kurzbeschreibung : Caching-System zum Auslagern von SQL-Tabellen *
12 * auf der Festplatte des Servers *
13 * -------------------------------------------------------------------- *
15 * -------------------------------------------------------------------- *
16 * Copyright (c) 2003 - 2008 by Roland Haeder *
17 * For more information visit: http://www.mxchange.org *
19 * This program is free software; you can redistribute it and/or modify *
20 * it under the terms of the GNU General Public License as published by *
21 * the Free Software Foundation; either version 2 of the License, or *
22 * (at your option) any later version. *
24 * This program is distributed in the hope that it will be useful, *
25 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
26 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
27 * GNU General Public License for more details. *
29 * You should have received a copy of the GNU General Public License *
30 * along with this program; if not, write to the Free Software *
31 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, *
33 ************************************************************************/
35 // Some security stuff...
36 if (!defined('__SECURITY')) {
37 $INC = substr(dirname(__FILE__), 0, strpos(dirname(__FILE__), "/inc") + 4) . "/security.php";
42 EXT_SET_VERSION("0.2.2");
44 // Version history array (add more with , "0.1" and so on)
45 EXT_SET_VER_HISTORY(array("0.0", "0.0.1", "0.0.2", "0.0.3", "0.0.4", "0.0.5", "0.0.6", "0.0.7", "0.0.8", "0.0.9", "0.1.0", "0.1.1", "0.1.2", "0.1.3", "0.1.4", "0.1.5", "0.1.6", "0.1.7", "0.1.8", "0.1.9", "0.2.0", "0.2.1", "0.2.2"));
47 switch ($EXT_LOAD_MODE)
49 case "register": // Do stuff when installation is running (modules.php?module=admin&action=login is called)
50 // SQL commands to run
51 ADD_SQL("ALTER TABLE `{!_MYSQL_PREFIX!}_config` ADD cache_update BIGINT(20) UNSIGNED NOT NULL DEFAULT 3600");
52 ADD_SQL("ALTER TABLE `{!_MYSQL_PREFIX!}_config` ADD cache_path VARCHAR(255) NOT NULL DEFAULT 'cache/'");
53 ADD_SQL("ALTER TABLE `{!_MYSQL_PREFIX!}_config` ADD cache_tested TINYINT(1) UNSIGNED NOT NULL DEFAULT 0");
54 ADD_SQL("INSERT INTO `{!_MYSQL_PREFIX!}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('setup','config_cache','Cache-Einstellungen','Update-Interval des Caches usw. können Sie hier ändern.', 9)");
57 case "remove": // Do stuff when removing extension
58 // SQL commands to run
59 ADD_SQL("DELETE LOW_PRIORITY FROM `{!_MYSQL_PREFIX!}_admin_menu` WHERE `what`='config_cache' OR `what`='cache_stats' LIMIT 2");
61 // Unregister all filters
62 UNREGISTER_FILTER('extension_update', 'CACHE_DESTROY_ON_EXT_CHANGE', true, $dry_run);
63 UNREGISTER_FILTER('post_extension_installed', 'CACHE_DESTROY_ON_EXT_CHANGE', true, $dry_run);
64 UNREGISTER_FILTER('post_extension_installed', 'CACHE_PURGE_ADMIN_MENU', true, $dry_run);
65 UNREGISTER_FILTER('post_extension_run_sql', 'CACHE_DESTROY_ON_EXT_CHANGE', true, $dry_run);
66 UNREGISTER_FILTER('post_extension_run_sql', 'CACHE_PURGE_ADMIN_MENU', true, $dry_run);
67 UNREGISTER_FILTER('post_admin_added', 'CACHE_DESTROY_ON_ADMIN_CHANGE', true, $dry_run);
68 UNREGISTER_FILTER('post_admin_edited', 'CACHE_DESTROY_ON_ADMIN_CHANGE', true, $dry_run);
69 UNREGISTER_FILTER('post_admin_deleted', 'CACHE_DESTROY_ON_ADMIN_CHANGE', true, $dry_run);
70 UNREGISTER_FILTER('post_admin_reset_pass', 'CACHE_DESTROY_ON_ADMIN_CHANGE', true, $dry_run);
71 UNREGISTER_FILTER('extension_remove', 'CACHE_DESTROY_ALL', true, $dry_run);
74 case "activate": // Do stuff when admin activates this extension
75 // SQL commands to run
79 case "deactivate": // Do stuff when admin deactivates this extension
80 // SQL commands to run
84 case "update": // Update an extension
87 case "0.0.1": // SQL queries for v0.0.1
88 // Update notes (these will be set as task text!)
89 EXT_SET_UPDATE_NOTES("Es wurde die Zeitmarke der Cache-Datei extensions.cache mit berücksichtigt. Dies hatte die Folge, dass wenn bei einem Gast die Datei aktualisiert wurde, nur aktivierte und nicht die deaktivierten mit geladen wurden. Folglich fiehlen einfach ein paar Erweiterungen aus.");
92 case "0.0.2": // SQL queries for v0.0.2
93 // Update notes (these will be set as task text!)
94 EXT_SET_UPDATE_NOTES("Fehler beseitigt, wenn error_reporting=E_ALL gesetzt ist.");
97 case "0.0.3": // SQL queries for v0.0.3
98 // Update notes (these will be set as task text!)
99 EXT_SET_UPDATE_NOTES("Cache-Update repariert.");
102 case "0.0.4": // SQL queries for v0.0.4
103 // Is the cache extension itself there?
104 if (EXT_IS_ACTIVE("cache")) {
105 // Check for cache when extension is already installed
106 if ($GLOBALS['cache_instance']->loadCacheFile("extensions", true)) $GLOBALS['cache_instance']->destroyCacheFile();
109 // Update notes (these will be set as task text!)
110 EXT_SET_UPDATE_NOTES("Spalte "keep_active" ist hinzugefügt. Cache wurde reinitialisiert.");
113 case "0.0.5": // SQL queries for v0.0.5
114 // Update notes (these will be set as task text!)
115 EXT_SET_UPDATE_NOTES("Registrierung der Cache-Erweiterung repariert");
118 case "0.0.6": // SQL queries for v0.0.6
119 // Update notes (these will be set as task text!)
120 EXT_SET_UPDATE_NOTES("Validierung der Cache-Datei admins.cache integriert.");
123 case "0.0.7": // SQL queries for v0.0.7
124 ADD_SQL("ALTER TABLE `{!_MYSQL_PREFIX!}_config` ADD db_hits BIGINT(20) UNSIGNED NOT NULL DEFAULT 0");
125 ADD_SQL("ALTER TABLE `{!_MYSQL_PREFIX!}_config` ADD cache_hits BIGINT(20) UNSIGNED NOT NULL DEFAULT 0");
126 ADD_SQL("INSERT INTO `{!_MYSQL_PREFIX!}_admin_menu` (`action`,`what`,`title`,`descr`,`sort`) VALUES ('stats','cache_stats','DB-Cache','Auf Cache und gesamte Datenbank registrierte Anfragen anzeigen.', 4)");
128 // Update notes (these will be set as task text!)
129 EXT_SET_UPDATE_NOTES("Hits auf den Cache werden gezählt.");
132 case "0.0.8": // SQL queries for v0.0.8
133 // Update notes (these will be set as task text!)
134 EXT_SET_UPDATE_NOTES("Das Umschreiben der Cache-Daten hat eine Fehlermeldung <strong>Falsches Passwort!</strong> im Admin-Bereich verursacht.");
137 case "0.0.9": // SQL queries for v0.0.9
138 // Update notes (these will be set as task text!)
139 EXT_SET_UPDATE_NOTES("Interne Datenfeld-Management korregiert und Cache-Statistiken korregiert.");
142 case "0.1.0": // SQL queries for v0.2.1
143 // Update notes (these will be set as task text!)
144 EXT_SET_UPDATE_NOTES("Problem mit fehlender admins-Erweiterung beseitigt.");
147 case "0.1.1": // SQL queries for v0.1.1
148 // Update notes (these will be set as task text!)
149 EXT_SET_UPDATE_NOTES("Fehler <strong>Division durch 0</strong> repariert in den DB-Cache Statistiken.");
152 case "0.1.2": // SQL queries for v0.1.2
153 // Update notes (these will be set as task text!)
154 EXT_SET_UPDATE_NOTES("Die Tabelen <strong>{!_MYSQL_PREFIX!}_config</strong>, <strong>{!_MYSQL_PREFIX!}_refsystem</strong>, <strong>{!_MYSQL_PREFIX!}_refdepths</strong> und <strong>{!_MYSQL_PREFIX!}_mod_reg</strong> werden nun auch ausgelagert.");
157 case "0.1.3": // SQL queries for v0.1.3
158 ADD_SQL("ALTER TABLE `{!_MYSQL_PREFIX!}_config` ADD cache_admins ENUM('Y','N') NOT NULL DEFAULT 'Y'");
159 ADD_SQL("ALTER TABLE `{!_MYSQL_PREFIX!}_config` ADD cache_acls ENUM('Y','N') NOT NULL DEFAULT 'Y'");
160 ADD_SQL("ALTER TABLE `{!_MYSQL_PREFIX!}_config` ADD cache_exts ENUM('Y','N') NOT NULL DEFAULT 'Y'");
161 ADD_SQL("ALTER TABLE `{!_MYSQL_PREFIX!}_config` ADD cache_config ENUM('Y','N') NOT NULL DEFAULT 'Y'");
162 ADD_SQL("ALTER TABLE `{!_MYSQL_PREFIX!}_config` ADD cache_modreg ENUM('Y','N') NOT NULL DEFAULT 'Y'");
163 ADD_SQL("ALTER TABLE `{!_MYSQL_PREFIX!}_config` ADD cache_refdepth ENUM('Y','N') NOT NULL DEFAULT 'Y'");
164 ADD_SQL("ALTER TABLE `{!_MYSQL_PREFIX!}_config` ADD cache_refsys ENUM('Y','N') NOT NULL DEFAULT 'Y'");
166 // Update notes (these will be set as task text!)
167 EXT_SET_UPDATE_NOTES("Alle cache-baren Tabellen sind nun einzelnt ein- bzw. ausschaltbar. Falls die eine oder andere ausgelagerte Tabelle also Fehler verursachen sollte, so können Sie diese hier abschalten. Beachten Sie aber bitte, dass dann mehr Abfragen an die Datenbank gestellt wird und dies bedeutend mehr Zeit braucht, als nur die Daten aus einem Datenfeld zu laden, das sich im Speicher aufhält.");
170 case "0.1.4": // SQL queries for v0.1.4
171 // Update notes (these will be set as task text!)
172 EXT_SET_UPDATE_NOTES("Fehler <strong>Division durch 0</strong> repariert in <strong>inc/load_cache.php</strong>.");
175 case "0.1.5": // SQL queries for v0.1.5
176 // Update notes (these will be set as task text!)
177 EXT_SET_UPDATE_NOTES("Weitere Fehler im System beseitigt.");
180 case "0.1.6": // SQL queries for v0.1.6
181 // Update notes (these will be set as task text!)
182 EXT_SET_UPDATE_NOTES("Probleme während des Installationsvorganges beseitigt.");
185 case "0.1.7": // SQL queries for v0.1.7
186 // Update notes (these will be set as task text!)
187 EXT_SET_UPDATE_NOTES("CSS-Klassenname gefixt in Templates.");
190 case "0.1.8": // SQL queries for v0.1.8
191 ADD_SQL("ALTER TABLE `{!_MYSQL_PREFIX!}_config` ADD cache_themes ENUM('Y','N') NOT NULL DEFAULT 'Y'");
193 // Update notes (these will be set as task text!)
194 EXT_SET_UPDATE_NOTES("Daten von installierten Themes werden nun gecacht.");
197 case "0.1.9": // SQL queries for v0.1.9
198 ADD_SQL("ALTER TABLE `{!_MYSQL_PREFIX!}_config` ADD cache_admin_menu ENUM('Y','N') NOT NULL DEFAULT 'N'");
200 // Update notes (these will be set as task text!)
201 EXT_SET_UPDATE_NOTES("Administratormenü experimentell gecacht.");
204 case "0.2.0": // SQL queries for v0.2.0
205 // This update depends on sql_patches
206 EXT_SET_UPDATE_DEPENDS("sql_patches");
208 // Update notes (these will be set as task text!)
209 EXT_SET_UPDATE_NOTES("Die Erweiterung hängt nun von der <strong>sql_patches</strong> ab.");
212 case "0.2.1": // SQL queries for v0.2.1
213 // Register the new filter
214 REGISTER_FILTER('extension_update', 'CACHE_DESTROY_ON_EXT_CHANGE', false, true, $dry_run);
215 REGISTER_FILTER('post_extension_installed', 'CACHE_DESTROY_ON_EXT_CHANGE', false, true, $dry_run);
216 REGISTER_FILTER('post_extension_run_sql', 'CACHE_DESTROY_ON_EXT_CHANGE', false, true, $dry_run);
217 REGISTER_FILTER('post_admin_added', 'CACHE_DESTROY_ON_ADMIN_CHANGE', false, true, $dry_run);
218 REGISTER_FILTER('post_admin_edited', 'CACHE_DESTROY_ON_ADMIN_CHANGE', false, true, $dry_run);
219 REGISTER_FILTER('post_admin_deleted', 'CACHE_DESTROY_ON_ADMIN_CHANGE', false, true, $dry_run);
220 REGISTER_FILTER('post_admin_reset_pass', 'CACHE_DESTROY_ON_ADMIN_CHANGE', false, true, $dry_run);
221 REGISTER_FILTER('extension_remove', 'CACHE_DESTROY_ALL', false, true, $dry_run);
223 // Update notes (these will be set as task text!)
224 EXT_SET_UPDATE_NOTES("Filter für Erweiterungsmanagement hinzugefügt.");
227 case "0.2.2": // SQL queries for v0.2.2
228 // Register the new filter
229 REGISTER_FILTER('post_extension_installed', 'CACHE_PURGE_ADMIN_MENU', false, true, $dry_run);
230 REGISTER_FILTER('post_extension_run_sql', 'CACHE_PURGE_ADMIN_MENU', false, true, $dry_run);
232 // Update notes (these will be set as task text!)
233 EXT_SET_UPDATE_NOTES("Weitere Filter hinzugefügt.");
238 case "modify": // When the extension got modified
241 case "test": // For testing purposes. For details see file inc/modules/admin/what-extensions.php, arround line 305.
244 default: // Do stuff when extension is loaded
245 // Create instance on class
246 if ($GLOBALS['cacheMode'] != "init") {
247 // Initialize cache system only when it's needed
248 $GLOBALS['cache_instance'] = new CacheSystem(getConfig('cache_update'), "inc/".getConfig('cache_path'), getConfig('cache_tested'));
249 if ($GLOBALS['cache_instance']->getStatus() != "done") {
250 // Failed to initialize cache sustem
251 addFatalMessage(__FILE__, __LINE__, "(<font color=\"#0000aa\">".__LINE__."</font>): ".getMessage('CACHE_CANNOT_INITIALIZE'));
257 // Keep this extension always active!
258 EXT_SET_ALWAYS_ACTIVE("Y");