From: Reini U. <ru...@us...> - 2004-11-20 17:36:07
|
Update of /cvsroot/phpwiki/phpwiki/lib In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14204 Modified Files: PageList.php WikiDB.php Log Message: improved WantedPages SQL backends PageList::sortby new 3rd arg valid_fields (override db fields) WantedPages sql pager inexact for performance reasons: assume 3 wantedfrom per page, to be correct, no getTotal() support exclude argument for get_all_pages, new _sql_set() Index: PageList.php =================================================================== RCS file: /cvsroot/phpwiki/phpwiki/lib/PageList.php,v retrieving revision 1.120 retrieving revision 1.121 diff -u -2 -b -p -d -r1.120 -r1.121 --- PageList.php 20 Nov 2004 11:28:49 -0000 1.120 +++ PageList.php 20 Nov 2004 17:35:47 -0000 1.121 @@ -743,5 +743,5 @@ class PageList { * Some columns have native DB backend methods, some not. */ - function sortby ($column, $action) { + function sortby ($column, $action, $valid_fields=false) { global $request; @@ -758,7 +758,7 @@ class PageList { foreach (explode(',', $column) as $col) { if ($action == 'check') - $result = $result && $this->sortby($col, $action); + $result = $result && $this->sortby($col, $action, $valid_fields); else - $result[] = $this->sortby($col, $action); + $result[] = $this->sortby($col, $action, $valid_fields); } // 'check' returns true/false for every col. return true if all are true. @@ -791,6 +791,7 @@ class PageList { } elseif ($action == 'db') { // Performance enhancement: use native DB sort if possible. - if (method_exists($request->_dbi->_backend, 'sortable_columns') - and (in_array($column, $request->_dbi->_backend->sortable_columns()))) { + if (($valid_fields and in_array($column, $valid_fields)) + or (method_exists($request->_dbi->_backend, 'sortable_columns') + and (in_array($column, $request->_dbi->_backend->sortable_columns())))) { // omit this sort method from the _sortPages call at rendering // asc or desc: +pagename, -pagename @@ -805,4 +806,5 @@ class PageList { // echo implode(":",explodeList("Test*",array("xx","Test1","Test2"))); function explodePageList($input, $include_empty = false, $sortby=false, $limit=false) { + //TODO: need an SQL optimization here // expand wildcards from list of all pages if (preg_match('/[\?\*]/',$input)) { @@ -1432,4 +1434,11 @@ extends PageList { // $Log$ +// Revision 1.121 2004/11/20 17:35:47 rurban +// improved WantedPages SQL backends +// PageList::sortby new 3rd arg valid_fields (override db fields) +// WantedPages sql pager inexact for performance reasons: +// assume 3 wantedfrom per page, to be correct, no getTotal() +// support exclude argument for get_all_pages, new _sql_set() +// // Revision 1.120 2004/11/20 11:28:49 rurban // fix a yet unused PageList customPageListColumns bug (merge class not decl to _types) Index: WikiDB.php =================================================================== RCS file: /cvsroot/phpwiki/phpwiki/lib/WikiDB.php,v retrieving revision 1.105 retrieving revision 1.106 diff -u -2 -b -p -d -r1.105 -r1.106 --- WikiDB.php 20 Nov 2004 09:16:27 -0000 1.105 +++ WikiDB.php 20 Nov 2004 17:35:56 -0000 1.106 @@ -282,6 +282,7 @@ class WikiDB { * in the WikiDB which have non-default contents. */ - function getAllPages($include_empty=false, $sortby=false, $limit=false) { + function getAllPages($include_empty=false, $sortby=false, $limit=false, $exclude=false) { // HACK: memory_limit=8M will fail on too large pagesets. old php on unix only! + if (USECACHE) { $mem = ini_get("memory_limit"); if ($mem and !$limit and !isWindows() and !check_php_version(4,3)) { @@ -290,6 +291,8 @@ class WikiDB { $GLOBALS['request']->setArg('paging','auto'); } - $result = $this->_backend->get_all_pages($include_empty, $sortby, $limit); + } + $result = $this->_backend->get_all_pages($include_empty, $sortby, $limit, $exclude); return new WikiDB_PageIterator($this, $result, array('include_empty' => $include_empty, + 'exclude' => $exclude, 'limit' => $limit)); } @@ -305,5 +308,5 @@ class WikiDB { else { // FIXME: exclude ignored. - $iter = $this->getAllPages($filter); + $iter = $this->getAllPages($filter, false, false, $exclude); $count = $iter->count(); $iter->free(); @@ -407,4 +410,15 @@ class WikiDB { /** + * @access public + * + * @return Iterator A generic iterator containing rows of (duplicate) pagename, wantedfrom. + */ + function wantedPages($exclude_from='', $exclude='', $sortby=false, $limit=false) { + return $this->_backend->wanted_pages($exclude_from, $exclude, $sortby, $limit); + //return new WikiDB_PageIterator($this, $result); + } + + + /** * Call the appropriate backend method. * @@ -2077,4 +2091,11 @@ function _sql_debuglog_shutdown_function // $Log$ +// Revision 1.106 2004/11/20 17:35:56 rurban +// improved WantedPages SQL backends +// PageList::sortby new 3rd arg valid_fields (override db fields) +// WantedPages sql pager inexact for performance reasons: +// assume 3 wantedfrom per page, to be correct, no getTotal() +// support exclude argument for get_all_pages, new _sql_set() +// // Revision 1.105 2004/11/20 09:16:27 rurban // Fix bad-style Cut&Paste programming errors, detected by Charles Corrigan. |