diff --git a/lib/enko/dokuwiki/objectrepresentation/DokuWikiChangeset.php b/lib/enko/dokuwiki/objectrepresentation/DokuWikiChangeset.php index 97b10bc..67451a4 100755 --- a/lib/enko/dokuwiki/objectrepresentation/DokuWikiChangeset.php +++ b/lib/enko/dokuwiki/objectrepresentation/DokuWikiChangeset.php @@ -18,6 +18,7 @@ class DokuWikiChangeset { private $sum; private $extra; private $content; + private $page; /** * @return mixed @@ -75,6 +76,10 @@ class DokuWikiChangeset { return $this->type; } + public function getPage() { + return $this->page; + } + /** * @return mixed */ @@ -83,7 +88,7 @@ class DokuWikiChangeset { return $this->user; } - function __construct($date,$extra, $id, $ip, $sum, $type, $user) + function __construct($date,$extra, $id, $ip, $sum, $type, $user, DokuWikiPage $page) { $this->date = new \DateTime(); $this->date->setTimestamp($date); @@ -94,6 +99,7 @@ class DokuWikiChangeset { $this->type = $type; $this->user = $user; $this->content = rawWiki($id,$this->date->format('U')); + $this->page = $page; } diff --git a/lib/enko/dokuwiki/objectrepresentation/DokuWikiIterator.php b/lib/enko/dokuwiki/objectrepresentation/DokuWikiIterator.php index e938875..0c3b983 100755 --- a/lib/enko/dokuwiki/objectrepresentation/DokuWikiIterator.php +++ b/lib/enko/dokuwiki/objectrepresentation/DokuWikiIterator.php @@ -55,12 +55,12 @@ class DokuWikiIterator /** * */ - public function __construct() + public function __construct($loadChangesets = false, \DateTime $maxChangeSetAge = null) { global $conf; $basedir = $conf['datadir']; - $this->root = new DokuWikiNameSpace($basedir); + $this->root = new DokuWikiNameSpace($basedir, null, $loadChangesets, $maxChangeSetAge); } /** diff --git a/lib/enko/dokuwiki/objectrepresentation/DokuWikiNameSpace.php b/lib/enko/dokuwiki/objectrepresentation/DokuWikiNameSpace.php index cee50bc..f57d030 100755 --- a/lib/enko/dokuwiki/objectrepresentation/DokuWikiNameSpace.php +++ b/lib/enko/dokuwiki/objectrepresentation/DokuWikiNameSpace.php @@ -19,9 +19,9 @@ class DokuWikiNameSpace extends DokuWikiNode * @param $path * @param null $parent */ - function __construct($path, $parent = null) + function __construct($path, $parent = null,$loadChangesets = false, \DateTime $maxChangeSetAge = null) { - parent::__construct($path, $parent); + parent::__construct($path, $parent, $loadChangesets, $maxChangeSetAge); $files = dir($path); $this->nodes = new \ArrayObject(); @@ -31,10 +31,10 @@ class DokuWikiNameSpace extends DokuWikiNode $file = $path . DIRECTORY_SEPARATOR . $realfile; if (is_dir($file)) { if (!(($realfile == '.') or ($realfile == '..'))) { - $node = new DokuWikiNameSpace($file, $this); + $node = new DokuWikiNameSpace($file, $this, $loadChangesets, $maxChangeSetAge); } } else { - $node = new DokuWikiPage($file, $this); + $node = new DokuWikiPage($file, $this, $loadChangesets, $maxChangeSetAge); } if ($node) { $this->nodes->append($node); diff --git a/lib/enko/dokuwiki/objectrepresentation/DokuWikiNode.php b/lib/enko/dokuwiki/objectrepresentation/DokuWikiNode.php index 866e27a..b49bce2 100755 --- a/lib/enko/dokuwiki/objectrepresentation/DokuWikiNode.php +++ b/lib/enko/dokuwiki/objectrepresentation/DokuWikiNode.php @@ -32,6 +32,12 @@ abstract class DokuWikiNode /** @var DokuWikiNameSpace */ protected $parent = null; + /** @var bool */ + protected $loadChangesets = false; + + /** @var \DateTime */ + protected $maxChangeSetAge = null; + /** * @return string @@ -77,15 +83,24 @@ abstract class DokuWikiNode return $this->name; } + /** + * @return DokuWikiNameSpace + */ + public function getParent() { + return $this->parent; + } + /** * @param $filename * @param null $parent */ - function __construct($filename, $parent = null) + function __construct($filename, $parent = null, $loadChangesets = false, \DateTime $maxChangeSetAge = null) { $this->filename = $filename; $this->parent = $parent; $this->metadata = new \ArrayObject(); + $this->loadChangesets = $loadChangesets; + $this->maxChangeSetAge = $maxChangeSetAge; if (is_null($parent) && is_dir($filename)) { $this->name = 'root'; } else { diff --git a/lib/enko/dokuwiki/objectrepresentation/DokuWikiPage.php b/lib/enko/dokuwiki/objectrepresentation/DokuWikiPage.php index fdffa68..eacc13a 100755 --- a/lib/enko/dokuwiki/objectrepresentation/DokuWikiPage.php +++ b/lib/enko/dokuwiki/objectrepresentation/DokuWikiPage.php @@ -17,9 +17,9 @@ class DokuWikiPage extends DokuWikiNode * @param $filename * @param null $parent */ - public function __construct($filename, $parent = null) + public function __construct($filename, $parent = null,$loadChangesets = false, \DateTime $maxChangeSetAge = null) { - parent::__construct($filename, $parent); + parent::__construct($filename, $parent,$loadChangesets,$maxChangeSetAge); $this->content = file_get_contents($this->filename); if (($this->name == 'start') && ($this->parent->name != 'root')) { $this->parent->content = $this->content; @@ -28,17 +28,33 @@ class DokuWikiPage extends DokuWikiNode foreach ($metadata as $key => $value) { $this->setMetaData($key, $value); } - // extract changelog $this->ChangeLog = new \ArrayObject(); - $file = metaFN($this->getFullID(), '.changes'); - if (file_exists($file)) { - $changelog_entries = explode("\n", file_get_contents($file)); - foreach ($changelog_entries as $raw_entry) { - $entry = parseChangelogLine($raw_entry); - $changelog = new DokuWikiChangeset($entry['date'], $entry['extra'], $entry['id'], $entry['ip'], $entry['sum'], $entry['type'], $entry['user']); - $this->ChangeLog->append($changelog); + if ($this->loadChangesets) { + // extract changelog + $file = metaFN($this->getFullID(), '.changes'); + if (file_exists($file)) { + $changelog_entries = explode("\n", file_get_contents($file)); + foreach ($changelog_entries as $raw_entry) { + $entry = parseChangelogLine($raw_entry); + if ((!is_null($this->maxChangeSetAge)) && ($this->maxChangeSetAge->format('U') > $entry['date'])) + continue; + $changelog = new DokuWikiChangeset($entry['date'], $entry['extra'], $entry['id'], $entry['ip'], $entry['sum'], $entry['type'], $entry['user'],$this); + $this->ChangeLog->append($changelog); + } + } + if ($this->ChangeLog->count() > 0) { + $this->ChangeLog->uasort(function(DokuWikiChangeset $a, DokuWikiChangeset $b){ + if ($a->getDate() == $b->getDate()) { + return 0; + } + return ($a->getDate() > $b->getDate()) ? -1 : 1; + }); } } } + + public function getTitle() { + return strlen($this->getMetaData('title')) > 0 ? $this->getMetaData('title') : $this->getName(); + } } \ No newline at end of file