diff options
-rw-r--r-- | inc/changelog.php | 10 | ||||
-rw-r--r-- | inc/common.php | 7 | ||||
-rw-r--r-- | inc/parserutils.php | 19 |
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) * |