Compare commits

...

10 commits

Author SHA1 Message Date
Tim Schumacher
174d217f11 Sort the changelog. 2014-06-15 16:40:08 +02:00
Tim Schumacher
56ce743994 Suply a getter for the node parent. 2014-06-15 16:39:47 +02:00
Tim Schumacher
040a3fbd8a fix typo 2014-06-14 10:24:20 +02:00
Tim Schumacher
8cbac44f77 Merge branch 'master' of https://phablab.krautspace.de/diffusion/DO/dokuwiki-objectrepresentation
Conflicts:
	lib/enko/dokuwiki/objectrepresentation/DokuWikiPage.php
2014-06-14 10:20:30 +02:00
Tim Schumacher
8bda3d90f6 Generate the title for the page. 2014-06-14 10:19:19 +02:00
Tim Schumacher
0b248d7dec Add a option to load the changesets.
The default is, not to load the changesets.
2014-06-14 09:29:13 +02:00
Tim Schumacher
29ebda487a Extract the changesets of a dokuwikipage and put it into DokuWikiPage::ChangeLog. 2014-06-08 01:58:27 +02:00
Tim Schumacher
e9576d0d58 Create a class that represents a changeset of dokuwiki page. 2014-06-08 01:57:48 +02:00
Tim Schumacher
5be961ccab Updated the project url 2014-06-08 00:52:58 +02:00
Tim Schumacher
d8fa89156e Added autoloader info 2014-06-08 00:45:52 +02:00
6 changed files with 180 additions and 25 deletions

37
composer.json Normal file → Executable file
View file

@ -1,18 +1,23 @@
{
"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"
"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"
}
}
],
"require": {
"php": ">=5.3.0"
}
}
}

View file

@ -0,0 +1,106 @@
<?php
/**
* Created by PhpStorm.
* User: tim
* Date: 12.06.14
* Time: 22:49
*/
namespace enko\dokuwiki\objectrepresentation;
class DokuWikiChangeset {
private $date;
private $ip;
private $type;
private $id;
private $user;
private $sum;
private $extra;
private $content;
private $page;
/**
* @return mixed
*/
public function getContent()
{
return $this->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;
}
}

View file

@ -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);
}
/**

View file

@ -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);

View file

@ -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 {

View file

@ -11,13 +11,15 @@ namespace enko\dokuwiki\objectrepresentation;
class DokuWikiPage extends DokuWikiNode
{
public $ChangeLog;
/**
* @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;
@ -26,6 +28,33 @@ class DokuWikiPage extends DokuWikiNode
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();
}
}