diff --git a/DokuWikiObjectRepresentation.class.php b/DokuWikiObjectRepresentation.class.php new file mode 100644 index 0000000..5f93b50 --- /dev/null +++ b/DokuWikiObjectRepresentation.class.php @@ -0,0 +1,280 @@ +content; + } + + /** + * @param string $content + * @return $this + */ + public function setContent($content = '') { + $this->content = $content; + return $this; + } + + /** + * @param $key + * @param $value + */ + public function setMetaData($key,$value) { + $this->metadata[$key] = $value; + } + + /** + * @param $key + * @return mixed + */ + public function getMetaData($key) { + return $this->metadata[$key]; + } + + /** + * @return mixed + */ + public function getName() { + return $this->name; + } + + /** + * @param $filename + * @param null $parent + */ + function __construct ($filename, $parent = null) { + $this->filename = $filename; + $this->parent = $parent; + $this->metadata = new ArrayObject(); + if (is_null ($parent) && is_dir ($filename)) { + $this->name = 'root'; + } else { + $parts = pathinfo($filename); + if (is_dir($filename)) { + $this->name = $parts['basename']; + } else { + $this->name = $parts['filename']; + } + } + } + + /** + * @return String + */ + public function getFilename () { + return $this->filename; + } + + /** + * @return string + */ + public function toString () { + return $this->name; + } + + /** + * @return string + */ + public function getFullID() { + $path = array(); + $node = $this; + while ($parent = $node->parent) { + if ($parent->name != 'root') { + $path[] = $parent->name; + } + $node = $parent; + } + $path = array_reverse($path); + if ($this->name != 'root') { + $path[] = $this->name; + } + return implode(':',$path); + } + +} + +/** + * Class DokuWikiNameSpace + */ +class DokuWikiNameSpace extends DokuWikiNode { + + /** @var \ArrayObject */ + public $nodes; + + /** + * @param $path + * @param null $parent + */ + function __construct ($path, $parent = null) { + parent::__construct ($path, $parent); + $files = dir ($path); + + $this->nodes = new ArrayObject(); + + while (($realfile = $files->read ())) { + $node = null; + $file = $path . DIRECTORY_SEPARATOR . $realfile; + if (is_dir ($file)) { + if (!(($realfile == '.') or ($realfile == '..'))) { + $node = new DokuWikiNameSpace($file, $this); + } + } else { + $node = new DokuWikiPage($file, $this); + } + if ($node) { + $this->nodes->append ($node); + } + } + } + + /** + * @return string + */ + public function toString () { + $retval = ''; + foreach ($this->nodes as $node) { + /** @var $node DokuWikiNode */ + if ($this->name == 'root') { + $retval .= $node->toString() . "\n"; + } else { + $retval .= $this->name . ":" . $node->toString() . "\n"; + } + } + return $retval; + } + + public function getNodes() { + return $this->nodes; + } + + public function hasChild($nodeName) { + if ($this->nodes->count() > 0) { + foreach($this->nodes as $node) { + /** @var DokuWikiNode $node */ + if (($node instanceof DokuWikiPage) && ($node->getName() == $nodeName)) { + return $node; + } + } + } + return null; + } + +} + +/** + * Class DokuWikiPage + */ +class DokuWikiPage extends DokuWikiNode { + /** + * @param $filename + * @param null $parent + */ + public function __construct($filename, $parent = null) { + parent::__construct($filename,$parent); + $this->content = file_get_contents($this->filename); + if (($this->name == 'start') && ($this->parent->name != 'root')) { + $this->parent->content = $this->content; + } + $metadata = p_get_metadata($this->getFullID()); + foreach($metadata as $key => $value) { + $this->setMetaData($key,$value); + } + + } +} + +/** + * Class DokuWikiIterator + */ +class DokuWikiIterator { + + /** + * @var DokuWikiNameSpace + */ + private $root; + + /** + * @param callable $callback + */ + public function runMetadataExtractor(Callable $callback) { + $this->all($callback); + } + + /** + * @param DokuWikiNameSpace $ns + * @param callable $callback + */ + private function _all(DokuWikiNameSpace $ns, Callable $callback) { + $callback($ns); + foreach($ns->nodes as $node) { + /** $node DokuWikiNode */ + if ($node instanceof DokuWikiPage) { + $callback($node); + } + if ($node instanceof DokuWikiNameSpace) { + $this->_all($node,$callback); + } + } + } + + /** + * @param callable $callback + * @return $this + */ + public function all(Callable $callback) { + $this->_all($this->root,$callback); + return $this; + } + + /** + * + */ + public function __construct () { + global $conf; + $basedir = $conf['datadir']; + + $this->root = new DokuWikiNameSpace($basedir); + } + + /** + * @return string + */ + public function toString () { + return $this->root->toString(); + } + + public function getRoot() { + return $this->root; + } +} \ No newline at end of file diff --git a/composer.json b/composer.json old mode 100755 new mode 100644 index 92c8c18..7d56a90 --- a/composer.json +++ b/composer.json @@ -1,23 +1,18 @@ { - "name": "enko/dokuwikiobjectrepresentation", - "type": "library", - "description": "DokuWiki data abstraction from the future", - "keywords": ["dokuwiki", "abstraction"], - "homepage": "https://phablab.krautspace.de/project/view/1/", - "license": "GPL2", - "authors": [ - { - "name": "Tim Schumacher", - "email": "tim@bandenkrieg.hacked.jp", - "role": "Developer" - } - ], - "require": { - "php": ">=5.3.0" - }, - "autoload": { - "psr-4": { - "enko\\dokuwiki\\objectrepresentation\\": "lib/enko/dokuwiki/objectrepresentation" - } + "name": "enko/dokuwikiobjectrepresentation", + "type": "library", + "description": "DokuWiki data abstraction from the future", + "keywords": ["dokuwiki","abstraction"], + "homepage": "https://bk-dev.hacked.jp/project/view/1/", + "license": "GPL2", + "authors": [ + { + "name": "Tim Schumacher", + "email": "tim@bandenkrieg.hacked.jp", + "role": "Developer" } -} + ], + "require": { + "php": ">=5.3.0" + } +} \ No newline at end of file diff --git a/lib/enko/DokuWikiObjectRepresentation.class.php b/lib/enko/DokuWikiObjectRepresentation.class.php deleted file mode 100755 index 8e394fe..0000000 --- a/lib/enko/DokuWikiObjectRepresentation.class.php +++ /dev/null @@ -1,25 +0,0 @@ -content; - } - - /** - * @return \DateTime - */ - public function getDate() - { - return $this->date; - } - - /** - * @return mixed - */ - public function getExtra() - { - return $this->extra; - } - - /** - * @return mixed - */ - public function getId() - { - return $this->id; - } - - /** - * @return mixed - */ - public function getIp() - { - return $this->ip; - } - - /** - * @return mixed - */ - public function getSum() - { - return $this->sum; - } - - /** - * @return mixed - */ - public function getType() - { - return $this->type; - } - - public function getPage() { - return $this->page; - } - - /** - * @return mixed - */ - public function getUser() - { - return $this->user; - } - - function __construct($date,$extra, $id, $ip, $sum, $type, $user, DokuWikiPage $page) - { - $this->date = new \DateTime(); - $this->date->setTimestamp($date); - $this->extra = $extra; - $this->id = $id; - $this->ip = $ip; - $this->sum = $sum; - $this->type = $type; - $this->user = $user; - $this->content = rawWiki($id,$this->date->format('U')); - $this->page = $page; - } - - -} \ No newline at end of file diff --git a/lib/enko/dokuwiki/objectrepresentation/DokuWikiIterator.php b/lib/enko/dokuwiki/objectrepresentation/DokuWikiIterator.php deleted file mode 100755 index 0c3b983..0000000 --- a/lib/enko/dokuwiki/objectrepresentation/DokuWikiIterator.php +++ /dev/null @@ -1,78 +0,0 @@ -all($callback); - } - - /** - * @param DokuWikiNameSpace $ns - * @param callable $callback - */ - private function _all(DokuWikiNameSpace $ns, Callable $callback) - { - $callback($ns); - foreach ($ns->nodes as $node) { - /** $node DokuWikiNode */ - if ($node instanceof DokuWikiPage) { - $callback($node); - } - if ($node instanceof DokuWikiNameSpace) { - $this->_all($node, $callback); - } - } - } - - /** - * @param callable $callback - * @return $this - */ - public function all(Callable $callback) - { - $this->_all($this->root, $callback); - return $this; - } - - /** - * - */ - public function __construct($loadChangesets = false, \DateTime $maxChangeSetAge = null) - { - global $conf; - $basedir = $conf['datadir']; - - $this->root = new DokuWikiNameSpace($basedir, null, $loadChangesets, $maxChangeSetAge); - } - - /** - * @return string - */ - public function toString() - { - return $this->root->toString(); - } - - public function getRoot() - { - return $this->root; - } -} \ No newline at end of file diff --git a/lib/enko/dokuwiki/objectrepresentation/DokuWikiNameSpace.php b/lib/enko/dokuwiki/objectrepresentation/DokuWikiNameSpace.php deleted file mode 100755 index f57d030..0000000 --- a/lib/enko/dokuwiki/objectrepresentation/DokuWikiNameSpace.php +++ /dev/null @@ -1,80 +0,0 @@ -nodes = new \ArrayObject(); - - while (($realfile = $files->read())) { - $node = null; - $file = $path . DIRECTORY_SEPARATOR . $realfile; - if (is_dir($file)) { - if (!(($realfile == '.') or ($realfile == '..'))) { - $node = new DokuWikiNameSpace($file, $this, $loadChangesets, $maxChangeSetAge); - } - } else { - $node = new DokuWikiPage($file, $this, $loadChangesets, $maxChangeSetAge); - } - if ($node) { - $this->nodes->append($node); - } - } - } - - /** - * @return string - */ - public function toString() - { - $retval = ''; - foreach ($this->nodes as $node) { - /** @var $node DokuWikiNode */ - if ($this->name == 'root') { - $retval .= $node->toString() . "\n"; - } else { - $retval .= $this->name . ":" . $node->toString() . "\n"; - } - } - return $retval; - } - - public function getNodes() - { - return $this->nodes; - } - - public function hasChild($nodeName) - { - if ($this->nodes->count() > 0) { - foreach ($this->nodes as $node) { - /** @var DokuWikiNode $node */ - if (($node instanceof DokuWikiPage) && ($node->getName() == $nodeName)) { - return $node; - } - } - } - return null; - } - -} \ No newline at end of file diff --git a/lib/enko/dokuwiki/objectrepresentation/DokuWikiNode.php b/lib/enko/dokuwiki/objectrepresentation/DokuWikiNode.php deleted file mode 100755 index b49bce2..0000000 --- a/lib/enko/dokuwiki/objectrepresentation/DokuWikiNode.php +++ /dev/null @@ -1,152 +0,0 @@ -content; - } - - /** - * @param string $content - * @return $this - */ - public function setContent($content = '') - { - $this->content = $content; - return $this; - } - - /** - * @param $key - * @param $value - */ - public function setMetaData($key, $value) - { - $this->metadata[$key] = $value; - } - - /** - * @param $key - * @return mixed - */ - public function getMetaData($key) - { - return $this->metadata[$key]; - } - - /** - * @return mixed - */ - public function getName() - { - return $this->name; - } - - /** - * @return DokuWikiNameSpace - */ - public function getParent() { - return $this->parent; - } - - /** - * @param $filename - * @param null $parent - */ - 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 { - $parts = pathinfo($filename); - if (is_dir($filename)) { - $this->name = $parts['basename']; - } else { - $this->name = $parts['filename']; - } - } - } - - /** - * @return String - */ - public function getFilename() - { - return $this->filename; - } - - /** - * @return string - */ - public function toString() - { - return $this->name; - } - - /** - * @return string - */ - public function getFullID() - { - $path = array(); - $node = $this; - while ($parent = $node->parent) { - if ($parent->name != 'root') { - $path[] = $parent->name; - } - $node = $parent; - } - $path = array_reverse($path); - if ($this->name != 'root') { - $path[] = $this->name; - } - return implode(':', $path); - } - -} \ No newline at end of file diff --git a/lib/enko/dokuwiki/objectrepresentation/DokuWikiPage.php b/lib/enko/dokuwiki/objectrepresentation/DokuWikiPage.php deleted file mode 100755 index eacc13a..0000000 --- a/lib/enko/dokuwiki/objectrepresentation/DokuWikiPage.php +++ /dev/null @@ -1,60 +0,0 @@ -content = file_get_contents($this->filename); - if (($this->name == 'start') && ($this->parent->name != 'root')) { - $this->parent->content = $this->content; - } - $metadata = p_get_metadata($this->getFullID()); - foreach ($metadata as $key => $value) { - $this->setMetaData($key, $value); - } - $this->ChangeLog = new \ArrayObject(); - 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