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
{
/** @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));

View File

@ -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(

View File

@ -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<string, array{name:string, type:string, internal:string, autocomplete?:bool, readonly?:bool, writeonly?:bool, annotations?:array}>
* @since 1.0.0
*/
protected static array $columns = [
public const COLUMNS = [
'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<string, array{mapper:string, external:string, by?:string, column?:string, conditional?:bool}>
* @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';
}

View File

@ -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<string, array{name:string, type:string, internal:string, autocomplete?:bool, readonly?:bool, writeonly?:bool, annotations?:array}>
* @since 1.0.0
*/
protected static array $columns = [
public const COLUMNS = [
'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<string, array{mapper:string, external:string, by?:string, column?:string, conditional?:bool}>
* @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';
}

View File

@ -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<string, array{name:string, type:string, internal:string, autocomplete?:bool, readonly?:bool, writeonly?:bool, annotations?:array}>
* @since 1.0.0
*/
protected static array $columns = [
public const COLUMNS = [
'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<string, array{mapper:string, table:string, self?:?string, external?:?string, column?:string}>
* @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<string, array{mapper:string, external:string}>
* @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';
}

View File

@ -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<string, array{name:string, type:string, internal:string, autocomplete?:bool, readonly?:bool, writeonly?:bool, annotations?:array}>
* @since 1.0.0
*/
protected static array $columns = [
public const COLUMNS = [
'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<string, array{mapper:string, table:string, self?:?string, external?:?string, column?:string}>
* @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<string, array{mapper:string, external:string}>
* @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<string, array{mapper:string, external:string, by?:string, column?:string, conditional?:bool}>
* @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();

View File

@ -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());

View File

@ -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/';

View File

@ -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);
}
}
}