From: Reini U. <ru...@us...> - 2007-01-02 13:20:06
|
Update of /cvsroot/phpwiki/phpwiki/lib In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28475/lib Modified Files: WikiDB.php Log Message: rewrote listRelations. added linkSearch. force new date in renamePage. fix fortune error handling. added page->setAttributes. use translated initial owner. Clarify API: sortby,limit and exclude are strings. Enhance documentation. Index: WikiDB.php =================================================================== RCS file: /cvsroot/phpwiki/phpwiki/lib/WikiDB.php,v retrieving revision 1.145 retrieving revision 1.146 diff -u -2 -b -p -d -r1.145 -r1.146 --- WikiDB.php 22 Dec 2006 17:59:55 -0000 1.145 +++ WikiDB.php 2 Jan 2007 13:20:00 -0000 1.146 @@ -10,5 +10,5 @@ require_once('lib/PageType.php'); * @package WikiDB * @author Geoffrey T. Dairiki <da...@da...> - * Reini Urban + * Minor enhancements by Reini Urban */ @@ -189,7 +189,5 @@ class WikiDB { * * @access public - * * @param string $pagename string Which page to check. - * * @return boolean True if the page actually exists with * non-default contents in the WikiDataBase. @@ -209,6 +207,6 @@ class WikiDB { * * @access public - * * @param string $pagename Name of page to delete. + * @see purgePage */ function deletePage($pagename) { @@ -238,4 +236,7 @@ class WikiDB { /** * Completely remove the page from the WikiDB, without undo possibility. + * @access public + * @param string $pagename Name of page to delete. + * @see deletePage */ function purgePage($pagename) { @@ -252,14 +253,18 @@ class WikiDB { * @access public * - * @param boolean $include_defaulted Normally pages whose most + * @param boolean $include_empty Optional. Normally pages whose most * recent revision has empty content are considered to be * non-existant. Unless $include_defaulted is set to true, those * pages will not be returned. + * @param string or false $sortby Optional. "+-column,+-column2". + * If false the result is faster in natural order. + * @param string or false $limit Optional. Encoded as "$offset,$count". + * $offset defaults to 0. + * @param string $exclude: Optional comma-seperated list of pagenames. * * @return WikiDB_PageIterator A WikiDB_PageIterator which contains all pages * in the WikiDB which have non-default contents. */ - function getAllPages($include_empty=false, $sortby=false, $limit=false, - $exclude=false) + function getAllPages($include_empty=false, $sortby='', $limit='', $exclude='') { // HACK: memory_limit=8M will fail on too large pagesets. old php on unix only! @@ -281,6 +286,11 @@ class WikiDB { /** - * $include_empty = true: include also empty pages - * exclude: comma-seperated list pagenames: TBD: array of pagenames + * @access public + * + * @param boolean $include_empty If true include also empty pages + * @param string $exclude: comma-seperated list of pagenames. + * TBD: array of pagenames + * @return integer + * */ function numPages($include_empty=false, $exclude='') { @@ -306,12 +316,15 @@ class WikiDB { * practical to do so. * - * FIXME: clarify $search syntax. provide glob=>TextSearchQuery converters - * * @access public * @param TextSearchQuery $search A TextSearchQuery object + * @param string or false $sortby Optional. "+-column,+-column2". + * If false the result is faster in natural order. + * @param string or false $limit Optional. Encoded as "$offset,$count". + * $offset defaults to 0. + * @param string $exclude: Optional comma-seperated list of pagenames. * @return WikiDB_PageIterator A WikiDB_PageIterator containing the matching pages. * @see TextSearchQuery */ - function titleSearch($search, $sortby='pagename', $limit=false, $exclude=false) { + function titleSearch($search, $sortby='pagename', $limit='', $exclude='') { $result = $this->_backend->text_search($search, false, $sortby, $limit, $exclude); return new WikiDB_PageIterator($this, $result, @@ -333,8 +346,13 @@ class WikiDB { * * @param TextSearchQuery $search A TextSearchQuery object. + * @param string or false $sortby Optional. "+-column,+-column2". + * If false the result is faster in natural order. + * @param string or false $limit Optional. Encoded as "$offset,$count". + * $offset defaults to 0. + * @param string $exclude: Optional comma-seperated list of pagenames. * @return WikiDB_PageIterator A WikiDB_PageIterator containing the matching pages. * @see TextSearchQuery */ - function fullSearch($search, $sortby='pagename', $limit=false, $exclude=false) { + function fullSearch($search, $sortby='pagename', $limit='', $exclude='') { $result = $this->_backend->text_search($search, true, $sortby, $limit, $exclude); return new WikiDB_PageIterator($this, $result, @@ -355,4 +373,6 @@ class WikiDB { * Set $limit to zero to return all pages. If $limit < 0, pages will * be sorted in decreasing order of popularity. + * @param string or false $sortby Optional. "+-column,+-column2". + * If false the result is faster in natural order. * * @return WikiDB_PageIterator A WikiDB_PageIterator containing the matching @@ -377,5 +397,6 @@ class WikiDB { * <dd> (integer) At most this many revisions will be returned. * <dt> since - * <dd> (integer) Only revisions since this time (unix-timestamp) will be returned. + * <dd> (integer) Only revisions since this time (unix-timestamp) + * will be returned. * <dt> include_minor_revisions * <dd> (boolean) Also include minor revisions. (Default is not to.) @@ -389,6 +410,6 @@ class WikiDB { * </dl> * - * @return WikiDB_PageRevisionIterator A WikiDB_PageRevisionIterator containing the - * matching revisions. + * @return WikiDB_PageRevisionIterator A WikiDB_PageRevisionIterator + * containing the matching revisions. */ function mostRecent($params = false) { @@ -400,7 +421,12 @@ class WikiDB { * @access public * - * @return Iterator A generic iterator containing rows of (duplicate) pagename, wantedfrom. + * @param string or false $sortby Optional. "+-column,+-column2". + * If false the result is faster in natural order. + * @param string or false $limit Optional. Encoded as "$offset,$count". + * $offset defaults to 0. + * @return Iterator A generic iterator containing rows of + * (duplicate) pagename, wantedfrom. */ - function wantedPages($exclude_from='', $exclude='', $sortby=false, $limit=false) { + function wantedPages($exclude_from='', $exclude='', $sortby='', $limit='') { return $this->_backend->wanted_pages($exclude_from, $exclude, $sortby, $limit); //return new WikiDB_PageIterator($this, $result); @@ -408,16 +434,52 @@ class WikiDB { /** + * Generic interface to the link table. Esp. useful to search for rdf triples as in + * SemanticSearch and ListRelations. + * * @access public * - * @return array of pagename => linkrelation or just all related pages + * @param $pages object A TextSearchQuery object. + * @param $search object A TextSearchQuery object. + * @param string $linktype One of "linkto", "linkfrom", "relation", "attribute". + * linktype parameter: + * <dl> + * <dt> "linkto" + * <dd> search for simple out-links + * <dt> "linkfrom" + * <dd> in-links, i.e BackLinks + * <dt> "relation" + * <dd> the first part in a <>::<> link + * <dt> "attribute" + * <dd> the first part in a <>:=<> link + * </dl> + * @param $relation object An optional TextSearchQuery to match the + * relation name. Ignored on simple in-out links. + * + * @return Iterator A generic iterator containing links to pages or values. + * hash of "pagename", "linkname", "linkvalue. */ - function listRelations($sortby=false, $limit=false, $exclude=false) { + function linkSearch($pages, $search, $linktype, $relation=false) { + return $this->_backend->link_search($pages, $search, $linktype, $relation); + } + + /** + * Return a simple list of all defined relations (and attributes), mainly + * for the SemanticSearch autocompletion. + * + * @access public + * + * @return array of strings + */ + function listRelations($also_attributes=false, $only_attributes=false, $sorted=true) { if (method_exists($this->_backend, "list_relations")) - return $this->_backend->list_relations($sortby, $limit, $exclude); - $iter = $this->getAllPages(false, false, false, $exclude); + return $this->_backend->list_relations($also_attributes, $only_attributes, $sorted); + // dumb, slow fallback. no iter, so simply define it here. + $relations = array(); + $iter = $this->getAllPages(); while ($page = $iter->next()) { $reliter = $page->getRelations(); $names = array(); while ($rel = $reliter->next()) { + // if there's no pagename it's an attribute $names[] = $rel->getName(); } @@ -426,4 +488,8 @@ class WikiDB { } $iter->free(); + if ($sorted) { + sort($relations); + reset($relations); + } return $relations; } @@ -470,4 +536,5 @@ class WikiDB { $version = $current->getVersion(); $meta['summary'] = sprintf(_("renamed from %s"), $from); + unset($meta['mtime']); // force new date $page->save($current->getPackedContent(), $version + 1, $meta); } @@ -517,4 +584,13 @@ class WikiDB { } + /** + * Roughly similar to the float in phpwiki_version(). Set by action=upgrade. + */ + function get_db_version() { + return (float) $this->get('_db_version'); + } + function set_db_version($ver) { + return $this->set('_db_version', (float)$ver); + } /** @@ -931,5 +1007,5 @@ class WikiDB_Page * @return WikiDB_PageRevision The current WikiDB_PageRevision object. */ - function getCurrentRevision ($need_content = true) { + function getCurrentRevision ($need_content=true) { $backend = &$this->_wikidb->_backend; $cache = &$this->_wikidb->_cache; @@ -1041,6 +1117,6 @@ class WikiDB_Page * all matching pages. */ - function getLinks ($reversed = true, $include_empty=false, $sortby=false, - $limit=false, $exclude=false, $want_relations=false) + function getLinks ($reversed=true, $include_empty=false, $sortby='', + $limit='', $exclude='', $want_relations=false) { $backend = &$this->_wikidb->_backend; @@ -1059,5 +1135,5 @@ class WikiDB_Page * All Links from other pages to this page. */ - function getBackLinks($include_empty=false, $sortby=false, $limit=false, $exclude=false, + function getBackLinks($include_empty=false, $sortby='', $limit='', $exclude='', $want_relations=false) { @@ -1067,5 +1143,5 @@ class WikiDB_Page * Forward Links: All Links from this page to other pages. */ - function getPageLinks($include_empty=false, $sortby=false, $limit=false, $exclude=false, + function getPageLinks($include_empty=false, $sortby='', $limit='', $exclude='', $want_relations=false) { @@ -1074,7 +1150,7 @@ class WikiDB_Page /** * Relations: All links from this page to other pages with relation <> 0. - * Like isa:=page + * is_a:=page or population:=number */ - function getRelations($sortby=false, $limit=false, $exclude=false) { + function getRelations($sortby='', $limit='', $exclude='') { $backend = &$this->_wikidb->_backend; $result = $backend->get_links($this->_pagename, false, true, @@ -1311,4 +1387,16 @@ class WikiDB_Page } + /* Semantic Web value, not stored in the links + * todo: unify with some unit knowledge + */ + function setAttribute($relation, $value) { + $attr = $this->get('attributes'); + if (empty($attr)) + $attr = array($relation => $value); + else + $attr[$relation] = $value; + $this->set('attributes', $attr); + } + }; @@ -1507,7 +1595,14 @@ class WikiDB_PageRevision include_once("lib/fortune.php"); $fortune = new Fortune(); - $quote = str_replace("\n<br>","\n", $fortune->quoteFromDir(FORTUNE_DIR)); - return sprintf("<verbatim>\n%s</verbatim>\n\n"._("Describe %s here."), - $quote, "[" . WikiEscape($this->_pagename) . "]"); + $quote = $fortune->quoteFromDir(FORTUNE_DIR); + if ($quote != -1) + $quote = "<verbatim>\n" + . str_replace("\n<br>","\n", $quote) + . "</verbatim>\n\n"; + else + $quote = ""; + return $quote + . sprintf(_("Describe %s here."), + "[" . WikiEscape($this->_pagename) . "]"); } // Replace empty content with default value. @@ -1672,4 +1767,5 @@ class WikiDB_PageIterator } if (!$pagename) { + if (isset($next['linkrelation'])) return false; trigger_error('empty pagename in WikiDB_PageIterator::next()', E_USER_WARNING); var_dump($next); @@ -2089,4 +2185,7 @@ function _sql_debuglog_shutdown_function // $Log$ +// Revision 1.146 2007/01/02 13:20:00 rurban +// rewrote listRelations. added linkSearch. force new date in renamePage. fix fortune error handling. added page->setAttributes. use translated initial owner. Clarify API: sortby,limit and exclude are strings. Enhance documentation. +// // Revision 1.145 2006/12/22 17:59:55 rurban // Move mailer functions into seperate MailNotify.php |