new datamapper mostly implemented

This commit is contained in:
Dennis Eichhorn 2021-12-11 11:54:17 +01:00
parent 7a22d48a99
commit d40e5d9e13
8 changed files with 70 additions and 50 deletions

View File

@ -31,7 +31,7 @@ use Modules\Media\Models\NullMedia;
use Modules\Tag\Models\NullTag; use Modules\Tag\Models\NullTag;
use phpOMS\Account\PermissionType; use phpOMS\Account\PermissionType;
use phpOMS\Autoloader; use phpOMS\Autoloader;
use phpOMS\DataStorage\Database\Query\Builder; use phpOMS\DataStorage\Database\Query\OrderType;
use phpOMS\Message\Http\HttpRequest; use phpOMS\Message\Http\HttpRequest;
use phpOMS\Message\Http\HttpResponse; use phpOMS\Message\Http\HttpResponse;
use phpOMS\Message\Http\RequestStatusCode; use phpOMS\Message\Http\RequestStatusCode;
@ -77,10 +77,18 @@ final class ApiController extends Controller
} }
/** @var Template $template */ /** @var Template $template */
$template = TemplateMapper::get((int) $request->getData('id')); $template = TemplateMapper::get()
$accountId = $request->header->account; ->with('source')
->with('source/sources')
->with('reports')
->with('reports/source')
->with('reports/source/sources')
->with('createdBy')
->where('id', (int) $request->getData('id'))
->execute();
$isExport = \in_array($request->getData('type'), ['xlsx', 'pdf', 'docx', 'pptx', 'csv', 'json']); $accountId = $request->header->account;
$isExport = \in_array($request->getData('type'), ['xlsx', 'pdf', 'docx', 'pptx', 'csv', 'json']);
// is allowed to read // is allowed to read
if (!$this->app->accountManager->get($accountId)->hasPermission(PermissionType::READ, $this->app->orgId, null, self::NAME, PermissionState::REPORT, $template->getId()) if (!$this->app->accountManager->get($accountId)->hasPermission(PermissionType::READ, $this->app->orgId, null, self::NAME, PermissionState::REPORT, $template->getId())
@ -285,13 +293,17 @@ final class ApiController extends Controller
$view = new View($this->app->l11nManager, $request, $response); $view = new View($this->app->l11nManager, $request, $response);
if (!$template->isStandalone) { if (!$template->isStandalone) {
/** @var Report[] $report */ /** @var Report $report */
$report = ReportMapper::getNewest(1, $report = ReportMapper::get()
(new Builder($this->app->dbPool->get()))->where('helper_report_d3.helper_report_template', '=', $template->getId()) ->with('template')
); ->with('source')
->with('source/sources')
->where('template', $template->getId())
->sort('id', OrderType::DESC)
->limit(1)
->execute();
$rcoll = []; $rcoll = [];
$report = \end($report);
$report = $report === false ? new NullReport() : $report; $report = $report === false ? new NullReport() : $report;
if (!($report instanceof NullReport)) { if (!($report instanceof NullReport)) {
@ -381,7 +393,7 @@ final class ApiController extends Controller
$collection->setPath('/Modules/Media/Files/Modules/Helper/' . ((string) ($request->getData('name') ?? ''))); $collection->setPath('/Modules/Media/Files/Modules/Helper/' . ((string) ($request->getData('name') ?? '')));
$collection->setVirtualPath('/Modules/Helper'); $collection->setVirtualPath('/Modules/Helper');
CollectionMapper::create($collection); CollectionMapper::create()->execute($collection);
$template = $this->createTemplateFromRequest($request, $collection->getId()); $template = $this->createTemplateFromRequest($request, $collection->getId());
@ -528,7 +540,7 @@ final class ApiController extends Controller
return; return;
} }
CollectionMapper::create($collection); CollectionMapper::create()->execute($collection);
$report = $this->createReportFromRequest($request, $response, $collection->getId()); $report = $this->createReportFromRequest($request, $response, $collection->getId());

View File

@ -23,6 +23,7 @@ use Modules\Media\Models\Media;
use Modules\Media\Theme\Backend\Components\Upload\BaseView; use Modules\Media\Theme\Backend\Components\Upload\BaseView;
use phpOMS\Contract\RenderableInterface; use phpOMS\Contract\RenderableInterface;
use phpOMS\DataStorage\Database\Query\Builder; use phpOMS\DataStorage\Database\Query\Builder;
use phpOMS\DataStorage\Database\Query\OrderType;
use phpOMS\Message\RequestAbstract; use phpOMS\Message\RequestAbstract;
use phpOMS\Message\ResponseAbstract; use phpOMS\Message\ResponseAbstract;
use phpOMS\Utils\StringUtils; use phpOMS\Utils\StringUtils;
@ -58,7 +59,7 @@ final class BackendController extends Controller
$view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1002701001, $request, $response)); $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1002701001, $request, $response));
$path = \str_replace('+', ' ', (string) ($request->getData('path') ?? '/')); $path = \str_replace('+', ' ', (string) ($request->getData('path') ?? '/'));
$templates = TemplateMapper::with('language', $response->getLanguage())::getByVirtualPath($path); $templates = TemplateMapper::getByVirtualPath($path)->with('tags')->with('tags/title')->where('tags/title/language', $response->getLanguage())->execute();
list($collection, $parent) = CollectionMapper::getCollectionsByPath($path); list($collection, $parent) = CollectionMapper::getCollectionsByPath($path);
@ -143,7 +144,15 @@ final class BackendController extends Controller
//$file = preg_replace('([^\w\s\d\-_~,;:\.\[\]\(\).])', '', $template->getName()); //$file = preg_replace('([^\w\s\d\-_~,;:\.\[\]\(\).])', '', $template->getName());
/** @var Template $template */ /** @var Template $template */
$template = TemplateMapper::with('language', $response->getLanguage())::get((int) $request->getData('id')); $template = TemplateMapper::get()
->with('createdBy')
->with('tags')
->with('tags/title')
->with('source')
->with('source/sources')
->where('id', (int) $request->getData('id'))
->where('tags/title/language', $response->getLanguage())
->execute();
$view->setTemplate('/Modules/Helper/Theme/Backend/helper-single'); $view->setTemplate('/Modules/Helper/Theme/Backend/helper-single');
@ -192,9 +201,7 @@ final class BackendController extends Controller
} }
/** @var \Modules\Helper\Models\Report[] $report */ /** @var \Modules\Helper\Models\Report[] $report */
$report = ReportMapper::getNewest(1, $report = ReportMapper::get()->where('template', $template->getId())->sort('id', OrderType::DESC)->limit(1)->execute();
(new Builder($this->app->dbPool->get()))->where('helper_report.helper_report_template', '=', $template->getId())
);
$rcoll = []; $rcoll = [];
$report = \end($report); $report = \end($report);

View File

@ -15,7 +15,7 @@ declare(strict_types=1);
namespace Modules\Helper\Models; namespace Modules\Helper\Models;
use Modules\Admin\Models\AccountMapper; use Modules\Admin\Models\AccountMapper;
use phpOMS\DataStorage\Database\DataMapperAbstract; use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;
/** /**
* Report mapper class. * Report mapper class.
@ -25,7 +25,7 @@ use phpOMS\DataStorage\Database\DataMapperAbstract;
* @link https://orange-management.org * @link https://orange-management.org
* @since 1.0.0 * @since 1.0.0
*/ */
final class ReportMapper extends DataMapperAbstract final class ReportMapper extends DataMapperFactory
{ {
/** /**
* Columns. * Columns.
@ -33,7 +33,7 @@ final class ReportMapper extends DataMapperAbstract
* @var array<string, array{name:string, type:string, internal:string, autocomplete?:bool, readonly?:bool, writeonly?:bool, annotations?:array}> * @var array<string, array{name:string, type:string, internal:string, autocomplete?:bool, readonly?:bool, writeonly?:bool, annotations?:array}>
* @since 1.0.0 * @since 1.0.0
*/ */
protected static array $columns = [ public const COLUMNS = [
'helper_report_id' => ['name' => 'helper_report_id', 'type' => 'int', 'internal' => 'id'], 'helper_report_id' => ['name' => 'helper_report_id', 'type' => 'int', 'internal' => 'id'],
'helper_report_status' => ['name' => 'helper_report_status', 'type' => 'int', 'internal' => 'status'], 'helper_report_status' => ['name' => 'helper_report_status', 'type' => 'int', 'internal' => 'status'],
'helper_report_title' => ['name' => 'helper_report_title', 'type' => 'string', 'internal' => 'title'], 'helper_report_title' => ['name' => 'helper_report_title', 'type' => 'string', 'internal' => 'title'],
@ -51,7 +51,7 @@ final class ReportMapper extends DataMapperAbstract
* @var array<string, array{mapper:string, external:string, by?:string, column?:string, conditional?:bool}> * @var array<string, array{mapper:string, external:string, by?:string, column?:string, conditional?:bool}>
* @since 1.0.0 * @since 1.0.0
*/ */
protected static array $ownsOne = [ public const OWNS_ONE = [
'source' => [ 'source' => [
'mapper' => \Modules\Media\Models\CollectionMapper::class, 'mapper' => \Modules\Media\Models\CollectionMapper::class,
'external' => 'helper_report_media', 'external' => 'helper_report_media',
@ -68,7 +68,7 @@ final class ReportMapper extends DataMapperAbstract
* @var array<string, array{mapper:string, external:string}> * @var array<string, array{mapper:string, external:string}>
* @since 1.0.0 * @since 1.0.0
*/ */
protected static array $belongsTo = [ public const BELONGS_TO = [
'createdBy' => [ 'createdBy' => [
'mapper' => AccountMapper::class, 'mapper' => AccountMapper::class,
'external' => 'helper_report_creator', 'external' => 'helper_report_creator',
@ -81,7 +81,7 @@ final class ReportMapper extends DataMapperAbstract
* @var string * @var string
* @since 1.0.0 * @since 1.0.0
*/ */
protected static string $table = 'helper_report'; public const TABLE = 'helper_report';
/** /**
* Primary field name. * Primary field name.
@ -89,7 +89,7 @@ final class ReportMapper extends DataMapperAbstract
* @var string * @var string
* @since 1.0.0 * @since 1.0.0
*/ */
protected static string $primaryField = 'helper_report_id'; public const PRIMARYFIELD ='helper_report_id';
/** /**
* Created at. * Created at.
@ -97,5 +97,5 @@ final class ReportMapper extends DataMapperAbstract
* @var string * @var string
* @since 1.0.0 * @since 1.0.0
*/ */
protected static string $createdAt = 'helper_report_created'; public const CREATED_AT = 'helper_report_created';
} }

View File

@ -18,8 +18,8 @@ use Modules\Admin\Models\AccountMapper;
use Modules\Media\Models\CollectionMapper; use Modules\Media\Models\CollectionMapper;
use Modules\Organization\Models\UnitMapper; use Modules\Organization\Models\UnitMapper;
use Modules\Tag\Models\TagMapper; use Modules\Tag\Models\TagMapper;
use phpOMS\DataStorage\Database\DataMapperAbstract; use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;
use phpOMS\DataStorage\Database\RelationType; use phpOMS\DataStorage\Database\Mapper\ReadMapper;
/** /**
* Report mapper class. * Report mapper class.
@ -29,7 +29,7 @@ use phpOMS\DataStorage\Database\RelationType;
* @link https://orange-management.org * @link https://orange-management.org
* @since 1.0.0 * @since 1.0.0
*/ */
final class TemplateMapper extends DataMapperAbstract final class TemplateMapper extends DataMapperFactory
{ {
/** /**
* Columns. * Columns.
@ -37,7 +37,7 @@ final class TemplateMapper extends DataMapperAbstract
* @var array<string, array{name:string, type:string, internal:string, autocomplete?:bool, readonly?:bool, writeonly?:bool, annotations?:array}> * @var array<string, array{name:string, type:string, internal:string, autocomplete?:bool, readonly?:bool, writeonly?:bool, annotations?:array}>
* @since 1.0.0 * @since 1.0.0
*/ */
protected static array $columns = [ public const COLUMNS = [
'helper_template_id' => ['name' => 'helper_template_id', 'type' => 'int', 'internal' => 'id'], 'helper_template_id' => ['name' => 'helper_template_id', 'type' => 'int', 'internal' => 'id'],
'helper_template_status' => ['name' => 'helper_template_status', 'type' => 'int', 'internal' => 'status'], 'helper_template_status' => ['name' => 'helper_template_status', 'type' => 'int', 'internal' => 'status'],
'helper_template_title' => ['name' => 'helper_template_title', 'type' => 'string', 'internal' => 'name'], 'helper_template_title' => ['name' => 'helper_template_title', 'type' => 'string', 'internal' => 'name'],
@ -59,7 +59,7 @@ final class TemplateMapper extends DataMapperAbstract
* @var array<string, array{mapper:string, external:string, by?:string, column?:string, conditional?:bool}> * @var array<string, array{mapper:string, external:string, by?:string, column?:string, conditional?:bool}>
* @since 1.0.0 * @since 1.0.0
*/ */
protected static array $ownsOne = [ public const OWNS_ONE = [
'source' => [ 'source' => [
'mapper' => CollectionMapper::class, 'mapper' => CollectionMapper::class,
'external' => 'helper_template_media', 'external' => 'helper_template_media',
@ -72,7 +72,7 @@ final class TemplateMapper extends DataMapperAbstract
* @var array<string, array{mapper:string, external:string}> * @var array<string, array{mapper:string, external:string}>
* @since 1.0.0 * @since 1.0.0
*/ */
protected static array $belongsTo = [ public const BELONGS_TO = [
'createdBy' => [ 'createdBy' => [
'mapper' => AccountMapper::class, 'mapper' => AccountMapper::class,
'external' => 'helper_template_creator', 'external' => 'helper_template_creator',
@ -89,7 +89,7 @@ final class TemplateMapper extends DataMapperAbstract
* @var array<string, array{mapper:string, table:string, self?:?string, external?:?string, column?:string}> * @var array<string, array{mapper:string, table:string, self?:?string, external?:?string, column?:string}>
* @since 1.0.0 * @since 1.0.0
*/ */
protected static array $hasMany = [ public const HAS_MANY = [
'reports' => [ 'reports' => [
'mapper' => ReportMapper::class, 'mapper' => ReportMapper::class,
'table' => 'helper_report', 'table' => 'helper_report',
@ -110,7 +110,7 @@ final class TemplateMapper extends DataMapperAbstract
* @var string * @var string
* @since 1.0.0 * @since 1.0.0
*/ */
protected static string $table = 'helper_template'; public const TABLE = 'helper_template';
/** /**
* Created at. * Created at.
@ -118,7 +118,7 @@ final class TemplateMapper extends DataMapperAbstract
* @var string * @var string
* @since 1.0.0 * @since 1.0.0
*/ */
protected static string $createdAt = 'helper_template_created'; public const CREATED_AT = 'helper_template_created';
/** /**
* Primary field name. * Primary field name.
@ -126,23 +126,23 @@ final class TemplateMapper extends DataMapperAbstract
* @var string * @var string
* @since 1.0.0 * @since 1.0.0
*/ */
protected static string $primaryField = 'helper_template_id'; public const PRIMARYFIELD ='helper_template_id';
/** /**
* Get editor doc based on virtual path. * Get editor doc based on virtual path.
* *
* @param string $virtualPath Virtual path * @param string $virtualPath Virtual path
* *
* @return array * @return ReadMapper
* *
* @since 1.0.0 * @since 1.0.0
*/ */
public static function getByVirtualPath(string $virtualPath = '/') : array public static function getByVirtualPath(string $virtualPath = '/') : ReadMapper
{ {
$depth = 3; return self::getAll()
$query = self::getQuery(depth: $depth); ->with('createdBy')
$query->where(self::$table . '_d' . $depth . '.helper_template_virtual', '=', $virtualPath); ->with('tags')
->with('tags/title')
return self::getAllByQuery($query, RelationType::ALL, $depth); ->where('virtualPath', $virtualPath);
} }
} }

View File

@ -17,7 +17,7 @@ use phpOMS\Uri\UriFactory;
/** /**
* @var \phpOMS\Views\View $this * @var \phpOMS\Views\View $this
*/ */
$templateList = \Modules\Helper\Models\TemplateMapper::getAll(); $templateList = \Modules\Helper\Models\TemplateMapper::getAll()->execute();
echo $this->getData('nav')->render(); ?> echo $this->getData('nav')->render(); ?>

View File

@ -12,7 +12,7 @@ require_once __DIR__ . '/../vendor/autoload.php';
require_once __DIR__ . '/Autoloader.php'; require_once __DIR__ . '/Autoloader.php';
use phpOMS\DataStorage\Database\DatabasePool; use phpOMS\DataStorage\Database\DatabasePool;
use phpOMS\DataStorage\Database\DataMapperAbstract; use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;
use phpOMS\DataStorage\Session\HttpSession; use phpOMS\DataStorage\Session\HttpSession;
$CONFIG = [ $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('insert', $CONFIG['db']['core']['masters']['insert']);
$GLOBALS['dbpool']->create('schema', $CONFIG['db']['core']['masters']['schema']); $GLOBALS['dbpool']->create('schema', $CONFIG['db']['core']['masters']['schema']);
DataMapperAbstract::setConnection($GLOBALS['dbpool']->get()); DataMapperFactory::db($GLOBALS['dbpool']->get());
$GLOBALS['frameworkpath'] = '/phpOMS/'; $GLOBALS['frameworkpath'] = '/phpOMS/';

View File

@ -168,11 +168,11 @@ final class ReportMapperTest extends \PHPUnit\Framework\TestCase
$report->source = $collection; $report->source = $collection;
$id = ReportMapper::create($report); $id = ReportMapper::create()->execute($report);
self::assertGreaterThan(0, $report->getId()); self::assertGreaterThan(0, $report->getId());
self::assertEquals($id, $report->getId()); self::assertEquals($id, $report->getId());
$reportR = ReportMapper::get($report->getId()); $reportR = ReportMapper::get()->with('template')->where('id', $report->getId())->execute();
self::assertEquals($report->createdAt->format('Y-m-d'), $reportR->createdAt->format('Y-m-d')); self::assertEquals($report->createdAt->format('Y-m-d'), $reportR->createdAt->format('Y-m-d'));
self::assertEquals($report->createdBy->getId(), $reportR->createdBy->getId()); self::assertEquals($report->createdBy->getId(), $reportR->createdBy->getId());
self::assertEquals($report->description, $reportR->description); self::assertEquals($report->description, $reportR->description);

View File

@ -21,6 +21,7 @@ use Modules\Helper\Models\TemplateDataType;
use Modules\Helper\Models\TemplateMapper; use Modules\Helper\Models\TemplateMapper;
use Modules\Media\Models\Collection; use Modules\Media\Models\Collection;
use Modules\Media\Models\Media; use Modules\Media\Models\Media;
use phpOMS\DataStorage\Database\Query\OrderType;
/** /**
* @testdox Modules\tests\Helper\Models\TemplateMapperTest: Template database mapper * @testdox Modules\tests\Helper\Models\TemplateMapperTest: Template database mapper
@ -101,11 +102,11 @@ final class TemplateMapperTest extends \PHPUnit\Framework\TestCase
$template->source = $collection; $template->source = $collection;
$id = TemplateMapper::create($template); $id = TemplateMapper::create()->execute($template);
self::assertGreaterThan(0, $template->getId()); self::assertGreaterThan(0, $template->getId());
self::assertEquals($id, $template->getId()); self::assertEquals($id, $template->getId());
$templateR = TemplateMapper::get($template->getId()); $templateR = TemplateMapper::get()->where('id', $template->getId())->execute();
self::assertEquals($template->createdAt->format('Y-m-d'), $templateR->createdAt->format('Y-m-d')); self::assertEquals($template->createdAt->format('Y-m-d'), $templateR->createdAt->format('Y-m-d'));
self::assertEquals($template->createdBy->getId(), $templateR->createdBy->getId()); self::assertEquals($template->createdBy->getId(), $templateR->createdBy->getId());
self::assertEquals($template->description, $templateR->description); self::assertEquals($template->description, $templateR->description);
@ -124,7 +125,7 @@ final class TemplateMapperTest extends \PHPUnit\Framework\TestCase
*/ */
public function testNewest() : void public function testNewest() : void
{ {
$newest = TemplateMapper::getNewest(1); $newest = TemplateMapper::getAll()->sort('id', OrderType::DESC)->limit(1)->execute();
self::assertCount(1, $newest); self::assertCount(1, $newest);
} }
@ -135,7 +136,7 @@ final class TemplateMapperTest extends \PHPUnit\Framework\TestCase
*/ */
public function testVirtualPath() : void public function testVirtualPath() : void
{ {
$virtualPath = TemplateMapper::getByVirtualPath('/'); $virtualPath = TemplateMapper::getByVirtualPath('/')->execute();
self::assertGreaterThan(0, \count($virtualPath)); self::assertGreaterThan(0, \count($virtualPath));
} }