new datamapper mostly implemented

This commit is contained in:
Dennis Eichhorn 2021-12-11 11:54:17 +01:00
parent 772fc7963a
commit efad7f2cde
9 changed files with 167 additions and 225 deletions

View File

@ -182,7 +182,7 @@ final class ApiController extends Controller
public function apiTaskGet(RequestAbstract $request, ResponseAbstract $response, $data = null) : void public function apiTaskGet(RequestAbstract $request, ResponseAbstract $response, $data = null) : void
{ {
/** @var Task $task */ /** @var Task $task */
$task = TaskMapper::get((int) $request->getData('id')); $task = TaskMapper::get()->where('id', (int) $request->getData('id'))->execute();
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Task', 'Task successfully returned.', $task); $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Task', 'Task successfully returned.', $task);
} }
@ -202,7 +202,7 @@ final class ApiController extends Controller
public function apiTaskSet(RequestAbstract $request, ResponseAbstract $response, $data = null) : void public function apiTaskSet(RequestAbstract $request, ResponseAbstract $response, $data = null) : void
{ {
/** @var Task $old */ /** @var Task $old */
$old = clone TaskMapper::get((int) $request->getData('id')); $old = clone TaskMapper::get()->where('id', (int) $request->getData('id'))->execute();
/** @var Task $new */ /** @var Task $new */
$new = $this->updateTaskFromRequest($request); $new = $this->updateTaskFromRequest($request);
@ -222,7 +222,7 @@ final class ApiController extends Controller
private function updateTaskFromRequest(RequestAbstract $request) : Task private function updateTaskFromRequest(RequestAbstract $request) : Task
{ {
/** @var Task $task */ /** @var Task $task */
$task = TaskMapper::get((int) ($request->getData('id'))); $task = TaskMapper::get()->where('id', (int) ($request->getData('id')))->execute();
$task->title = (string) ($request->getData('title') ?? $task->title); $task->title = (string) ($request->getData('title') ?? $task->title);
$task->description = Markdown::parse((string) ($request->getData('plain') ?? $task->descriptionRaw)); $task->description = Markdown::parse((string) ($request->getData('plain') ?? $task->descriptionRaw));
$task->descriptionRaw = (string) ($request->getData('plain') ?? $task->descriptionRaw); $task->descriptionRaw = (string) ($request->getData('plain') ?? $task->descriptionRaw);
@ -280,7 +280,7 @@ final class ApiController extends Controller
return; return;
} }
$task = TaskMapper::get((int) ($request->getData('task'))); $task = TaskMapper::get()->where('id', (int) ($request->getData('task')))->execute();
$element = $this->createTaskElementFromRequest($request, $task); $element = $this->createTaskElementFromRequest($request, $task);
$task->setStatus($element->getStatus()); $task->setStatus($element->getStatus());
$task->setPriority($element->getPriority()); $task->setPriority($element->getPriority());
@ -375,7 +375,7 @@ final class ApiController extends Controller
public function apiTaskElementGet(RequestAbstract $request, ResponseAbstract $response, $data = null) : void public function apiTaskElementGet(RequestAbstract $request, ResponseAbstract $response, $data = null) : void
{ {
/** @var TaskElement $task */ /** @var TaskElement $task */
$task = TaskElementMapper::get((int) $request->getData('id')); $task = TaskElementMapper::get()->where('id', (int) $request->getData('id'))->execute();
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Task element', 'Task element successfully returned.', $task); $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Task element', 'Task element successfully returned.', $task);
} }
@ -395,7 +395,7 @@ final class ApiController extends Controller
public function apiTaskElementSet(RequestAbstract $request, ResponseAbstract $response, $data = null) : void public function apiTaskElementSet(RequestAbstract $request, ResponseAbstract $response, $data = null) : void
{ {
/** @var TaskElement $old */ /** @var TaskElement $old */
$old = clone TaskElementMapper::get((int) $request->getData('id')); $old = clone TaskElementMapper::get()->where('id', (int) $request->getData('id'))->execute();
/** @var TaskElement $new */ /** @var TaskElement $new */
$new = $this->updateTaskElementFromRequest($request); $new = $this->updateTaskElementFromRequest($request);
@ -405,7 +405,7 @@ final class ApiController extends Controller
|| $old->getPriority() !== $new->getPriority() || $old->getPriority() !== $new->getPriority()
|| $old->due !== $new->due || $old->due !== $new->due
) { ) {
$task = TaskMapper::get($new->task); $task = TaskMapper::get()->where('id', $new->task)->execute();
$task->setStatus($new->getStatus()); $task->setStatus($new->getStatus());
$task->setPriority($new->getPriority()); $task->setPriority($new->getPriority());
@ -429,7 +429,7 @@ final class ApiController extends Controller
private function updateTaskElementFromRequest(RequestAbstract $request) : TaskElement private function updateTaskElementFromRequest(RequestAbstract $request) : TaskElement
{ {
/** @var TaskElement $element */ /** @var TaskElement $element */
$element = TaskElementMapper::get((int) ($request->getData('id'))); $element = TaskElementMapper::get()->where('id', (int) ($request->getData('id')))->execute();
$element->due = $request->getData('due') !== null ? new \DateTime((string) ($request->getData('due'))) : $element->due; $element->due = $request->getData('due') !== null ? new \DateTime((string) ($request->getData('due'))) : $element->due;
$element->setStatus((int) ($request->getData('status') ?? $element->getStatus())); $element->setStatus((int) ($request->getData('status') ?? $element->getStatus()));
$element->description = Markdown::parse((string) ($request->getData('plain') ?? $element->descriptionRaw)); $element->description = Markdown::parse((string) ($request->getData('plain') ?? $element->descriptionRaw));

View File

@ -21,6 +21,7 @@ use Modules\Tasks\Views\TaskView;
use phpOMS\Account\PermissionType; use phpOMS\Account\PermissionType;
use phpOMS\Asset\AssetType; use phpOMS\Asset\AssetType;
use phpOMS\Contract\RenderableInterface; use phpOMS\Contract\RenderableInterface;
use phpOMS\DataStorage\Database\Query\OrderType;
use phpOMS\Message\Http\RequestStatusCode; use phpOMS\Message\Http\RequestStatusCode;
use phpOMS\Message\RequestAbstract; use phpOMS\Message\RequestAbstract;
use phpOMS\Message\ResponseAbstract; use phpOMS\Message\ResponseAbstract;
@ -61,23 +62,32 @@ final class BackendController extends Controller implements DashboardElementInte
$view->setTemplate('/Modules/Tasks/Theme/Backend/task-dashboard'); $view->setTemplate('/Modules/Tasks/Theme/Backend/task-dashboard');
$view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1001101001, $request, $response)); $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1001101001, $request, $response));
$mapperQuery = TaskMapper::getAnyRelatedToUser($request->header->account)
->with('tags')
->with('tags/title')
->sort('taskElements/createdAt', OrderType::DESC)
->limit(25);
if ($request->getData('ptype') === 'p') { if ($request->getData('ptype') === 'p') {
$view->setData('tasks', $view->setData('tasks',
TaskMapper::with('language', $response->getLanguage()) $mapperQuery->with('createdBy')
::with('taskElements', models: null) ->where('id', (int) ($request->getData('id') ?? 0), '<')
::getAnyBeforePivot($request->header->account, (int) ($request->getData('id') ?? 0), limit: 25) ->where('tags/title/language', $response->getLanguage())
->execute()
); );
} elseif ($request->getData('ptype') === 'n') { } elseif ($request->getData('ptype') === 'n') {
$view->setData('tasks', $view->setData('tasks',
TaskMapper::with('language', $response->getLanguage()) $mapperQuery->with('createdBy')
::with('taskElements', models: null) ->where('id', (int) ($request->getData('id') ?? 0), '>')
::getAnyAfterPivot($request->header->account, (int) ($request->getData('id') ?? 0), limit: 25) ->where('tags/title/language', $response->getLanguage())
->execute()
); );
} else { } else {
$view->setData('tasks', $view->setData('tasks',
TaskMapper::with('language', $response->getLanguage()) $mapperQuery->with('createdBy')
::with('taskElements', models: null) ->where('id', 0, '>')
::getAnyAfterPivot($request->header->account, 0, limit: 25) ->where('tags/title/language', $response->getLanguage())
->execute()
); );
} }
@ -98,7 +108,11 @@ final class BackendController extends Controller implements DashboardElementInte
$taskListView->setTemplate('/Modules/Tasks/Theme/Backend/Components/Tasks/list'); $taskListView->setTemplate('/Modules/Tasks/Theme/Backend/Components/Tasks/list');
$view->addData('tasklist', $taskListView); $view->addData('tasklist', $taskListView);
$tasks = TaskMapper::getNewest(5, null, depth: 1); $tasks = TaskMapper::getAnyRelatedToUser($request->header->account)
->where('id', 0, '>')
->sort('taskElements/createdAt', OrderType::DESC)
->limit(5)->execute();
$view->addData('tasks', $tasks); $view->addData('tasks', $tasks);
return $view; return $view;
@ -136,10 +150,20 @@ final class BackendController extends Controller implements DashboardElementInte
$head = $response->get('Content')->getData('head'); $head = $response->get('Content')->getData('head');
$head->addAsset(AssetType::CSS, 'Modules/Tasks/Theme/Backend/css/styles.css'); $head->addAsset(AssetType::CSS, 'Modules/Tasks/Theme/Backend/css/styles.css');
$task = TaskMapper::with('language', $response->getLanguage())::get((int) $request->getData('id'), depth: 4); /** @var Task $task */
$task = TaskMapper::get()
->with('createdBy')
->with('taskElements')
->with('taskElements/createdBy')
->with('taskElements/media')
->with('taskElements/accRelation')
->with('taskElements/accRelation/relation')
->where('id', (int) $request->getData('id'))
->execute();
$accountId = $request->header->account; $accountId = $request->header->account;
if (!($task->getCreatedBy()->getId() === $accountId if (!($task->createdBy->getId() === $accountId
|| $task->isCCAccount($accountId) || $task->isCCAccount($accountId)
|| $task->isToAccount($accountId)) || $task->isToAccount($accountId))
&& !$this->app->accountManager->get($accountId)->hasPermission( && !$this->app->accountManager->get($accountId)->hasPermission(

View File

@ -15,7 +15,7 @@ declare(strict_types=1);
namespace Modules\Tasks\Models; namespace Modules\Tasks\Models;
use Modules\Admin\Models\AccountMapper; use Modules\Admin\Models\AccountMapper;
use phpOMS\DataStorage\Database\DataMapperAbstract; use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;
/** /**
* Mapper class. * 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 AccountRelationMapper extends DataMapperAbstract final class AccountRelationMapper extends DataMapperFactory
{ {
/** /**
* Columns. * Columns.
@ -33,7 +33,7 @@ final class AccountRelationMapper 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 = [
'task_account_id' => ['name' => 'task_account_id', 'type' => 'int', 'internal' => 'id'], 'task_account_id' => ['name' => 'task_account_id', 'type' => 'int', 'internal' => 'id'],
'task_account_duty' => ['name' => 'task_account_duty', 'type' => 'int', 'internal' => 'duty'], 'task_account_duty' => ['name' => 'task_account_duty', 'type' => 'int', 'internal' => 'duty'],
'task_account_account' => ['name' => 'task_account_account', 'type' => 'int', 'internal' => 'relation'], 'task_account_account' => ['name' => 'task_account_account', 'type' => 'int', 'internal' => 'relation'],
@ -46,7 +46,7 @@ final class AccountRelationMapper 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 = [
'relation' => [ 'relation' => [
'mapper' => AccountMapper::class, 'mapper' => AccountMapper::class,
'external' => 'task_account_account', 'external' => 'task_account_account',
@ -59,7 +59,7 @@ final class AccountRelationMapper extends DataMapperAbstract
* @var string * @var string
* @since 1.0.0 * @since 1.0.0
*/ */
protected static string $table = 'task_account'; public const TABLE = 'task_account';
/** /**
* Primary field name. * Primary field name.
@ -67,5 +67,5 @@ final class AccountRelationMapper extends DataMapperAbstract
* @var string * @var string
* @since 1.0.0 * @since 1.0.0
*/ */
protected static string $primaryField = 'task_account_id'; public const PRIMARYFIELD ='task_account_id';
} }

View File

@ -15,7 +15,7 @@ declare(strict_types=1);
namespace Modules\Tasks\Models; namespace Modules\Tasks\Models;
use Modules\Admin\Models\GroupMapper; use Modules\Admin\Models\GroupMapper;
use phpOMS\DataStorage\Database\DataMapperAbstract; use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;
/** /**
* Mapper class. * 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 GroupRelationMapper extends DataMapperAbstract final class GroupRelationMapper extends DataMapperFactory
{ {
/** /**
* Columns. * Columns.
@ -33,7 +33,7 @@ final class GroupRelationMapper 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 = [
'task_group_id' => ['name' => 'task_group_id', 'type' => 'int', 'internal' => 'id'], 'task_group_id' => ['name' => 'task_group_id', 'type' => 'int', 'internal' => 'id'],
'task_group_duty' => ['name' => 'task_group_duty', 'type' => 'int', 'internal' => 'duty'], 'task_group_duty' => ['name' => 'task_group_duty', 'type' => 'int', 'internal' => 'duty'],
'task_group_group' => ['name' => 'task_group_group', 'type' => 'int', 'internal' => 'relation'], 'task_group_group' => ['name' => 'task_group_group', 'type' => 'int', 'internal' => 'relation'],
@ -46,7 +46,7 @@ final class GroupRelationMapper 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 = [
'relation' => [ 'relation' => [
'mapper' => GroupMapper::class, 'mapper' => GroupMapper::class,
'external' => 'task_group_group', 'external' => 'task_group_group',
@ -59,7 +59,7 @@ final class GroupRelationMapper extends DataMapperAbstract
* @var string * @var string
* @since 1.0.0 * @since 1.0.0
*/ */
protected static string $table = 'task_group'; public const TABLE = 'task_group';
/** /**
* Primary field name. * Primary field name.
@ -67,5 +67,5 @@ final class GroupRelationMapper extends DataMapperAbstract
* @var string * @var string
* @since 1.0.0 * @since 1.0.0
*/ */
protected static string $primaryField = 'task_group_id'; public const PRIMARYFIELD ='task_group_id';
} }

View File

@ -16,7 +16,7 @@ namespace Modules\Tasks\Models;
use Modules\Admin\Models\AccountMapper; use Modules\Admin\Models\AccountMapper;
use Modules\Media\Models\MediaMapper; use Modules\Media\Models\MediaMapper;
use phpOMS\DataStorage\Database\DataMapperAbstract; use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;
/** /**
* Mapper class. * Mapper class.
@ -26,7 +26,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 TaskElementMapper extends DataMapperAbstract final class TaskElementMapper extends DataMapperFactory
{ {
/** /**
* Columns. * Columns.
@ -34,7 +34,7 @@ final class TaskElementMapper 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 = [
'task_element_id' => ['name' => 'task_element_id', 'type' => 'int', 'internal' => 'id'], 'task_element_id' => ['name' => 'task_element_id', 'type' => 'int', 'internal' => 'id'],
'task_element_desc' => ['name' => 'task_element_desc', 'type' => 'string', 'internal' => 'description'], 'task_element_desc' => ['name' => 'task_element_desc', 'type' => 'string', 'internal' => 'description'],
'task_element_desc_raw' => ['name' => 'task_element_desc_raw', 'type' => 'string', 'internal' => 'descriptionRaw'], 'task_element_desc_raw' => ['name' => 'task_element_desc_raw', 'type' => 'string', 'internal' => 'descriptionRaw'],
@ -52,7 +52,7 @@ final class TaskElementMapper 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 = [
'media' => [ 'media' => [
'mapper' => MediaMapper::class, 'mapper' => MediaMapper::class,
'table' => 'task_element_media', 'table' => 'task_element_media',
@ -79,7 +79,7 @@ final class TaskElementMapper 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' => 'task_element_created_by', 'external' => 'task_element_created_by',
@ -92,7 +92,7 @@ final class TaskElementMapper extends DataMapperAbstract
* @var string * @var string
* @since 1.0.0 * @since 1.0.0
*/ */
protected static string $table = 'task_element'; public const TABLE = 'task_element';
/** /**
* Created at. * Created at.
@ -100,7 +100,7 @@ final class TaskElementMapper extends DataMapperAbstract
* @var string * @var string
* @since 1.0.0 * @since 1.0.0
*/ */
protected static string $createdAt = 'task_element_created_at'; public const CREATED_AT = 'task_element_created_at';
/** /**
* Primary field name. * Primary field name.
@ -108,5 +108,5 @@ final class TaskElementMapper extends DataMapperAbstract
* @var string * @var string
* @since 1.0.0 * @since 1.0.0
*/ */
protected static string $primaryField = 'task_element_id'; public const PRIMARYFIELD ='task_element_id';
} }

View File

@ -18,10 +18,10 @@ use Modules\Admin\Models\AccountMapper;
use Modules\Calendar\Models\ScheduleMapper; use Modules\Calendar\Models\ScheduleMapper;
use Modules\Media\Models\MediaMapper; use Modules\Media\Models\MediaMapper;
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\Mapper\ReadMapper;
use phpOMS\DataStorage\Database\Query\Builder; use phpOMS\DataStorage\Database\Query\Builder;
use phpOMS\DataStorage\Database\Query\Where; use phpOMS\DataStorage\Database\Query\Where;
use phpOMS\DataStorage\Database\RelationType;
/** /**
* Mapper class. * Mapper class.
@ -31,7 +31,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 TaskMapper extends DataMapperAbstract final class TaskMapper extends DataMapperFactory
{ {
/** /**
* Columns. * Columns.
@ -39,7 +39,7 @@ final class TaskMapper 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 = [
'task_id' => ['name' => 'task_id', 'type' => 'int', 'internal' => 'id'], 'task_id' => ['name' => 'task_id', 'type' => 'int', 'internal' => 'id'],
'task_title' => ['name' => 'task_title', 'type' => 'string', 'internal' => 'title'], 'task_title' => ['name' => 'task_title', 'type' => 'string', 'internal' => 'title'],
'task_desc' => ['name' => 'task_desc', 'type' => 'string', 'internal' => 'description'], 'task_desc' => ['name' => 'task_desc', 'type' => 'string', 'internal' => 'description'],
@ -65,7 +65,7 @@ final class TaskMapper 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 = [
'taskElements' => [ 'taskElements' => [
'mapper' => TaskElementMapper::class, 'mapper' => TaskElementMapper::class,
'table' => 'task_element', 'table' => 'task_element',
@ -92,7 +92,7 @@ final class TaskMapper 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' => 'task_created_by', 'external' => 'task_created_by',
@ -105,7 +105,7 @@ final class TaskMapper 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 = [
'schedule' => [ 'schedule' => [
'mapper' => ScheduleMapper::class, 'mapper' => ScheduleMapper::class,
'external' => 'task_schedule', 'external' => 'task_schedule',
@ -118,7 +118,7 @@ final class TaskMapper extends DataMapperAbstract
* @var string * @var string
* @since 1.0.0 * @since 1.0.0
*/ */
protected static string $table = 'task'; public const TABLE = 'task';
/** /**
* Created at. * Created at.
@ -126,7 +126,7 @@ final class TaskMapper extends DataMapperAbstract
* @var string * @var string
* @since 1.0.0 * @since 1.0.0
*/ */
protected static string $createdAt = 'task_created_at'; public const CREATED_AT = 'task_created_at';
/** /**
* Primary field name. * Primary field name.
@ -134,7 +134,7 @@ final class TaskMapper extends DataMapperAbstract
* @var string * @var string
* @since 1.0.0 * @since 1.0.0
*/ */
protected static string $primaryField = 'task_id'; public const PRIMARYFIELD ='task_id';
/** /**
* Get open tasks by createdBy * Get open tasks by createdBy
@ -147,12 +147,11 @@ final class TaskMapper extends DataMapperAbstract
*/ */
public static function getOpenCreatedBy(int $user) : array public static function getOpenCreatedBy(int $user) : array
{ {
$depth = 3;
$query = self::getQuery(); $query = self::getQuery();
$query->where(self::$table . '_d' . $depth . '.task_created_by', '=', $user) $query->where(self::TABLE . '_d1.task_created_by', '=', $user)
->where(self::$table . '_d' . $depth . '.task_status', '=', TaskStatus::OPEN); ->where(self::TABLE . '_d1.task_status', '=', TaskStatus::OPEN);
return self::getAllByQuery($query); return self::getAll()->execute($query);
} }
/** /**
@ -166,17 +165,16 @@ final class TaskMapper extends DataMapperAbstract
*/ */
public static function getOpenTo(int $user) : array public static function getOpenTo(int $user) : array
{ {
$depth = 3;
$query = self::getQuery(); $query = self::getQuery();
$query->innerJoin(TaskElementMapper::getTable()) $query->innerJoin(TaskElementMapper::TABLE)
->on(self::$table . '_d' . $depth . '.task_id', '=', TaskElementMapper::getTable() . '.task_element_task') ->on(self::TABLE . '_d1.task_id', '=', TaskElementMapper::TABLE . '.task_element_task')
->innerJoin(AccountRelationMapper::getTable()) ->innerJoin(AccountRelationMapper::TABLE)
->on(TaskElementMapper::getTable() . '.task_element_id', '=', AccountRelationMapper::getTable() . '.task_account_task_element') ->on(TaskElementMapper::TABLE . '.task_element_id', '=', AccountRelationMapper::TABLE . '.task_account_task_element')
->where(self::$table . '_d' . $depth . '.task_status', '=', TaskStatus::OPEN) ->where(self::TABLE . '_d1.task_status', '=', TaskStatus::OPEN)
->andWhere(AccountRelationMapper::getTable() . '.task_account_account', '=', $user) ->andWhere(AccountRelationMapper::TABLE . '.task_account_account', '=', $user)
->andWhere(AccountRelationMapper::getTable() . '.task_account_duty', '=', DutyType::TO); ->andWhere(AccountRelationMapper::TABLE . '.task_account_duty', '=', DutyType::TO);
return self::getAllByQuery($query); return self::getAll()->execute($query);
} }
/** /**
@ -190,16 +188,15 @@ final class TaskMapper extends DataMapperAbstract
*/ */
public static function getOpenAny(int $user) : array public static function getOpenAny(int $user) : array
{ {
$depth = 3;
$query = self::getQuery(); $query = self::getQuery();
$query->innerJoin(TaskElementMapper::getTable()) $query->innerJoin(TaskElementMapper::TABLE)
->on(self::$table . '_d' . $depth . '.task_id', '=', TaskElementMapper::getTable() . '.task_element_task') ->on(self::TABLE . '_d1.task_id', '=', TaskElementMapper::TABLE . '.task_element_task')
->innerJoin(AccountRelationMapper::getTable()) ->innerJoin(AccountRelationMapper::TABLE)
->on(TaskElementMapper::getTable() . '.task_element_id', '=', AccountRelationMapper::getTable() . '.task_account_task_element') ->on(TaskElementMapper::TABLE . '.task_element_id', '=', AccountRelationMapper::TABLE . '.task_account_task_element')
->where(self::$table . '_d' . $depth . '.task_status', '=', TaskStatus::OPEN) ->where(self::TABLE . '_d1.task_status', '=', TaskStatus::OPEN)
->andWhere(AccountRelationMapper::getTable() . '.task_account_account', '=', $user); ->andWhere(AccountRelationMapper::TABLE . '.task_account_account', '=', $user);
return self::getAllByQuery($query); return self::getAll()->execute($query);
} }
/** /**
@ -213,17 +210,16 @@ final class TaskMapper extends DataMapperAbstract
*/ */
public static function getOpenCC(int $user) : array public static function getOpenCC(int $user) : array
{ {
$depth = 3;
$query = self::getQuery(); $query = self::getQuery();
$query->innerJoin(TaskElementMapper::getTable()) $query->innerJoin(TaskElementMapper::TABLE)
->on(self::$table . '_d' . $depth . '.task_id', '=', TaskElementMapper::getTable() . '.task_element_task') ->on(self::TABLE . '_d1.task_id', '=', TaskElementMapper::TABLE . '.task_element_task')
->innerJoin(AccountRelationMapper::getTable()) ->innerJoin(AccountRelationMapper::TABLE)
->on(TaskElementMapper::getTable() . '.task_element_id', '=', AccountRelationMapper::getTable() . '.task_account_task_element') ->on(TaskElementMapper::TABLE . '.task_element_id', '=', AccountRelationMapper::TABLE . '.task_account_task_element')
->where(self::$table . '_d' . $depth . '.task_status', '=', TaskStatus::OPEN) ->where(self::TABLE . '_d1.task_status', '=', TaskStatus::OPEN)
->andWhere(AccountRelationMapper::getTable() . '.task_account_account', '=', $user) ->andWhere(AccountRelationMapper::TABLE . '.task_account_account', '=', $user)
->andWhere(AccountRelationMapper::getTable() . '.task_account_duty', '=', DutyType::CC); ->andWhere(AccountRelationMapper::TABLE . '.task_account_duty', '=', DutyType::CC);
return self::getAllByQuery($query); return self::getAll()->execute($query);
} }
/** /**
@ -237,11 +233,10 @@ final class TaskMapper extends DataMapperAbstract
*/ */
public static function getCreatedBy(int $user) : array public static function getCreatedBy(int $user) : array
{ {
$depth = 3;
$query = self::getQuery(); $query = self::getQuery();
$query->where(self::$table . '_d' . $depth . '.task_created_by', '=', $user); $query->where(self::TABLE . '_d1.task_created_by', '=', $user);
return self::getAllByQuery($query); return self::getAll()->execute($query);
} }
/** /**
@ -255,16 +250,15 @@ final class TaskMapper extends DataMapperAbstract
*/ */
public static function getTo(int $user) : array public static function getTo(int $user) : array
{ {
$depth = 3;
$query = self::getQuery(); $query = self::getQuery();
$query->innerJoin(TaskElementMapper::getTable()) $query->innerJoin(TaskElementMapper::TABLE)
->on(self::$table . '_d' . $depth . '.task_id', '=', TaskElementMapper::getTable() . '.task_element_task') ->on(self::TABLE . '_d1.task_id', '=', TaskElementMapper::TABLE . '.task_element_task')
->innerJoin(AccountRelationMapper::getTable()) ->innerJoin(AccountRelationMapper::TABLE)
->on(TaskElementMapper::getTable() . '.task_element_id', '=', AccountRelationMapper::getTable() . '.task_account_task_element') ->on(TaskElementMapper::TABLE . '.task_element_id', '=', AccountRelationMapper::TABLE . '.task_account_task_element')
->where(AccountRelationMapper::getTable() . '.task_account_account', '=', $user) ->where(AccountRelationMapper::TABLE . '.task_account_account', '=', $user)
->andWhere(AccountRelationMapper::getTable() . '.task_account_duty', '=', DutyType::TO); ->andWhere(AccountRelationMapper::TABLE . '.task_account_duty', '=', DutyType::TO);
return self::getAllByQuery($query); return self::getAll()->execute($query);
} }
/** /**
@ -278,16 +272,15 @@ final class TaskMapper extends DataMapperAbstract
*/ */
public static function getCC(int $user) : array public static function getCC(int $user) : array
{ {
$depth = 3;
$query = self::getQuery(); $query = self::getQuery();
$query->innerJoin(TaskElementMapper::getTable()) $query->innerJoin(TaskElementMapper::TABLE)
->on(self::$table . '_d' . $depth . '.task_id', '=', TaskElementMapper::getTable() . '.task_element_task') ->on(self::TABLE . '_d1.task_id', '=', TaskElementMapper::TABLE . '.task_element_task')
->innerJoin(AccountRelationMapper::getTable()) ->innerJoin(AccountRelationMapper::TABLE)
->on(TaskElementMapper::getTable() . '.task_element_id', '=', AccountRelationMapper::getTable() . '.task_account_task_element') ->on(TaskElementMapper::TABLE . '.task_element_id', '=', AccountRelationMapper::TABLE . '.task_account_task_element')
->where(AccountRelationMapper::getTable() . '.task_account_account', '=', $user) ->where(AccountRelationMapper::TABLE . '.task_account_account', '=', $user)
->andWhere(AccountRelationMapper::getTable() . '.task_account_duty', '=', DutyType::CC); ->andWhere(AccountRelationMapper::TABLE . '.task_account_duty', '=', DutyType::CC);
return self::getAllByQuery($query); return self::getAll()->execute($query);
} }
/** /**
@ -295,109 +288,22 @@ final class TaskMapper extends DataMapperAbstract
* *
* @param int $user User * @param int $user User
* *
* @return Task[] * @return ReadMapper
* *
* @since 1.0.0 * @since 1.0.0
*/ */
public static function getAny(int $user) : array public static function getAnyRelatedToUser(int $user) : ReadMapper
{ {
$depth = 3; $query = new Builder(self::$db, true);
$query = self::getQuery(); $query->innerJoin(TaskElementMapper::TABLE)
$query->innerJoin(TaskElementMapper::getTable()) ->on(self::TABLE . '_d1.task_id', '=', TaskElementMapper::TABLE . '.task_element_task')
->on(self::$table . '_d' . $depth . '.task_id', '=', TaskElementMapper::getTable() . '.task_element_task') ->innerJoin(AccountRelationMapper::TABLE)
->innerJoin(AccountRelationMapper::getTable()) ->on(TaskElementMapper::TABLE . '.task_element_id', '=', AccountRelationMapper::TABLE . '.task_account_task_element')
->on(TaskElementMapper::getTable() . '.task_element_id', '=', AccountRelationMapper::getTable() . '.task_account_task_element') ->where(AccountRelationMapper::TABLE . '.task_account_account', '=', $user)
->where(AccountRelationMapper::getTable() . '.task_account_account', '=', $user) ->orWhere(self::TABLE . '_d1.task_created_by', '=', $user)
->orWhere(self::$table . '_d' . $depth . '.task_created_by', '=', $user) ->groupBy(self::PRIMARYFIELD);
->orderBy(TaskElementMapper::getTable() . '.' . TaskElementMapper::getCreatedAt(), 'DESC');
return self::getAllByQuery($query); return self::getAll()->query($query);
}
/**
* Get tasks that have something to do with the user
*
* @param int $user User
* @param mixed $pivot Pivot
* @param string $column Sort column/pivot column
* @param int $limit Result limit
* @param string $order Order of the elements
* @param int $relations Load relations
* @param int $depth Relation depth
*
* @return Task[]
*
* @since 1.0.0
*/
public static function getAnyBeforePivot(
int $user,
mixed $pivot,
string $column = null,
int $limit = 50,
string $order = 'ASC',
int $relations = RelationType::ALL,
int $depth = 3
) : array
{
$depth = 3;
$userWhere = new Where(self::$db);
$userWhere->where(AccountRelationMapper::getTable() . '.task_account_account', '=', $user)
->orWhere(self::$table . '_d' . $depth . '.task_created_by', '=', $user);
$query = self::getQuery();
$query->innerJoin(TaskElementMapper::getTable())
->on(self::$table . '_d' . $depth . '.task_id', '=', TaskElementMapper::getTable() . '.task_element_task')
->innerJoin(AccountRelationMapper::getTable())
->on(TaskElementMapper::getTable() . '.task_element_id', '=', AccountRelationMapper::getTable() . '.task_account_task_element')
->where($userWhere)
->andWhere(static::$table . '_d' . $depth . '.' . ($column !== null ? self::getColumnByMember($column) : static::$primaryField), '<', $pivot)
->orderBy(static::$table . '_d' . $depth . '.' . ($column !== null ? self::getColumnByMember($column) : static::$primaryField), $order)
->limit($limit);
return self::getAllByQuery($query);
}
/**
* Get tasks that have something to do with the user
*
* @param int $user User
* @param mixed $pivot Pivot
* @param string $column Sort column/pivot column
* @param int $limit Result limit
* @param string $order Order of the elements
* @param int $relations Load relations
* @param int $depth Relation depth
*
* @return Task[]
*
* @since 1.0.0
*/
public static function getAnyAfterPivot(
int $user,
mixed $pivot,
string $column = null,
int $limit = 50,
string $order = 'ASC',
int $relations = RelationType::ALL,
int $depth = 3
) : array
{
$depth = 3;
$userWhere = new Where(self::$db);
$userWhere->where(AccountRelationMapper::getTable() . '.task_account_account', '=', $user)
->orWhere(self::$table . '_d' . $depth . '.task_created_by', '=', $user);
$query = self::getQuery();
$query->innerJoin(TaskElementMapper::getTable())
->on(self::$table . '_d' . $depth . '.task_id', '=', TaskElementMapper::getTable() . '.task_element_task')
->innerJoin(AccountRelationMapper::getTable())
->on(TaskElementMapper::getTable() . '.task_element_id', '=', AccountRelationMapper::getTable() . '.task_account_task_element')
->where($userWhere)
->andWhere(static::$table . '_d' . $depth . '.' . ($column !== null ? self::getColumnByMember($column) : static::$primaryField), '>', $pivot)
->orderBy(static::$table . '_d' . $depth . '.' . ($column !== null ? self::getColumnByMember($column) : static::$primaryField), $order)
->limit($limit);
return self::getAllByQuery($query);
} }
/** /**
@ -412,22 +318,21 @@ final class TaskMapper extends DataMapperAbstract
*/ */
public static function hasReadingPermission(int $user, int $task) : bool public static function hasReadingPermission(int $user, int $task) : bool
{ {
$depth = 1;
$userWhere = new Where(self::$db); $userWhere = new Where(self::$db);
$userWhere->where(AccountRelationMapper::getTable() . '.task_account_account', '=', $user) $userWhere->where(AccountRelationMapper::TABLE . '.task_account_account', '=', $user)
->orWhere(self::$table . '_d' . $depth . '.task_created_by', '=', $user); ->orWhere(self::TABLE . '_d1.task_created_by', '=', $user);
$query = new Builder(self::$db); $query = new Builder(self::$db);
$query->selectAs(self::$table . '_d' . $depth . '.' . self::$primaryField, self::$primaryField . '_d' . $depth) $query->selectAs(self::TABLE . '_d1.' . self::PRIMARYFIELD, self::PRIMARYFIELD . '_d1')
->fromAs(self::$table, self::$table . '_d' . $depth) ->fromAs(self::TABLE, self::TABLE . '_d1')
->innerJoin(TaskElementMapper::getTable()) ->innerJoin(TaskElementMapper::TABLE)
->on(self::$table . '_d' . $depth . '.' . self::$primaryField, '=', TaskElementMapper::getTable() . '.task_element_task') ->on(self::TABLE . '_d1.' . self::PRIMARYFIELD, '=', TaskElementMapper::TABLE . '.task_element_task')
->innerJoin(AccountRelationMapper::getTable()) ->innerJoin(AccountRelationMapper::TABLE)
->on(TaskElementMapper::getTable() . '.' . TaskElementMapper::getPrimaryField(), '=', AccountRelationMapper::getTable() . '.task_account_task_element') ->on(TaskElementMapper::TABLE . '.' . TaskElementMapper::PRIMARYFIELD, '=', AccountRelationMapper::TABLE . '.task_account_task_element')
->where($userWhere) ->where($userWhere)
->andWhere(self::$table . '_d' . $depth . '.' . self::$primaryField, '=', $task); ->andWhere(self::TABLE . '_d1.' . self::PRIMARYFIELD, '=', $task);
return !empty(self::getAllByQuery($query, RelationType::ALL, 1)); return !empty($query->execute()->fetchAll());
} }
/** /**
@ -444,14 +349,14 @@ final class TaskMapper extends DataMapperAbstract
try { try {
$query = new Builder(self::$db); $query = new Builder(self::$db);
$query->count('DISTINCT ' . self::$table . '.' . self::$primaryField) $query->count('DISTINCT ' . self::TABLE . '.' . self::PRIMARYFIELD)
->from(self::$table) ->from(self::TABLE)
->innerJoin(TaskElementMapper::getTable()) ->innerJoin(TaskElementMapper::TABLE)
->on(self::$table . '.' . self::$primaryField, '=', TaskElementMapper::getTable() . '.task_element_task') ->on(self::TABLE . '.' . self::PRIMARYFIELD, '=', TaskElementMapper::TABLE . '.task_element_task')
->innerJoin(AccountRelationMapper::getTable()) ->innerJoin(AccountRelationMapper::TABLE)
->on(TaskElementMapper::getTable() . '.' . TaskElementMapper::getPrimaryField(), '=', AccountRelationMapper::getTable() . '.task_account_task_element') ->on(TaskElementMapper::TABLE . '.' . TaskElementMapper::PRIMARYFIELD, '=', AccountRelationMapper::TABLE . '.task_account_task_element')
->where(self::$table . '.task_status', '=', TaskStatus::OPEN) ->where(self::TABLE . '.task_status', '=', TaskStatus::OPEN)
->andWhere(AccountRelationMapper::getTable() . '.task_account_account', '=', $user); ->andWhere(AccountRelationMapper::TABLE . '.task_account_account', '=', $user);
$sth = self::$db->con->prepare($query->toSql()); $sth = self::$db->con->prepare($query->toSql());
$sth->execute(); $sth->execute();

View File

@ -67,7 +67,10 @@ class TaskView extends View
*/ */
public function getAccountImage(int $account) : string public function getAccountImage(int $account) : string
{ {
$profile = ProfileMapper::getFor($account, 'account'); $profile = ProfileMapper::get()
->with('image')
->where('account', $account)
->execute();
if (($profile instanceof NullProfile) || $profile->image->getPath() === '') { if (($profile instanceof NullProfile) || $profile->image->getPath() === '') {
return UriFactory::build('{/prefix}' . $this->defaultProfileImage->getPath()); return UriFactory::build('{/prefix}' . $this->defaultProfileImage->getPath());

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

@ -22,6 +22,7 @@ use Modules\Tasks\Models\TaskElement;
use Modules\Tasks\Models\TaskMapper; use Modules\Tasks\Models\TaskMapper;
use Modules\Tasks\Models\TaskPriority; use Modules\Tasks\Models\TaskPriority;
use Modules\Tasks\Models\TaskStatus; use Modules\Tasks\Models\TaskStatus;
use phpOMS\DataStorage\Database\Query\OrderType;
use phpOMS\Utils\RnG\Text; use phpOMS\Utils\RnG\Text;
/** /**
@ -93,11 +94,20 @@ final class TaskMapperTest extends \PHPUnit\Framework\TestCase
$media->name = 'Task Media'; $media->name = 'Task Media';
$task->addMedia($media); $task->addMedia($media);
$id = TaskMapper::create($task); $id = TaskMapper::create()->execute($task);
self::assertGreaterThan(0, $task->getId()); self::assertGreaterThan(0, $task->getId());
self::assertEquals($id, $task->getId()); self::assertEquals($id, $task->getId());
$taskR = TaskMapper::get($task->getId()); $taskR = TaskMapper::get()
->with('media')
->with('taskElements')
->with('taskElements/media')
->with('taskElements/accRelation')
->with('taskElements/accRelation/relation')
->with('taskElements/grpRelation')
->with('taskElements/grpRelation/relation')
->where('id', $task->getId())
->execute();
self::assertEquals($task->createdAt->format('Y-m-d'), $taskR->createdAt->format('Y-m-d')); self::assertEquals($task->createdAt->format('Y-m-d'), $taskR->createdAt->format('Y-m-d'));
self::assertEquals($task->start->format('Y-m-d'), $taskR->start->format('Y-m-d')); self::assertEquals($task->start->format('Y-m-d'), $taskR->start->format('Y-m-d'));
self::assertEquals($task->getCreatedBy()->getId(), $taskR->getCreatedBy()->getId()); self::assertEquals($task->getCreatedBy()->getId(), $taskR->getCreatedBy()->getId());
@ -139,7 +149,7 @@ final class TaskMapperTest extends \PHPUnit\Framework\TestCase
*/ */
public function testNewest() : void public function testNewest() : void
{ {
$newest = TaskMapper::getNewest(1); $newest = TaskMapper::getAll()->sort('id', OrderType::DESC)->limit(1)->execute();
self::assertCount(1, $newest); self::assertCount(1, $newest);
} }
@ -179,7 +189,7 @@ final class TaskMapperTest extends \PHPUnit\Framework\TestCase
$taskElement2->setStatus($status); $taskElement2->setStatus($status);
$task->addElement($taskElement2); $task->addElement($taskElement2);
$id = TaskMapper::create($task); $id = TaskMapper::create()->execute($task);
} }
self::assertGreaterThan(0, TaskMapper::countUnread(1)); self::assertGreaterThan(0, TaskMapper::countUnread(1));
@ -220,7 +230,7 @@ final class TaskMapperTest extends \PHPUnit\Framework\TestCase
$taskElement2->setStatus($status); $taskElement2->setStatus($status);
$task->addElement($taskElement2); $task->addElement($taskElement2);
$id = TaskMapper::create($task); $id = TaskMapper::create()->execute($task);
} }
} }
@ -259,7 +269,7 @@ final class TaskMapperTest extends \PHPUnit\Framework\TestCase
$taskElement2->setStatus($status); $taskElement2->setStatus($status);
$task->addElement($taskElement2); $task->addElement($taskElement2);
$id = TaskMapper::create($task); $id = TaskMapper::create()->execute($task);
} }
} }
} }