Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
402 changes: 402 additions & 0 deletions lib/GaletteObjectsLend/Controllers/Crud/AbstractListController.php

Large diffs are not rendered by default.

350 changes: 96 additions & 254 deletions lib/GaletteObjectsLend/Controllers/Crud/CategoriesController.php

Large diffs are not rendered by default.

128 changes: 86 additions & 42 deletions lib/GaletteObjectsLend/Controllers/Crud/ObjectsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
use Galette\Repository\Members;
use Slim\Psr7\Request;
use Slim\Psr7\Response;
use Throwable;

/**
* Objects controller
Expand All @@ -45,6 +46,30 @@ class ObjectsController extends AbstractPluginController
#[Inject("Plugin Galette Objects Lend")]
protected array $module_info;

/**
* Default filter name, used to store filters in session
*/
public static function getDefaultFilterName(): string
{
return 'objects';
}

/**
* Session key of the filters
*/
private function getFiltersKey(): string
{
return $this->getFilterName(self::getDefaultFilterName());
}

/**
* Get filters from session
*/
private function getFilters(): ObjectsList
{
return $this->session->{$this->getFiltersKey()} ?? new ObjectsList();
}

// CRUD - Create

/**
Expand Down Expand Up @@ -82,11 +107,7 @@ public function doAdd(Request $request, Response $response): Response
*/
public function list(Request $request, Response $response, ?string $option = null, int|string|null $value = null): Response
{
if (isset($this->session->objectslend_filter_objects)) {
$filters = $this->session->objectslend_filter_objects;
} else {
$filters = new ObjectsList();
}
$filters = $this->getFilters();

if ($option !== null) {
switch ($option) {
Expand All @@ -106,10 +127,10 @@ public function list(Request $request, Response $response, ?string $option = nul
}

$lendsprefs = new Preferences($this->zdb);
$objects = new Objects($this->zdb, $lendsprefs, $filters);
$objects = new Objects($this->zdb, $this->preferences, $this->login, $lendsprefs, $filters);
$list = $objects->getObjectsList(true);

$this->session->objectslend_filter_objects = $filters;
$this->session->{$this->getFiltersKey()} = $filters;

//assign pagination variables to the template and add pagination links
$filters->setViewCommonsFilters($lendsprefs, $this->view);
Expand All @@ -118,9 +139,12 @@ public function list(Request $request, Response $response, ?string $option = nul
$cat_filters = new CategoriesList();
$cat_filters->active_filter = Categories::ACTIVE_CATEGORIES; //retrieve only active categories
$cat_filters->not_empty = true; //retrieve only categories with objects
$cat_filters->setObjectsFilter($filters); //search for categories corresponding to filtered objects
$categories = new Categories($this->zdb, $this->login, $cat_filters);
$categories_list = $categories->getCategoriesList(true, null, false);
//search for categories corresponding to filtered objects, whatever the chosen category
$objects_filters = clone $filters;
$objects_filters->category_filter = null;
$cat_filters->setObjectsFilter($objects_filters);
$categories = new Categories($this->zdb, $this->preferences, $this->login, $cat_filters);
$categories_list = $categories->getCategoriesList(true, false, false);

// display page
$this->view->render(
Expand Down Expand Up @@ -151,11 +175,7 @@ public function list(Request $request, Response $response, ?string $option = nul
public function filter(Request $request, Response $response): Response
{
$post = $request->getParsedBody();
if (isset($this->session->objectslend_filter_objects)) {
$filters = $this->session->objectslend_filter_objects;
} else {
$filters = new ObjectsList();
}
$filters = $this->getFilters();

//reintialize filters
if (isset($post['clear_filter'])) {
Expand All @@ -169,6 +189,10 @@ public function filter(Request $request, Response $response): Response
if (isset($post['field_filter'])) {
$filters->field_filter = $post['field_filter'];
}
//category, empty for all
if (isset($post['category_filter'])) {
$filters->category_filter = $post['category_filter'] === '' ? null : $post['category_filter'];
}
//activity to filter
if (isset($post['active_filter'])) {
if (is_numeric($post['active_filter'])) {
Expand All @@ -181,7 +205,7 @@ public function filter(Request $request, Response $response): Response
}
}

$this->session->objectslend_filter_objects = $filters;
$this->session->{$this->getFiltersKey()} = $filters;

return $response
->withStatus(301)
Expand Down Expand Up @@ -225,14 +249,10 @@ public function handleBatch(Request $request, Response $response): Response
$post = $request->getParsedBody();

if (isset($post['entries_sel'])) {
if (isset($this->session->objectslend_filter_objects)) {
$filters = $this->session->objectslend_filter_objects;
} else {
$filters = new ObjectsList();
}
$filters = $this->getFilters();

$filters->selected = $post['entries_sel'];
$this->session->objectslend_filter_objects = $filters;
$this->session->{$this->getFiltersKey()} = $filters;

if (isset($post['delete'])) {
return $response
Expand Down Expand Up @@ -280,7 +300,7 @@ public function edit(Request $request, Response $response, ?int $id = null, stri
}
unset($this->session->objectslend_object_data);

$categories = new Categories($this->zdb, $this->login);
$categories = new Categories($this->zdb, $this->preferences, $this->login);
$categories_list = $categories->getCategoriesList(true);

if ($object->getId() !== null) {
Expand All @@ -291,7 +311,7 @@ public function edit(Request $request, Response $response, ?int $id = null, stri

$sfilter = new StatusList();
$sfilter->active_filter = \GaletteObjectsLend\Repository\Status::ACTIVE;
$statuses = new Status($this->zdb, $this->login, $sfilter);
$statuses = new Status($this->zdb, $this->preferences, $this->login, $sfilter);
$slist = $statuses->getStatusList(true);

$lendsprefs = new Preferences($this->zdb);
Expand Down Expand Up @@ -351,7 +371,18 @@ public function doEdit(Request $request, Response $response, ?int $id = null, st

$this->fillObject($object, $post);

if ($object->store()) {
try {
$object->store();
$stored = true;
} catch (Throwable $e) {
Analog::log(
'Unable to store object #' . $object->getId() . ' | ' . $e->getMessage(),
Analog::ERROR
);
$stored = false;
}

if ($stored) {
if (!empty($post['1st_status'])) {
try {
$this->getLendService()->changeStatus($object, (int)$post['1st_status']);
Expand All @@ -369,7 +400,7 @@ public function doEdit(Request $request, Response $response, ?int $id = null, st
if (!$object->getPicture()->delete()) {
$error_detected[] = _T("Delete failed", "objectslend");
Analog::log(
'Unable to delete picture for object ' . $object->getName(),
'Unable to delete picture for object #' . $object->getId(),
Analog::ERROR
);
}
Expand Down Expand Up @@ -513,7 +544,18 @@ public function doClone(Request $request, Response $response, int $id): Response
{
$object = new LendObject($this->zdb, $id);

if ($object->clone()) {
try {
$object->clone();
$cloned = true;
} catch (Throwable $e) {
Analog::log(
'Unable to clone object #' . $id . ' | ' . $e->getMessage(),
Analog::ERROR
);
$cloned = false;
}

if ($cloned) {
$this->flash->addMessage(
'success_detected',
str_replace(
Expand Down Expand Up @@ -560,8 +602,8 @@ public function lend(Request $request, Response $response, string $action, int $
),
'time' => time(),
'statuses' => ($action == 'take'
? (new Status($this->zdb, $this->login))->getActiveTakeAwayStatuses()
: (new Status($this->zdb, $this->login))->getActiveStockStatuses()),
? (new Status($this->zdb, $this->preferences, $this->login))->getActiveTakeAwayStatuses()
: (new Status($this->zdb, $this->preferences, $this->login))->getActiveStockStatuses()),
'lendsprefs' => $lendsprefs->getPreferences(),
'olendsprefs' => $lendsprefs,
'ajax' => $this->isAjax($request),
Expand Down Expand Up @@ -788,7 +830,7 @@ private function lendResponse(Request $request, Response $response): Response
*/
private function getLendService(?Preferences $lendsprefs = null): LendService
{
return new LendService($this->zdb, $this->login, $lendsprefs ?? new Preferences($this->zdb));
return new LendService($this->zdb, $this->preferences, $this->login, $lendsprefs ?? new Preferences($this->zdb));
}

// /CRUD - Update
Expand Down Expand Up @@ -834,7 +876,7 @@ protected function getIdsToRemove(array &$args, ?array $post): array|int|null
if (isset($args['id'])) {
return (int)$args['id'];
} else {
$filters = $this->session->objectslend_filter_objects;
$filters = $this->getFilters();
return $filters->selected;
}
}
Expand All @@ -855,7 +897,7 @@ public function confirmRemoveTitle(array $args): string
);
} else {
//batch objects removal
$filters = $this->session->objectslend_filter_objects;
$filters = $this->getFilters();
return str_replace(
'%count',
count($filters->selected),
Expand All @@ -872,25 +914,27 @@ public function confirmRemoveTitle(array $args): string
*/
protected function doDelete(array $args, array $post): bool
{
if (isset($this->session->objectslend_filter_objects)) {
$filters = $this->session->objectslend_filter_objects;
} else {
$filters = new ObjectsList();
}
$filters = $this->getFilters();
$lendsprefs = new Preferences($this->zdb);
$objects = new Objects($this->zdb, $lendsprefs, $filters);
$objects = new Objects($this->zdb, $this->preferences, $this->login, $lendsprefs, $filters);

if (!is_array($post['id'])) {
$ids = (array)$post['id'];
} else {
$ids = $post['id'];
}

$result = $objects->removeObjects($ids);
if ($result) {
unset($this->session->objectslend_filter_objects);
try {
$objects->removeObjects($ids);
} catch (Throwable $e) {
Analog::log(
'Unable to remove objects #' . implode(', #', $ids) . ' | ' . $e->getMessage(),
Analog::ERROR
);
return false;
}
return $result;
unset($this->session->{$this->getFiltersKey()});
return true;
}

// /CRUD - Delete
Expand Down
Loading
Loading