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 * -------------------------------------------------------------------- *
16 * $Tag:: 0.2.1-FINAL $ *
18 * Needs to be in all Files and every File needs "svn propset *
19 * svn:keywords Date Revision" (autoprobset!) at least!!!!!! *
20 * -------------------------------------------------------------------- *
21 * Copyright (c) 2003 - 2008 by Roland Haeder *
22 * For more information visit: http://www.mxchange.org *
24 * This program is free software; you can redistribute it and/or modify *
25 * it under the terms of the GNU General Public License as published by *
26 * the Free Software Foundation; either version 2 of the License, or *
27 * (at your option) any later version. *
29 * This program is distributed in the hope that it will be useful, *
30 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
31 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
32 * GNU General Public License for more details. *
34 * You should have received a copy of the GNU General Public License *
35 * along with this program; if not, write to the Free Software *
36 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, *
38 ************************************************************************/
40 // Some security stuff...
41 if (!defined('__SECURITY')) {
42 $INC = substr(dirname(__FILE__), 0, strpos(dirname(__FILE__), '/inc') + 4) . '/security.php';
47 EXT_SET_VERSION('0.2.3');
49 // Version history array (add more with , '0.1.0' and so on)
50 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', '0.2.3'));
53 switch ($EXT_LOAD_MODE) {
54 case 'register': // Do stuff when installation is running (modules.php?module=admin is called)
55 // SQL commands to run
56 ADD_EXT_SQL("ALTER TABLE `{!_MYSQL_PREFIX!}_config` ADD cache_update BIGINT(20) UNSIGNED NOT NULL DEFAULT 3600");
57 ADD_EXT_SQL("ALTER TABLE `{!_MYSQL_PREFIX!}_config` ADD cache_path VARCHAR(255) NOT NULL DEFAULT 'cache/'");
58 ADD_EXT_SQL("ALTER TABLE `{!_MYSQL_PREFIX!}_config` ADD cache_tested TINYINT(1) UNSIGNED NOT NULL DEFAULT 0");
59 ADD_EXT_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)");
62 case 'remove': // Do stuff when removing extension
63 // SQL commands to run
64 ADD_EXT_SQL("DELETE LOW_PRIORITY FROM `{!_MYSQL_PREFIX!}_admin_menu` WHERE `what` IN('config_cache','cache_stats')");
66 // Unregister all filters
67 unregisterFilter('extension_update', 'CACHE_DESTROY_ON_EXT_CHANGE', true, $dry_run);
68 unregisterFilter('post_extension_installed', 'CACHE_DESTROY_ON_EXT_CHANGE', true, $dry_run);
69 unregisterFilter('post_extension_installed', 'CACHE_PURGE_ADMIN_MENU', true, $dry_run);
70 unregisterFilter('post_extension_run_sql', 'CACHE_DESTROY_ON_EXT_CHANGE', true, $dry_run);
71 unregisterFilter('post_extension_run_sql', 'CACHE_PURGE_ADMIN_MENU', true, $dry_run);
72 unregisterFilter('post_admin_added', 'CACHE_DESTROY_ON_ADMIN_CHANGE', true, $dry_run);
73 unregisterFilter('post_admin_edited', 'CACHE_DESTROY_ON_ADMIN_CHANGE', true, $dry_run);
74 unregisterFilter('post_admin_deleted', 'CACHE_DESTROY_ON_ADMIN_CHANGE', true, $dry_run);
75 unregisterFilter('post_admin_reset_pass', 'CACHE_DESTROY_ON_ADMIN_CHANGE', true, $dry_run);
76 unregisterFilter('extension_remove', 'CACHE_DESTROY_ALL', true, $dry_run);
77 unregisterFilter('shutdown', 'CACHE_DESTROY_FILTER', true, $dry_run);
80 case 'activate': // Do stuff when admin activates this extension
81 // SQL commands to run
85 case 'deactivate': // Do stuff when admin deactivates this extension
86 // SQL commands to run
90 case 'update': // Update an extension
93 case '0.0.1': // SQL queries for v0.0.1
94 // Update notes (these will be set as task text!)
95 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.");
98 case '0.0.2': // SQL queries for v0.0.2
99 // Update notes (these will be set as task text!)
100 EXT_SET_UPDATE_NOTES("Fehler beseitigt, wenn error_reporting=E_ALL gesetzt ist.");
103 case '0.0.3': // SQL queries for v0.0.3
104 // Update notes (these will be set as task text!)
105 EXT_SET_UPDATE_NOTES("Cache-Update repariert.");
108 case '0.0.4': // SQL queries for v0.0.4
109 // Is the cache extension itself there?
110 if (EXT_IS_ACTIVE('cache')) {
111 // Check for cache when extension is already installed
112 if ($GLOBALS['cache_instance']->loadCacheFile("extensions", true)) $GLOBALS['cache_instance']->destroyCacheFile();
115 // Update notes (these will be set as task text!)
116 EXT_SET_UPDATE_NOTES("Spalte "keep_active" ist hinzugefügt. Cache wurde reinitialisiert.");
119 case '0.0.5': // SQL queries for v0.0.5
120 // Update notes (these will be set as task text!)
121 EXT_SET_UPDATE_NOTES("Registrierung der Cache-Erweiterung repariert");
124 case '0.0.6': // SQL queries for v0.0.6
125 // Update notes (these will be set as task text!)
126 EXT_SET_UPDATE_NOTES("Validierung der Cache-Datei admins.cache integriert.");
129 case '0.0.7': // SQL queries for v0.0.7
130 ADD_EXT_SQL("ALTER TABLE `{!_MYSQL_PREFIX!}_config` ADD db_hits BIGINT(20) UNSIGNED NOT NULL DEFAULT 0");
131 ADD_EXT_SQL("ALTER TABLE `{!_MYSQL_PREFIX!}_config` ADD cache_hits BIGINT(20) UNSIGNED NOT NULL DEFAULT 0");
132 ADD_EXT_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)");
134 // Update notes (these will be set as task text!)
135 EXT_SET_UPDATE_NOTES("Hits auf den Cache werden gezählt.");
138 case '0.0.8': // SQL queries for v0.0.8
139 // Update notes (these will be set as task text!)
140 EXT_SET_UPDATE_NOTES("Das Umschreiben der Cache-Daten hat eine Fehlermeldung <strong>Falsches Passwort!</strong> im Admin-Bereich verursacht.");
143 case '0.0.9': // SQL queries for v0.0.9
144 // Update notes (these will be set as task text!)
145 EXT_SET_UPDATE_NOTES("Interne Datenfeld-Management korregiert und Cache-Statistiken korregiert.");
148 case '0.1.0': // SQL queries for v0.2.1
149 // Update notes (these will be set as task text!)
150 EXT_SET_UPDATE_NOTES("Problem mit fehlender admins-Erweiterung beseitigt.");
153 case '0.1.1': // SQL queries for v0.1.1
154 // Update notes (these will be set as task text!)
155 EXT_SET_UPDATE_NOTES("Fehler <strong>Division durch 0</strong> repariert in den DB-Cache Statistiken.");
158 case '0.1.2': // SQL queries for v0.1.2
159 // Update notes (these will be set as task text!)
160 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.");
163 case '0.1.3': // SQL queries for v0.1.3
164 ADD_EXT_SQL("ALTER TABLE `{!_MYSQL_PREFIX!}_config` ADD cache_admins ENUM('Y','N') NOT NULL DEFAULT 'Y'");
165 ADD_EXT_SQL("ALTER TABLE `{!_MYSQL_PREFIX!}_config` ADD cache_acls ENUM('Y','N') NOT NULL DEFAULT 'Y'");
166 ADD_EXT_SQL("ALTER TABLE `{!_MYSQL_PREFIX!}_config` ADD cache_exts ENUM('Y','N') NOT NULL DEFAULT 'Y'");
167 ADD_EXT_SQL("ALTER TABLE `{!_MYSQL_PREFIX!}_config` ADD cache_config ENUM('Y','N') NOT NULL DEFAULT 'Y'");
168 ADD_EXT_SQL("ALTER TABLE `{!_MYSQL_PREFIX!}_config` ADD cache_modreg ENUM('Y','N') NOT NULL DEFAULT 'Y'");
169 ADD_EXT_SQL("ALTER TABLE `{!_MYSQL_PREFIX!}_config` ADD cache_refdepth ENUM('Y','N') NOT NULL DEFAULT 'Y'");
170 ADD_EXT_SQL("ALTER TABLE `{!_MYSQL_PREFIX!}_config` ADD cache_refsys ENUM('Y','N') NOT NULL DEFAULT 'Y'");
172 // Update notes (these will be set as task text!)
173 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.");
176 case '0.1.4': // SQL queries for v0.1.4
177 // Update notes (these will be set as task text!)
178 EXT_SET_UPDATE_NOTES("Fehler <strong>Division durch 0</strong> repariert in <strong>inc/load_cache.php</strong>.");
181 case '0.1.5': // SQL queries for v0.1.5
182 // Update notes (these will be set as task text!)
183 EXT_SET_UPDATE_NOTES("Weitere Fehler im System beseitigt.");
186 case '0.1.6': // SQL queries for v0.1.6
187 // Update notes (these will be set as task text!)
188 EXT_SET_UPDATE_NOTES("Probleme während des Installationsvorganges beseitigt.");
191 case '0.1.7': // SQL queries for v0.1.7
192 // Update notes (these will be set as task text!)
193 EXT_SET_UPDATE_NOTES("CSS-Klassenname gefixt in Templates.");
196 case '0.1.8': // SQL queries for v0.1.8
197 ADD_EXT_SQL("ALTER TABLE `{!_MYSQL_PREFIX!}_config` ADD cache_themes ENUM('Y','N') NOT NULL DEFAULT 'Y'");
199 // Update notes (these will be set as task text!)
200 EXT_SET_UPDATE_NOTES("Daten von installierten Themes werden nun gecacht.");
203 case '0.1.9': // SQL queries for v0.1.9
204 ADD_EXT_SQL("ALTER TABLE `{!_MYSQL_PREFIX!}_config` ADD cache_admin_menu ENUM('Y','N') NOT NULL DEFAULT 'N'");
206 // Update notes (these will be set as task text!)
207 EXT_SET_UPDATE_NOTES("Administratormenü experimentell gecacht.");
210 case '0.2.0': // SQL queries for v0.2.0
211 // This update depends on sql_patches
212 EXT_ADD_UPDATE_DEPENDS('sql_patches');
214 // Update notes (these will be set as task text!)
215 EXT_SET_UPDATE_NOTES("Die Erweiterung hängt nun von der <strong>sql_patches</strong> ab.");
218 case '0.2.1': // SQL queries for v0.2.1
219 // Register the new filter
220 registerFilter('extension_update', 'CACHE_DESTROY_ON_EXT_CHANGE', false, true, $dry_run);
221 registerFilter('post_extension_installed', 'CACHE_DESTROY_ON_EXT_CHANGE', false, true, $dry_run);
222 registerFilter('post_extension_run_sql', 'CACHE_DESTROY_ON_EXT_CHANGE', false, true, $dry_run);
223 registerFilter('post_admin_added', 'CACHE_DESTROY_ON_ADMIN_CHANGE', false, true, $dry_run);
224 registerFilter('post_admin_edited', 'CACHE_DESTROY_ON_ADMIN_CHANGE', false, true, $dry_run);
225 registerFilter('post_admin_deleted', 'CACHE_DESTROY_ON_ADMIN_CHANGE', false, true, $dry_run);
226 registerFilter('post_admin_reset_pass', 'CACHE_DESTROY_ON_ADMIN_CHANGE', false, true, $dry_run);
227 registerFilter('extension_remove', 'CACHE_DESTROY_ALL', false, true, $dry_run);
229 // Update notes (these will be set as task text!)
230 EXT_SET_UPDATE_NOTES("Filter für Erweiterungsmanagement hinzugefügt.");
233 case '0.2.2': // SQL queries for v0.2.2
234 // Register the new filter
235 registerFilter('post_extension_installed', 'CACHE_PURGE_ADMIN_MENU', false, true, $dry_run);
236 registerFilter('post_extension_run_sql', 'CACHE_PURGE_ADMIN_MENU', false, true, $dry_run);
238 // Update notes (these will be set as task text!)
239 EXT_SET_UPDATE_NOTES("Weitere Filter hinzugefügt.");
242 case '0.2.3': // SQL queries for v0.2.3
243 ADD_EXT_SQL("ALTER TABLE `{!_MYSQL_PREFIX!}_config` ADD cache_filter ENUM('Y','N') NOT NULL DEFAULT 'Y'");
245 // Update notes (these will be set as task text!)
246 EXT_SET_UPDATE_NOTES("Cachen von Filtern hinzugefügt.");
248 // Register a new filter
249 registerFilter('shutdown', 'CACHE_DESTROY_FILTER', false, true, $dry_run);
254 case 'modify': // When the extension got modified
257 case 'test': // For testing purposes. For details see file inc/modules/admin/what-extensions.php, arround line 305.
260 default: // Do stuff when extension is loaded
261 // Create instance on class
262 if ($GLOBALS['cache_mode'] != 'init') {
263 // Initialize cache system only when it's needed
264 $GLOBALS['cache_instance'] = new CacheSystem(getConfig('cache_update'), 'inc/' . getConfig('cache_path'), getConfig('cache_tested'));
265 if ($GLOBALS['cache_instance']->getStatus() != 'done') {
266 // Failed to initialize cache sustem
267 addFatalMessage(__FILE__, __LINE__, "(<font color=\"#0000aa\">".__LINE__."</font>): ".getMessage('CACHE_CANNOT_INITIALIZE'));
273 // Keep this extension always active!
274 EXT_SET_ALWAYS_ACTIVE('Y');