From 6afe8dca1f7bd2a9ca21fb2dca6fef12ded423e1 Mon Sep 17 00:00:00 2001
From: chris <chris@jalakai.co.uk>
Date: Wed, 4 Oct 2006 23:00:30 +0200
Subject: [PATCH] update p_get/set_metadata to use $INFO['meta']

This patch updates p_get_metadata() to utilise the in memory copy
copy of the current page's metadata ($INFO['meta']) when appropriate.

The patch also updates p_set_metadata() to synchronise any changes
to the current page's metadata with $INFO['meta'].

$INFO hash is updated with two new elements:
  'id'

darcs-hash:20061004210030-9b6ab-7eab6f933a775fe350a1fb14d1118ea77d2db919.gz
---
 inc/common.php      |  5 +++++
 inc/parserutils.php | 27 ++++++++++++++++++++-------
 2 files changed, 25 insertions(+), 7 deletions(-)

diff --git a/inc/common.php b/inc/common.php
index 88891af74..8b21c0585 100644
--- a/inc/common.php
+++ b/inc/common.php
@@ -56,6 +56,11 @@ function pageinfo(){
   global $USERINFO;
   global $conf;
 
+  // include ID & REV not redundant, as some parts of DokuWiki may temporarily change $ID, e.g. p_wiki_xhtml
+  // FIXME ... perhaps it would be better to ensure the temporary changes weren't necessary
+  $info['id'] = $ID;
+  $info['rev'] = $REV;
+
   if($_SERVER['REMOTE_USER']){
     $info['userinfo']   = $USERINFO;
     $info['perm']       = auth_quickaclcheck($ID);
diff --git a/inc/parserutils.php b/inc/parserutils.php
index 17f1811ae..468ffe5c6 100644
--- a/inc/parserutils.php
+++ b/inc/parserutils.php
@@ -222,15 +222,21 @@ function p_get_instructions($text){
  * @author Esther Brunner <esther@kaffeehaus.ch>
  */
 function p_get_metadata($id, $key=false, $render=false){
-  $file = metaFN($id, '.meta');
+  global $INFO;
 
-  if (@file_exists($file)) $meta = unserialize(io_readFile($file, false));
-  else $meta = array();
+  if ($id == $INFO['id'] && !empty($INFO['meta'])) {
+    $meta = $INFO['meta'];
+  } else {
+    $file = metaFN($id, '.meta');
+
+    if (@file_exists($file)) $meta = unserialize(io_readFile($file, false));
+    else $meta = array();
 
-  // metadata has never been rendered before - do it!
-  if ($render && !$meta['description']['abstract']){
-    $meta = p_render_metadata($id, $meta);
-    io_saveFile($file, serialize($meta));
+    // metadata has never been rendered before - do it!
+    if ($render && !$meta['description']['abstract']){
+      $meta = p_render_metadata($id, $meta);
+      io_saveFile($file, serialize($meta));
+    }
   }
 
   // filter by $key
@@ -283,6 +289,13 @@ function p_set_metadata($id, $data, $render=false){
 
   // save only if metadata changed
   if ($meta == $orig) return true;
+
+  // check if current page metadata has been altered - if so sync the changes
+  global $INFO;
+  if ($id == $INFO['id'] && isset($INFO['meta'])) {
+    $INFO['meta'] = $meta;
+  }
+
   return io_saveFile(metaFN($id, '.meta'), serialize($meta));
 }
 
-- 
GitLab