Code Style and documentation

This commit is contained in:
Stéphane Goetz 2015-07-17 23:38:06 +02:00
parent e7afd9aa28
commit 4f8d817365
22 changed files with 415 additions and 177 deletions

View File

@ -2,11 +2,18 @@
use ArrayObject;
class Config extends ArrayObject {
public function merge($newValues, $override = true) {
class Config extends ArrayObject
{
/**
* Merge an array into the object
*
* @param array $newValues
* @param bool $override
*/
public function merge($newValues, $override = true)
{
foreach ($newValues as $key => $value) {
if (array_key_exists($key, $this) && $override == false) {
if ($override === false && array_key_exists($key, $this)) {
continue;
}
@ -14,7 +21,13 @@ class Config extends ArrayObject {
}
}
public function conservativeMerge($newValues) {
/**
* Merge an array into the object, ignore already added keys.
*
* @param $newValues
*/
public function conservativeMerge($newValues)
{
$this->merge($newValues, false);
}
}

View File

@ -19,9 +19,10 @@ class Daux
protected $processor;
/**
* @var Tree\Entry
* @var Tree\Directory
*/
public $tree;
/**
* @var Config
*/
@ -84,6 +85,14 @@ class Daux
$this->options->merge($default_config);
}
/**
* Load the configuration files, first, "config.json"
* in the documentation and then the file specified
* when running the configuration
*
* @param string $override_file
* @throws Exception
*/
private function loadConfigOverrides($override_file)
{
// Read documentation overrides

View File

@ -4,6 +4,11 @@ use Todaymade\Daux\Tree\Directory;
class DauxHelper
{
/**
* @param Config $params
* @param string $current_url
* @return array
*/
public static function getTheme($params, $current_url)
{
$theme_folder = $params['local_base'] . DS . 'resources' . DS . 'themes' . DS . $params['theme-name'];
@ -39,21 +44,19 @@ class DauxHelper
$theme['templates'] = strtr($theme['templates'], $substitutions);
$theme['favicon'] = utf8_encode(strtr($theme['favicon'], $substitutions));
foreach ($theme['css'] as $key => $css) {
$theme['css'][$key] = utf8_encode(strtr($css, $substitutions));
foreach (['css', 'js', 'fonts'] as $element) {
foreach ($theme[$element] as $key => $value) {
$theme[$element][$key] = utf8_encode(strtr($value, $substitutions));
}
foreach ($theme['fonts'] as $key => $font) {
$theme['fonts'][$key] = utf8_encode(strtr($font, $substitutions));
}
foreach ($theme['js'] as $key => $js) {
$theme['js'][$key] = utf8_encode(strtr($js, $substitutions));
}
return $theme;
}
/**
* @param string $path
* @return string
*/
public static function getCleanPath($path)
{
$path = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $path);
@ -72,24 +75,31 @@ class DauxHelper
return implode(DIRECTORY_SEPARATOR, $absolutes);
}
/**
* Get pathinfo for a file
*
* @param string $path
* @return array
*/
public static function pathinfo($path)
{
preg_match('%^(.*?)[\\\\/]*(([^/\\\\]*?)(\.([^\.\\\\/]+?)|))[\\\\/\.]*$%im', $path, $m);
if (isset($m[1])) {
$ret['dir']=$m[1];
$ret = [];
foreach (['dir' => 1, 'basename' => 2, 'filename' => 3, 'extension' => 5] as $key => $group) {
if (isset($m[$group])) {
$ret[$key] = $m[$group];
}
if (isset($m[2])) {
$ret['basename']=$m[2];
}
if (isset($m[5])) {
$ret['extension']=$m[5];
}
if (isset($m[3])) {
$ret['filename']=$m[3];
}
return $ret;
}
/**
* Locate a file in the tree. Returns the file if found or false
*
* @param Directory $tree
* @param string $request
* @return Tree\Entry|false
*/
public static function getFile($tree, $request)
{
$request = explode('/', $request);
@ -148,11 +158,14 @@ class DauxHelper
$separator = '_';
// Convert all dashes into underscores
$title = preg_replace('!['.preg_quote("-").']+!u', $separator, $title);
$title = preg_replace('![' . preg_quote("-") . ']+!u', $separator, $title);
// Remove all characters that are not the separator, letters, numbers, or whitespace.
$title = preg_replace('![^'.preg_quote($separator).'\pL\pN\s]+!u', '', $title);
$title = preg_replace('![^' . preg_quote($separator) . '\pL\pN\s]+!u', '', $title);
// Replace all separator characters and whitespace by a single separator
$title = preg_replace('!['.preg_quote($separator).'\s]+!u', $separator, $title);
$title = preg_replace('![' . preg_quote($separator) . '\s]+!u', $separator, $title);
return trim($title, $separator);
}
@ -167,7 +180,9 @@ class DauxHelper
{
static $charsArray;
if (isset($charsArray)) return $charsArray;
if (isset($charsArray)) {
return $charsArray;
}
return $charsArray = array(
'a' => array(
@ -238,7 +253,7 @@ class DauxHelper
'Ἇ', 'ᾈ', 'ᾉ', 'ᾊ', 'ᾋ', 'ᾌ', 'ᾍ', 'ᾎ', 'ᾏ', 'Ᾰ',
'Ᾱ', 'Ὰ', 'Ά', 'ᾼ', 'А'),
'B' => array('Б', 'Β'),
'C' => array('Ç','Ć', 'Č', 'Ĉ', 'Ċ'),
'C' => array('Ç', 'Ć', 'Č', 'Ĉ', 'Ċ'),
'D' => array('Ď', 'Ð', 'Đ', 'Ɖ', 'Ɗ', 'Ƌ', 'ᴅ', 'ᴆ', 'Д', 'Δ'),
'E' => array('É', 'È', 'Ẻ', 'Ẽ', 'Ẹ', 'Ê', 'Ế', 'Ề', 'Ể', 'Ễ',
'Ệ', 'Ë', 'Ē', 'Ę', 'Ě', 'Ĕ', 'Ė', 'Ε', 'Έ', 'Ἐ',

View File

@ -22,12 +22,12 @@ class LinkRenderer extends \League\CommonMark\Inline\Renderer\LinkRenderer
}
/**
* @param $url
* @param string $url
* @return Entry
* @throws Exception
*/
protected function resolveInternalFile($url) {
protected function resolveInternalFile($url)
{
$file = DauxHelper::getFile($this->daux['tree'], $url);
if ($file) {
return $file;

View File

@ -3,11 +3,9 @@
use GuzzleHttp\Client;
use GuzzleHttp\Exception\BadResponseException;
use GuzzleHttp\Exception\ParseException;
use GuzzleHttp\Exception\TransferException;
class Api
{
protected $base_url;
protected $user;
protected $pass;
@ -75,60 +73,23 @@ class Api
}
/**
* /rest/api/content/{id}/child/{type}
* Get a list of pages
*
* @param $rootPage
* @return mixed
* @param integer $rootPage
* @param bool $recursive
* @return array
*/
public function getList($rootPage)
{
//We do a limit of 15 as it appears that confluence has
//a bug when retrieving more than 20 entries with "body.storage"
$url = "content/$rootPage/child/page?expand=version,body.storage&limit=15";
$pages = [];
do {
try {
$list = $this->getClient()->get($url)->json();
} catch (BadResponseException $e) {
throw $this->handleError($e);
}
foreach ($list['results'] as $result) {
$pages[$result['title']] = [
"id" => $result['id'],
"title" => $result['title'],
"version" => $result['version']['number'],
"content" => $result['body']['storage']['value'],
];
}
if (array_key_exists('next', $list['_links'])) {
$url = $list['_links']['next'];
}
} while (array_key_exists('next', $list['_links']));
return $pages;
}
/**
* /rest/api/content/{id}/child/{type}
*
* @param $rootPage
* @return mixed
*/
public function getHierarchy($rootPage)
public function getList($rootPage, $recursive = false)
{
$increment = 15;
//We do a limit of 15 as it appears that confluence has
//a bug when retrieving more than 20 entries with "body.storage"
// We set a limit of 15 as it appears that
// Confluence fails silently when retrieving
// more than 20 entries with "body.storage"
$base_url = $url = "content/$rootPage/child/page?expand=version,body.storage&limit=$increment";
$start = 0;
$children = [];
$pages = [];
do {
try {
@ -138,24 +99,35 @@ class Api
}
foreach ($hierarchy['results'] as $result) {
$children[$result['title']] = [
$pages[$result['title']] = [
"id" => $result['id'],
"title" => $result['title'],
"version" => $result['version']['number'],
"content" => $result['body']['storage']['value'],
"children" => $this->getHierarchy($result['id'])
];
if ($recursive) {
$pages[$result['title']]['children'] = $this->getList($result['id'], true);
}
}
//We don't use _links->next as after ~30 elements it doesn't show any new elements
// We don't use _links->next as after ~30 elements
// it doesn't show any new elements. This seems
// to be a bug in Confluence
$start += $increment;
$url = "$base_url&start=$start";
} while (!empty($hierarchy['results']));
return $children;
return $pages;
}
/**
* @param integer $parent_id
* @param string $title
* @param string $content
* @return integer
*/
public function createPage($parent_id, $title, $content)
{
$body = [
@ -167,7 +139,7 @@ class Api
];
try {
$response = $this->getClient()->post('content', [ 'json' => $body ])->json();
$response = $this->getClient()->post('content', ['json' => $body])->json();
} catch (BadResponseException $e) {
throw $this->handleError($e);
}
@ -175,6 +147,13 @@ class Api
return $response['id'];
}
/**
* @param integer $parent_id
* @param integer $page_id
* @param integer $newVersion
* @param string $title
* @param string $content
*/
public function updatePage($parent_id, $page_id, $newVersion, $title, $content)
{
$body = [
@ -193,6 +172,12 @@ class Api
}
}
/**
* Delete a page
*
* @param integer $page_id
* @return mixed
*/
public function deletePage($page_id)
{
try {
@ -202,6 +187,10 @@ class Api
}
}
/**
* @param integer $id
* @param array $attachment
*/
public function uploadAttachment($id, $attachment)
{
//get if attachment is uploaded
@ -211,13 +200,13 @@ class Api
throw $this->handleError($e);
}
$url = "content/$id/child/attachment" . (count($result['results'])? "/{$result['results'][0]['id']}/data" : "");
$url = "content/$id/child/attachment" . count($result['results']) ? "/{$result['results'][0]['id']}/data" : "";
try {
$this->getClient()->post(
$url,
[
'body' => ['file' => fopen($attachment['file']->getPath(), 'r')] ,
'body' => ['file' => fopen($attachment['file']->getPath(), 'r')],
'headers' => ['X-Atlassian-Token' => 'nocheck'],
]
);

View File

@ -24,7 +24,7 @@ class IndentedCodeRenderer implements BlockRendererInterface
return new HtmlElement(
'ac:structured-macro',
['ac:name' => 'code'],
new HtmlElement('ac:plain-text-body', [], '<![CDATA['.$block->getStringContent().']]>')
new HtmlElement('ac:plain-text-body', [], '<![CDATA[' . $block->getStringContent() . ']]>')
);
}
}

View File

@ -21,7 +21,7 @@ class MarkdownPage extends \Todaymade\Daux\Format\Base\MarkdownPage
// We do it after generation so we can catch the images that were in html already
$page = preg_replace_callback(
"/<img\\s+[^>]*src=['\"]([^\"]*)['\"][^>]*>/",
function ($matches) {
function($matches) {
if ($result = $this->findImage($matches[1], $matches[0])) {
return $result;
@ -84,7 +84,7 @@ class MarkdownPage extends \Todaymade\Daux\Format\Base\MarkdownPage
$img = "<ac:image";
foreach ($attributes as $name => $value) {
$img .= ' ac:' . $name.'="'.htmlentities($value, ENT_QUOTES, 'UTF-8', false).'"';
$img .= ' ac:' . $name . '="' . htmlentities($value, ENT_QUOTES, 'UTF-8', false) . '"';
}
$img .= "><ri:attachment ri:filename=\"$filename\" /></ac:image>";

View File

@ -45,7 +45,8 @@ class Publisher
$this->client->setSpace($confluence['space_id']);
}
public function run($title, $closure) {
public function run($title, $closure)
{
try {
return $this->runAction($title, $this->output, $this->width, $closure);
} catch (BadResponseException $e) {
@ -69,7 +70,7 @@ class Publisher
"Getting already published pages...",
function() use (&$published) {
if ($published != null) {
$published['children'] = $this->client->getHierarchy($published['id']);
$published['children'] = $this->client->getList($published['id'], true);
}
}
);
@ -149,7 +150,7 @@ class Publisher
protected function createRecursive($parent_id, $entry, $published)
{
$callback = function ($parent_id, $entry, $published) {
$callback = function($parent_id, $entry, $published) {
//TODO :: remove deleted pages
@ -173,7 +174,7 @@ class Publisher
protected function updateRecursive($parent_id, $entry, $published)
{
$callback = function ($parent_id, $entry, $published) {
$callback = function($parent_id, $entry, $published) {
if (array_key_exists('id', $published) && array_key_exists('page', $entry)) {
$this->updatePage($parent_id, $entry, $published);
}
@ -246,7 +247,7 @@ class Publisher
foreach ($entry['page']->attachments as $attachment) {
$this->run(
" With attachment: $attachment[filename]",
function() use($published, $attachment) {
function() use ($published, $attachment) {
$this->client->uploadAttachment($published['id'], $attachment);
}
);

View File

@ -32,6 +32,17 @@ class Generator
$this->generateRecursive($daux->tree, $destination, $params, $output, $width);
}
/**
* Recursively generate the documentation
*
* @param \Todaymade\Daux\Tree\Entry $tree
* @param string $output_dir
* @param \Todaymade\Daux\Config $params
* @param OutputInterface $output
* @param integer $width
* @param string $base_url
* @throws \Exception
*/
private function generateRecursive($tree, $output_dir, $params, $output, $width, $base_url = '')
{
$params['base_url'] = $params['base_page'] = $base_url;
@ -46,7 +57,7 @@ class Generator
foreach ($tree->value as $key => $node) {
if ($node instanceof Directory) {
$new_output_dir = $output_dir . DS . $key;
@mkdir($new_output_dir);
mkdir($new_output_dir);
$this->generateRecursive($node, $new_output_dir, $params, $output, $width, '../' . $base_url);
} elseif ($node instanceof Content) {
$this->runAction(

View File

@ -79,6 +79,6 @@ class MarkdownPage extends \Todaymade\Daux\Format\Base\MarkdownPage
}
$template = new Template($params['templates'], $params['theme']['templates']);
return $template->render($this->homepage? 'home' : 'content', ['page' => $page, 'params' => $params]);
return $template->render($this->homepage ? 'home' : 'content', ['page' => $page, 'params' => $params]);
}
}

View File

@ -7,6 +7,10 @@ class Template
{
protected $engine;
/**
* @param string $base
* @param string $theme
*/
public function __construct($base, $theme)
{
// Create new Plates instance
@ -19,6 +23,11 @@ class Template
$this->registerFunctions();
}
/**
* @param string $name
* @param array $data
* @return string
*/
public function render($name, array $data = array())
{
$this->engine->addData([
@ -94,7 +103,7 @@ class Template
$nav[] = [
'title' => $node->getTitle(),
'href' => $base_page . $link,
'class' => ($current_url === $link)? 'active' : ''
'class' => ($current_url === $link) ? 'active' : ''
];
}
if ($node instanceof \Todaymade\Daux\Tree\Directory) {
@ -102,7 +111,7 @@ class Template
$folder = [
'title' => $node->getTitle(),
'class' => (strpos($current_url, $link) === 0)? 'open' : '',
'class' => (strpos($current_url, $link) === 0) ? 'open' : '',
];
if ($mode === Daux::STATIC_MODE) {
@ -123,6 +132,10 @@ class Template
return $nav;
}
/**
* @param string $separator
* @return string
*/
private function getSeparator($separator)
{
switch ($separator) {

View File

@ -4,7 +4,6 @@ use Symfony\Component\Console\Command\Command as SymfonyCommand;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Todaymade\Daux\Daux;
use Todaymade\Daux\Format\HTML\Generator as HTMLGenerator;
use Todaymade\Daux\Format\Confluence\Generator as ConfluenceGenerator;
@ -36,7 +35,7 @@ class Command extends SymfonyCommand
$class = "\\Todaymade\\Daux\\Extension\\" . $processor;
if (class_exists($class)) {
$daux->setProcessor(new $class($daux, $output, $width));
} else if (file_exists($processor)) {
} elseif (file_exists($processor)) {
include $processor;
}
}
@ -44,7 +43,7 @@ class Command extends SymfonyCommand
// Improve the tree with a processor
$daux->getProcessor()->manipulateTree($daux->tree);
switch(strtolower($input->getOption('format'))) {
switch (strtolower($input->getOption('format'))) {
case 'confluence':
(new ConfluenceGenerator())->generate($daux, $output, $width);
break;

View File

@ -2,15 +2,26 @@
class Helper
{
/**
* Copy all files from $path to $local_base
*
* @param string $path
* @param string $local_base
*/
public static function copyAssets($path, $local_base)
{
@mkdir($path);
mkdir($path);
static::rmdir($path);
@mkdir($path . DS . 'resources');
mkdir($path . DS . 'resources');
static::copyRecursive($local_base . DS . 'resources', $path . DS . 'resources');
}
/**
* Remove a directory recursively
*
* @param string $dir
*/
private static function rmdir($dir)
{
$it = new \RecursiveDirectoryIterator($dir);
@ -27,16 +38,22 @@ class Helper
}
}
private static function copyRecursive($src, $dst)
/**
* Copy files recursively
*
* @param string $source
* @param string $destination
*/
private static function copyRecursive($source, $destination)
{
$dir = opendir($src);
@mkdir($dst);
while (false !== ( $file = readdir($dir))) {
if (( $file != '.' ) && ( $file != '..' )) {
if (is_dir($src . '/' . $file)) {
static::copyRecursive($src . '/' . $file, $dst . '/' . $file);
$dir = opendir($source);
mkdir($destination);
while (false !== ($file = readdir($dir))) {
if ($file != '.' && $file != '..') {
if (is_dir($source . '/' . $file)) {
static::copyRecursive($source . '/' . $file, $destination . '/' . $file);
} else {
copy($src . '/' . $file, $dst . '/' . $file);
copy($source . '/' . $file, $destination . '/' . $file);
}
}
}

View File

@ -21,6 +21,11 @@ class Processor
*/
protected $width;
/**
* @param Daux $daux
* @param OutputInterface $output
* @param integer $width
*/
public function __construct(Daux $daux, OutputInterface $output, $width)
{
$this->daux = $daux;
@ -28,10 +33,24 @@ class Processor
$this->width = $width;
}
/**
* With this connection point, you can transform
* the tree as you want, move pages, modify
* pages and even add new ones.
*
* @param Directory $root
*/
public function manipulateTree(Directory $root)
{
}
/**
* This connection point provides
* a way to extend the Markdown
* parser and renderer.
*
* @param Environment $environment
*/
public function extendCommonMarkEnvironment(Environment $environment)
{
}

View File

@ -9,19 +9,32 @@ class ErrorPage extends SimplePage
const MISSING_PAGE_ERROR_TYPE = 'MISSING_PAGE_ERROR';
const FATAL_ERROR_TYPE = 'FATAL_ERROR';
/**
* @var \Todaymade\Daux\Config
*/
private $params;
/**
* @param string $title
* @param string $content
* @param \Todaymade\Daux\Config $params
*/
public function __construct($title, $content, $params)
{
parent::__construct($title, $content);
$this->params = $params;
}
/**
* @return string
*/
protected function generatePage()
{
$params = $this->params;
$page['title'] = $this->title;
$page['content'] = $this->content;
$page = [
'title' => $this->title,
'content' => $this->content,
];
$template = new Template($params['templates'], $params['theme']['templates']);
return $template->render('error', ['page' => $page, 'params' => $params]);

View File

@ -6,7 +6,6 @@ use Todaymade\Daux\Exception;
use Todaymade\Daux\Format\HTML\MarkdownPage;
use Todaymade\Daux\Format\HTML\RawPage;
use Todaymade\Daux\Format\HTML\SimplePage;
use Todaymade\Daux\Tree\Directory;
use Todaymade\Daux\Tree\Raw;
class Server
@ -16,6 +15,11 @@ class Server
private $host;
private $base_url;
/**
* Serve the documentation
*
* @throws Exception
*/
public static function serve()
{
$daux = new Daux(Daux::LIVE_MODE);
@ -63,6 +67,9 @@ class Server
}
}
/**
* @return \Todaymade\Daux\Config
*/
public function getParams()
{
$params = $this->daux->getParams();
@ -83,6 +90,14 @@ class Server
return $params;
}
/**
* Handle an incoming request
*
* @param array $query
* @return \Todaymade\Daux\Tree\Entry
* @throws Exception
* @throws NotFoundException
*/
public function handle($query = [])
{
$this->params = $this->getParams();
@ -108,6 +123,14 @@ class Server
}
}
/**
* @param string $request
* @param string $content
* @return SimplePage
*
* @throws Exception
* @throws NotFoundException
*/
private function saveFile($request, $content)
{
$file = $this->getFile($request);
@ -123,6 +146,11 @@ class Server
return new SimplePage('Success', 'Successfully Edited');
}
/**
* @param string $request
* @return \Todaymade\Daux\Tree\Entry
* @throws NotFoundException
*/
private function getPage($request)
{
$file = DauxHelper::getFile($this->daux->tree, $request);

View File

@ -5,6 +5,15 @@ use Todaymade\Daux\DauxHelper;
class Builder
{
/**
* Build the initial tree
*
* @param string $dir
* @param array $ignore
* @param \Todaymade\Daux\Config $params
* @param array $parents
* @return Directory|void
*/
public static function build($dir, $ignore, $params, $parents = null)
{
if (!$dh = opendir($dir)) {
@ -62,7 +71,13 @@ class Builder
return $node;
}
public static function getOrCreateDir($parent, $title) {
/**
* @param Entry $parent
* @param String $title
* @return Directory
*/
public static function getOrCreateDir($parent, $title)
{
$slug = DauxHelper::slug($title);
if (array_key_exists($slug, $parent->value)) {
@ -77,7 +92,13 @@ class Builder
return $dir;
}
public static function getOrCreatePage($parents, $title) {
/**
* @param array $parents
* @param string $title
* @return Content
*/
public static function getOrCreatePage($parents, $title)
{
$slug = DauxHelper::slug($title);
$uri = $slug . ".html";

View File

@ -4,6 +4,9 @@ use Todaymade\Daux\DauxHelper;
class Content extends Entry
{
/**
* @var string
*/
protected $content;
public function __construct($path = '', $parents = array())
@ -13,6 +16,9 @@ class Content extends Entry
$this->value = $this->uri;
}
/**
* @return string
*/
public function getContent()
{
if (!$this->content) {
@ -22,11 +28,18 @@ class Content extends Entry
return $this->content;
}
/**
* @param string $content
*/
public function setContent($content)
{
$this->content = $content;
}
/**
* @param string $file
* @return string
*/
protected function getFilename($file)
{
return DauxHelper::pathinfo($file)['filename'];

View File

@ -4,53 +4,90 @@ use Todaymade\Daux\DauxHelper;
abstract class Entry
{
/** @var string */
protected $title;
/** @var string */
protected $name;
/** @var Content */
protected $index_page;
/** @var Content */
protected $first_page;
/** @var string */
protected $uri;
/** @var string */
protected $local_path;
/** @var integer */
protected $last_modified;
/** @var array */
protected $parents;
/**
* @param string $path
* @param array $parents
*/
public function __construct($path = '', $parents = array())
{
$this->setPath($path);
$this->setParents($parents);
}
/**
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* @param string $name
*/
public function setName($name)
{
$this->name = $name;
}
/**
* @return string
*/
public function getUri()
{
return $this->uri;
}
/**
* @param string $uri
*/
public function setUri($uri)
{
$this->uri = $uri;
}
/**
* @return Content
*/
public function getIndexPage()
{
return $this->index_page;
}
/**
* @param Content $index_page
*/
public function setIndexPage($index_page)
{
$this->index_page = $index_page;
}
/**
* @return Entry
* @return Content
*/
public function getFirstPage()
{
@ -80,36 +117,57 @@ abstract class Entry
return false;
}
/**
* @param Content $first_page
*/
public function setFirstPage($first_page)
{
$this->first_page = $first_page;
}
/**
* @return string
*/
public function getTitle()
{
return $this->title;
}
/**
* @param string $title
*/
public function setTitle($title)
{
$this->title = $title;
}
/**
* @return array
*/
public function getParents()
{
return $this->parents;
}
/**
* @param array $parents
*/
public function setParents($parents)
{
$this->parents = $parents;
}
/**
* @return string
*/
public function getPath()
{
return $this->local_path;
}
/**
* @param string $path
*/
public function setPath($path)
{
if (!isset($path) || $path == '' || !file_exists($path)) {
@ -123,6 +181,10 @@ abstract class Entry
$this->index_page = false;
}
/**
* @param string $content
* @return bool
*/
public function write($content)
{
if (!is_writable($this->local_path)) {
@ -133,6 +195,9 @@ abstract class Entry
return true;
}
/**
* @return string
*/
public function getUrl()
{
$url = '';
@ -143,12 +208,20 @@ abstract class Entry
return $url;
}
/**
* @param string $file
* @return string
*/
protected function getFilename($file)
{
$parts = explode('/', $file);
return end($parts);
}
/**
* @param string $filename
* @return string
*/
protected function getTitleInternal($filename)
{
$filename = explode('_', $filename);
@ -164,6 +237,10 @@ abstract class Entry
return $filename;
}
/**
* @param string $filename
* @return string
*/
protected function getUrlInternal($filename)
{
$filename = explode('_', $filename);

View File

@ -9,10 +9,10 @@
<?php if ($params['file_editor']) echo '<a href="javascript:;" id="editThis" class="btn">Edit this page</a>'; ?>
</h1>
<span style="float: left; font-size: 10px; color: gray;">
<?php echo date("l, F j, Y", $page['modified_time']);?>
<?php echo date("l, F j, Y", $page['modified_time']); ?>
</span>
<span style="float: right; font-size: 10px; color: gray;">
<?php echo date("g:i A", $page['modified_time']);?>
<?php echo date("g:i A", $page['modified_time']); ?>
</span>
</div>
<?php } else { ?>
@ -28,14 +28,14 @@
<?php echo $page['content']; ?>
<?php if ($params['file_editor']) { ?>
<div class="editor<?php if(!$params['date_modified']) echo ' paddingTop'; ?>">
<div class="editor<?php if (!$params['date_modified']) echo ' paddingTop'; ?>">
<h3>You are editing <?php echo $page['path']; ?>&nbsp;<a href="javascript:;" class="closeEditor btn btn-warning">Close</a></h3>
<div class="navbar navbar-inverse navbar-default navbar-fixed-bottom" role="navigation">
<div class="navbar-inner">
<a href="javascript:;" class="save_editor btn btn-primary navbar-btn pull-right">Save file</a>
</div>
</div>
<textarea id="markdown_editor"><?php echo $page['markdown'];?></textarea>
<textarea id="markdown_editor"><?php echo $page['markdown']; ?></textarea>
<div class="clearfix"></div>
</div>
<?php } ?>