2 rcs_id('$Id: EditMetaData.php,v 1.12 2007-01-04 16:46:31 rurban Exp $');
4 Copyright 1999, 2000, 2001, 2002 $ThePhpWikiProgrammingTeam
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
26 * This plugin shows the current page-level metadata and gives an
27 * entry box for adding a new field or changing an existing one. (A
28 * field can be deleted by specifying a blank value.) Certain fields,
29 * such as 'hits' cannot be changed.
31 * If there is a reason to do so, I will add support for revision-
32 * level metadata as well.
34 * Access by restricted to ADMIN_USER
36 * Written by MichaelVanDam, to test out some ideas about
37 * PagePermissions and PageTypes.
39 * Array support added by ReiniUrban.
41 class WikiPlugin_EditMetaData
45 return _("EditMetaData");
48 function getDescription () {
49 return sprintf(_("Edit metadata for %s"), '[pagename]');
52 function getVersion() {
53 return preg_replace("/[Revision: $]/", '',
54 "\$Revision: 1.12 $");
59 // page - page whose metadata is editted
62 function getDefaultArguments() {
63 return array('page' => '[pagename]'
68 function run($dbi, $argstr, &$request, $basepage) {
69 $this->_args = $this->getArgs($argstr, $request);
70 extract($this->_args);
74 $hidden_pagemeta = array ('_cached_html');
75 $readonly_pagemeta = array ('hits');
76 $dbi = $request->getDbh();
77 $p = $dbi->getPage($page);
78 $pagemeta = $p->getMetaData();
80 // Look at arguments to see if submit was entered. If so,
81 // process this request before displaying.
83 if ($request->isPost() and $request->_user->isAdmin() and $request->getArg('metaedit')) {
84 $metafield = trim($request->getArg('metafield'));
85 $metavalue = trim($request->getArg('metavalue'));
86 if (!in_array($metafield, $readonly_pagemeta)) {
87 if (preg_match('/^(.*?)\[(.*?)\]$/', $metafield, $matches)) {
88 list(,$array_field, $array_key) = $matches;
89 $array_value = $pagemeta[$array_field];
90 $array_value[$array_key] = $metavalue;
91 $p->set($array_field, $array_value);
93 $p->set($metafield, $metavalue);
97 $url = $request->getURLtoSelf(false,
98 array('metaedit','metafield','metavalue'));
99 $request->redirect($url);
100 // The rest of the output will not be seen due to the
105 // Now we show the meta data and provide entry box for new data.
108 $html->pushContent(HTML::h3(fmt("Existing page-level metadata for %s:",
111 foreach ($pagemeta as $key => $val) {
112 if (is_string($val) and (substr($val,0,2) == 'a:')) {
113 $dl->pushContent(HTML::dt("\n$key => $val\n",
115 foreach (unserialize($val) as $akey => $aval) {
116 $dl1->pushContent(HTML::dt(HTML::strong("$key" . '['
121 $dl->pushContent($dl1);
122 } elseif (is_array($val)) {
123 $dl->pushContent(HTML::dt("\n$key:\n", $dl1 = HTML::dl()));
124 foreach ($val as $akey => $aval) {
125 $dl1->pushContent(HTML::dt(HTML::strong("$key" . '['
130 $dl->pushContent($dl1);
131 } elseif (in_array($key,$hidden_pagemeta)) {
133 } elseif (in_array($key,$readonly_pagemeta)) {
134 $dl->pushContent(HTML::dt(array('style' => 'background: #dddddd'),
137 $dl->pushContent(HTML::dt(HTML::strong("$key => $val\n")));
140 $html->pushContent($dl);
142 if ($request->_user->isAdmin()) {
143 $action = $request->getPostURL();
144 $hiddenfield = HiddenInputs($request->getArgs());
145 $instructions = _("Add or change a page-level metadata 'key=>value' pair. Note that you can remove a key by leaving the value-box empty.");
146 $keyfield = HTML::input(array('name' => 'metafield'), '');
147 $valfield = HTML::input(array('name' => 'metavalue'), '');
148 $button = Button('submit:metaedit', _("Submit"), false);
149 $form = HTML::form(array('action' => $action,
151 'accept-charset' => $GLOBALS['charset']),
153 $instructions, HTML::br(),
154 $keyfield, ' => ', $valfield,
155 HTML::raw(' '), $button
158 $html->pushContent($form);
160 $html->pushContent(HTML::em(_("Requires WikiAdmin privileges to edit.")));
166 // $Log: not supported by cvs2svn $
167 // Revision 1.11 2004/06/01 16:48:11 rurban
169 // security fix to allow post admin only.
171 // Revision 1.10 2004/04/18 01:11:52 rurban
172 // more numeric pagename fixes.
173 // fixed action=upload with merge conflict warnings.
174 // charset changed from constant to global (dynamic utf-8 switching)
176 // Revision 1.9 2004/02/17 12:11:36 rurban
177 // added missing 4th basepage arg at plugin->run() to almost all plugins. This caused no harm so far, because it was silently dropped on normal usage. However on plugin internal ->run invocations it failed. (InterWikiSearch, IncludeSiteMap, ...)
179 // Revision 1.8 2003/11/27 17:05:41 carstenklapp
180 // Update: Omit page cache object ('_cached_html') from metadata display.
182 // Revision 1.7 2003/11/22 17:41:42 carstenklapp
183 // Minor internal change: Removed redundant call to gettext within
184 // fmt(). (locale make: EditMetaData.php:113: warning: keyword nested in
187 // Revision 1.6 2003/02/26 01:56:52 dairiki
188 // Tuning/fixing of POST action URLs and hidden inputs.
190 // Revision 1.5 2003/02/21 04:17:13 dairiki
191 // Delete now irrelevant comment.
193 // Revision 1.4 2003/01/18 21:41:01 carstenklapp
195 // Reformatting & tabs to spaces;
196 // Added copyleft, getVersion, getDescription, rcs_id.
204 // c-hanging-comment-ender-p: nil
205 // indent-tabs-mode: nil