",_("check for necessary pgsrc updates"),"\n"; $dbi = $request->getDbh(); $path = FindLocalizedFile(WIKI_PGSRC); $pgsrc = new fileSet($path); // fixme: verification, ... foreach ($pgsrc->getFiles() as $filename) { if (substr($filename,-1,1) == '~') continue; $pagename = urldecode($filename); $page = $dbi->getPage($pagename); if ($page->exists()) { // check mtime: update automatically if pgsrc is newer $rev = $page->getCurrentRevision(); $page_mtime = $rev->get('mtime'); $data = implode("", file($path."/".$filename)); if (($parts = ParseMimeifiedPages($data))) { usort($parts, 'SortByPageVersion'); reset($parts); $pageinfo = $parts[0]; $stat = stat($path."/".$filename); $new_mtime = @$pageinfo['versiondata']['mtime']; if (!$new_mtime) $new_mtime = @$pageinfo['versiondata']['lastmodified']; if (!$new_mtime) $new_mtime = @$pageinfo['pagedata']['date']; if (!$new_mtime) $new_mtime = $stat[9]; if ($new_mtime > $page_mtime) { echo "$path/$pagename: newer than the existing page. replace ($new_mtime > $page_mtime)
\n"; LoadAny($request,$path."/".$filename); echo "
\n"; } else { echo "$path/$pagename: older than the existing page. skipped.
\n"; } } else { echo "$path/$pagename: unknown format, skipped.
\n"; } } else { echo "$pagename does not exist
\n"; LoadAny($request,$path."/".$filename); echo "
\n"; } } return; } /** * Search table definition in appropriate schema * and create it. * Supported: mysql */ function installTable(&$dbh, $table, $backend_type) { global $DBParams; if (!in_array($DBParams['dbtype'],array('SQL','ADODB'))) return; echo _("install table")," ",$table," ...
\n"; $backend = &$dbh->_backend->_dbh; $schema = findFile("schemas/${backend_type}.sql"); if (!$schema) { echo " ",_("FAILED"),": ",sprintf(_("no schema %s found"),"schemas/${backend_type}.sql")," ...
\n"; return false; } switch ($table) { case 'session': break; case 'user': break; case 'pref': break; case 'member': break; } echo " ",_("FAILED"),": ",_("not yet implemented")," ...
\n"; } /** * currently update only session, user, pref and member * jeffs-hacks database api (around 1.3.2) later * people should export/import their pages if using that old versions. */ function CheckDatabaseUpdate($request) { global $DBParams, $DBAuthParams; if (!in_array($DBParams['dbtype'],array('SQL','ADODB'))) return; echo "

",_("check for necessary database updates"),"

\n"; $dbh = &$request->_dbi; $backend = &$dbh->_backend->_dbh; if ($DBParams['dbtype'] == 'SQL') { $tables = $backend->getListOf('tables'); $backend_type = $backend->phptype; } elseif ($DBParams['dbtype'] == 'ADODB') { $tables = $backend->MetaTables(); $backend_type = $backend->databaseType; } $prefix = isset($DBParams['prefix']) ? $DBParams['prefix'] : ''; extract($dbh->_backend->_table_names); foreach (explode(':','session:user:pref:member') as $table) { if (!in_array($table,$tables)) { if ($prefix and !in_array($prefix.$table,$tables)) { installTable(&$dbh, $prefix.$table, $backend_type); } else { installTable(&$dbh, $table, $backend_type); } } } // 1.3.8 added session.sess_ip if (phpwiki_version() >= 1030.08 and USE_DB_SESSION and isset($request->_dbsession)) { echo _("check for new session.sess_ip column")," ..."; $database = $DBParams['dbtype'] == 'ADODB' ? $backend->database : $backend->dsn['database']; $session_tbl = $prefix . $DBParams['db_session_table']; $fields = mysql_list_fields($database,$session_tbl); $columns = mysql_num_fields($fields); for ($i = 0; $i < $columns; $i++) { $sess_fields[] = mysql_field_name($fields, $i); } mysql_free_result($fields); if (!in_array("sess_ip",$sess_fields)) { echo "",_("ADDING"),""," ... "; mysql_query("ALTER TABLE $session_tbl ADD CHAR(15) NOT NULL") or trigger_error("
\nSQL Error: ".mysql_error(),E_USER_WARNING); } else { echo _("OK"); } echo "
\n"; } // 1.3.10 mysql requires page.id auto_increment // mysql, mysqli or mysqlt if (phpwiki_version() >= 1030.10 and substr($backend_type,0,5) == 'mysql') { echo _("check for page.id auto_increment flag")," ..."; $database = $DBParams['dbtype'] == 'ADODB' ? $backend->database : $backend->dsn['database']; $fields = mysql_list_fields($database,$page_tbl); $columns = mysql_num_fields($fields); for ($i = 0; $i < $columns; $i++) { if (mysql_field_name($fields, $i) == 'id') { $flags = mysql_field_flags($fields, $i); if (!strstr($flags,"auto_increment")) { echo "",_("ADDING"),""," ... "; // MODIFY col_def valid since mysql 3.22.16, // older mysql's need CHANGE old_col col_def mysql_query("ALTER TABLE $page_tbl CHANGE id id INT NOT NULL AUTO_INCREMENT") or trigger_error("
\nSQL Error: ".mysql_error(),E_USER_WARNING); $fields = mysql_list_fields($database,$page_tbl); if (!strstr(mysql_field_flags($fields, $i),"auto_increment")) echo " ",_("FAILED"),"
\n"; else echo _("OK"),"
\n"; } else { echo _("OK"),"
\n"; } break; } } mysql_free_result($fields); } return; } /** * Upgrade: Base class for multipage worksteps * identify, validate, display options, next step */ class Upgrade { } class Upgrade_CheckPgsrc extends Upgrade { } class Upgrade_CheckDatabaseUpdate extends Upgrade { } // TODO: At which step are we? // validate and do it again or go on with next step. /** entry function from lib/main.php */ function DoUpgrade($request) { if (!$request->_user->isAdmin()) { $request->_notAuthorized(WIKIAUTH_ADMIN); $request->finish( HTML::div(array('class' => 'disabled-plugin'), fmt("Upgrade disabled: user != isAdmin"))); return; } StartLoadDump($request, _("Upgrading this PhpWiki")); CheckDatabaseUpdate($request); CheckPgsrcUpdate($request); //CheckThemeUpdate($request); EndLoadDump($request); } /** $Log: not supported by cvs2svn $ Revision 1.4 2004/05/02 21:26:38 rurban limit user session data (HomePageHandle and auth_dbi have to invalidated anyway) because they will not survive db sessions, if too large. extended action=upgrade some WikiTranslation button work revert WIKIAUTH_UNOBTAINABLE (need it for main.php) some temp. session debug statements Revision 1.3 2004/04/29 22:33:30 rurban fixed sf.net bug #943366 (Kai Krakow) couldn't load localized url-undecoded pagenames Revision 1.2 2004/03/12 15:48:07 rurban fixed explodePageList: wrong sortby argument order in UnfoldSubpages simplified lib/stdlib.php:explodePageList */ // For emacs users // Local Variables: // mode: php // tab-width: 8 // c-basic-offset: 4 // c-hanging-comment-ender-p: nil // indent-tabs-mode: nil // End: ?>