summaryrefslogtreecommitdiff
path: root/inc/parserutils.php
diff options
context:
space:
mode:
authorChris Smith <chris@jalakai.co.uk>2007-09-30 04:27:39 +0200
committerChris Smith <chris@jalakai.co.uk>2007-09-30 04:27:39 +0200
commit66d29756d694e33b59f52ecbb2092667f20de556 (patch)
tree1406bc68e424bdc056a2acf1c6369376397bcfd9 /inc/parserutils.php
parent103c256a6f9161bec0a89e70eb600c84bcb51e50 (diff)
downloadrpg-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
Diffstat (limited to 'inc/parserutils.php')
-rw-r--r--inc/parserutils.php28
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;
}
}