From: Reini U. <ru...@us...> - 2004-12-06 19:50:19
|
Update of /cvsroot/phpwiki/phpwiki/lib/WikiDB/backend In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4180/WikiDB/backend Modified Files: ADODB.php PearDB.php PearDB_oci8.php PearDB_pgsql.php cvs.php dbaBase.php file.php Log Message: enable action=remove which is undoable and seeable in RecentChanges: ADODB ony for now. renamed delete_page to purge_page. enable action=edit&version=-1 to force creation of a new version. added BABYCART_PATH config fixed magiqc in adodb.inc.php and some more docs Index: ADODB.php =================================================================== RCS file: /cvsroot/phpwiki/phpwiki/lib/WikiDB/backend/ADODB.php,v retrieving revision 1.61 retrieving revision 1.62 diff -u -2 -b -p -d -r1.61 -r1.62 --- ADODB.php 30 Nov 2004 17:45:53 -0000 1.61 +++ ADODB.php 6 Dec 2004 19:50:04 -0000 1.62 @@ -236,8 +236,11 @@ extends WikiDB_backend . " SET hits=?, pagedata=?" . " WHERE pagename=?", - array($hits, $this->_serialize($data),$pagename))) + array($hits, $this->_serialize($data),$pagename))) { $dbh->CommitTrans( ); - else + return true; + } else { $dbh->RollbackTrans( ); + return false; + } } @@ -460,5 +463,10 @@ extends WikiDB_backend /** - * Delete page from the database. + * Delete page from the database with backup possibility. + * + * deletePage increments latestversion in recent to a non-existent version, + * and removes the nonempty row, + * so that get_latest_version returns id+1 and get_previous_version returns prev id + * and page->exists returns false. */ function delete_page($pagename) { @@ -466,4 +474,42 @@ extends WikiDB_backend extract($this->_table_names); + $dbh->BeginTrans(); + $dbh->CommitLock($recent_tbl); + if (($id = $this->_get_pageid($pagename, false)) === false) { + $dbh->RollbackTrans( ); + return false; + } + $version = $this->get_latest_version($pagename); + $mtime = time(); + $user =& $GLOBALS['request']->_user; + $meta = array('author' => $user->getId(), + 'author_id' => $user->getAuthenticatedId(), + 'mtime' => $mtime); + $this->lock(array('version','recent','nonempty','page','link')); + if ($dbh->Execute("UPDATE $recent_tbl SET latestversion=latestversion+1,latestmajor=latestversion+1,latestminor=NULL WHERE id=$id") + and $dbh->Execute("INSERT INTO $version_tbl" + . " (id,version,mtime,minor_edit,content,versiondata)" + . " VALUES(?,?,?,?,?,?)", + array($id, $version+1, $mtime, 0, + '', $this->_serialize($meta))) + and $dbh->Execute("DELETE FROM $nonempty_tbl WHERE id=$id") + and $this->set_links($pagename, false) + and $dbh->Execute("UPDATE $page_tbl SET pagedata='' WHERE id=$id") // keep hits but delete meta-data + ) + { + $this->unlock(array('version','recent','nonempty','page','link')); + $dbh->CommitTrans( ); + return true; + } else { + $this->unlock(array('version','recent','nonempty','page','link')); + $dbh->RollbackTrans( ); + return false; + } + } + + function purge_page($pagename) { + $dbh = &$this->_dbh; + extract($this->_table_names); + $this->lock(array('version','recent','nonempty','page','link')); if ( ($id = $this->_get_pageid($pagename, false)) ) { @@ -471,5 +517,5 @@ extends WikiDB_backend $dbh->Execute("DELETE FROM $recent_tbl WHERE id=$id"); $dbh->Execute("DELETE FROM $nonempty_tbl WHERE id=$id"); - $dbh->Execute("DELETE FROM $link_tbl WHERE linkfrom=$id"); + $this->set_links($pagename, false); $row = $dbh->GetRow("SELECT COUNT(*) FROM $link_tbl WHERE linkto=$id"); if ($row and $row[0]) { @@ -477,12 +523,15 @@ extends WikiDB_backend // altogether. $dbh->Execute("UPDATE $page_tbl SET hits=0, pagedata='' WHERE id=$id"); + $result = 0; } else { $dbh->Execute("DELETE FROM $page_tbl WHERE id=$id"); + $result = 1; } - $this->_update_recent_table(); - $this->_update_nonempty_table(); + } else { + $result = -1; // already purged or not existing } $this->unlock(array('version','recent','nonempty','page','link')); + return $result; } @@ -504,7 +553,6 @@ extends WikiDB_backend $pageid = $this->_get_pageid($pagename, true); - $dbh->Execute("DELETE FROM $link_tbl WHERE linkfrom=$pageid"); - if ($links) { + $dbh->Execute("DELETE FROM $link_tbl WHERE linkfrom=$pageid"); foreach($links as $link) { if (isset($linkseen[$link])) @@ -515,6 +563,20 @@ extends WikiDB_backend . " VALUES ($pageid, $linkid)"); } + } elseif (DEBUG) { + // purge page table: delete all non-referenced pages + // for all previously linked pages... + foreach ($dbh->getRow("SELECT $link_tbl.linkto as id FROM $link_tbl WHERE linkfrom=$pageid") as $id) { + // ...check if the page is empty and has no version + if ($dbh->getRow("SELECT $page_tbl.id FROM $page_tbl LEFT JOIN $nonempty_tbl USING (id) " + ." LEFT JOIN $version_tbl USING (id)" + ." WHERE ISNULL($nonempty_tbl.id) AND ISNULL($version_tbl.id) AND $page_tbl.id=$id")) { + $dbh->Execute("DELETE FROM $page_tbl WHERE id=$id"); // this purges the link + $dbh->Execute("DELETE FROM $recent_tbl WHERE id=$id"); // may fail + } + } + $dbh->Execute("DELETE FROM $link_tbl WHERE linkfrom=$pageid"); } $this->unlock(array('link')); + return true; } @@ -615,5 +677,5 @@ extends WikiDB_backend . $this->page_tbl_fields . " FROM $page_tbl" - . $exclude ? " WHERE $exclude" : '' + . ($exclude ? " WHERE $exclude" : '') . $orderby; } else { @@ -1129,5 +1191,5 @@ extends WikiDB_backend_search } function _pagename_match_clause($node) { - $word = $node->sql($word); + $word = $node->sql(); return $this->_case_exact ? "pagename LIKE '$word'" @@ -1135,5 +1197,5 @@ extends WikiDB_backend_search } function _fulltext_match_clause($node) { - $word = $node->sql($word); + $word = $node->sql(); return $this->_case_exact ? "pagename LIKE '$word' OR content LIKE '$word'" @@ -1302,4 +1364,12 @@ extends WikiDB_backend_search // $Log$ +// Revision 1.62 2004/12/06 19:50:04 rurban +// enable action=remove which is undoable and seeable in RecentChanges: ADODB ony for now. +// renamed delete_page to purge_page. +// enable action=edit&version=-1 to force creation of a new version. +// added BABYCART_PATH config +// fixed magiqc in adodb.inc.php +// and some more docs +// // Revision 1.61 2004/11/30 17:45:53 rurban // exists_links backend implementation Index: PearDB.php =================================================================== RCS file: /cvsroot/phpwiki/phpwiki/lib/WikiDB/backend/PearDB.php,v retrieving revision 1.76 retrieving revision 1.77 diff -u -2 -b -p -d -r1.76 -r1.77 --- PearDB.php 30 Nov 2004 17:45:53 -0000 1.76 +++ PearDB.php 6 Dec 2004 19:50:04 -0000 1.77 @@ -411,8 +411,15 @@ extends WikiDB_backend /** + * See ADODB for a better delete_page(), which can be undone and is seen in RecentChanges. + */ + function delete_page($pagename) { + $this->purge_page($pagename); + } + + /** * Delete page completely from the database. * I'm not sure if this is what we want. Maybe just delete the revisions */ - function delete_page($pagename) { + function purge_page($pagename) { $dbh = &$this->_dbh; extract($this->_table_names); @@ -429,15 +436,19 @@ extends WikiDB_backend // altogether. $dbh->query("UPDATE $page_tbl SET hits=0, pagedata='' WHERE id=$id"); + $result = 0; } else { $dbh->query("DELETE FROM $page_tbl WHERE id=$id"); + $result = 1; } $this->_update_recent_table(); $this->_update_nonempty_table(); + } else { + $result = -1; // already purged or not existing } $this->unlock(); + return $result; } - // The only thing we might be interested in updating which we can // do fast in the flags (minor_edit). I think the default @@ -1172,4 +1183,12 @@ extends WikiDB_backend_search // $Log$ +// Revision 1.77 2004/12/06 19:50:04 rurban +// enable action=remove which is undoable and seeable in RecentChanges: ADODB ony for now. +// renamed delete_page to purge_page. +// enable action=edit&version=-1 to force creation of a new version. +// added BABYCART_PATH config +// fixed magiqc in adodb.inc.php +// and some more docs +// // Revision 1.76 2004/11/30 17:45:53 rurban // exists_links backend implementation Index: PearDB_oci8.php =================================================================== RCS file: /cvsroot/phpwiki/phpwiki/lib/WikiDB/backend/PearDB_oci8.php,v retrieving revision 1.5 retrieving revision 1.6 diff -u -2 -b -p -d -r1.5 -r1.6 Index: PearDB_pgsql.php =================================================================== RCS file: /cvsroot/phpwiki/phpwiki/lib/WikiDB/backend/PearDB_pgsql.php,v retrieving revision 1.13 retrieving revision 1.14 diff -u -2 -b -p -d -r1.13 -r1.14 Index: cvs.php =================================================================== RCS file: /cvsroot/phpwiki/phpwiki/lib/WikiDB/backend/cvs.php,v retrieving revision 1.22 retrieving revision 1.23 diff -u -2 -b -p -d -r1.22 -r1.23 --- cvs.php 25 Nov 2004 17:20:51 -0000 1.22 +++ cvs.php 6 Dec 2004 19:50:04 -0000 1.23 @@ -308,8 +308,15 @@ extends WikiDB_backend /** + * See ADODB for a better delete_page(), which can be undone and is seen in RecentChanges. + */ + function delete_page($pagename) { + $this->purge_page($pagename); + } + + /** * This returns false if page was not deleted or could not be deleted * else return true. */ - function delete_page($pagename) + function purge_page($pagename) { $this->_cvsDebug( "delete_page [$pagename]") ; Index: dbaBase.php =================================================================== RCS file: /cvsroot/phpwiki/phpwiki/lib/WikiDB/backend/dbaBase.php,v retrieving revision 1.18 retrieving revision 1.19 diff -u -2 -b -p -d -r1.18 -r1.19 --- dbaBase.php 29 Nov 2004 17:44:52 -0000 1.18 +++ dbaBase.php 6 Dec 2004 19:50:04 -0000 1.19 @@ -140,7 +140,14 @@ extends WikiDB_backend /** - * Delete page from the database. + * See ADODB for a better delete_page(), which can be undone and is seen in RecentChanges. */ function delete_page($pagename) { + $this->purge_page($pagename); + } + + /** + * Completely delete page from the database. + */ + function purge_page($pagename) { $pagedb = &$this->_pagedb; $versdb = &$this->_versiondb; Index: file.php =================================================================== RCS file: /cvsroot/phpwiki/phpwiki/lib/WikiDB/backend/file.php,v retrieving revision 1.21 retrieving revision 1.22 diff -u -2 -b -p -d -r1.21 -r1.22 --- file.php 25 Nov 2004 17:20:52 -0000 1.21 +++ file.php 6 Dec 2004 19:50:04 -0000 1.22 @@ -22,6 +22,4 @@ rcs_id('$Id$'); */ - - /** * Backend for handling file storage. @@ -403,4 +401,11 @@ extends WikiDB_backend /** + * See ADODB for a better delete_page(), which can be undone and is seen in RecentChanges. + */ + function delete_page($pagename) { + $this->purge_page($pagename); + } + + /** * Delete page from the database. * @@ -409,7 +414,7 @@ extends WikiDB_backend * @param $pagename string Page name. */ - function delete_page($pagename) { + function purge_page($pagename) { $ver = $this->get_latest_version($pagename); - while($ver > 0) { + while ($ver > 0) { $this->_removePage('ver_data', $pagename, $ver); $ver = $this->get_previous_version($pagename, $ver); @@ -731,4 +736,12 @@ class WikiDB_backend_file_iter extends W // $Log$ +// Revision 1.22 2004/12/06 19:50:04 rurban +// enable action=remove which is undoable and seeable in RecentChanges: ADODB ony for now. +// renamed delete_page to purge_page. +// enable action=edit&version=-1 to force creation of a new version. +// added BABYCART_PATH config +// fixed magiqc in adodb.inc.php +// and some more docs +// // Revision 1.21 2004/11/25 17:20:52 rurban // and again a couple of more native db args: backlinks |