2 rcs_id('$Id: upgrade.php,v 1.31 2004-12-10 02:45:26 rurban Exp $');
4 Copyright 2004 $ThePhpWikiProgrammingTeam
6 This file is part of PhpWiki.
8 PhpWiki is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
13 PhpWiki is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with PhpWiki; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 * Upgrade the WikiDB and config settings after installing a new
26 * Status: experimental, no queries for verification yet,
27 * no merge conflict resolution (patch?), just overwrite.
29 * Installation on an existing PhpWiki database needs some
30 * additional worksteps. Each step will require multiple pages.
33 * 1. Check for new or changed database schema and update it
34 * according to some predefined upgrade tables. (medium, complete)
35 * 2. Check for new or changed (localized) pgsrc/ pages and ask
36 * for upgrading these. Check timestamps, upgrade silently or
37 * show diffs if existing. Overwrite or merge (easy, complete)
38 * 3. Check for new or changed or deprecated index.php/config.ini settings
39 * and help in upgrading these. (hard)
40 * 3a Convert old-style index.php into config/config.ini. (easy)
41 * 4. Check for changed plugin invocation arguments. (hard)
42 * 5. Check for changed theme variables. (hard)
43 * 6. Convert the single-request upgrade to a class-based multi-page
46 * Done: overwrite=1 link on edit conflicts at first occurence "Overwrite all".
48 * @author: Reini Urban
50 require_once("lib/loadsave.php");
53 * TODO: check for the pgsrc_version number, not the revision mtime only
55 function doPgsrcUpdate(&$request,$pagename,$path,$filename) {
56 $dbi = $request->getDbh();
57 $page = $dbi->getPage($pagename);
58 if ($page->exists()) {
59 // check mtime: update automatically if pgsrc is newer
60 $rev = $page->getCurrentRevision();
61 $page_mtime = $rev->get('mtime');
62 $data = implode("", file($path."/".$filename));
63 if (($parts = ParseMimeifiedPages($data))) {
64 usort($parts, 'SortByPageVersion');
66 $pageinfo = $parts[0];
67 $stat = stat($path."/".$filename);
68 $new_mtime = @$pageinfo['versiondata']['mtime'];
70 $new_mtime = @$pageinfo['versiondata']['lastmodified'];
72 $new_mtime = @$pageinfo['pagedata']['date'];
74 $new_mtime = $stat[9];
75 if ($new_mtime > $page_mtime) {
76 echo "$path/$pagename: ",_("newer than the existing page."),
77 _(" replace "),"($new_mtime > $page_mtime)","<br />\n";
78 LoadAny($request,$path."/".$filename);
81 echo "$path/$pagename: ",_("older than the existing page."),
82 _(" skipped"),".<br />\n";
85 echo "$path/$pagename: ",("unknown format."),
86 _(" skipped"),".<br />\n";
89 echo sprintf(_("%s does not exist"),$pagename),"<br />\n";
90 LoadAny($request,$path."/".$filename);
95 /** need the english filename (required precondition: urlencode == urldecode)
96 * returns the plugin name.
98 function isActionPage($filename) {
99 static $special = array("DebugInfo" => "_BackendInfo",
100 "PhpWikiRecentChanges" => "RssFeed",
101 "ProjectSummary" => "RssFeed",
102 "RecentReleases" => "RssFeed",
104 $base = preg_replace("/\..{1,4}$/","",basename($filename));
105 if (isset($special[$base])) return $special[$base];
106 if (FindFile("lib/plugin/".$base.".php",true)) return $base;
110 function CheckActionPageUpdate(&$request) {
111 echo "<h3>",_("check for necessary ActionPage updates"),"</h3>\n";
112 $dbi = $request->getDbh();
113 $path = FindFile('pgsrc');
114 $pgsrc = new fileSet($path);
115 // most actionpages have the same name as the plugin
116 $loc_path = FindLocalizedFile('pgsrc');
117 foreach ($pgsrc->getFiles() as $filename) {
118 if (substr($filename,-1,1) == '~') continue;
119 $pagename = urldecode($filename);
120 if (isActionPage($filename)) {
121 $translation = gettext($pagename);
122 if ($translation == $pagename)
123 doPgsrcUpdate($request, $pagename, $path, $filename);
124 elseif (FindLocalizedFile('pgsrc/'.urlencode($translation),1))
125 doPgsrcUpdate($request, $translation, $loc_path,
126 urlencode($translation));
128 doPgsrcUpdate($request, $pagename, $path, $filename);
133 // see loadsave.php for saving new pages.
134 function CheckPgsrcUpdate(&$request) {
135 echo "<h3>",_("check for necessary pgsrc updates"),"</h3>\n";
136 $dbi = $request->getDbh();
137 $path = FindLocalizedFile(WIKI_PGSRC);
138 $pgsrc = new fileSet($path);
139 // fixme: verification, ...
141 foreach ($pgsrc->getFiles() as $filename) {
142 if (substr($filename,-1,1) == '~') continue;
143 $pagename = urldecode($filename);
144 // don't ever update the HomePage
145 if (defined(HOME_PAGE))
146 if ($pagename == HOME_PAGE) $isHomePage = true;
148 if ($pagename == _("HomePage")) $isHomePage = true;
149 if ($pagename == "HomePage") $isHomePage = true;
151 echo "$path/$pagename: ",_("always skip the HomePage."),
152 _(" skipped"),".<br />\n";
156 if (!isActionPage($filename)) {
157 doPgsrcUpdate($request,$pagename,$path,$filename);
164 * TODO: Search table definition in appropriate schema
166 * Supported: mysql and generic SQL, for ADODB and PearDB.
168 function installTable(&$dbh, $table, $backend_type) {
170 if (!in_array($DBParams['dbtype'],array('SQL','ADODB'))) return;
171 echo _("MISSING")," ... \n";
172 $backend = &$dbh->_backend->_dbh;
174 $schema = findFile("schemas/${backend_type}.sql");
176 echo " ",_("FAILED"),": ",sprintf(_("no schema %s found"),"schemas/${backend_type}.sql")," ... <br />\n";
180 extract($dbh->_backend->_table_names);
181 $prefix = isset($DBParams['prefix']) ? $DBParams['prefix'] : '';
184 assert($session_tbl);
185 if ($backend_type == 'mysql') {
186 $dbh->genericSqlQuery("
187 CREATE TABLE $session_tbl (
188 sess_id CHAR(32) NOT NULL DEFAULT '',
189 sess_data BLOB NOT NULL,
190 sess_date INT UNSIGNED NOT NULL,
191 sess_ip CHAR(15) NOT NULL,
192 PRIMARY KEY (sess_id),
196 $dbh->genericSqlQuery("
197 CREATE TABLE $session_tbl (
198 sess_id CHAR(32) NOT NULL DEFAULT '',
199 sess_data ".($backend_type == 'pgsql'?'TEXT':'BLOB')." NOT NULL,
201 sess_ip CHAR(15) NOT NULL
203 $dbh->genericSqlQuery("CREATE UNIQUE INDEX sess_id ON $session_tbl (sess_id)");
205 $dbh->genericSqlQuery("CREATE INDEX sess_date on session (sess_date)");
206 echo " ",_("CREATED");
209 $user_tbl = $prefix.'user';
210 if ($backend_type == 'mysql') {
211 $dbh->genericSqlQuery("
212 CREATE TABLE $user_tbl (
213 userid CHAR(48) BINARY NOT NULL UNIQUE,
214 passwd CHAR(48) BINARY DEFAULT '',
218 $dbh->genericSqlQuery("
219 CREATE TABLE $user_tbl (
220 userid CHAR(48) NOT NULL,
221 passwd CHAR(48) DEFAULT ''
223 $dbh->genericSqlQuery("CREATE UNIQUE INDEX userid ON $user_tbl (userid)");
225 echo " ",_("CREATED");
228 $pref_tbl = $prefix.'pref';
229 if ($backend_type == 'mysql') {
230 $dbh->genericSqlQuery("
231 CREATE TABLE $pref_tbl (
232 userid CHAR(48) BINARY NOT NULL UNIQUE,
233 prefs TEXT NULL DEFAULT '',
237 $dbh->genericSqlQuery("
238 CREATE TABLE $pref_tbl (
239 userid CHAR(48) NOT NULL,
240 prefs TEXT NULL DEFAULT '',
242 $dbh->genericSqlQuery("CREATE UNIQUE INDEX userid ON $pref_tbl (userid)");
244 echo " ",_("CREATED");
247 $member_tbl = $prefix.'member';
248 if ($backend_type == 'mysql') {
249 $dbh->genericSqlQuery("
250 CREATE TABLE $member_tbl (
251 userid CHAR(48) BINARY NOT NULL,
252 groupname CHAR(48) BINARY NOT NULL DEFAULT 'users',
257 $dbh->genericSqlQuery("
258 CREATE TABLE $member_tbl (
259 userid CHAR(48) NOT NULL,
260 groupname CHAR(48) NOT NULL DEFAULT 'users',
262 $dbh->genericSqlQuery("CREATE INDEX userid ON $member_tbl (userid)");
263 $dbh->genericSqlQuery("CREATE INDEX groupname ON $member_tbl (groupname)");
265 echo " ",_("CREATED");
268 $rating_tbl = $prefix.'rating';
269 if ($backend_type == 'mysql') {
270 $dbh->genericSqlQuery("
271 CREATE TABLE $rating_tbl (
272 dimension INT(4) NOT NULL,
273 raterpage INT(11) NOT NULL,
274 rateepage INT(11) NOT NULL,
275 ratingvalue FLOAT NOT NULL,
276 rateeversion INT(11) NOT NULL,
277 tstamp TIMESTAMP(14) NOT NULL,
278 PRIMARY KEY (dimension, raterpage, rateepage)
281 $dbh->genericSqlQuery("
282 CREATE TABLE $rating_tbl (
283 dimension INT(4) NOT NULL,
284 raterpage INT(11) NOT NULL,
285 rateepage INT(11) NOT NULL,
286 ratingvalue FLOAT NOT NULL,
287 rateeversion INT(11) NOT NULL,
288 tstamp TIMESTAMP(14) NOT NULL,
290 $dbh->genericSqlQuery("CREATE UNIQUE INDEX rating ON $rating_tbl (dimension, raterpage, rateepage)");
292 echo " ",_("CREATED");
295 $log_tbl = $prefix.'accesslog';
296 // fields according to http://www.outoforder.cc/projects/apache/mod_log_sql/docs-2.0/#id2756178
298 A User Agent agent varchar(255) Mozilla/4.0 (compat; MSIE 6.0; Windows)
299 a CGi request arguments request_args varchar(255) user=Smith&cart=1231&item=532
300 b Bytes transfered bytes_sent int unsigned 32561
301 c??? Text of cookie cookie varchar(255) Apache=sdyn.fooonline.net 1300102700823
302 f Local filename requested request_file varchar(255) /var/www/html/books-cycroad.html
303 H HTTP request_protocol request_protocol varchar(10) HTTP/1.1
304 h Name of remote host remote_host varchar(50) blah.foobar.com
305 I Request ID (from modd_unique_id) id char(19) POlFcUBRH30AAALdBG8
306 l Ident user info remote_logname varcgar(50) bobby
307 M Machine ID??? machine_id varchar(25) web01
308 m HTTP request method request_method varchar(10) GET
309 P httpd cchild PID child_pid smallint unsigned 3215
310 p http port server_port smallint unsigned 80
311 R Referer referer varchar(255) http://www.biglinks4u.com/linkpage.html
312 r Request in full form request_line varchar(255) GET /books-cycroad.html HTTP/1.1
313 S Time of request in UNIX time_t format time_stamp int unsigned 1005598029
314 T Seconds to service request request_duration smallint unsigned 2
315 t Time of request in human format request_time char(28) [02/Dec/2001:15:01:26 -0800]
316 U Request in simple form request_uri varchar(255) /books-cycroad.html
317 u User info from HTTP auth remote_user varchar(50) bobby
318 v Virtual host servicing the request virtual_host varchar(255)
320 $dbh->genericSqlQuery("
321 CREATE TABLE $log_tbl (
322 time_stamp int unsigned,
323 remote_host varchar(50),
324 remote_user varchar(50),
325 request_method varchar(10),
326 request_line varchar(255),
327 request_args varchar(255),
328 request_uri varchar(255),
329 request_time char(28),
330 status smallint unsigned,
331 bytes_sent smallint unsigned,
332 referer varchar(255),
334 request_duration float
336 $dbh->genericSqlQuery("CREATE INDEX log_time ON $log_tbl (time_stamp)");
337 $dbh->genericSqlQuery("CREATE INDEX log_host ON $log_tbl (remote_host)");
338 echo " ",_("CREATED");
345 * update from ~1.3.4 to current.
346 * only session, user, pref and member
347 * jeffs-hacks database api (around 1.3.2) later:
348 * people should export/import their pages if using that old versions.
350 function CheckDatabaseUpdate(&$request) {
351 global $DBParams, $DBAuthParams;
352 if (!in_array($DBParams['dbtype'], array('SQL','ADODB'))) return;
353 echo "<h3>",_("check for necessary database updates"),"</h3>\n";
354 if (defined('DBADMIN_USER') and DBADMIN_USER) {
355 // if need to connect as the root user, for alter permissions
356 $AdminParams = $DBParams;
357 if ($DBParams['dbtype'] == 'SQL')
358 $dsn = DB::parseDSN($AdminParams['dsn']);
360 $dsn = parseDSN($AdminParams['dsn']);
361 $AdminParams['dsn'] = sprintf("%s://%s:%s@%s/%s",
367 $dbh = WikiDB::open($AdminParams);
369 $dbh = &$request->_dbi;
372 $tables = $dbh->_backend->listOfTables();
373 $backend_type = $dbh->_backend->backendType();
374 $prefix = isset($DBParams['prefix']) ? $DBParams['prefix'] : '';
375 foreach (explode(':','session:user:pref:member') as $table) {
376 echo sprintf(_("check for table %s"), $table)," ...";
377 if (!in_array($prefix.$table, $tables)) {
378 installTable($dbh, $table, $backend_type);
380 echo _("OK")," <br />\n";
383 if (ACCESS_LOG_SQL) {
384 $table = "accesslog";
385 echo sprintf(_("check for table %s"), $table)," ...";
386 if (!in_array($prefix.$table, $tables)) {
387 installTable($dbh, $table, $backend_type);
389 echo _("OK")," <br />\n";
392 $backend = &$dbh->_backend->_dbh;
394 // 1.3.8 added session.sess_ip
395 if (phpwiki_version() >= 1030.08 and USE_DB_SESSION and isset($request->_dbsession)) {
396 echo _("check for new session.sess_ip column")," ... ";
397 $database = $dbh->_backend->database();
398 assert(!empty($DBParams['db_session_table']));
399 $session_tbl = $prefix . $DBParams['db_session_table'];
400 $sess_fields = $dbh->_backend->listOfFields($database, $session_tbl);
401 if (!strstr(strtolower(join(':', $sess_fields)),"sess_ip")) {
402 // TODO: postgres test (should be able to add columns at the end, but not in between)
403 echo "<b>",_("ADDING"),"</b>"," ... ";
404 $dbh->genericSqlQuery("ALTER TABLE $session_tbl ADD sess_ip CHAR(15) NOT NULL");
405 $dbh->genericSqlQuery("CREATE INDEX sess_date ON $session_tbl (sess_date)");
412 // 1.3.10 mysql requires page.id auto_increment
413 // mysql, mysqli or mysqlt
414 if (phpwiki_version() >= 1030.099 and substr($backend_type,0,5) == 'mysql') {
415 echo _("check for page.id auto_increment flag")," ...";
416 extract($dbh->_backend->_table_names);
417 assert(!empty($page_tbl));
418 $database = $dbh->_backend->database();
419 $fields = mysql_list_fields($database, $page_tbl, $dbh->_backend->connection());
420 $columns = mysql_num_fields($fields);
421 for ($i = 0; $i < $columns; $i++) {
422 if (mysql_field_name($fields, $i) == 'id') {
423 $flags = mysql_field_flags($fields, $i);
424 //DONE: something was wrong with ADODB here.
425 if (!strstr(strtolower($flags), "auto_increment")) {
426 echo "<b>",_("ADDING"),"</b>"," ... ";
427 // MODIFY col_def valid since mysql 3.22.16,
428 // older mysql's need CHANGE old_col col_def
429 $dbh->genericSqlQuery("ALTER TABLE $page_tbl CHANGE id id INT NOT NULL AUTO_INCREMENT");
430 $fields = mysql_list_fields($database, $page_tbl);
431 if (!strstr(strtolower(mysql_field_flags($fields, $i)), "auto_increment"))
432 echo " <b><font color=\"red\">", _("FAILED"), "</font></b><br />\n";
434 echo _("OK"), "<br />\n";
436 echo _("OK"), "<br />\n";
441 mysql_free_result($fields);
444 // check for mysql 4.1.x/5.0.0a binary search problem.
445 // http://bugs.mysql.com/bug.php?id=4398
446 // "select * from page where LOWER(pagename) like '%search%'" does not apply LOWER!
447 // confirmed for 4.1.0alpha,4.1.3-beta,5.0.0a; not yet tested for 4.1.2alpha,
448 // TODO: there's another known workaround, not yet applied. On windows only.
449 if (isWindows() and substr($backend_type,0,5) == 'mysql') {
450 echo _("check for mysql 4.1.x/5.0.0 binary search on windows problem")," ...";
451 $result = mysql_query("SELECT VERSION()", $dbh->_backend->connection());
452 $row = mysql_fetch_row($result);
453 $mysql_version = $row[0];
454 $arr = explode('.', $mysql_version);
455 $version = (string)(($arr[0] * 100) + $arr[1]) . "." . (integer)$arr[2];
456 if ($version >= 401.0) {
457 $dbh->genericSqlQuery("ALTER TABLE $page_tbl CHANGE pagename pagename VARCHAR(100) NOT NULL");
458 echo sprintf(_("version <em>%s</em> <b>FIXED</b>"), $mysql_version),"<br />\n";
460 echo sprintf(_("version <em>%s</em> not affected"), $mysql_version),"<br />\n";
464 // put _cached_html from pagedata into a new seperate blob, not huge serialized string.
465 // it is only rarelely needed: for current page only, if-not-modified
466 // but was extracetd for every simple page iteration.
467 if (phpwiki_version() >= 1030.10) {
468 echo _("check for extra page.cached_html column")," ... ";
469 $database = $dbh->_backend->database();
470 extract($dbh->_backend->_table_names);
471 $fields = $dbh->_backend->listOfFields($database, $page_tbl);
472 if (!strstr(strtolower(join(':', $fields)), "cached_html")) {
473 echo "<b>",_("ADDING"),"</b>"," ... ";
474 if (substr($backend_type,0,5) == 'mysql')
475 $dbh->genericSqlQuery("ALTER TABLE $page_tbl ADD cached_html MEDIUMBLOB");
477 $dbh->genericSqlQuery("ALTER TABLE $page_tbl ADD cached_html BLOB");
478 $pages = $dbh->getAllPages();
479 $cache =& $dbh->_cache;
480 echo "<b>",_("CONVERTING"),"</b>"," ... ";
481 while ($page = $pages->next()) {
482 $pagename = $page->getName();
483 $data = $dbh->_backend->get_pagedata($pagename);
484 if (!empty($data['_cached_html'])) {
485 $cached_html = $data['_cached_html'];
486 $data['_cached_html'] = '';
487 $cache->update_pagedata($pagename, $data);
488 //$dbh->_backend->update_cachedhtml($pagename, $cached_html);
489 // store as blob, not serialized
490 $dbh->genericSqlQuery(sprintf("UPDATE $page_tbl SET cached_html=%s WHERE pagename=%s",
491 $dbh->quote($cached_html),
492 $dbh->quote($pagename)));
495 echo _("OK"), "<br />\n";
497 echo _("OK"), "<br />\n";
503 function fixConfigIni($match, $new) {
504 $file = FindFile("config/config.ini");
506 if (is_writable($file)) {
507 $in = fopen($file,"rb");
508 $out = fopen($tmp = tempnam(FindFile("uploads"),"cfg"),"wb");
510 $tmp = str_replace("/","\\",$tmp);
511 while ($s = fgets($in)) {
512 if (preg_match($match, $s)) {
513 $s = $new . (isWindows() ? "\r\n" : "\n");
521 echo " <b><font color=\"red\">",_("FAILED"),"</font></b>: ",
522 sprintf(_("%s not found"), $match);
525 @unlink("$file.bak");
526 @rename($file,"$file.bak");
527 if (rename($tmp, $file))
528 echo " <b>",_("FIXED"),"</b>";
530 echo " <b>",_("FAILED"),"</b>: ";
531 sprintf(_("couldn't move %s to %s"), $tmp, $file);
537 echo " <b><font color=\"red\">",_("FAILED"),"</font></b>: ",
538 sprintf(_("%s is not writable"), $file);
543 function CheckConfigUpdate(&$request) {
544 echo "<h3>",_("check for necessary config updates"),"</h3>\n";
545 echo _("check for old CACHE_CONTROL = NONE")," ... ";
546 if (defined('CACHE_CONTROL') and CACHE_CONTROL == '') {
547 echo "<br /> ",_("CACHE_CONTROL is set to 'NONE', and must be changed to 'NO_CACHE'")," ...";
548 fixConfigIni("/^\s*CACHE_CONTROL\s*=\s*NONE/","CACHE_CONTROL = NO_CACHE");
553 echo _("check for GROUP_METHOD = NONE")," ... ";
554 if (defined('GROUP_METHOD') and GROUP_METHOD == '') {
555 echo "<br /> ",_("GROUP_METHOD is set to NONE, and must be changed to \"NONE\"")," ...";
556 fixConfigIni("/^\s*GROUP_METHOD\s*=\s*NONE/","GROUP_METHOD = \"NONE\"");
566 * Upgrade: Base class for multipage worksteps
567 * identify, validate, display options, next step
572 class Upgrade_CheckPgsrc extends Upgrade {
575 class Upgrade_CheckDatabaseUpdate extends Upgrade {
578 // TODO: At which step are we?
579 // validate and do it again or go on with next step.
581 /** entry function from lib/main.php
583 function DoUpgrade($request) {
585 if (!$request->_user->isAdmin()) {
586 $request->_notAuthorized(WIKIAUTH_ADMIN);
588 HTML::div(array('class' => 'disabled-plugin'),
589 fmt("Upgrade disabled: user != isAdmin")));
593 StartLoadDump($request, _("Upgrading this PhpWiki"));
594 //CheckOldIndexUpdate($request); // to upgrade from < 1.3.10
595 CheckActionPageUpdate($request);
596 CheckDatabaseUpdate($request);
597 CheckPgsrcUpdate($request);
598 //CheckThemeUpdate($request);
599 CheckConfigUpdate($request);
600 EndLoadDump($request);
605 $Log: not supported by cvs2svn $
606 Revision 1.30 2004/11/29 17:58:57 rurban
609 Revision 1.29 2004/11/29 16:08:31 rurban
612 Revision 1.28 2004/11/16 16:25:14 rurban
613 fix accesslog tablename, print CREATED only if really done
615 Revision 1.27 2004/11/07 16:02:52 rurban
616 new sql access log (for spam prevention), and restructured access log class
618 pear_db: mysql specific parts seperated (using replace)
620 Revision 1.26 2004/10/14 19:19:34 rurban
621 loadsave: check if the dumped file will be accessible from outside.
622 and some other minor fixes. (cvsclient native not yet ready)
624 Revision 1.25 2004/09/06 08:28:00 rurban
625 rename genericQuery to genericSqlQuery
627 Revision 1.24 2004/07/05 13:56:22 rurban
628 sqlite autoincrement fix
630 Revision 1.23 2004/07/04 10:28:06 rurban
633 Revision 1.22 2004/07/03 17:21:28 rurban
634 updated docs: submitted new mysql bugreport (#1491 did not fix it)
636 Revision 1.21 2004/07/03 16:51:05 rurban
637 optional DBADMIN_USER:DBADMIN_PASSWD for action=upgrade (if no ALTER permission)
638 added atomic mysql REPLACE for PearDB as in ADODB
639 fixed _lock_tables typo links => link
640 fixes unserialize ADODB bug in line 180
642 Revision 1.20 2004/07/03 14:48:18 rurban
643 Tested new mysql 4.1.3-beta: binary search bug as fixed.
644 => fixed action=upgrade,
645 => version check in PearDB also (as in ADODB)
647 Revision 1.19 2004/06/19 12:19:09 rurban
648 slightly improved docs
650 Revision 1.18 2004/06/19 11:47:17 rurban
651 added CheckConfigUpdate: CACHE_CONTROL = NONE => NO_CACHE
653 Revision 1.17 2004/06/17 11:31:50 rurban
654 check necessary localized actionpages
656 Revision 1.16 2004/06/16 10:38:58 rurban
657 Disallow refernces in calls if the declaration is a reference
658 ("allow_call_time_pass_reference clean").
659 PhpWiki is now allow_call_time_pass_reference = Off clean,
660 but several external libraries may not.
661 In detail these libs look to be affected (not tested):
665 Revision 1.15 2004/06/07 19:50:40 rurban
666 add owner field to mimified dump
668 Revision 1.14 2004/06/07 18:38:18 rurban
669 added mysql 4.1.x search fix
671 Revision 1.13 2004/06/04 20:32:53 rurban
672 Several locale related improvements suggested by Pierrick Meignen
673 LDAP fix by John Cole
674 reanable admin check without ENABLE_PAGEPERM in the admin plugins
676 Revision 1.12 2004/05/18 13:59:15 rurban
677 rename simpleQuery to genericSqlQuery
679 Revision 1.11 2004/05/15 13:06:17 rurban
680 skip the HomePage, at first upgrade the ActionPages, then the database, then the rest
682 Revision 1.10 2004/05/15 01:19:41 rurban
683 upgrade prefix fix by Kai Krakow
685 Revision 1.9 2004/05/14 11:33:03 rurban
686 version updated to 1.3.11pre
687 upgrade stability fix
689 Revision 1.8 2004/05/12 10:49:55 rurban
690 require_once fix for those libs which are loaded before FileFinder and
691 its automatic include_path fix, and where require_once doesn't grok
692 dirname(__FILE__) != './lib'
693 upgrade fix with PearDB
694 navbar.tmpl: remove spaces for IE button alignment
696 Revision 1.7 2004/05/06 17:30:38 rurban
697 CategoryGroup: oops, dos2unix eol
698 improved phpwiki_version:
699 pre -= .0001 (1.3.10pre: 1030.099)
700 -p1 += .001 (1.3.9-p1: 1030.091)
701 improved InstallTable for mysql and generic SQL versions and all newer tables so far.
702 abstracted more ADODB/PearDB methods for action=upgrade stuff:
703 backend->backendType(), backend->database(),
704 backend->listOfFields(),
705 backend->listOfTables(),
707 Revision 1.6 2004/05/03 15:05:36 rurban
710 Revision 1.4 2004/05/02 21:26:38 rurban
711 limit user session data (HomePageHandle and auth_dbi have to invalidated anyway)
712 because they will not survive db sessions, if too large.
713 extended action=upgrade
714 some WikiTranslation button work
715 revert WIKIAUTH_UNOBTAINABLE (need it for main.php)
716 some temp. session debug statements
718 Revision 1.3 2004/04/29 22:33:30 rurban
719 fixed sf.net bug #943366 (Kai Krakow)
720 couldn't load localized url-undecoded pagenames
722 Revision 1.2 2004/03/12 15:48:07 rurban
723 fixed explodePageList: wrong sortby argument order in UnfoldSubpages
724 simplified lib/stdlib.php:explodePageList
733 // c-hanging-comment-ender-p: nil
734 // indent-tabs-mode: nil