diff --git a/Controller/ApiController.php b/Controller/ApiController.php index fdc181a..adb59e1 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -182,7 +182,7 @@ final class ApiController extends Controller public function apiTaskGet(RequestAbstract $request, ResponseAbstract $response, $data = null) : void { /** @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); } @@ -202,7 +202,7 @@ final class ApiController extends Controller public function apiTaskSet(RequestAbstract $request, ResponseAbstract $response, $data = null) : void { /** @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 */ $new = $this->updateTaskFromRequest($request); @@ -222,7 +222,7 @@ final class ApiController extends Controller private function updateTaskFromRequest(RequestAbstract $request) : 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->description = Markdown::parse((string) ($request->getData('plain') ?? $task->descriptionRaw)); $task->descriptionRaw = (string) ($request->getData('plain') ?? $task->descriptionRaw); @@ -280,7 +280,7 @@ final class ApiController extends Controller return; } - $task = TaskMapper::get((int) ($request->getData('task'))); + $task = TaskMapper::get()->where('id', (int) ($request->getData('task')))->execute(); $element = $this->createTaskElementFromRequest($request, $task); $task->setStatus($element->getStatus()); $task->setPriority($element->getPriority()); @@ -375,7 +375,7 @@ final class ApiController extends Controller public function apiTaskElementGet(RequestAbstract $request, ResponseAbstract $response, $data = null) : void { /** @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); } @@ -395,7 +395,7 @@ final class ApiController extends Controller public function apiTaskElementSet(RequestAbstract $request, ResponseAbstract $response, $data = null) : void { /** @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 */ $new = $this->updateTaskElementFromRequest($request); @@ -405,7 +405,7 @@ final class ApiController extends Controller || $old->getPriority() !== $new->getPriority() || $old->due !== $new->due ) { - $task = TaskMapper::get($new->task); + $task = TaskMapper::get()->where('id', $new->task)->execute(); $task->setStatus($new->getStatus()); $task->setPriority($new->getPriority()); @@ -429,7 +429,7 @@ final class ApiController extends Controller private function updateTaskElementFromRequest(RequestAbstract $request) : TaskElement { /** @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->setStatus((int) ($request->getData('status') ?? $element->getStatus())); $element->description = Markdown::parse((string) ($request->getData('plain') ?? $element->descriptionRaw)); diff --git a/Controller/BackendController.php b/Controller/BackendController.php index b61f685..4830c3b 100755 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -21,6 +21,7 @@ use Modules\Tasks\Views\TaskView; 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; @@ -61,23 +62,32 @@ final class BackendController extends Controller implements DashboardElementInte $view->setTemplate('/Modules/Tasks/Theme/Backend/task-dashboard'); $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') { $view->setData('tasks', - TaskMapper::with('language', $response->getLanguage()) - ::with('taskElements', models: null) - ::getAnyBeforePivot($request->header->account, (int) ($request->getData('id') ?? 0), limit: 25) + $mapperQuery->with('createdBy') + ->where('id', (int) ($request->getData('id') ?? 0), '<') + ->where('tags/title/language', $response->getLanguage()) + ->execute() ); } elseif ($request->getData('ptype') === 'n') { $view->setData('tasks', - TaskMapper::with('language', $response->getLanguage()) - ::with('taskElements', models: null) - ::getAnyAfterPivot($request->header->account, (int) ($request->getData('id') ?? 0), limit: 25) + $mapperQuery->with('createdBy') + ->where('id', (int) ($request->getData('id') ?? 0), '>') + ->where('tags/title/language', $response->getLanguage()) + ->execute() ); } else { $view->setData('tasks', - TaskMapper::with('language', $response->getLanguage()) - ::with('taskElements', models: null) - ::getAnyAfterPivot($request->header->account, 0, limit: 25) + $mapperQuery->with('createdBy') + ->where('id', 0, '>') + ->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'); $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); return $view; @@ -136,10 +150,20 @@ final class BackendController extends Controller implements DashboardElementInte $head = $response->get('Content')->getData('head'); $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; - if (!($task->getCreatedBy()->getId() === $accountId + if (!($task->createdBy->getId() === $accountId || $task->isCCAccount($accountId) || $task->isToAccount($accountId)) && !$this->app->accountManager->get($accountId)->hasPermission( diff --git a/Models/AccountRelationMapper.php b/Models/AccountRelationMapper.php index f4761cc..1db1fb1 100755 --- a/Models/AccountRelationMapper.php +++ b/Models/AccountRelationMapper.php @@ -15,7 +15,7 @@ declare(strict_types=1); namespace Modules\Tasks\Models; use Modules\Admin\Models\AccountMapper; -use phpOMS\DataStorage\Database\DataMapperAbstract; +use phpOMS\DataStorage\Database\Mapper\DataMapperFactory; /** * Mapper class. @@ -25,7 +25,7 @@ use phpOMS\DataStorage\Database\DataMapperAbstract; * @link https://orange-management.org * @since 1.0.0 */ -final class AccountRelationMapper extends DataMapperAbstract +final class AccountRelationMapper extends DataMapperFactory { /** * Columns. @@ -33,7 +33,7 @@ final class AccountRelationMapper extends DataMapperAbstract * @var array * @since 1.0.0 */ - protected static array $columns = [ + public const COLUMNS = [ 'task_account_id' => ['name' => 'task_account_id', 'type' => 'int', 'internal' => 'id'], 'task_account_duty' => ['name' => 'task_account_duty', 'type' => 'int', 'internal' => 'duty'], 'task_account_account' => ['name' => 'task_account_account', 'type' => 'int', 'internal' => 'relation'], @@ -46,7 +46,7 @@ final class AccountRelationMapper extends DataMapperAbstract * @var array * @since 1.0.0 */ - protected static array $ownsOne = [ + public const OWNS_ONE = [ 'relation' => [ 'mapper' => AccountMapper::class, 'external' => 'task_account_account', @@ -59,7 +59,7 @@ final class AccountRelationMapper extends DataMapperAbstract * @var string * @since 1.0.0 */ - protected static string $table = 'task_account'; + public const TABLE = 'task_account'; /** * Primary field name. @@ -67,5 +67,5 @@ final class AccountRelationMapper extends DataMapperAbstract * @var string * @since 1.0.0 */ - protected static string $primaryField = 'task_account_id'; + public const PRIMARYFIELD ='task_account_id'; } diff --git a/Models/GroupRelationMapper.php b/Models/GroupRelationMapper.php index 12554b6..a5ec3ad 100755 --- a/Models/GroupRelationMapper.php +++ b/Models/GroupRelationMapper.php @@ -15,7 +15,7 @@ declare(strict_types=1); namespace Modules\Tasks\Models; use Modules\Admin\Models\GroupMapper; -use phpOMS\DataStorage\Database\DataMapperAbstract; +use phpOMS\DataStorage\Database\Mapper\DataMapperFactory; /** * Mapper class. @@ -25,7 +25,7 @@ use phpOMS\DataStorage\Database\DataMapperAbstract; * @link https://orange-management.org * @since 1.0.0 */ -final class GroupRelationMapper extends DataMapperAbstract +final class GroupRelationMapper extends DataMapperFactory { /** * Columns. @@ -33,7 +33,7 @@ final class GroupRelationMapper extends DataMapperAbstract * @var array * @since 1.0.0 */ - protected static array $columns = [ + public const COLUMNS = [ 'task_group_id' => ['name' => 'task_group_id', 'type' => 'int', 'internal' => 'id'], 'task_group_duty' => ['name' => 'task_group_duty', 'type' => 'int', 'internal' => 'duty'], 'task_group_group' => ['name' => 'task_group_group', 'type' => 'int', 'internal' => 'relation'], @@ -46,7 +46,7 @@ final class GroupRelationMapper extends DataMapperAbstract * @var array * @since 1.0.0 */ - protected static array $ownsOne = [ + public const OWNS_ONE = [ 'relation' => [ 'mapper' => GroupMapper::class, 'external' => 'task_group_group', @@ -59,7 +59,7 @@ final class GroupRelationMapper extends DataMapperAbstract * @var string * @since 1.0.0 */ - protected static string $table = 'task_group'; + public const TABLE = 'task_group'; /** * Primary field name. @@ -67,5 +67,5 @@ final class GroupRelationMapper extends DataMapperAbstract * @var string * @since 1.0.0 */ - protected static string $primaryField = 'task_group_id'; + public const PRIMARYFIELD ='task_group_id'; } diff --git a/Models/TaskElementMapper.php b/Models/TaskElementMapper.php index 19ea1ef..1fee82d 100755 --- a/Models/TaskElementMapper.php +++ b/Models/TaskElementMapper.php @@ -16,7 +16,7 @@ namespace Modules\Tasks\Models; use Modules\Admin\Models\AccountMapper; use Modules\Media\Models\MediaMapper; -use phpOMS\DataStorage\Database\DataMapperAbstract; +use phpOMS\DataStorage\Database\Mapper\DataMapperFactory; /** * Mapper class. @@ -26,7 +26,7 @@ use phpOMS\DataStorage\Database\DataMapperAbstract; * @link https://orange-management.org * @since 1.0.0 */ -final class TaskElementMapper extends DataMapperAbstract +final class TaskElementMapper extends DataMapperFactory { /** * Columns. @@ -34,7 +34,7 @@ final class TaskElementMapper extends DataMapperAbstract * @var array * @since 1.0.0 */ - protected static array $columns = [ + public const COLUMNS = [ '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_raw' => ['name' => 'task_element_desc_raw', 'type' => 'string', 'internal' => 'descriptionRaw'], @@ -52,7 +52,7 @@ final class TaskElementMapper extends DataMapperAbstract * @var array * @since 1.0.0 */ - protected static array $hasMany = [ + public const HAS_MANY = [ 'media' => [ 'mapper' => MediaMapper::class, 'table' => 'task_element_media', @@ -79,7 +79,7 @@ final class TaskElementMapper extends DataMapperAbstract * @var array * @since 1.0.0 */ - protected static array $belongsTo = [ + public const BELONGS_TO = [ 'createdBy' => [ 'mapper' => AccountMapper::class, 'external' => 'task_element_created_by', @@ -92,7 +92,7 @@ final class TaskElementMapper extends DataMapperAbstract * @var string * @since 1.0.0 */ - protected static string $table = 'task_element'; + public const TABLE = 'task_element'; /** * Created at. @@ -100,7 +100,7 @@ final class TaskElementMapper extends DataMapperAbstract * @var string * @since 1.0.0 */ - protected static string $createdAt = 'task_element_created_at'; + public const CREATED_AT = 'task_element_created_at'; /** * Primary field name. @@ -108,5 +108,5 @@ final class TaskElementMapper extends DataMapperAbstract * @var string * @since 1.0.0 */ - protected static string $primaryField = 'task_element_id'; + public const PRIMARYFIELD ='task_element_id'; } diff --git a/Models/TaskMapper.php b/Models/TaskMapper.php index 3b4b160..90638c3 100755 --- a/Models/TaskMapper.php +++ b/Models/TaskMapper.php @@ -18,10 +18,10 @@ use Modules\Admin\Models\AccountMapper; use Modules\Calendar\Models\ScheduleMapper; 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\Mapper\ReadMapper; use phpOMS\DataStorage\Database\Query\Builder; use phpOMS\DataStorage\Database\Query\Where; -use phpOMS\DataStorage\Database\RelationType; /** * Mapper class. @@ -31,7 +31,7 @@ use phpOMS\DataStorage\Database\RelationType; * @link https://orange-management.org * @since 1.0.0 */ -final class TaskMapper extends DataMapperAbstract +final class TaskMapper extends DataMapperFactory { /** * Columns. @@ -39,7 +39,7 @@ final class TaskMapper extends DataMapperAbstract * @var array * @since 1.0.0 */ - protected static array $columns = [ + public const COLUMNS = [ 'task_id' => ['name' => 'task_id', 'type' => 'int', 'internal' => 'id'], 'task_title' => ['name' => 'task_title', 'type' => 'string', 'internal' => 'title'], 'task_desc' => ['name' => 'task_desc', 'type' => 'string', 'internal' => 'description'], @@ -65,7 +65,7 @@ final class TaskMapper extends DataMapperAbstract * @var array * @since 1.0.0 */ - protected static array $hasMany = [ + public const HAS_MANY = [ 'taskElements' => [ 'mapper' => TaskElementMapper::class, 'table' => 'task_element', @@ -92,7 +92,7 @@ final class TaskMapper extends DataMapperAbstract * @var array * @since 1.0.0 */ - protected static array $belongsTo = [ + public const BELONGS_TO = [ 'createdBy' => [ 'mapper' => AccountMapper::class, 'external' => 'task_created_by', @@ -105,7 +105,7 @@ final class TaskMapper extends DataMapperAbstract * @var array * @since 1.0.0 */ - protected static array $ownsOne = [ + public const OWNS_ONE = [ 'schedule' => [ 'mapper' => ScheduleMapper::class, 'external' => 'task_schedule', @@ -118,7 +118,7 @@ final class TaskMapper extends DataMapperAbstract * @var string * @since 1.0.0 */ - protected static string $table = 'task'; + public const TABLE = 'task'; /** * Created at. @@ -126,7 +126,7 @@ final class TaskMapper extends DataMapperAbstract * @var string * @since 1.0.0 */ - protected static string $createdAt = 'task_created_at'; + public const CREATED_AT = 'task_created_at'; /** * Primary field name. @@ -134,7 +134,7 @@ final class TaskMapper extends DataMapperAbstract * @var string * @since 1.0.0 */ - protected static string $primaryField = 'task_id'; + public const PRIMARYFIELD ='task_id'; /** * Get open tasks by createdBy @@ -147,12 +147,11 @@ final class TaskMapper extends DataMapperAbstract */ public static function getOpenCreatedBy(int $user) : array { - $depth = 3; $query = self::getQuery(); - $query->where(self::$table . '_d' . $depth . '.task_created_by', '=', $user) - ->where(self::$table . '_d' . $depth . '.task_status', '=', TaskStatus::OPEN); + $query->where(self::TABLE . '_d1.task_created_by', '=', $user) + ->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 { - $depth = 3; $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(self::$table . '_d' . $depth . '.task_status', '=', TaskStatus::OPEN) - ->andWhere(AccountRelationMapper::getTable() . '.task_account_account', '=', $user) - ->andWhere(AccountRelationMapper::getTable() . '.task_account_duty', '=', DutyType::TO); + $query->innerJoin(TaskElementMapper::TABLE) + ->on(self::TABLE . '_d1.task_id', '=', TaskElementMapper::TABLE . '.task_element_task') + ->innerJoin(AccountRelationMapper::TABLE) + ->on(TaskElementMapper::TABLE . '.task_element_id', '=', AccountRelationMapper::TABLE . '.task_account_task_element') + ->where(self::TABLE . '_d1.task_status', '=', TaskStatus::OPEN) + ->andWhere(AccountRelationMapper::TABLE . '.task_account_account', '=', $user) + ->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 { - $depth = 3; $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(self::$table . '_d' . $depth . '.task_status', '=', TaskStatus::OPEN) - ->andWhere(AccountRelationMapper::getTable() . '.task_account_account', '=', $user); + $query->innerJoin(TaskElementMapper::TABLE) + ->on(self::TABLE . '_d1.task_id', '=', TaskElementMapper::TABLE . '.task_element_task') + ->innerJoin(AccountRelationMapper::TABLE) + ->on(TaskElementMapper::TABLE . '.task_element_id', '=', AccountRelationMapper::TABLE . '.task_account_task_element') + ->where(self::TABLE . '_d1.task_status', '=', TaskStatus::OPEN) + ->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 { - $depth = 3; $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(self::$table . '_d' . $depth . '.task_status', '=', TaskStatus::OPEN) - ->andWhere(AccountRelationMapper::getTable() . '.task_account_account', '=', $user) - ->andWhere(AccountRelationMapper::getTable() . '.task_account_duty', '=', DutyType::CC); + $query->innerJoin(TaskElementMapper::TABLE) + ->on(self::TABLE . '_d1.task_id', '=', TaskElementMapper::TABLE . '.task_element_task') + ->innerJoin(AccountRelationMapper::TABLE) + ->on(TaskElementMapper::TABLE . '.task_element_id', '=', AccountRelationMapper::TABLE . '.task_account_task_element') + ->where(self::TABLE . '_d1.task_status', '=', TaskStatus::OPEN) + ->andWhere(AccountRelationMapper::TABLE . '.task_account_account', '=', $user) + ->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 { - $depth = 3; $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 { - $depth = 3; $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(AccountRelationMapper::getTable() . '.task_account_account', '=', $user) - ->andWhere(AccountRelationMapper::getTable() . '.task_account_duty', '=', DutyType::TO); + $query->innerJoin(TaskElementMapper::TABLE) + ->on(self::TABLE . '_d1.task_id', '=', TaskElementMapper::TABLE . '.task_element_task') + ->innerJoin(AccountRelationMapper::TABLE) + ->on(TaskElementMapper::TABLE . '.task_element_id', '=', AccountRelationMapper::TABLE . '.task_account_task_element') + ->where(AccountRelationMapper::TABLE . '.task_account_account', '=', $user) + ->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 { - $depth = 3; $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(AccountRelationMapper::getTable() . '.task_account_account', '=', $user) - ->andWhere(AccountRelationMapper::getTable() . '.task_account_duty', '=', DutyType::CC); + $query->innerJoin(TaskElementMapper::TABLE) + ->on(self::TABLE . '_d1.task_id', '=', TaskElementMapper::TABLE . '.task_element_task') + ->innerJoin(AccountRelationMapper::TABLE) + ->on(TaskElementMapper::TABLE . '.task_element_id', '=', AccountRelationMapper::TABLE . '.task_account_task_element') + ->where(AccountRelationMapper::TABLE . '.task_account_account', '=', $user) + ->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 * - * @return Task[] + * @return ReadMapper * * @since 1.0.0 */ - public static function getAny(int $user) : array + public static function getAnyRelatedToUser(int $user) : ReadMapper { - $depth = 3; - $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(AccountRelationMapper::getTable() . '.task_account_account', '=', $user) - ->orWhere(self::$table . '_d' . $depth . '.task_created_by', '=', $user) - ->orderBy(TaskElementMapper::getTable() . '.' . TaskElementMapper::getCreatedAt(), 'DESC'); + $query = new Builder(self::$db, true); + $query->innerJoin(TaskElementMapper::TABLE) + ->on(self::TABLE . '_d1.task_id', '=', TaskElementMapper::TABLE . '.task_element_task') + ->innerJoin(AccountRelationMapper::TABLE) + ->on(TaskElementMapper::TABLE . '.task_element_id', '=', AccountRelationMapper::TABLE . '.task_account_task_element') + ->where(AccountRelationMapper::TABLE . '.task_account_account', '=', $user) + ->orWhere(self::TABLE . '_d1.task_created_by', '=', $user) + ->groupBy(self::PRIMARYFIELD); - 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 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); + return self::getAll()->query($query); } /** @@ -412,22 +318,21 @@ final class TaskMapper extends DataMapperAbstract */ public static function hasReadingPermission(int $user, int $task) : bool { - $depth = 1; $userWhere = new Where(self::$db); - $userWhere->where(AccountRelationMapper::getTable() . '.task_account_account', '=', $user) - ->orWhere(self::$table . '_d' . $depth . '.task_created_by', '=', $user); + $userWhere->where(AccountRelationMapper::TABLE . '.task_account_account', '=', $user) + ->orWhere(self::TABLE . '_d1.task_created_by', '=', $user); $query = new Builder(self::$db); - $query->selectAs(self::$table . '_d' . $depth . '.' . self::$primaryField, self::$primaryField . '_d' . $depth) - ->fromAs(self::$table, self::$table . '_d' . $depth) - ->innerJoin(TaskElementMapper::getTable()) - ->on(self::$table . '_d' . $depth . '.' . self::$primaryField, '=', TaskElementMapper::getTable() . '.task_element_task') - ->innerJoin(AccountRelationMapper::getTable()) - ->on(TaskElementMapper::getTable() . '.' . TaskElementMapper::getPrimaryField(), '=', AccountRelationMapper::getTable() . '.task_account_task_element') + $query->selectAs(self::TABLE . '_d1.' . self::PRIMARYFIELD, self::PRIMARYFIELD . '_d1') + ->fromAs(self::TABLE, self::TABLE . '_d1') + ->innerJoin(TaskElementMapper::TABLE) + ->on(self::TABLE . '_d1.' . self::PRIMARYFIELD, '=', TaskElementMapper::TABLE . '.task_element_task') + ->innerJoin(AccountRelationMapper::TABLE) + ->on(TaskElementMapper::TABLE . '.' . TaskElementMapper::PRIMARYFIELD, '=', AccountRelationMapper::TABLE . '.task_account_task_element') ->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 { $query = new Builder(self::$db); - $query->count('DISTINCT ' . self::$table . '.' . self::$primaryField) - ->from(self::$table) - ->innerJoin(TaskElementMapper::getTable()) - ->on(self::$table . '.' . self::$primaryField, '=', TaskElementMapper::getTable() . '.task_element_task') - ->innerJoin(AccountRelationMapper::getTable()) - ->on(TaskElementMapper::getTable() . '.' . TaskElementMapper::getPrimaryField(), '=', AccountRelationMapper::getTable() . '.task_account_task_element') - ->where(self::$table . '.task_status', '=', TaskStatus::OPEN) - ->andWhere(AccountRelationMapper::getTable() . '.task_account_account', '=', $user); + $query->count('DISTINCT ' . self::TABLE . '.' . self::PRIMARYFIELD) + ->from(self::TABLE) + ->innerJoin(TaskElementMapper::TABLE) + ->on(self::TABLE . '.' . self::PRIMARYFIELD, '=', TaskElementMapper::TABLE . '.task_element_task') + ->innerJoin(AccountRelationMapper::TABLE) + ->on(TaskElementMapper::TABLE . '.' . TaskElementMapper::PRIMARYFIELD, '=', AccountRelationMapper::TABLE . '.task_account_task_element') + ->where(self::TABLE . '.task_status', '=', TaskStatus::OPEN) + ->andWhere(AccountRelationMapper::TABLE . '.task_account_account', '=', $user); $sth = self::$db->con->prepare($query->toSql()); $sth->execute(); diff --git a/Views/TaskView.php b/Views/TaskView.php index 2122918..2550371 100755 --- a/Views/TaskView.php +++ b/Views/TaskView.php @@ -67,7 +67,10 @@ class TaskView extends View */ 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() === '') { return UriFactory::build('{/prefix}' . $this->defaultProfileImage->getPath()); diff --git a/tests/Bootstrap.php b/tests/Bootstrap.php index f5fc99c..252a62f 100755 --- a/tests/Bootstrap.php +++ b/tests/Bootstrap.php @@ -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/'; diff --git a/tests/Models/TaskMapperTest.php b/tests/Models/TaskMapperTest.php index 1cb439b..aa0e84b 100755 --- a/tests/Models/TaskMapperTest.php +++ b/tests/Models/TaskMapperTest.php @@ -22,6 +22,7 @@ use Modules\Tasks\Models\TaskElement; use Modules\Tasks\Models\TaskMapper; use Modules\Tasks\Models\TaskPriority; use Modules\Tasks\Models\TaskStatus; +use phpOMS\DataStorage\Database\Query\OrderType; use phpOMS\Utils\RnG\Text; /** @@ -93,11 +94,20 @@ final class TaskMapperTest extends \PHPUnit\Framework\TestCase $media->name = 'Task Media'; $task->addMedia($media); - $id = TaskMapper::create($task); + $id = TaskMapper::create()->execute($task); self::assertGreaterThan(0, $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->start->format('Y-m-d'), $taskR->start->format('Y-m-d')); self::assertEquals($task->getCreatedBy()->getId(), $taskR->getCreatedBy()->getId()); @@ -139,7 +149,7 @@ final class TaskMapperTest extends \PHPUnit\Framework\TestCase */ public function testNewest() : void { - $newest = TaskMapper::getNewest(1); + $newest = TaskMapper::getAll()->sort('id', OrderType::DESC)->limit(1)->execute(); self::assertCount(1, $newest); } @@ -179,7 +189,7 @@ final class TaskMapperTest extends \PHPUnit\Framework\TestCase $taskElement2->setStatus($status); $task->addElement($taskElement2); - $id = TaskMapper::create($task); + $id = TaskMapper::create()->execute($task); } self::assertGreaterThan(0, TaskMapper::countUnread(1)); @@ -220,7 +230,7 @@ final class TaskMapperTest extends \PHPUnit\Framework\TestCase $taskElement2->setStatus($status); $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); $task->addElement($taskElement2); - $id = TaskMapper::create($task); + $id = TaskMapper::create()->execute($task); } } }