mirror of
https://github.com/Karaka-Management/oms-Knowledgebase.git
synced 2026-02-12 00:08:43 +00:00
continue with implementing wikis
This commit is contained in:
parent
b8d33a6e5b
commit
0242c053df
|
|
@ -14,7 +14,12 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace Modules\Knowledgebase\Admin;
|
namespace Modules\Knowledgebase\Admin;
|
||||||
|
|
||||||
|
use Modules\Knowledgebase\Models\WikiCategory;
|
||||||
|
use Modules\Knowledgebase\Models\WikiCategoryMapper;
|
||||||
|
|
||||||
|
use phpOMS\Module\InfoManager;
|
||||||
use phpOMS\Module\InstallerAbstract;
|
use phpOMS\Module\InstallerAbstract;
|
||||||
|
use phpOMS\DataStorage\Database\DatabasePool;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Installer class.
|
* Installer class.
|
||||||
|
|
@ -26,4 +31,17 @@ use phpOMS\Module\InstallerAbstract;
|
||||||
*/
|
*/
|
||||||
class Installer extends 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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ use Modules\Knowledgebase\Models\WikiCategoryMapper;
|
||||||
use Modules\Knowledgebase\Models\WikiDoc;
|
use Modules\Knowledgebase\Models\WikiDoc;
|
||||||
use Modules\Knowledgebase\Models\WikiDocMapper;
|
use Modules\Knowledgebase\Models\WikiDocMapper;
|
||||||
use Modules\Knowledgebase\Models\WikiStatus;
|
use Modules\Knowledgebase\Models\WikiStatus;
|
||||||
|
use phpOMS\Message\NotificationLevel;
|
||||||
use phpOMS\Message\RequestAbstract;
|
use phpOMS\Message\RequestAbstract;
|
||||||
use phpOMS\Message\ResponseAbstract;
|
use phpOMS\Message\ResponseAbstract;
|
||||||
use phpOMS\Model\Message\FormValidation;
|
use phpOMS\Model\Message\FormValidation;
|
||||||
|
|
@ -55,14 +55,14 @@ final class ApiController extends Controller
|
||||||
public function apiWikiDocCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void
|
public function apiWikiDocCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void
|
||||||
{
|
{
|
||||||
if (!empty($val = $this->validateWikiDocCreate($request))) {
|
if (!empty($val = $this->validateWikiDocCreate($request))) {
|
||||||
$response->set('wiki_doc_create', new FormValidation($val));
|
$response->set($request->getUri()->__toString(), new FormValidation($val));
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$doc = $this->createWikiDocFromRquest($request);
|
$doc = $this->createWikiDocFromRequest($request);
|
||||||
WikiDocMapper::create($doc);
|
$this->createModel($request->getHeader()->getAccount(), $doc, WikiDocMapper::class, 'doc');
|
||||||
$response->set('doc', $doc->jsonSerialize());
|
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Wiki', 'Wiki successfully created.', $doc);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -74,15 +74,19 @@ final class ApiController extends Controller
|
||||||
*
|
*
|
||||||
* @since 1.0.0
|
* @since 1.0.0
|
||||||
*/
|
*/
|
||||||
public function createWikiDocFromRquest(RequestAbstract $request) : WikiDoc
|
public function createWikiDocFromRequest(RequestAbstract $request) : WikiDoc
|
||||||
{
|
{
|
||||||
$mardkownParser = new Markdown();
|
|
||||||
|
|
||||||
$doc = new WikiDoc();
|
$doc = new WikiDoc();
|
||||||
$doc->setName((string) $request->getData('title'));
|
$doc->setName((string) $request->getData('title'));
|
||||||
$doc->setDoc((string) $request->getData('plain'));
|
$doc->setDoc(Markdown::parse((string) ($request->getData('plain') ?? '')));
|
||||||
$doc->setCategory((int) $request->getData('category'));
|
$doc->setDocRaw((string) ($request->getData('plain') ?? ''));
|
||||||
$doc->setStatus((int) $request->getData('status'));
|
$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;
|
return $doc;
|
||||||
}
|
}
|
||||||
|
|
@ -101,7 +105,6 @@ final class ApiController extends Controller
|
||||||
$val = [];
|
$val = [];
|
||||||
if (($val['title'] = empty($request->getData('title')))
|
if (($val['title'] = empty($request->getData('title')))
|
||||||
|| ($val['plain'] = empty($request->getData('plain')))
|
|| ($val['plain'] = empty($request->getData('plain')))
|
||||||
|| ($val['category'] = empty($request->getData('category')))
|
|
||||||
|| ($val['status'] = (
|
|| ($val['status'] = (
|
||||||
$request->getData('status') !== null
|
$request->getData('status') !== null
|
||||||
&& !WikiStatus::isValidValue((int) $request->getData('status'))
|
&& !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
|
public function apiWikiCategoryCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void
|
||||||
{
|
{
|
||||||
if (!empty($val = $this->validateWikiCategoryCreate($request))) {
|
if (!empty($val = $this->validateWikiCategoryCreate($request))) {
|
||||||
$response->set('wiki_category_create', new FormValidation($val));
|
$response->set($request->getUri()->__toString(), new FormValidation($val));
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$category = $this->createWikiCategoryFromRquest($request);
|
$category = $this->createWikiCategoryFromRequest($request);
|
||||||
WikiCategoryMapper::create($category);
|
$this->createModel($request->getHeader()->getAccount(), $category, WikiCategoryMapper::class, 'category');
|
||||||
$response->set('category', $category->jsonSerialize());
|
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Category', 'Category successfully created.', $category);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -148,13 +151,18 @@ final class ApiController extends Controller
|
||||||
*
|
*
|
||||||
* @since 1.0.0
|
* @since 1.0.0
|
||||||
*/
|
*/
|
||||||
public function createWikiCategoryFromRquest(RequestAbstract $request) : WikiCategory
|
public function createWikiCategoryFromRequest(RequestAbstract $request) : WikiCategory
|
||||||
{
|
{
|
||||||
$mardkownParser = new Markdown();
|
|
||||||
|
|
||||||
$category = new WikiCategory();
|
$category = new WikiCategory();
|
||||||
$category->setName((string) $request->getData('title'));
|
$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;
|
return $category;
|
||||||
}
|
}
|
||||||
|
|
@ -171,9 +179,7 @@ final class ApiController extends Controller
|
||||||
private function validateWikiCategoryCreate(RequestAbstract $request) : array
|
private function validateWikiCategoryCreate(RequestAbstract $request) : array
|
||||||
{
|
{
|
||||||
$val = [];
|
$val = [];
|
||||||
if (($val['title'] = empty($request->getData('title')))
|
if (($val['title'] = empty($request->getData('title')))) {
|
||||||
|| ($val['parent'] = empty($request->getData('parent')))
|
|
||||||
) {
|
|
||||||
return $val;
|
return $val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -81,7 +81,7 @@ final class BackendController extends Controller
|
||||||
$view->setTemplate('/Modules/Knowledgebase/Theme/Backend/wiki-dashboard');
|
$view->setTemplate('/Modules/Knowledgebase/Theme/Backend/wiki-dashboard');
|
||||||
$view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1005901001, $request, $response));
|
$view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1005901001, $request, $response));
|
||||||
|
|
||||||
$categories = WikiCategoryMapper::getNewest(50);
|
$categories = WikiCategoryMapper::getAll();
|
||||||
$view->setData('categories', $categories);
|
$view->setData('categories', $categories);
|
||||||
|
|
||||||
$documents = WikiDocMapper::getNewest(50);
|
$documents = WikiDocMapper::getNewest(50);
|
||||||
|
|
@ -288,9 +288,14 @@ final class BackendController extends Controller
|
||||||
return $view;
|
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->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;
|
return $view;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,5 +15,6 @@ declare(strict_types=1);
|
||||||
return ['Knowledgebase' => [
|
return ['Knowledgebase' => [
|
||||||
'Categories' => 'Categories',
|
'Categories' => 'Categories',
|
||||||
'Name' => 'Name',
|
'Name' => 'Name',
|
||||||
|
'Parent' => 'Parent',
|
||||||
'Wiki' => 'Wiki',
|
'Wiki' => 'Wiki',
|
||||||
]];
|
]];
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
*/
|
*/
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
use phpOMS\Uri\UriFactory;
|
||||||
|
|
||||||
$categories = $this->getData('categories');
|
$categories = $this->getData('categories');
|
||||||
|
|
||||||
|
|
@ -30,18 +31,20 @@ echo $this->getData('nav')->render();
|
||||||
<tr>
|
<tr>
|
||||||
<td><?= $this->getHtml('ID', '0', '0'); ?>
|
<td><?= $this->getHtml('ID', '0', '0'); ?>
|
||||||
<td class="wf-100"><?= $this->getHtml('Name') ?>
|
<td class="wf-100"><?= $this->getHtml('Name') ?>
|
||||||
<tfoot>
|
<td><?= $this->getHtml('Parent') ?>
|
||||||
|
<tfoot>
|
||||||
<tr><td colspan="2">
|
<tr><td colspan="2">
|
||||||
<tbody>
|
<tbody>
|
||||||
<?php $c = 0; foreach ($categories as $key => $value) : ++$c;
|
<?php foreach ($categories as $key => $value) :
|
||||||
$url = \phpOMS\Uri\UriFactory::build('{/prefix}admin/account/settings?{?}&id=' . $value->getId()); ?>
|
$url = UriFactory::build('{/prefix}admin/account/settings?{?}&id=' . $value->getId()); ?>
|
||||||
<tr data-href="<?= $url; ?>">
|
<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('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>
|
<td data-label="<?= $this->getHtml('Name') ?>"><a href="<?= $url; ?>"><?= $this->printHtml($value->getName()); ?></a>
|
||||||
<?php endforeach; ?>
|
<td data-label="<?= $this->getHtml('Parent') ?>"><a href="<?= $url; ?>"><?= $this->printHtml($value->getParent() !== null ? $value->getParent()->getName() : ''); ?></a>
|
||||||
<?php if ($c === 0) : ?>
|
<?php endforeach; ?>
|
||||||
<tr><td colspan="2" class="empty"><?= $this->getHtml('Empty', '0', '0'); ?>
|
<?php if (empty($categories)) : ?>
|
||||||
<?php endif; ?>
|
<tr><td colspan="3" class="empty"><?= $this->getHtml('Empty', '0', '0'); ?>
|
||||||
|
<?php endif; ?>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -29,12 +29,18 @@ echo $this->getData('nav')->render(); ?>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-8 col-lg-9">
|
<div class="col-xs-12 col-md-8 col-lg-9">
|
||||||
<div class="row">
|
<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">
|
<section class="box wf-100">
|
||||||
<header><h1><?= $doc->getName(); ?></h1></header>
|
<header><h1><a href="<?= $url; ?>"><?= $this->printHtml($doc->getName()); ?></a></h1></header>
|
||||||
<article>
|
<article>
|
||||||
<?= $doc->getDoc(); ?>
|
<?= \substr($doc->getDoc(), 0, 300) . (\strlen($doc->getDoc()) > 300 ? '...' : ''); ?>
|
||||||
</article>
|
</article>
|
||||||
|
<div class="inner">
|
||||||
|
<div class="overflowfix">
|
||||||
|
<span class="tag">Test Tag</span>
|
||||||
|
<a href="<?= $url; ?>" class="button floatRight">More</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</section>
|
</section>
|
||||||
<?php endforeach; ?>
|
<?php endforeach; ?>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -43,11 +49,11 @@ echo $this->getData('nav')->render(); ?>
|
||||||
<div class="col-xs-12 col-md-4 col-lg-3">
|
<div class="col-xs-12 col-md-4 col-lg-3">
|
||||||
<section class="box wf-100">
|
<section class="box wf-100">
|
||||||
<div class="inner">
|
<div class="inner">
|
||||||
<ul>
|
<ul>
|
||||||
<?php foreach ($categories as $category) : ?>
|
<?php foreach ($categories as $category) : ?>
|
||||||
<li><a href="<?= UriFactory::build('{/prefix}wiki/doc/list?{?}&id=' . $category->getId()); ?>"><?= $this->printHtml($category->getName()); ?></a>
|
<li><a href="<?= UriFactory::build('{/prefix}wiki/doc/list?{?}&id=' . $category->getId()); ?>"><?= $this->printHtml($category->getName()); ?></a>
|
||||||
<?php endforeach; ?>
|
<?php endforeach; ?>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
53
Theme/Backend/wiki-doc-single.tpl.php
Normal file
53
Theme/Backend/wiki-doc-single.tpl.php
Normal 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>
|
||||||
|
|
@ -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>
|
|
||||||
Loading…
Reference in New Issue
Block a user