From: Reini U. <ru...@us...> - 2007-05-15 16:32:32
|
Update of /cvsroot/phpwiki/phpwiki/lib/plugin In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4588/lib/plugin Modified Files: EditMetaData.php Log Message: Recursive array editing: support global_data Index: EditMetaData.php =================================================================== RCS file: /cvsroot/phpwiki/phpwiki/lib/plugin/EditMetaData.php,v retrieving revision 1.12 retrieving revision 1.13 diff -u -2 -b -p -d -r1.12 -r1.13 --- EditMetaData.php 4 Jan 2007 16:46:31 -0000 1.12 +++ EditMetaData.php 15 May 2007 16:32:25 -0000 1.13 @@ -2,5 +2,5 @@ rcs_id('$Id$'); /** - Copyright 1999, 2000, 2001, 2002 $ThePhpWikiProgrammingTeam + Copyright 1999,2000,2001,2002,2007 $ThePhpWikiProgrammingTeam This file is part of PhpWiki. @@ -37,8 +37,11 @@ rcs_id('$Id$'); * PagePermissions and PageTypes. * - * Array support added by ReiniUrban. + * Rewritten for recursive array support by ReiniUrban. */ + +require_once('lib/plugin/_BackendInfo.php'); + class WikiPlugin_EditMetaData -extends WikiPlugin +extends WikiPlugin__BackendInfo { function getName () { @@ -55,9 +58,4 @@ extends WikiPlugin } - // Arguments: - // - // page - page whose metadata is editted - - function getDefaultArguments() { return array('page' => '[pagename]' @@ -65,5 +63,4 @@ extends WikiPlugin } - function run($dbi, $argstr, &$request, $basepage) { $this->_args = $this->getArgs($argstr, $request); @@ -72,71 +69,75 @@ extends WikiPlugin return ''; - $hidden_pagemeta = array ('_cached_html'); - $readonly_pagemeta = array ('hits'); + $this->hidden_pagemeta = array ('_cached_html'); + $this->readonly_pagemeta = array ('hits', 'passwd'); $dbi = $request->getDbh(); $p = $dbi->getPage($page); $pagemeta = $p->getMetaData(); + $this->chunk_split = false; // Look at arguments to see if submit was entered. If so, // process this request before displaying. // - if ($request->isPost() and $request->_user->isAdmin() and $request->getArg('metaedit')) { + if ($request->isPost() + and $request->_user->isAdmin() + and $request->getArg('metaedit')) + { $metafield = trim($request->getArg('metafield')); $metavalue = trim($request->getArg('metavalue')); - if (!in_array($metafield, $readonly_pagemeta)) { + $meta = $request->getArg('meta'); + $changed = 0; + // meta[__global[_upgrade][name]] => 1030.13 + foreach ($meta as $key => $val) { + if ($val != $pagemeta[$key] + and !in_array($key, $this->readonly_pagemeta)) + { + $changed++; + $p->set($key, $val); + } + } + if ($metafield and !in_array($metafield, $this->readonly_pagemeta)) { + // __global[_upgrade][name] => 1030.13 if (preg_match('/^(.*?)\[(.*?)\]$/', $metafield, $matches)) { - list(,$array_field, $array_key) = $matches; + list(, $array_field, $array_key) = $matches; $array_value = $pagemeta[$array_field]; $array_value[$array_key] = $metavalue; + if ($pagemeta[$array_field] != $array_value) { + $changed++; $p->set($array_field, $array_value); - } else { + } + } elseif ($pagemeta[$metafield] != $metavalue) { + $changed++; $p->set($metafield, $metavalue); } } + if ($changed) { $dbi->touch(); $url = $request->getURLtoSelf(false, - array('metaedit','metafield','metavalue')); + array('meta','metaedit','metafield','metavalue')); $request->redirect($url); // The rest of the output will not be seen due to the // redirect. - + return; + } } // Now we show the meta data and provide entry box for new data. - $html = HTML(); - $html->pushContent(HTML::h3(fmt("Existing page-level metadata for %s:", - $page))); - $dl = HTML::dl(); - foreach ($pagemeta as $key => $val) { - if (is_string($val) and (substr($val,0,2) == 'a:')) { - $dl->pushContent(HTML::dt("\n$key => $val\n", - $dl1 = HTML::dl())); - foreach (unserialize($val) as $akey => $aval) { - $dl1->pushContent(HTML::dt(HTML::strong("$key" . '[' - . $akey - . "] => $aval\n")) - ); - } - $dl->pushContent($dl1); - } elseif (is_array($val)) { - $dl->pushContent(HTML::dt("\n$key:\n", $dl1 = HTML::dl())); - foreach ($val as $akey => $aval) { - $dl1->pushContent(HTML::dt(HTML::strong("$key" . '[' - . $akey - . "] => $aval\n")) - ); - } - $dl->pushContent($dl1); - } elseif (in_array($key,$hidden_pagemeta)) { - ; - } elseif (in_array($key,$readonly_pagemeta)) { - $dl->pushContent(HTML::dt(array('style' => 'background: #dddddd'), - "$key => $val\n")); - } else { - $dl->pushContent(HTML::dt(HTML::strong("$key => $val\n"))); + //$html->pushContent(HTML::h3(fmt("Existing page-level metadata for %s:", + // $page))); + //$dl = $this->_display_values('', $pagemeta); + //$html->pushContent($dl); + if (!$pagemeta) { + // FIXME: invalid HTML + $html->pushContent(HTML::p(fmt("No metadata for %s", $page))); + $table = HTML(); } + else { + $table = HTML::table(array('border' => 1, + 'cellpadding' => 2, + 'cellspacing' => 0)); + $this->_fixupData($pagemeta); + $table->pushContent($this->_showhash("MetaData('$page')", $pagemeta)); } - $html->pushContent($dl); if ($request->_user->isAdmin()) { @@ -151,4 +152,7 @@ extends WikiPlugin 'accept-charset' => $GLOBALS['charset']), $hiddenfield, + // edit existing fields + $table, + // add new ones $instructions, HTML::br(), $keyfield, ' => ', $valfield, @@ -162,7 +166,38 @@ extends WikiPlugin return $html; } + + function _showvalue ($key, $val, $prefix='') { + if (is_array($val) or is_object($val)) return $val; + if (in_array($key, $this->hidden_pagemeta)) return ''; + if ($prefix) { + $fullkey = $prefix . '[' . $key . ']'; + if (substr($fullkey,0,1) == '[') { + $meta = "meta".$fullkey; + $fullkey = preg_replace("/\]\[/", "[", substr($fullkey, 1), 1); + } else { + $meta = preg_replace("/^([^\[]+)\[/", "meta[$1][", $fullkey, 1); + } + } else { + $fullkey = $key; + $meta = "meta[".$key."]"; + } + //$meta = "meta[".$fullkey."]"; + $arr = array('name' => $meta, 'value' => $val); + if (strlen($val) > 20) + $arr['size'] = strlen($val); + if (in_array($key, $this->readonly_pagemeta)) { + $arr['readonly'] = 'readonly'; + return HTML::input($arr); + } else { + return HTML(HTML::em($fullkey), HTML::br(), + HTML::input($arr)); + } + } }; // $Log$ +// Revision 1.13 2007/05/15 16:32:25 rurban +// Recursive array editing: support global_data +// // Revision 1.12 2007/01/04 16:46:31 rurban // Make the header a h3 |