summaryrefslogtreecommitdiff
path: root/inc
diff options
context:
space:
mode:
authorMichael Klier <chi@chimeric.de>2008-03-26 21:02:31 +0100
committerMichael Klier <chi@chimeric.de>2008-03-26 21:02:31 +0100
commit3d1f9ec3674462e63f4195dd834603148a7c7b42 (patch)
treee0a310e687ce3595adb45658c15b472fd99ab8fb /inc
parent6a5b38cd97b00e27beaae7e3158f868dfcde4193 (diff)
downloadrpg-3d1f9ec3674462e63f4195dd834603148a7c7b42.tar.gz
rpg-3d1f9ec3674462e63f4195dd834603148a7c7b42.tar.bz2
purge non-persistent meta data on page deletion
With this patch applied the persistent meta data of pages is kept when a page is deleted. This way the original page creator as well as the creation time of the page is preserved. darcs-hash:20080326200231-23886-ddb70151fadf25d0254d56408b71484047198096.gz
Diffstat (limited to 'inc')
-rw-r--r--inc/changelog.php10
-rw-r--r--inc/common.php7
-rw-r--r--inc/parserutils.php19
3 files changed, 32 insertions, 4 deletions
diff --git a/inc/changelog.php b/inc/changelog.php
index 1d61e36df..def785f43 100644
--- a/inc/changelog.php
+++ b/inc/changelog.php
@@ -71,10 +71,16 @@ function addLogEntry($date, $id, $type=DOKU_CHANGE_TYPE_EDIT, $summary='', $extr
// update metadata
if (!$wasRemoved) {
- $meta = array();
- if (!$INFO['exists']){ // newly created
+ $oldmeta = p_read_metadata($id);
+ $meta = array();
+ if (!$INFO['exists'] && empty($oldmeta['persistent']['date']['created'])){ // newly created
$meta['date']['created'] = $created;
if ($user) $meta['creator'] = $INFO['userinfo']['name'];
+ } elseif (!$INFO['exists'] && !empty($oldmeta['persistent']['date']['created'])) { // re-created / restored
+ $meta['date']['created'] = $oldmeta['persistent']['date']['created'];
+ $meta['date']['modified'] = $created; // use the files ctime here
+ $meta['creator'] = $oldmeta['persistent']['creator'];
+ if ($user) $meta['contributor'][$user] = $INFO['userinfo']['name'];
} elseif (!$minor) { // non-minor modification
$meta['date']['modified'] = $date;
if ($user) $meta['contributor'][$user] = $INFO['userinfo']['name'];
diff --git a/inc/common.php b/inc/common.php
index f86d8e2fb..885fb85d4 100644
--- a/inc/common.php
+++ b/inc/common.php
@@ -842,10 +842,13 @@ function saveWikiText($id,$text,$summary,$minor=false){
// remove old meta info...
$mfiles = metaFiles($id);
$changelog = metaFN($id, '.changes');
+ $metadata = metaFN($id, '.meta');
foreach ($mfiles as $mfile) {
- // but keep per-page changelog to preserve page history
- if (@file_exists($mfile) && $mfile!==$changelog) { @unlink($mfile); }
+ // but keep per-page changelog to preserve page history and keep meta data
+ if (@file_exists($mfile) && $mfile!==$changelog && $mfile!==$metadata) { @unlink($mfile); }
}
+ // purge meta data
+ p_purge_metadata($id);
$del = true;
// autoset summary on deletion
if(empty($summary)) $summary = $lang['deleted'];
diff --git a/inc/parserutils.php b/inc/parserutils.php
index d03ad8d1e..2c4da90f9 100644
--- a/inc/parserutils.php
+++ b/inc/parserutils.php
@@ -323,6 +323,25 @@ function p_set_metadata($id, $data, $render=false, $persistent=true){
}
/**
+ * Purges the non-persistant part of the meta data
+ * used on page deletion
+ *
+ * @author Michael Klier <chi@chimeric.de>
+ */
+function p_purge_metadata($id) {
+ $metafn = metaFN('id', '.meta');
+ $meta = p_read_metadata($id);
+ foreach($meta['current'] as $key => $value) {
+ if(is_array($meta[$key])) {
+ $meta['current'][$key] = array();
+ } else {
+ $meta['current'][$key] = '';
+ }
+ }
+ return io_saveFile(metaFN($id, '.meta'), serialize($meta));
+}
+
+/**
* read the metadata from source/cache for $id
* (internal use only - called by p_get_metadata & p_set_metadata)
*