2 rcs_id('$Id: SemanticRelations.php,v 1.2 2007-01-02 13:22:41 rurban Exp $');
4 Copyright 2005 Reini Urban
6 This file is part of PhpWiki.
8 PhpWiki is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
13 PhpWiki is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with PhpWiki; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 * SemanticRelations - Display the list of relations and attributes of given page(s).
25 * Relations are stored in the link table.
26 * Attributes as simple page meta-data.
28 * @author: Reini Urban
30 class WikiPlugin_SemanticRelations
34 return _("SemanticRelations");
36 function getDescription() {
37 return _("Display the list of relations and attributes");
39 function getVersion() {
40 return preg_replace("/[Revision: $]/", '',
43 function getDefaultArguments() {
45 'page' => "[pagename]", // which pages (glob allowed), default: current
46 'relations' => '', // which relations. default all
47 'attributes' => '', // which attributes. default all
53 function run ($dbi, $argstr, &$request, $basepage) {
55 $args = $this->getArgs($argstr, $request);
58 $page = $request->getArg('pagename');
60 foreach (explodePageList($page) as $pagename) {
61 $p = $dbi->getPage($pagename);
62 $links = $p->getRelations(); // iter of pagelinks
63 // TODO: merge same relations together located_in::here, located_in::there
64 while ($object = $links->next()) {
65 if ($related = $object->get('linkrelation')) { // a page name
66 $rellink = WikiLink($related, false, $related);
67 $rellink->setAttr('class', $rellink->getAttr('class').' relation');
70 // Link to a special "Relation:" InterWiki link?
72 HTML::strong(" :: "), // use spaces?
73 WikiLink($object->_pagename),
75 // Link to SemanticSearch
76 $WikiTheme->makeActionButton(array('relation' => $related,
77 's' => $object->_pagename),
83 if (!empty($relhtml->_content) and !$noheader)
84 $relhtml = HTML(HTML::hr(),
85 HTML::h3(fmt("Semantic relations for %s", $pagename)),
88 if ($attributes = $p->get('attributes')) { // a hash of unique pairs
89 foreach ($attributes as $att => $val) {
90 $rellink = WikiLink($att, false, $att);
91 $rellink->setAttr('class', $rellink->getAttr('class').' relation');
92 $searchlink = $WikiTheme->makeActionButton
93 (array('attribute' => $att,
98 $atthtml->pushContent("$pagename ");
99 $atthtml->pushContent(HTML::span($rellink,
100 HTML::strong(" := "),
106 $relhtml = HTML($relhtml,
108 HTML::h3(fmt("Attributes of %s", $pagename)),
111 $relhtml = HTML($relhtml, $atthtml);
114 if ($nohelp) return $relhtml;
115 return HTML($relhtml,
117 WikiLink(_("Help/SemanticRelations"), false,
118 HTML::em(_("Help/SemanticRelations"))),
120 HTML::em(_("Find out how to add relations and attributes to pages.")));
125 // $Log: not supported by cvs2svn $
126 // Revision 1.1 2005/11/21 20:14:20 rurban
127 // Plugin to display the list of SemanticRelations - list of relations and
128 // attributes of given page(s).
129 // Relations are stored in the link table.
130 // Attributes as simple page meta-data.
137 // c-hanging-comment-ender-p: nil
138 // indent-tabs-mode: nil