mirror of
https://github.com/Karaka-Management/oms-Knowledgebase.git
synced 2026-01-11 09:28:40 +00:00
new datamapper mostly implemented
This commit is contained in:
parent
ff47ff2d01
commit
50eb9604c4
|
|
@ -52,12 +52,12 @@ final class Installer extends InstallerAbstract
|
|||
$app = new WikiApp();
|
||||
$app->name = 'Default';
|
||||
|
||||
$id = WikiAppMapper::create($app);
|
||||
$id = WikiAppMapper::create()->execute($app);
|
||||
|
||||
$category = new WikiCategory();
|
||||
$category->app = new NullWikiApp($id);
|
||||
$category->setL11n('Default');
|
||||
|
||||
WikiCategoryMapper::create($category);
|
||||
WikiCategoryMapper::create()->execute($category);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ use Modules\Knowledgebase\Models\WikiDocMapper;
|
|||
use Modules\Knowledgebase\Models\WikiStatus;
|
||||
use Modules\Media\Models\NullMedia;
|
||||
use Modules\Tag\Models\NullTag;
|
||||
use phpOMS\Localization\ISO639x1Enum;
|
||||
use phpOMS\Message\Http\HttpResponse;
|
||||
use phpOMS\Message\Http\RequestStatusCode;
|
||||
use phpOMS\Message\NotificationLevel;
|
||||
|
|
@ -245,7 +246,7 @@ final class ApiController extends Controller
|
|||
*/
|
||||
public function apiWikiDocGet(RequestAbstract $request, ResponseAbstract $response, $data = null) : void
|
||||
{
|
||||
$doc = WikiDocMapper::get((int) $request->getData('id'));
|
||||
$doc = WikiDocMapper::get()->where('id', (int) $request->getData('id'))->execute();
|
||||
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Doc', 'Doc successfully returned', $doc);
|
||||
}
|
||||
|
||||
|
|
@ -264,7 +265,7 @@ final class ApiController extends Controller
|
|||
*/
|
||||
public function apiWikiDocUpdate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void
|
||||
{
|
||||
$old = clone WikiDocMapper::get((int) $request->getData('id'));
|
||||
$old = clone WikiDocMapper::get()->where('id', (int) $request->getData('id'))->execute();
|
||||
$new = $this->updateDocFromRequest($request);
|
||||
$this->updateModel($request->header->account, $old, $new, WikiDocMapper::class, 'doc', $request->getOrigin());
|
||||
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Doc', 'Doc successfully updated', $new);
|
||||
|
|
@ -281,7 +282,7 @@ final class ApiController extends Controller
|
|||
*/
|
||||
private function updateDocFromRequest(RequestAbstract $request) : WikiDoc
|
||||
{
|
||||
$doc = WikiDocMapper::get((int) $request->getData('id'));
|
||||
$doc = WikiDocMapper::get()->where('id', (int) $request->getData('id'))->execute();
|
||||
$doc->name = (string) ($request->getData('title') ?? $doc->name);
|
||||
|
||||
return $doc;
|
||||
|
|
@ -302,7 +303,7 @@ final class ApiController extends Controller
|
|||
*/
|
||||
public function apiWikiDocDelete(RequestAbstract $request, ResponseAbstract $response, $data = null) : void
|
||||
{
|
||||
$doc = WikiDocMapper::get((int) $request->getData('id'));
|
||||
$doc = WikiDocMapper::get()->where('id', (int) $request->getData('id'))->execute();
|
||||
$this->deleteModel($request->header->account, $doc, WikiDocMapper::class, 'doc', $request->getOrigin());
|
||||
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Doc', 'Doc successfully deleted', $doc);
|
||||
}
|
||||
|
|
@ -391,7 +392,12 @@ final class ApiController extends Controller
|
|||
*/
|
||||
public function apiWikiCategoryGet(RequestAbstract $request, ResponseAbstract $response, $data = null) : void
|
||||
{
|
||||
$category = WikiCategoryMapper::get((int) $request->getData('id'));
|
||||
$category = WikiCategoryMapper::get()
|
||||
->with('name')
|
||||
->where('id', (int) $request->getData('id'))
|
||||
->where('name/language', ISO639x1Enum::_EN)
|
||||
->execute();
|
||||
|
||||
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Category', 'Category successfully returned', $category);
|
||||
}
|
||||
|
||||
|
|
@ -410,7 +416,7 @@ final class ApiController extends Controller
|
|||
*/
|
||||
public function apiWikiCategoryUpdate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void
|
||||
{
|
||||
$old = clone WikiCategoryMapper::get((int) $request->getData('id'));
|
||||
$old = clone WikiCategoryMapper::get()->where('id', (int) $request->getData('id'))->execute();
|
||||
$new = $this->updateCategoryFromRequest($request);
|
||||
$this->updateModel($request->header->account, $old, $new, WikiCategoryMapper::class, 'category', $request->getOrigin());
|
||||
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Category', 'Category successfully updated', $new);
|
||||
|
|
@ -427,7 +433,7 @@ final class ApiController extends Controller
|
|||
*/
|
||||
private function updateCategoryFromRequest(RequestAbstract $request) : WikiCategory
|
||||
{
|
||||
$category = WikiCategoryMapper::get((int) $request->getData('id'));
|
||||
$category = WikiCategoryMapper::get()->where('id', (int) $request->getData('id'))->execute();
|
||||
$category->setL11n($request->getData('name') ?? $category->getL11n(), $request->getData('language') ?? $request->getLanguage());
|
||||
|
||||
return $category;
|
||||
|
|
@ -448,7 +454,7 @@ final class ApiController extends Controller
|
|||
*/
|
||||
public function apiWikiCategoryDelete(RequestAbstract $request, ResponseAbstract $response, $data = null) : void
|
||||
{
|
||||
$category = WikiCategoryMapper::get((int) $request->getData('id'));
|
||||
$category = WikiCategoryMapper::get()->where('id', (int) $request->getData('id'))->execute();
|
||||
$this->deleteModel($request->header->account, $category, WikiCategoryMapper::class, 'category', $request->getOrigin());
|
||||
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Category', 'Category successfully deleted', $category);
|
||||
}
|
||||
|
|
@ -531,7 +537,7 @@ final class ApiController extends Controller
|
|||
*/
|
||||
public function apiWikiAppGet(RequestAbstract $request, ResponseAbstract $response, $data = null) : void
|
||||
{
|
||||
$app = WikiAppMapper::get((int) $request->getData('id'));
|
||||
$app = WikiAppMapper::get()->where('id', (int) $request->getData('id'))->execute();
|
||||
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'App', 'App successfully returned', $app);
|
||||
}
|
||||
|
||||
|
|
@ -550,7 +556,7 @@ final class ApiController extends Controller
|
|||
*/
|
||||
public function apiWikiAppUpdate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void
|
||||
{
|
||||
$old = clone WikiAppMapper::get((int) $request->getData('id'));
|
||||
$old = clone WikiAppMapper::get()->where('id', (int) $request->getData('id'))->execute();
|
||||
$new = $this->updateAppFromRequest($request);
|
||||
$this->updateModel($request->header->account, $old, $new, WikiAppMapper::class, 'app', $request->getOrigin());
|
||||
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'App', 'App successfully updated', $new);
|
||||
|
|
@ -567,7 +573,7 @@ final class ApiController extends Controller
|
|||
*/
|
||||
private function updateAppFromRequest(RequestAbstract $request) : WikiApp
|
||||
{
|
||||
$app = WikiAppMapper::get((int) $request->getData('id'));
|
||||
$app = WikiAppMapper::get()->where('id', (int) $request->getData('id'))->execute();
|
||||
$app->name = (string) ($request->getData('name') ?? $app->name);
|
||||
|
||||
return $app;
|
||||
|
|
@ -588,7 +594,7 @@ final class ApiController extends Controller
|
|||
*/
|
||||
public function apiWikiAppDelete(RequestAbstract $request, ResponseAbstract $response, $data = null) : void
|
||||
{
|
||||
$app = WikiAppMapper::get((int) $request->getData('id'));
|
||||
$app = WikiAppMapper::get()->where('id', (int) $request->getData('id'))->execute();
|
||||
$this->deleteModel($request->header->account, $app, WikiAppMapper::class, 'app', $request->getOrigin());
|
||||
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'App', 'App successfully deleted', $app);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ use Modules\Knowledgebase\Models\WikiDocMapper;
|
|||
use phpOMS\Account\PermissionType;
|
||||
use phpOMS\Asset\AssetType;
|
||||
use phpOMS\Contract\RenderableInterface;
|
||||
use phpOMS\DataStorage\Database\Query\OrderType;
|
||||
use phpOMS\Message\Http\RequestStatusCode;
|
||||
use phpOMS\Message\RequestAbstract;
|
||||
use phpOMS\Message\ResponseAbstract;
|
||||
|
|
@ -79,13 +80,13 @@ 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::with('language', $response->getLanguage())::getByParentAndApp($request->hasData('category') ? (int) $request->getData('category') : null, $app, 2);
|
||||
$categories = WikiCategoryMapper::getByParentAndApp($request->hasData('category') ? (int) $request->getData('category') : null, $app)->where('name/language', $response->getLanguage())->execute();
|
||||
$view->setData('categories', $categories);
|
||||
|
||||
$documents = WikiDocMapper::with('language', $response->getLanguage())::getNewestByApp($app, 10);
|
||||
$documents = WikiDocMapper::getAll()->where('app', $app)->where('language', $response->getLanguage())->limit(25)->sort('createdAt', OrderType::DESC)->execute();
|
||||
$view->setData('docs', $documents);
|
||||
|
||||
$apps = WikiAppMapper::getAll();
|
||||
$apps = WikiAppMapper::getAll()->execute();
|
||||
$view->setData('apps', $apps);
|
||||
|
||||
return $view;
|
||||
|
|
@ -110,7 +111,7 @@ final class BackendController extends Controller
|
|||
$view->setTemplate('/Modules/Knowledgebase/Theme/Backend/wiki-app-list');
|
||||
$view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1005901001, $request, $response));
|
||||
|
||||
$list = WikiAppMapper::getAll();
|
||||
$list = WikiAppMapper::getAll()->execute();
|
||||
$view->setData('apps', $list);
|
||||
|
||||
return $view;
|
||||
|
|
@ -135,7 +136,7 @@ final class BackendController extends Controller
|
|||
$view->setTemplate('/Modules/Knowledgebase/Theme/Backend/wiki-app-single');
|
||||
$view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1005901001, $request, $response));
|
||||
|
||||
$app = WikiAppMapper::get((int) $request->getData('id'));
|
||||
$app = WikiAppMapper::get()->where('id', (int) $request->getData('id'))->execute();
|
||||
$view->setData('app', $app);
|
||||
|
||||
return $view;
|
||||
|
|
@ -185,7 +186,7 @@ final class BackendController extends Controller
|
|||
$view->setTemplate('/Modules/Knowledgebase/Theme/Backend/wiki-category-list');
|
||||
$view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1005901001, $request, $response));
|
||||
|
||||
$list = WikiCategoryMapper::with('language', $response->getLanguage())::getByApp($app, 2);
|
||||
$list = WikiCategoryMapper::getByApp($app)->where('name/language', $response->getLanguage())->execute();
|
||||
$view->setData('categories', $list);
|
||||
|
||||
return $view;
|
||||
|
|
@ -210,7 +211,7 @@ final class BackendController extends Controller
|
|||
$view->setTemplate('/Modules/Knowledgebase/Theme/Backend/wiki-category-single');
|
||||
$view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1005901001, $request, $response));
|
||||
|
||||
$category = WikiCategoryMapper::get((int) $request->getData('id'));
|
||||
$category = WikiCategoryMapper::get()->where('id', (int) $request->getData('id'))->execute();
|
||||
$view->setData('category', $category);
|
||||
|
||||
return $view;
|
||||
|
|
@ -258,7 +259,7 @@ final class BackendController extends Controller
|
|||
$view->setTemplate('/Modules/Knowledgebase/Theme/Backend/wiki-doc-list');
|
||||
$view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1005901001, $request, $response));
|
||||
|
||||
$list = WikiDocMapper::getAll();
|
||||
$list = WikiDocMapper::getAll()->limit(25)->execute();
|
||||
$view->setData('docs', $list);
|
||||
|
||||
return $view;
|
||||
|
|
@ -283,7 +284,7 @@ final class BackendController extends Controller
|
|||
$app = (int) ($request->getData('app') ?? $this->app->orgId);
|
||||
$lang = $response->getLanguage();
|
||||
|
||||
$document = WikiDocMapper::with('language', $lang)::get((int) $request->getData('id'));
|
||||
$document = WikiDocMapper::get()->where('id', (int) $request->getData('id'))->where('language', $request->getLanguage())->execute();
|
||||
$accountId = $request->header->account;
|
||||
|
||||
if (!$this->app->accountManager->get($accountId)->hasPermission(
|
||||
|
|
@ -297,7 +298,7 @@ final class BackendController extends Controller
|
|||
$view->setTemplate('/Modules/Knowledgebase/Theme/Backend/wiki-doc-single');
|
||||
$view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1005901001, $request, $response));
|
||||
|
||||
$categories = WikiCategoryMapper::with('language', $lang)::getByParentAndApp($request->hasData('category') ? (int) $request->getData('category') : null, $app, 2);
|
||||
$categories = WikiCategoryMapper::getByParentAndApp($request->hasData('category') ? (int) $request->getData('category') : null, $app)->where('name/language', $response->getLanguage())->execute();;
|
||||
$view->setData('categories', $categories);
|
||||
$view->setData('document', $document);
|
||||
$view->addData('editable', $this->app->accountManager->get($accountId)->hasPermission(
|
||||
|
|
@ -365,7 +366,7 @@ final class BackendController extends Controller
|
|||
$tagSelector = new \Modules\Tag\Theme\Backend\Components\TagSelector\BaseView($this->app->l11nManager, $request, $response);
|
||||
$view->addData('tagSelector', $tagSelector);
|
||||
|
||||
$view->addData('doc', WikiDocMapper::get((int) ($request->getData('id') ?? 0)));
|
||||
$view->addData('doc', WikiDocMapper::get()->where('id', (int) ($request->getData('id') ?? 0))->execute());
|
||||
|
||||
return $view;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ declare(strict_types=1);
|
|||
|
||||
namespace Modules\Knowledgebase\Models;
|
||||
|
||||
use phpOMS\DataStorage\Database\DataMapperAbstract;
|
||||
use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;
|
||||
|
||||
/**
|
||||
* Mapper class.
|
||||
|
|
@ -24,7 +24,7 @@ use phpOMS\DataStorage\Database\DataMapperAbstract;
|
|||
* @link https://orange-management.org
|
||||
* @since 1.0.0
|
||||
*/
|
||||
final class WikiAppMapper extends DataMapperAbstract
|
||||
final class WikiAppMapper extends DataMapperFactory
|
||||
{
|
||||
/**
|
||||
* Columns.
|
||||
|
|
@ -32,7 +32,7 @@ final class WikiAppMapper extends DataMapperAbstract
|
|||
* @var array<string, array{name:string, type:string, internal:string, autocomplete?:bool, readonly?:bool, writeonly?:bool, annotations?:array}>
|
||||
* @since 1.0.0
|
||||
*/
|
||||
protected static array $columns = [
|
||||
public const COLUMNS = [
|
||||
'wiki_app_id' => ['name' => 'wiki_app_id', 'type' => 'int', 'internal' => 'id'],
|
||||
'wiki_app_name' => ['name' => 'wiki_app_name', 'type' => 'string', 'internal' => 'name'],
|
||||
];
|
||||
|
|
@ -43,7 +43,7 @@ final class WikiAppMapper extends DataMapperAbstract
|
|||
* @var string
|
||||
* @since 1.0.0
|
||||
*/
|
||||
protected static string $table = 'wiki_app';
|
||||
public const TABLE = 'wiki_app';
|
||||
|
||||
/**
|
||||
* Primary field name.
|
||||
|
|
@ -51,5 +51,5 @@ final class WikiAppMapper extends DataMapperAbstract
|
|||
* @var string
|
||||
* @since 1.0.0
|
||||
*/
|
||||
protected static string $primaryField = 'wiki_app_id';
|
||||
public const PRIMARYFIELD ='wiki_app_id';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ declare(strict_types=1);
|
|||
|
||||
namespace Modules\Knowledgebase\Models;
|
||||
|
||||
use phpOMS\DataStorage\Database\DataMapperAbstract;
|
||||
use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;
|
||||
|
||||
/**
|
||||
* Category mapper class.
|
||||
|
|
@ -24,7 +24,7 @@ use phpOMS\DataStorage\Database\DataMapperAbstract;
|
|||
* @link https://orange-management.org
|
||||
* @since 1.0.0
|
||||
*/
|
||||
final class WikiCategoryL11nMapper extends DataMapperAbstract
|
||||
final class WikiCategoryL11nMapper extends DataMapperFactory
|
||||
{
|
||||
/**
|
||||
* Columns.
|
||||
|
|
@ -32,7 +32,7 @@ final class WikiCategoryL11nMapper extends DataMapperAbstract
|
|||
* @var array<string, array{name:string, type:string, internal:string, autocomplete?:bool, readonly?:bool, writeonly?:bool, annotations?:array}>
|
||||
* @since 1.0.0
|
||||
*/
|
||||
protected static array $columns = [
|
||||
public const COLUMNS = [
|
||||
'wiki_category_l11n_id' => ['name' => 'wiki_category_l11n_id', 'type' => 'int', 'internal' => 'id'],
|
||||
'wiki_category_l11n_name' => ['name' => 'wiki_category_l11n_name', 'type' => 'string', 'internal' => 'name', 'autocomplete' => true],
|
||||
'wiki_category_l11n_category' => ['name' => 'wiki_category_l11n_category', 'type' => 'int', 'internal' => 'category'],
|
||||
|
|
@ -45,7 +45,7 @@ final class WikiCategoryL11nMapper extends DataMapperAbstract
|
|||
* @var string
|
||||
* @since 1.0.0
|
||||
*/
|
||||
protected static string $table = 'wiki_category_l11n';
|
||||
public const TABLE = 'wiki_category_l11n';
|
||||
|
||||
/**
|
||||
* Primary field name.
|
||||
|
|
@ -53,5 +53,5 @@ final class WikiCategoryL11nMapper extends DataMapperAbstract
|
|||
* @var string
|
||||
* @since 1.0.0
|
||||
*/
|
||||
protected static string $primaryField = 'wiki_category_l11n_id';
|
||||
public const PRIMARYFIELD ='wiki_category_l11n_id';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,8 +14,8 @@ declare(strict_types=1);
|
|||
|
||||
namespace Modules\Knowledgebase\Models;
|
||||
|
||||
use phpOMS\DataStorage\Database\DataMapperAbstract;
|
||||
use phpOMS\DataStorage\Database\RelationType;
|
||||
use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;
|
||||
use phpOMS\DataStorage\Database\Mapper\ReadMapper;
|
||||
|
||||
/**
|
||||
* Mapper class.
|
||||
|
|
@ -25,7 +25,7 @@ use phpOMS\DataStorage\Database\RelationType;
|
|||
* @link https://orange-management.org
|
||||
* @since 1.0.0
|
||||
*/
|
||||
final class WikiCategoryMapper extends DataMapperAbstract
|
||||
final class WikiCategoryMapper extends DataMapperFactory
|
||||
{
|
||||
/**
|
||||
* Columns.
|
||||
|
|
@ -33,7 +33,7 @@ final class WikiCategoryMapper extends DataMapperAbstract
|
|||
* @var array<string, array{name:string, type:string, internal:string, autocomplete?:bool, readonly?:bool, writeonly?:bool, annotations?:array}>
|
||||
* @since 1.0.0
|
||||
*/
|
||||
protected static array $columns = [
|
||||
public const COLUMNS = [
|
||||
'wiki_category_id' => ['name' => 'wiki_category_id', 'type' => 'int', 'internal' => 'id'],
|
||||
'wiki_category_app' => ['name' => 'wiki_category_app', 'type' => 'int', 'internal' => 'app'],
|
||||
'wiki_category_virtual' => ['name' => 'wiki_category_virtual', 'type' => 'string', 'internal' => 'virtualPath'],
|
||||
|
|
@ -46,13 +46,12 @@ final class WikiCategoryMapper extends DataMapperAbstract
|
|||
* @var array<string, array{mapper:string, table:string, self?:?string, external?:?string, column?:string}>
|
||||
* @since 1.0.0
|
||||
*/
|
||||
protected static array $hasMany = [
|
||||
public const HAS_MANY = [
|
||||
'name' => [
|
||||
'mapper' => WikiCategoryL11nMapper::class,
|
||||
'table' => 'wiki_category_l11n',
|
||||
'self' => 'wiki_category_l11n_category',
|
||||
'column' => 'name',
|
||||
'conditional' => true,
|
||||
'external' => null,
|
||||
],
|
||||
];
|
||||
|
|
@ -63,7 +62,7 @@ final class WikiCategoryMapper extends DataMapperAbstract
|
|||
* @var array<string, array<string, null|string>>
|
||||
* @since 1.0.0
|
||||
*/
|
||||
protected static array $belongsTo = [
|
||||
public const BELONGS_TO = [
|
||||
'parent' => [
|
||||
'mapper' => self::class,
|
||||
'external' => 'wiki_category_parent',
|
||||
|
|
@ -80,7 +79,7 @@ final class WikiCategoryMapper extends DataMapperAbstract
|
|||
* @var string
|
||||
* @since 1.0.0
|
||||
*/
|
||||
protected static string $table = 'wiki_category';
|
||||
public const TABLE = 'wiki_category';
|
||||
|
||||
/**
|
||||
* Primary field name.
|
||||
|
|
@ -88,7 +87,7 @@ final class WikiCategoryMapper extends DataMapperAbstract
|
|||
* @var string
|
||||
* @since 1.0.0
|
||||
*/
|
||||
protected static string $primaryField = 'wiki_category_id';
|
||||
public const PRIMARYFIELD ='wiki_category_id';
|
||||
|
||||
/**
|
||||
* Parent field name.
|
||||
|
|
@ -103,36 +102,16 @@ final class WikiCategoryMapper extends DataMapperAbstract
|
|||
*
|
||||
* @param null|int $value Parent value id
|
||||
* @param int $app App
|
||||
* @param int $depth Relation depth
|
||||
*
|
||||
* @return array
|
||||
* @return ReadMapper
|
||||
*
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public static function getByParentAndApp(int $value = null, int $app = 1, int $depth = 3) : array
|
||||
public static function getByParentAndApp(int $value = null, int $app = 1) : ReadMapper
|
||||
{
|
||||
$query = self::getQuery();
|
||||
$query->where(static::$table . '_d' . $depth . '.' . static::$parent, '=', $value)
|
||||
->andWhere(static::$table . '_d' . $depth . '.wiki_category_app', '=', $app);
|
||||
|
||||
return self::getAllByQuery($query, RelationType::ALL, $depth);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get by app.
|
||||
*
|
||||
* @param int $app App
|
||||
* @param int $depth Relation depth
|
||||
*
|
||||
* @return array
|
||||
*
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public static function getByApp(int $app, int $depth = 3) : array
|
||||
{
|
||||
$query = self::getQuery();
|
||||
$query->where(static::$table . '_d' . $depth . '.wiki_category_app', '=', $app);
|
||||
|
||||
return self::getAllByQuery($query, RelationType::ALL, $depth);
|
||||
return self::getAll()
|
||||
->with('name')
|
||||
->where('parent', $value)
|
||||
->where('app', $app);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,9 +16,8 @@ namespace Modules\Knowledgebase\Models;
|
|||
|
||||
use Modules\Media\Models\MediaMapper;
|
||||
use Modules\Tag\Models\TagMapper;
|
||||
use phpOMS\DataStorage\Database\DataMapperAbstract;
|
||||
use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;
|
||||
use phpOMS\DataStorage\Database\Query\Builder;
|
||||
use phpOMS\DataStorage\Database\RelationType;
|
||||
|
||||
/**
|
||||
* Mapper class.
|
||||
|
|
@ -28,7 +27,7 @@ use phpOMS\DataStorage\Database\RelationType;
|
|||
* @link https://orange-management.org
|
||||
* @since 1.0.0
|
||||
*/
|
||||
final class WikiDocMapper extends DataMapperAbstract
|
||||
final class WikiDocMapper extends DataMapperFactory
|
||||
{
|
||||
/**
|
||||
* Columns.
|
||||
|
|
@ -36,7 +35,7 @@ final class WikiDocMapper extends DataMapperAbstract
|
|||
* @var array<string, array{name:string, type:string, internal:string, autocomplete?:bool, readonly?:bool, writeonly?:bool, annotations?:array}>
|
||||
* @since 1.0.0
|
||||
*/
|
||||
protected static array $columns = [
|
||||
public const COLUMNS = [
|
||||
'wiki_article_id' => ['name' => 'wiki_article_id', 'type' => 'int', 'internal' => 'id'],
|
||||
'wiki_article_app' => ['name' => 'wiki_article_app', 'type' => 'int', 'internal' => 'app'],
|
||||
'wiki_article_title' => ['name' => 'wiki_article_title', 'type' => 'string', 'internal' => 'name'],
|
||||
|
|
@ -53,7 +52,7 @@ final class WikiDocMapper extends DataMapperAbstract
|
|||
* @var array<string, array{mapper:string, table:string, self?:?string, external?:?string, column?:string}>
|
||||
* @since 1.0.0
|
||||
*/
|
||||
protected static array $hasMany = [
|
||||
public const HAS_MANY = [
|
||||
'tags' => [
|
||||
'mapper' => TagMapper::class,
|
||||
'table' => 'wiki_tag',
|
||||
|
|
@ -74,7 +73,7 @@ final class WikiDocMapper extends DataMapperAbstract
|
|||
* @var array<string, array<string, null|string>>
|
||||
* @since 1.0.0
|
||||
*/
|
||||
protected static array $belongsTo = [
|
||||
public const BELONGS_TO = [
|
||||
'category' => [
|
||||
'mapper' => WikiCategoryMapper::class,
|
||||
'external' => 'wiki_article_category',
|
||||
|
|
@ -91,7 +90,7 @@ final class WikiDocMapper extends DataMapperAbstract
|
|||
* @var string
|
||||
* @since 1.0.0
|
||||
*/
|
||||
protected static string $table = 'wiki_article';
|
||||
public const TABLE = 'wiki_article';
|
||||
|
||||
/**
|
||||
* Primary field name.
|
||||
|
|
@ -99,36 +98,5 @@ final class WikiDocMapper extends DataMapperAbstract
|
|||
* @var string
|
||||
* @since 1.0.0
|
||||
*/
|
||||
protected static string $primaryField = 'wiki_article_id';
|
||||
|
||||
/**
|
||||
* Get newest.
|
||||
*
|
||||
* This will fall back to the insert id if no datetime column is present.
|
||||
*
|
||||
* @param int $app App
|
||||
* @param int $limit Newest limit
|
||||
* @param Builder $query Pre-defined query
|
||||
* @param int $relations Load relations
|
||||
* @param int $depth Relation depth
|
||||
*
|
||||
* @return array
|
||||
*
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public static function getNewestByApp(int $app, int $limit = 1, Builder $query = null, int $relations = RelationType::ALL, int $depth = 3) : array
|
||||
{
|
||||
$query ??= self::getQuery(null, [], $relations, $depth);
|
||||
|
||||
$query->where(static::$table . '_d' . $depth . '.wiki_article_app', '=', $app)
|
||||
->limit($limit);
|
||||
|
||||
if (!empty(static::$createdAt)) {
|
||||
$query->orderBy(static::$table . '_d' . $depth . '.' . static::$columns[static::$createdAt]['name'], 'DESC');
|
||||
} else {
|
||||
$query->orderBy(static::$table . '_d' . $depth . '.' . static::$columns[static::$primaryField]['name'], 'DESC');
|
||||
}
|
||||
|
||||
return self::getAllByQuery($query, $relations, $depth);
|
||||
}
|
||||
public const PRIMARYFIELD ='wiki_article_id';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ require_once __DIR__ . '/../vendor/autoload.php';
|
|||
require_once __DIR__ . '/Autoloader.php';
|
||||
|
||||
use phpOMS\DataStorage\Database\DatabasePool;
|
||||
use phpOMS\DataStorage\Database\DataMapperAbstract;
|
||||
use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;
|
||||
use phpOMS\DataStorage\Session\HttpSession;
|
||||
|
||||
$CONFIG = [
|
||||
|
|
@ -329,7 +329,7 @@ $GLOBALS['dbpool']->create('delete', $CONFIG['db']['core']['masters']['delete'])
|
|||
$GLOBALS['dbpool']->create('insert', $CONFIG['db']['core']['masters']['insert']);
|
||||
$GLOBALS['dbpool']->create('schema', $CONFIG['db']['core']['masters']['schema']);
|
||||
|
||||
DataMapperAbstract::setConnection($GLOBALS['dbpool']->get());
|
||||
DataMapperFactory::db($GLOBALS['dbpool']->get());
|
||||
|
||||
$GLOBALS['frameworkpath'] = '/phpOMS/';
|
||||
|
||||
|
|
|
|||
|
|
@ -35,11 +35,11 @@ final class WikiAppMapperTest extends \PHPUnit\Framework\TestCase
|
|||
|
||||
$app->name = 'Test Category';
|
||||
|
||||
$id = WikiAppMapper::create($app);
|
||||
$id = WikiAppMapper::create()->execute($app);
|
||||
self::assertGreaterThan(0, $app->getId());
|
||||
self::assertEquals($id, $app->getId());
|
||||
|
||||
$appR = WikiAppMapper::get($app->getId());
|
||||
$appR = WikiAppMapper::get()->where('id', $app->getId())->execute();
|
||||
self::assertEquals($app->name, $appR->name);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ use Modules\Knowledgebase\Models\NullWikiApp;
|
|||
use Modules\Knowledgebase\Models\NullWikiCategory;
|
||||
use Modules\Knowledgebase\Models\WikiCategory;
|
||||
use Modules\Knowledgebase\Models\WikiCategoryMapper;
|
||||
use phpOMS\Localization\ISO639x1Enum;
|
||||
|
||||
/**
|
||||
* @testdox Modules\tests\Knowledgebase\Models\WikiCategoryMapperTest: Wiki category mapper
|
||||
|
|
@ -45,14 +46,14 @@ final class WikiCategoryMapperTest extends \PHPUnit\Framework\TestCase
|
|||
{
|
||||
$this->category->setL11n('Test Category');
|
||||
|
||||
$id = WikiCategoryMapper::create($this->category);
|
||||
$id = WikiCategoryMapper::create()->execute($this->category);
|
||||
self::assertGreaterThan(0, $this->category->getId());
|
||||
self::assertEquals($id, $this->category->getId());
|
||||
|
||||
$categoryR = WikiCategoryMapper::get($this->category->getId());
|
||||
$categoryR = WikiCategoryMapper::get()->with('name')->where('id', $this->category->getId())->where('name/language', ISO639x1Enum::_EN)->execute();
|
||||
self::assertEquals($this->category->getL11n(), $categoryR->getL11n());
|
||||
|
||||
self::assertGreaterThan(0, \count(WikiCategoryMapper::getByApp(1)));
|
||||
self::assertGreaterThan(0, \count(WikiCategoryMapper::getAll()->where('app', 1)->execute()));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -66,14 +67,28 @@ final class WikiCategoryMapperTest extends \PHPUnit\Framework\TestCase
|
|||
$this->category->setL11n('Test Category2');
|
||||
$this->category->parent = new NullWikiCategory(1);
|
||||
|
||||
$id = WikiCategoryMapper::create($this->category);
|
||||
$id = WikiCategoryMapper::create()->execute($this->category);
|
||||
self::assertGreaterThan(0, $this->category->getId());
|
||||
self::assertEquals($id, $this->category->getId());
|
||||
|
||||
$categoryR = WikiCategoryMapper::get($this->category->getId());
|
||||
$categoryR = WikiCategoryMapper::get()
|
||||
->with('name')
|
||||
->where('id', $this->category->getId())
|
||||
->where('name/language', ISO639x1Enum::_EN)
|
||||
->execute();
|
||||
|
||||
self::assertEquals($this->category->getL11n(), $categoryR->getL11n());
|
||||
self::assertEquals($this->category->parent->getId(), $categoryR->parent->getId());
|
||||
|
||||
self::assertGreaterThan(0, \count(WikiCategoryMapper::getByParentAndApp(1, 1)));
|
||||
self::assertGreaterThan(0,
|
||||
\count(
|
||||
WikiCategoryMapper::getAll()
|
||||
->with('name')
|
||||
->where('parent', 1)
|
||||
->where('app', 1)
|
||||
->where('name/language', ISO639x1Enum::_EN)
|
||||
->execute()
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ use Modules\Knowledgebase\Models\NullWikiCategory;
|
|||
use Modules\Knowledgebase\Models\WikiDoc;
|
||||
use Modules\Knowledgebase\Models\WikiDocMapper;
|
||||
use Modules\Knowledgebase\Models\WikiStatus;
|
||||
use phpOMS\DataStorage\Database\Query\OrderType;
|
||||
|
||||
/**
|
||||
* @testdox Modules\tests\Knowledgebase\Models\WikiDocMapperTest: Wiki document mapper
|
||||
|
|
@ -41,17 +42,21 @@ final class WikiDocMapperTest extends \PHPUnit\Framework\TestCase
|
|||
$doc->category = new NullWikiCategory(1);
|
||||
$doc->setLanguage('en');
|
||||
|
||||
$id = WikiDocMapper::create($doc);
|
||||
$id = WikiDocMapper::create()->execute($doc);
|
||||
self::assertGreaterThan(0, $doc->getId());
|
||||
self::assertEquals($id, $doc->getId());
|
||||
|
||||
$docR = WikiDocMapper::get($doc->getId());
|
||||
$docR = WikiDocMapper::get()->where('id', $doc->getId())->execute();
|
||||
self::assertEquals($doc->name, $docR->name);
|
||||
self::assertEquals($doc->doc, $docR->doc);
|
||||
self::assertEquals($doc->getStatus(), $docR->getStatus());
|
||||
self::assertEquals($doc->getLanguage(), $docR->getLanguage());
|
||||
self::assertEquals($doc->category->getId(), $docR->category->getId());
|
||||
|
||||
self::assertGreaterThan(0, \count(WikiDocMapper::getNewestByApp(1)));
|
||||
self::assertGreaterThan(0,
|
||||
\count(
|
||||
WikiDocMapper::getAll()->where('app', 1)->sort('id', OrderType::DESC)->execute()
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user