continue with implementing wikis

This commit is contained in:
Dennis Eichhorn 2020-02-24 20:12:32 +01:00
parent b8d33a6e5b
commit 0242c053df
8 changed files with 133 additions and 61 deletions

View File

@ -14,7 +14,12 @@ declare(strict_types=1);
namespace Modules\Knowledgebase\Admin;
use Modules\Knowledgebase\Models\WikiCategory;
use Modules\Knowledgebase\Models\WikiCategoryMapper;
use phpOMS\Module\InfoManager;
use phpOMS\Module\InstallerAbstract;
use phpOMS\DataStorage\Database\DatabasePool;
/**
* Installer class.
@ -26,4 +31,17 @@ use phpOMS\Module\InstallerAbstract;
*/
class Installer extends InstallerAbstract
{
/**
* {@inheritdoc}
*/
public static function install(DatabasePool $dbPool, InfoManager $info) : void
{
parent::install($dbPool, $info);
$category = new WikiCategory();
$category->setName('Default');
$category->setPath('/');
WikiCategoryMapper::create($category);
}
}

View File

@ -19,7 +19,7 @@ use Modules\Knowledgebase\Models\WikiCategoryMapper;
use Modules\Knowledgebase\Models\WikiDoc;
use Modules\Knowledgebase\Models\WikiDocMapper;
use Modules\Knowledgebase\Models\WikiStatus;
use phpOMS\Message\NotificationLevel;
use phpOMS\Message\RequestAbstract;
use phpOMS\Message\ResponseAbstract;
use phpOMS\Model\Message\FormValidation;
@ -55,14 +55,14 @@ final class ApiController extends Controller
public function apiWikiDocCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void
{
if (!empty($val = $this->validateWikiDocCreate($request))) {
$response->set('wiki_doc_create', new FormValidation($val));
$response->set($request->getUri()->__toString(), new FormValidation($val));
return;
}
$doc = $this->createWikiDocFromRquest($request);
WikiDocMapper::create($doc);
$response->set('doc', $doc->jsonSerialize());
$doc = $this->createWikiDocFromRequest($request);
$this->createModel($request->getHeader()->getAccount(), $doc, WikiDocMapper::class, 'doc');
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Wiki', 'Wiki successfully created.', $doc);
}
/**
@ -74,15 +74,19 @@ final class ApiController extends Controller
*
* @since 1.0.0
*/
public function createWikiDocFromRquest(RequestAbstract $request) : WikiDoc
public function createWikiDocFromRequest(RequestAbstract $request) : WikiDoc
{
$mardkownParser = new Markdown();
$doc = new WikiDoc();
$doc->setName((string) $request->getData('title'));
$doc->setDoc((string) $request->getData('plain'));
$doc->setCategory((int) $request->getData('category'));
$doc->setStatus((int) $request->getData('status'));
$doc->setDoc(Markdown::parse((string) ($request->getData('plain') ?? '')));
$doc->setDocRaw((string) ($request->getData('plain') ?? ''));
$doc->setCategory((int) ($request->getData('category') ?? 1));
$doc->setLanguage((string) ($request->getData('language') ?? $request->getHeader()->getL11n()->getLanguage()));
$doc->setStatus((int) ($request->getData('status') ?? WikiStatus::INACTIVE));
if ($request->getData('tags') !== null) {
$doc->addTag((int) $request->getData('tags'));
}
return $doc;
}
@ -101,7 +105,6 @@ final class ApiController extends Controller
$val = [];
if (($val['title'] = empty($request->getData('title')))
|| ($val['plain'] = empty($request->getData('plain')))
|| ($val['category'] = empty($request->getData('category')))
|| ($val['status'] = (
$request->getData('status') !== null
&& !WikiStatus::isValidValue((int) $request->getData('status'))
@ -129,14 +132,14 @@ final class ApiController extends Controller
public function apiWikiCategoryCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void
{
if (!empty($val = $this->validateWikiCategoryCreate($request))) {
$response->set('wiki_category_create', new FormValidation($val));
$response->set($request->getUri()->__toString(), new FormValidation($val));
return;
}
$category = $this->createWikiCategoryFromRquest($request);
WikiCategoryMapper::create($category);
$response->set('category', $category->jsonSerialize());
$category = $this->createWikiCategoryFromRequest($request);
$this->createModel($request->getHeader()->getAccount(), $category, WikiCategoryMapper::class, 'category');
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Category', 'Category successfully created.', $category);
}
/**
@ -148,13 +151,18 @@ final class ApiController extends Controller
*
* @since 1.0.0
*/
public function createWikiCategoryFromRquest(RequestAbstract $request) : WikiCategory
public function createWikiCategoryFromRequest(RequestAbstract $request) : WikiCategory
{
$mardkownParser = new Markdown();
$category = new WikiCategory();
$category->setName((string) $request->getData('title'));
$category->setParent((int) $request->getData('parent'));
if ($request->getData('path') !== null) {
$category->setPath((string) $request->getData('path'));
}
if ($request->getData('parent') !== null) {
$category->setParent((int) $request->getData('parent'));
}
return $category;
}
@ -171,9 +179,7 @@ final class ApiController extends Controller
private function validateWikiCategoryCreate(RequestAbstract $request) : array
{
$val = [];
if (($val['title'] = empty($request->getData('title')))
|| ($val['parent'] = empty($request->getData('parent')))
) {
if (($val['title'] = empty($request->getData('title')))) {
return $val;
}

View File

@ -81,7 +81,7 @@ final class BackendController extends Controller
$view->setTemplate('/Modules/Knowledgebase/Theme/Backend/wiki-dashboard');
$view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1005901001, $request, $response));
$categories = WikiCategoryMapper::getNewest(50);
$categories = WikiCategoryMapper::getAll();
$view->setData('categories', $categories);
$documents = WikiDocMapper::getNewest(50);
@ -288,9 +288,14 @@ final class BackendController extends Controller
return $view;
}
$view->setTemplate('/Modules/Knowledgebase/Theme/Backend/wiki-category-single');
$view->setTemplate('/Modules/Knowledgebase/Theme/Backend/wiki-doc-single');
$view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1005901001, $request, $response));
$view->setData('category', $category);
$categories = WikiCategoryMapper::getAll();
$view->setData('categories', $categories);
$document = WikiDocMapper::get((int) $request->getData('id'));
$view->setData('document', $document);
return $view;
}

View File

@ -15,5 +15,6 @@ declare(strict_types=1);
return ['Knowledgebase' => [
'Categories' => 'Categories',
'Name' => 'Name',
'Parent' => 'Parent',
'Wiki' => 'Wiki',
]];

View File

@ -12,6 +12,7 @@
*/
declare(strict_types=1);
use phpOMS\Uri\UriFactory;
$categories = $this->getData('categories');
@ -30,18 +31,20 @@ echo $this->getData('nav')->render();
<tr>
<td><?= $this->getHtml('ID', '0', '0'); ?>
<td class="wf-100"><?= $this->getHtml('Name') ?>
<tfoot>
<td><?= $this->getHtml('Parent') ?>
<tfoot>
<tr><td colspan="2">
<tbody>
<?php $c = 0; foreach ($categories as $key => $value) : ++$c;
$url = \phpOMS\Uri\UriFactory::build('{/prefix}admin/account/settings?{?}&id=' . $value->getId()); ?>
<?php foreach ($categories as $key => $value) :
$url = UriFactory::build('{/prefix}admin/account/settings?{?}&id=' . $value->getId()); ?>
<tr data-href="<?= $url; ?>">
<td data-label="<?= $this->getHtml('ID', '0', '0') ?>"><a href="<?= $url; ?>"><?= $this->printHtml($value->getId()); ?></a>
<td data-label="<?= $this->getHtml('Name') ?>"><a href="<?= $url; ?>"><?= $this->printHtml($value->getName()); ?></a>
<?php endforeach; ?>
<?php if ($c === 0) : ?>
<tr><td colspan="2" class="empty"><?= $this->getHtml('Empty', '0', '0'); ?>
<?php endif; ?>
<td data-label="<?= $this->getHtml('Parent') ?>"><a href="<?= $url; ?>"><?= $this->printHtml($value->getParent() !== null ? $value->getParent()->getName() : ''); ?></a>
<?php endforeach; ?>
<?php if (empty($categories)) : ?>
<tr><td colspan="3" class="empty"><?= $this->getHtml('Empty', '0', '0'); ?>
<?php endif; ?>
</table>
</div>
</div>

View File

@ -29,12 +29,18 @@ echo $this->getData('nav')->render(); ?>
<div class="row">
<div class="col-xs-12 col-md-8 col-lg-9">
<div class="row">
<?php foreach ($documents as $doc) : ?>
<?php foreach ($documents as $doc) : $url = UriFactory::build('{/prefix}wiki/doc/single?id=' . $doc->getId()); ?>
<section class="box wf-100">
<header><h1><?= $doc->getName(); ?></h1></header>
<header><h1><a href="<?= $url; ?>"><?= $this->printHtml($doc->getName()); ?></a></h1></header>
<article>
<?= $doc->getDoc(); ?>
<?= \substr($doc->getDoc(), 0, 300) . (\strlen($doc->getDoc()) > 300 ? '...' : ''); ?>
</article>
<div class="inner">
<div class="overflowfix">
<span class="tag">Test Tag</span>
<a href="<?= $url; ?>" class="button floatRight">More</a>
</div>
</div>
</section>
<?php endforeach; ?>
</div>
@ -43,11 +49,11 @@ echo $this->getData('nav')->render(); ?>
<div class="col-xs-12 col-md-4 col-lg-3">
<section class="box wf-100">
<div class="inner">
<ul>
<?php foreach ($categories as $category) : ?>
<li><a href="<?= UriFactory::build('{/prefix}wiki/doc/list?{?}&id=' . $category->getId()); ?>"><?= $this->printHtml($category->getName()); ?></a>
<?php endforeach; ?>
</ul>
<ul>
<?php foreach ($categories as $category) : ?>
<li><a href="<?= UriFactory::build('{/prefix}wiki/doc/list?{?}&id=' . $category->getId()); ?>"><?= $this->printHtml($category->getName()); ?></a>
<?php endforeach; ?>
</ul>
</div>
</section>
</div>

View File

@ -0,0 +1,53 @@
<?php
/**
* Orange Management
*
* PHP Version 7.4
*
* @package Modules\Knowledgebase
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
use Modules\Knowledgebase\Models\NullWikiDoc;
use \phpOMS\Uri\UriFactory;
/**
* @var \Modules\Knowledgebase\Models\WikiCategory[] $categories
* @var \Modules\Knowledgebase\Models\WikiDoc $doc
*/
$categories = $this->getData('categories') ?? [];
$doc = $this->getData('document') ?? new NullWikiDoc();
/**
* @var \phpOMS\Views\View $this
*/
echo $this->getData('nav')->render();
?>
<div class="row">
<div class="col-xs-12 col-md-8 col-lg-9">
<section class="box wf-100">
<header><h1><?= $this->printHtml($doc->getName()); ?></h1></header>
<article><?= $doc->getDoc(); ?></article>
<div class="inner">
<span class="tag">Test Tag</span>
</div>
</section>
</div>
<div class="col-xs-12 col-md-4 col-lg-3">
<section class="box wf-100">
<div class="inner">
<ul>
<?php foreach ($categories as $category) : ?>
<li><a href="<?= UriFactory::build('{/prefix}wiki/doc/list?{?}&id=' . $category->getId()); ?>"><?= $this->printHtml($category->getName()); ?></a>
<?php endforeach; ?>
</ul>
</div>
</section>
</div>
</div>

View File

@ -1,20 +0,0 @@
<?php declare(strict_types=1);
$doc = $this->getData('doc');
/**
* @var \phpOMS\Views\View $this
*/
echo $this->getData('nav')->render();
?>
<div class="row">
<div class="col-xs-12">
<section class="box wf-100">
<header><h1><?= $this->printHtml($doc->getTitle()); ?></h1></header>
<article>
<?= $this->printHtml($doc->getDoc()); ?>
</article>
</section>
</div>
</div>