From: Joel U. <uck...@us...> - 2001-06-26 18:01:04
|
Update of /cvsroot/phpwiki/phpwiki/lib In directory usw-pr-cvs1:/tmp/cvs-serv5287 Modified Files: mysql.php Log Message: Lots of changes here: - Added $clobber as argument to InsertPage. If $clobber, then use 'replace '; otherwise use 'insert'i. Pages going into the current store should clobber, but pages going into the archive should not. (Assuming that an unlimited number of pages are kept. I still need to implement archive limiting...) - Created function ReplaceCurrentPage. - Moved link updating from InsertPage to ReplaceCurrentPage. - Renamed SaveCopyToArchive to SavePageToArchive. - Created function RetrievePageVersions. Returns an arary of page hashes that contains all versions of the specified page. - Added $version as argument to RetrievePage. It needs to know which version to get. Version 0 (zero)is magic, and always refers to the current version. - Created function GetMaxVersionNumber. This is used mostly to determine which version to get for the diffs against current pages. - Created function IsVersionInWiki. - Created function IsVersionInArchive. - Created function SelectStore. Given a page name and a version, this function returns the store where that page resides. Index: mysql.php =================================================================== RCS file: /cvsroot/phpwiki/phpwiki/lib/mysql.php,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -r1.12 -r1.13 *** mysql.php 2001/02/12 01:43:10 1.12 --- mysql.php 2001/06/26 18:01:01 1.13 *************** *** 7,13 **** MakeDBHash($pagename, $pagehash) MakePageHash($dbhash) ! RetrievePage($dbi, $pagename, $pagestore) ! InsertPage($dbi, $pagename, $pagehash) ! SaveCopyToArchive($dbi, $pagename, $pagehash) IsWikiPage($dbi, $pagename) IsInArchive($dbi, $pagename) --- 7,19 ---- MakeDBHash($pagename, $pagehash) MakePageHash($dbhash) ! RetrievePage($dbi, $pagename, $pagestore, $version) ! RetrievePageVersions($dbi, $pagename, $curstore, $archstore) ! GetMaxVersionNumber($dbi, $pagename, $pagestore) ! InsertPage($dbi, $pagename, $pagehash, $clobber) ! ReplaceCurrentPage($pagename, $pagehash) ! SavePageToArchive($pagename, $pagehash) ! SelectStore($dbi, $pagename, $version, $curstore, $archstore) ! IsVersionInWiki($dbi, $pagename, $version) ! IsVersionInArchive($dbi, $pagename, $version) IsWikiPage($dbi, $pagename) IsInArchive($dbi, $pagename) *************** *** 97,103 **** // Return hash of page + attributes or default ! function RetrievePage($dbi, $pagename, $pagestore) { $pagename = addslashes($pagename); ! if ($res = mysql_query("select * from $pagestore where pagename='$pagename'", $dbi['dbc'])) { if ($dbhash = mysql_fetch_array($res)) { return MakePageHash($dbhash); --- 103,112 ---- // Return hash of page + attributes or default ! function RetrievePage($dbi, $pagename, $pagestore, $version) { $pagename = addslashes($pagename); ! ! $version = $version ? " and version=$version" : ''; ! ! if ($res = mysql_query("select * from $pagestore where pagename='$pagename'$version", $dbi['dbc'])) { if ($dbhash = mysql_fetch_array($res)) { return MakePageHash($dbhash); *************** *** 108,121 **** ! // Either insert or replace a key/value (a page) ! function InsertPage($dbi, $pagename, $pagehash) ! { ! global $WikiPageStore; // ugly hack - if ($dbi['table'] == $WikiPageStore) { // HACK - $linklist = ExtractWikiPageLinks($pagehash['content']); - SetWikiPageLinks($dbi, $pagename, $linklist); - } $pagehash = MakeDBHash($pagename, $pagehash); --- 117,148 ---- ! // Return all versions of a page as an array of page hashes ! function RetrievePageVersions($dbi, $pagename, $curstore, $archstore) { ! $pagename = addslashes($pagename); ! if (($page[0] = RetrievePage($dbi, $pagename, $curstore, 0)) != -1) { ! if ($res = mysql_query("select * from $archstore where pagename='$pagename' order by version desc", $dbi['dbc'])) { ! while ($dbhash = mysql_fetch_array($res)) { ! array_push($page, MakePageHash($dbhash)); ! } ! return $page; ! } ! } ! return -1; ! } ! ! ! // Get maximum version number of a page in pagestore ! function GetMaxVersionNumber($dbi, $pagename, $pagestore) { ! $pagename = addslashes($pagename); ! if ($res = mysql_query("select max(version) from $pagestore where pagename='$pagename'", $dbi['dbc'])) { ! return mysql_result($res, 0); ! } ! return -1; ! } + // Either insert or replace a key/value (a page) + function InsertPage($dbi, $pagename, $pagehash, $clobber) + { $pagehash = MakeDBHash($pagename, $pagehash); *************** *** 128,132 **** "'$pagehash[refs]', $pagehash[version]"; ! if (!mysql_query("replace into $dbi[table] ($COLUMNS) values ($VALUES)", $dbi['dbc'])) { $msg = htmlspecialchars(sprintf(gettext ("Error writing page '%s'"), $pagename)); --- 155,162 ---- "'$pagehash[refs]', $pagehash[version]"; ! // Clobber existing page? ! $clobber = $clobber ? 'replace' : 'insert'; ! ! if (!mysql_query("$clobber into $dbi[table] ($COLUMNS) values ($VALUES)", $dbi['dbc'])) { $msg = htmlspecialchars(sprintf(gettext ("Error writing page '%s'"), $pagename)); *************** *** 138,147 **** ! // for archiving pages to a seperate dbm ! function SaveCopyToArchive($dbi, $pagename, $pagehash) { ! global $ArchivePageStore; ! $adbi = OpenDataBase($ArchivePageStore); ! InsertPage($adbi, $pagename, $pagehash); ! } --- 168,218 ---- ! // Adds to or replaces a page in the current pagestore ! function ReplaceCurrentPage($pagename, $pagehash) { ! global $WikiPageStore; ! $dbi = OpenDataBase($WikiPageStore); ! $linklist = ExtractWikiPageLinks($pagehash['content']); ! SetWikiPageLinks($dbi, $pagename, $linklist); ! InsertPage($dbi, $pagename, $pagehash, true); ! } ! ! ! // Adds a page to the archive pagestore ! function SavePageToArchive($pagename, $pagehash) { ! global $ArchivePageStore; ! $dbi = OpenDataBase($ArchivePageStore); ! InsertPage($dbi, $pagename, $pagehash, false); ! } ! ! ! // Returns store where version of page resides ! function SelectStore($dbi, $pagename, $version, $curstore, $archstore) { ! if ($version) { ! if (IsVersionInWiki($dbi, $pagename, $version)) return $curstore; ! elseif (IsVersionInArchive($dbi, $pagename, $version)) return $archstore; ! else return -1; ! } ! elseif (IsWikiPage($dbi, $pagename)) return $curstore; ! else return -1; ! } ! ! ! function IsVersionInWiki($dbi, $pagename, $version) { ! $pagename = addslashes($pagename); ! if ($res = mysql_query("select count(*) from $dbi[table] where pagename='$pagename' and version='$version'", $dbi['dbc'])) { ! return mysql_result($res, 0); ! } ! return 0; ! } ! ! function IsVersionInArchive($dbi, $pagename, $version) { ! global $ArchivePageStore; ! ! $pagename = addslashes($pagename); ! if ($res = mysql_query("select count(*) from $ArchivePageStore where pagename='$pagename' and version='$version'", $dbi['dbc'])) { ! return mysql_result($res, 0); ! } ! return 0; ! } |