diff --git a/Admin/Install/db.json b/Admin/Install/db.json index 9d3b557..ce0eb9a 100644 --- a/Admin/Install/db.json +++ b/Admin/Install/db.json @@ -106,11 +106,6 @@ "null": false, "foreignTable": "clientmgmt_client", "foreignKey": "clientmgmt_client_id" - }, - "clientmgmt_client_media_type": { - "name": "clientmgmt_client_media_type", - "type": "TINYINT", - "null": false } } } diff --git a/Controller/ApiController.php b/Controller/ApiController.php index 123b5d5..39f99ab 100644 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -20,6 +20,7 @@ use Modules\ClientManagement\Models\Client; use Modules\ClientManagement\Models\ClientMapper; use Modules\Profile\Models\ContactElementMapper; use Modules\Profile\Models\Profile; +use Modules\Media\Models\PathSettings; use phpOMS\Message\Http\RequestStatusCode; use phpOMS\Message\NotificationLevel; use phpOMS\Message\RequestAbstract; @@ -151,4 +152,50 @@ final class ApiController extends Controller ); $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Contact Element', 'Contact element successfully created', $contactElement); } + + /** + * Api method to create item files + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiFileCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void + { + $uploadedFiles = $request->getFiles() ?? []; + + if (empty($uploadedFiles)) { + $this->fillJsonResponse($request, $response, NotificationLevel::ERROR, 'Item', 'Invalid client image', $uploadedFiles); + $response->header->status = RequestStatusCode::R_400; + + return; + } + + $uploaded = $this->app->moduleManager->get('Media')->uploadFiles( + $request->getData('name') ?? '', + $uploadedFiles, + $request->header->account, + 'Modules/Media/Files/Modules/ClientManagement/' . ($request->getData('client') ?? '0'), + '/Modules/ClientManagement/' . ($request->getData('client') ?? '0'), + $request->getData('type') ?? '', + '', + '', + PathSettings::FILE_PATH + ); + + $this->createModelRelation( + $request->header->account, + (int) $request->getData('client'), + \reset($uploaded)->getId(), + ClientMapper::class, 'files', '', $request->getOrigin() + ); + + $this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Image', 'Image successfully updated', $uploaded); + } } diff --git a/Controller/BackendController.php b/Controller/BackendController.php index eb1950b..2fd3fee 100644 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -49,7 +49,7 @@ final class BackendController extends Controller $view->setTemplate('/Modules/ClientManagement/Theme/Backend/client-list'); $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1003102001, $request, $response)); - $client = ClientMapper::getAll(); + $client = ClientMapper::getAfterPivot(0, null, 25); $view->addData('client', $client); return $view; diff --git a/Models/Client.php b/Models/Client.php index 8fc22eb..b6e0e20 100644 --- a/Models/Client.php +++ b/Models/Client.php @@ -299,4 +299,45 @@ class Client { $this->contactElements[] = $element; } + + /** + * Get media file by type + * + * @param string $type Media type + * + * @return Media + * + * @since 1.0.0 + */ + public function getFileByType(string $type) : Media + { + foreach ($this->files as $file) { + if ($file->type === $type) { + return $file; + } + } + + return new NullMedia(); + } + + /** + * Get all media files by type + * + * @param string $type Media type + * + * @return Media[] + * + * @since 1.0.0 + */ + public function getFilesByType(string $type) : array + { + $files = []; + foreach ($this->files as $file) { + if ($file->type === $type) { + $files[] = $file; + } + } + + return $files; + } } diff --git a/Models/ClientMapper.php b/Models/ClientMapper.php index a4a2444..859a7a9 100644 --- a/Models/ClientMapper.php +++ b/Models/ClientMapper.php @@ -99,8 +99,8 @@ final class ClientMapper extends DataMapperAbstract 'files' => [ 'mapper' => MediaMapper::class, /* mapper of the related object */ 'table' => 'clientmgmt_client_media', /* table of the related object, null if no relation table is used (many->1) */ - 'external' => 'clientmgmt_client_media_src', - 'self' => 'clientmgmt_client_media_dst', + 'external' => 'clientmgmt_client_media_dst', + 'self' => 'clientmgmt_client_media_src', ], 'contactElements' => [ 'mapper' => ContactElementMapper::class, diff --git a/Theme/Backend/client-list.tpl.php b/Theme/Backend/client-list.tpl.php index ee4ddbb..c050125 100644 --- a/Theme/Backend/client-list.tpl.php +++ b/Theme/Backend/client-list.tpl.php @@ -26,6 +26,7 @@ echo $this->getData('nav')->render(); ?>
| = $this->getHtml('ID', '0', '0'); ?> @@ -46,8 +47,14 @@ echo $this->getData('nav')->render(); ?> | |||
| = $this->printHtml($value->number); ?> | = $this->printHtml($value->profile->account->name1); ?> = $this->printHtml($value->profile->account->name2); ?> | = $this->printHtml($value->mainAddress->city); ?> |