|
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;
! }
|