2 rcs_id('$Id: EditMetaData.php,v 1.3 2002-11-15 00:32:01 carstenklapp Exp $');
6 * This plugin shows the current page-level metadata and gives
7 * an entry box for adding a new field or changing an existing
8 * one. (A field can be deleted by specifying a blank value.)
9 * Certain fields, such as 'hits' cannot be changed.
11 * If there is a reason to do so, I will add support for revision-
12 * level metadata as well.
14 * Access by restricted to ADMIN_USER
16 * Written by MichaelVanDam, to test out some ideas about
17 * PagePermissions and PageTypes.
18 * Array support added by ReiniUrban.
22 class WikiPlugin_EditMetaData
26 return _("EditMetaData");
29 function getDescription () {
30 return sprintf(_("Edit metadata for %s"),'[pagename]');
35 // page - page whose metadata is editted
38 function getDefaultArguments() {
39 return array('page' => '[pagename]'
44 function run($dbi, $argstr, $request) {
45 $this->_args = $this->getArgs($argstr, $request);
46 extract($this->_args);
50 $hidden_pagemeta = array ();
51 $readonly_pagemeta = array ('hits');
52 $dbi = $request->getDbh();
53 $p = $dbi->getPage($page);
54 $pagemeta = $p->getMetaData();
56 // Look at arguments to see if submit was entered. If so,
57 // process this request before displaying.
58 // Fixme: The redirect will only work if the output is buffered.
60 if ($request->getArg('metaedit')) {
62 $metafield = trim($request->getArg('metafield'));
63 $metavalue = trim($request->getArg('metavalue'));
65 if (!in_array($metafield, $readonly_pagemeta)) {
66 if (preg_match('/^(.*?)\[(.*?)\]$/',$metafield,$matches)) {
67 list(,$array_field,$array_key) = $matches;
68 $array_value = $pagemeta[$array_field];
69 $array_value[$array_key] = $metavalue;
70 $p->set($array_field, $array_value);
72 $p->set($metafield, $metavalue);
76 $url = $request->getURLtoSelf('', array('metaedit', 'metafield', 'metavalue'));
77 $request->redirect($url);
79 // The rest of the output will not be seen due to
84 // Now we show the meta data and provide entry box for new data.
88 $html->pushContent(fmt(_("Existing page-level metadata for %s:"), $page));
91 foreach ($pagemeta as $key => $val) {
92 if (is_string($val) and (substr($val,0,2) == 'a:')) {
93 $dl->pushContent(HTML::dt("\n$key => $val\n", $dl1 = HTML::dl()));
94 foreach (unserialize($val) as $akey => $aval) {
95 $dl1->pushContent(HTML::dt(HTML::strong("$key" .'['.$akey."] => $aval\n")));
97 $dl->pushContent($dl1);
98 } elseif (is_array($val)) {
99 $dl->pushContent(HTML::dt("\n$key:\n", $dl1 = HTML::dl()));
100 foreach ($val as $akey => $aval) {
101 $dl1->pushContent(HTML::dt(HTML::strong("$key" .'['.$akey."] => $aval\n")));
103 $dl->pushContent($dl1);
104 } elseif (in_array($key,$hidden_pagemeta)) {
106 } elseif (in_array($key,$readonly_pagemeta)) {
107 $dl->pushContent(HTML::dt(array('style'=>'background: #dddddd'),"$key => $val\n"));
109 $dl->pushContent(HTML::dt(HTML::strong("$key => $val\n")));
112 $html->pushContent($dl);
114 if ($request->_user->isAdmin()) {
115 $action = $request->getURLtoSelf();
116 $hiddenfield = HiddenInputs($request->getArgs());
117 $instructions = _("Add or change a page-level metadata 'key=>value' pair. Note that you can remove a key by leaving value-box empty.");
118 $keyfield = HTML::input(array('name' => 'metafield'), '');
119 $valfield = HTML::input(array('name' => 'metavalue'), '');
120 $button = Button('submit:metaedit', _("Submit"), false);
121 $form = HTML::form(array('action' => $action,
124 $instructions, HTML::br(),
125 $keyfield, ' => ', $valfield, HTML::raw(' '), $button
128 $html->pushContent(HTML::br(),$form);
130 $html->pushContent(HTML::em(_("Requires WikiAdmin privileges to edit.")));
141 // c-hanging-comment-ender-p: nil
142 // indent-tabs-mode: nil