mirror of
https://github.com/Karaka-Management/oms-Knowledgebase.git
synced 2026-01-21 13:58: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;
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,5 +15,6 @@ declare(strict_types=1);
|
|||
return ['Knowledgebase' => [
|
||||
'Categories' => 'Categories',
|
||||
'Name' => 'Name',
|
||||
'Parent' => 'Parent',
|
||||
'Wiki' => 'Wiki',
|
||||
]];
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
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