diff options
author | Chris Smith <chris@jalakai.co.uk> | 2007-09-30 04:27:39 +0200 |
---|---|---|
committer | Chris Smith <chris@jalakai.co.uk> | 2007-09-30 04:27:39 +0200 |
commit | 66d29756d694e33b59f52ecbb2092667f20de556 (patch) | |
tree | 1406bc68e424bdc056a2acf1c6369376397bcfd9 | |
parent | 103c256a6f9161bec0a89e70eb600c84bcb51e50 (diff) | |
download | rpg-66d29756d694e33b59f52ecbb2092667f20de556.tar.gz rpg-66d29756d694e33b59f52ecbb2092667f20de556.tar.bz2 |
fixes for p_get_metadata() & p_set_metadata (incl. resolution of FS#1254)
- add page existence check to prevent attempts to render metadata for non-existent pages (FS#1254)
- add key & subkey existence checks to avoid PHP warnings
darcs-hash:20070930022739-d26fc-e3688478e7c4d7be9080220c7f470d41c34d2cd7.gz
-rw-r--r-- | inc/parserutils.php | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/inc/parserutils.php b/inc/parserutils.php index ceaef2f65..66cf71b2b 100644 --- a/inc/parserutils.php +++ b/inc/parserutils.php @@ -233,8 +233,8 @@ function p_get_metadata($id, $key=false, $render=false){ $cache = ($ID == $id); $meta = p_read_metadata($id, $cache); - // metadata has never been rendered before - do it! - if ($render && !$meta['current']['description']['abstract']){ + // metadata has never been rendered before - do it! (but not for non-existent pages) + if ($render && !$meta['current']['description']['abstract'] && page_exists($id)){ $meta = p_render_metadata($id, $meta); io_saveFile(metaFN($id, '.meta'), serialize($meta)); @@ -246,9 +246,13 @@ function p_get_metadata($id, $key=false, $render=false){ // filter by $key if ($key){ list($key, $subkey) = explode(' ', $key, 2); - if (trim($subkey)) return $meta['current'][$key][$subkey]; + $subkey = trim($subkey); - return $meta['current'][$key]; + if ($subkey) { + return isset($meta['current'][$key][$subkey]) ? $meta['current'][$key][$subkey] : null; + } + + return isset($meta['current'][$key]) ? $meta['current'][$key] : null; } return $meta['current']; @@ -279,24 +283,20 @@ function p_set_metadata($id, $data, $render=false, $persistent=true){ if ($key == 'relation'){ foreach ($value as $subkey => $subvalue){ - $meta['current'][$key][$subkey] = array_merge($meta['current'][$key][$subkey], $subvalue); + $meta['current'][$key][$subkey] = !empty($meta['current'][$key][$subkey]) ? array_merge($meta['current'][$key][$subkey], $subvalue) : $subvalue; if ($persistent) - $meta['persistent'][$key][$subkey] = array_merge($meta['persistent'][$key][$subkey], $subvalue); + $meta['persistent'][$key][$subkey] = !empty($meta['persistent'][$key][$subkey]) ? array_merge($meta['persistent'][$key][$subkey], $subvalue) : $subvalue; } // be careful with some senisitive arrays of $meta } elseif (in_array($key, $protected)){ - if (is_array($value)){ - #FIXME not sure if this is the intended thing: - if(!empty($meta['current'][$key]) && !is_array($meta['current'][$key])) - $meta['current'][$key] = array($meta['current'][$key]); - $meta['current'][$key] = array_merge($meta['current'][$key], $value); + // these keys, must have subkeys - a legitimate value must be an array + if (is_array($value)) { + $meta['current'][$key] = !empty($meta['current'][$key]) ? array_merge($meta['current'][$key],$value) : $value; if ($persistent) { - if(!empty($meta['persistent'][$key]) && !is_array($meta['persistent'][$key])) - $meta['persistent'][$key] = array($meta['persistent'][$key]); - $meta['persistent'][$key] = array_merge($meta['persistent'][$key], $value); + $meta['persistent'][$key] = !empty($meta['persistent'][$key]) ? array_merge($meta['persistent'][$key],$value) : $value; } } |