Add a option to load the changesets.

The default is, not to load the changesets.
This commit is contained in:
Tim Schumacher 2014-06-14 09:29:13 +02:00
parent 29ebda487a
commit 0b248d7dec
4 changed files with 29 additions and 17 deletions

View file

@ -55,12 +55,12 @@ class DokuWikiIterator
/** /**
* *
*/ */
public function __construct() public function __construct($loadChangesets = false, \DateTime $maxChangeSetAge = null)
{ {
global $conf; global $conf;
$basedir = $conf['datadir']; $basedir = $conf['datadir'];
$this->root = new DokuWikiNameSpace($basedir); $this->root = new DokuWikiNameSpace($basedir, null, $loadChangesets, $maxChangeSetAge);
} }
/** /**

View file

@ -19,9 +19,9 @@ class DokuWikiNameSpace extends DokuWikiNode
* @param $path * @param $path
* @param null $parent * @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); $files = dir($path);
$this->nodes = new \ArrayObject(); $this->nodes = new \ArrayObject();
@ -31,10 +31,10 @@ class DokuWikiNameSpace extends DokuWikiNode
$file = $path . DIRECTORY_SEPARATOR . $realfile; $file = $path . DIRECTORY_SEPARATOR . $realfile;
if (is_dir($file)) { if (is_dir($file)) {
if (!(($realfile == '.') or ($realfile == '..'))) { if (!(($realfile == '.') or ($realfile == '..'))) {
$node = new DokuWikiNameSpace($file, $this); $node = new DokuWikiNameSpace($file, $this, $loadChangesets, $maxChangeSetAge);
} }
} else { } else {
$node = new DokuWikiPage($file, $this); $node = new DokuWikiPage($file, $this, $loadChangesets, $maxChangeSetAge);
} }
if ($node) { if ($node) {
$this->nodes->append($node); $this->nodes->append($node);

View file

@ -32,6 +32,12 @@ abstract class DokuWikiNode
/** @var DokuWikiNameSpace */ /** @var DokuWikiNameSpace */
protected $parent = null; protected $parent = null;
/** @var bool */
protected $loadChangesets = false;
/** @var \DateTime */
protected $maxChangeSetAge = null;
/** /**
* @return string * @return string
@ -81,11 +87,13 @@ abstract class DokuWikiNode
* @param $filename * @param $filename
* @param null $parent * @param null $parent
*/ */
function __construct($filename, $parent = null) function __construct($filename, $parent = null, $loadChangesets = false, \DateTime $maxChangeSetAge = null)
{ {
$this->filename = $filename; $this->filename = $filename;
$this->parent = $parent; $this->parent = $parent;
$this->metadata = new \ArrayObject(); $this->metadata = new \ArrayObject();
$this->loadChangesets = $loadChangesets;
$this->maxChangeSetAge = $maxChangeSetAge;
if (is_null($parent) && is_dir($filename)) { if (is_null($parent) && is_dir($filename)) {
$this->name = 'root'; $this->name = 'root';
} else { } else {

View file

@ -17,9 +17,9 @@ class DokuWikiPage extends DokuWikiNode
* @param $filename * @param $filename
* @param null $parent * @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); $this->content = file_get_contents($this->filename);
if (($this->name == 'start') && ($this->parent->name != 'root')) { if (($this->name == 'start') && ($this->parent->name != 'root')) {
$this->parent->content = $this->content; $this->parent->content = $this->content;
@ -28,17 +28,21 @@ class DokuWikiPage extends DokuWikiNode
foreach ($metadata as $key => $value) { foreach ($metadata as $key => $value) {
$this->setMetaData($key, $value); $this->setMetaData($key, $value);
} }
// extract changelog
$this->ChangeLog = new \ArrayObject(); $this->ChangeLog = new \ArrayObject();
if ($this->loadChangesets) {
// extract changelog
$file = metaFN($this->getFullID(), '.changes'); $file = metaFN($this->getFullID(), '.changes');
if (file_exists($file)) { if (file_exists($file)) {
$changelog_entries = explode("\n", file_get_contents($file)); $changelog_entries = explode("\n", file_get_contents($file));
foreach ($changelog_entries as $raw_entry) { foreach ($changelog_entries as $raw_entry) {
$entry = parseChangelogLine($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']); $changelog = new DokuWikiChangeset($entry['date'], $entry['extra'], $entry['id'], $entry['ip'], $entry['sum'], $entry['type'], $entry['user']);
$this->ChangeLog->append($changelog); $this->ChangeLog->append($changelog);
} }
} }
}
} }
} }