diff --git a/Admin/Install/Navigation.install.json b/Admin/Install/Navigation.install.json index a30350b..3fd89a4 100755 --- a/Admin/Install/Navigation.install.json +++ b/Admin/Install/Navigation.install.json @@ -47,8 +47,8 @@ "pid": "/item/attribute", "type": 3, "subtype": 1, - "name": "Values", - "uri": "{/base}/item/attribute/value/list?{?}", + "name": "Create", + "uri": "{/base}/item/attribute/type/create?{?}", "target": "self", "icon": null, "order": 10, diff --git a/Admin/Routes/Web/Api.php b/Admin/Routes/Web/Api.php index 2770ea4..63cf41e 100755 --- a/Admin/Routes/Web/Api.php +++ b/Admin/Routes/Web/Api.php @@ -22,6 +22,7 @@ return [ [ 'dest' => '\Modules\ItemManagement\Controller\ApiController:apiItemListExport', 'verb' => RouteVerb::GET, + 'csrf' => true, 'permission' => [ 'module' => ApiController::NAME, 'type' => PermissionType::READ, @@ -33,6 +34,7 @@ return [ [ 'dest' => '\Modules\ItemManagement\Controller\ApiController:apiItemFind', 'verb' => RouteVerb::GET, + 'csrf' => true, 'permission' => [ 'module' => ApiController::NAME, 'type' => PermissionType::READ, @@ -44,6 +46,7 @@ return [ [ 'dest' => '\Modules\ItemManagement\Controller\ApiAttributeController:apiItemAttributeCreate', 'verb' => RouteVerb::PUT, + 'csrf' => true, 'permission' => [ 'module' => ApiController::NAME, 'type' => PermissionType::READ, @@ -53,6 +56,7 @@ return [ [ 'dest' => '\Modules\ItemManagement\Controller\ApiAttributeController:apiItemAttributeUpdate', 'verb' => RouteVerb::SET, + 'csrf' => true, 'permission' => [ 'module' => ApiController::NAME, 'type' => PermissionType::READ, @@ -64,6 +68,7 @@ return [ [ 'dest' => '\Modules\ItemManagement\Controller\ApiAttributeController:apiItemAttributeTypeCreate', 'verb' => RouteVerb::PUT, + 'csrf' => true, 'permission' => [ 'module' => ApiController::NAME, 'type' => PermissionType::READ, @@ -73,6 +78,7 @@ return [ [ 'dest' => '\Modules\ItemManagement\Controller\ApiAttributeController:apiItemAttributeTypeUpdate', 'verb' => RouteVerb::SET, + 'csrf' => true, 'permission' => [ 'module' => ApiController::NAME, 'type' => PermissionType::READ, @@ -84,6 +90,7 @@ return [ [ 'dest' => '\Modules\ItemManagement\Controller\ApiAttributeController:apiItemAttributeTypeL11nCreate', 'verb' => RouteVerb::PUT, + 'csrf' => true, 'permission' => [ 'module' => ApiController::NAME, 'type' => PermissionType::READ, @@ -93,6 +100,7 @@ return [ [ 'dest' => '\Modules\ItemManagement\Controller\ApiAttributeController:apiItemAttributeTypeL11nUpdate', 'verb' => RouteVerb::SET, + 'csrf' => true, 'permission' => [ 'module' => ApiController::NAME, 'type' => PermissionType::READ, @@ -104,6 +112,7 @@ return [ [ 'dest' => '\Modules\ItemManagement\Controller\ApiAttributeController:apiItemAttributeValueCreate', 'verb' => RouteVerb::PUT, + 'csrf' => true, 'permission' => [ 'module' => ApiController::NAME, 'type' => PermissionType::READ, @@ -113,6 +122,7 @@ return [ [ 'dest' => '\Modules\ItemManagement\Controller\ApiAttributeController:apiItemAttributeValueUpdate', 'verb' => RouteVerb::SET, + 'csrf' => true, 'permission' => [ 'module' => ApiController::NAME, 'type' => PermissionType::READ, @@ -120,10 +130,11 @@ return [ ], ], ], - '^.*/item/attribute/value$' => [ + '^.*/item/attribute/value/l11n$' => [ [ 'dest' => '\Modules\ItemManagement\Controller\ApiAttributeController:apiItemAttributeValueL11nCreate', 'verb' => RouteVerb::PUT, + 'csrf' => true, 'permission' => [ 'module' => ApiController::NAME, 'type' => PermissionType::READ, @@ -133,6 +144,7 @@ return [ [ 'dest' => '\Modules\ItemManagement\Controller\ApiAttributeController:apiItemAttributeValueL11nUpdate', 'verb' => RouteVerb::SET, + 'csrf' => true, 'permission' => [ 'module' => ApiController::NAME, 'type' => PermissionType::READ, @@ -144,6 +156,7 @@ return [ [ 'dest' => '\Modules\ItemManagement\Controller\ApiController:apiItemL11nCreate', 'verb' => RouteVerb::PUT, + 'csrf' => true, 'permission' => [ 'module' => ApiController::NAME, 'type' => PermissionType::READ, @@ -153,6 +166,7 @@ return [ [ 'dest' => '\Modules\ItemManagement\Controller\ApiController:apiItemL11nUpdate', 'verb' => RouteVerb::SET, + 'csrf' => true, 'permission' => [ 'module' => ApiController::NAME, 'type' => PermissionType::READ, @@ -164,6 +178,7 @@ return [ [ 'dest' => '\Modules\ItemManagement\Controller\ApiController:apiItemL11nTypeCreate', 'verb' => RouteVerb::PUT, + 'csrf' => true, 'permission' => [ 'module' => ApiController::NAME, 'type' => PermissionType::READ, @@ -173,6 +188,7 @@ return [ [ 'dest' => '\Modules\ItemManagement\Controller\ApiController:apiItemL11nTypeUpdate', 'verb' => RouteVerb::SET, + 'csrf' => true, 'permission' => [ 'module' => ApiController::NAME, 'type' => PermissionType::READ, diff --git a/Admin/Routes/Web/Backend.php b/Admin/Routes/Web/Backend.php index 0437fbb..9225851 100755 --- a/Admin/Routes/Web/Backend.php +++ b/Admin/Routes/Web/Backend.php @@ -29,7 +29,7 @@ return [ ], ], ], - '^.*/item/attribute/type(\?.*$|$)' => [ + '^.*/item/attribute/type/view(\?.*$|$)' => [ [ 'dest' => '\Modules\ItemManagement\Controller\BackendController:viewItemManagementAttributeType', 'verb' => RouteVerb::GET, @@ -40,9 +40,20 @@ return [ ], ], ], - '^.*/item/attribute/value(\?.*$|$)' => [ + '^.*/item/attribute/type/create(\?.*$|$)' => [ [ - 'dest' => '\Modules\ItemManagement\Controller\BackendController:viewItemManagementAttributeValues', + 'dest' => '\Modules\ItemManagement\Controller\BackendController:viewItemManagementAttributeTypeCreate', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::ATTRIBUTE, + ], + ], + ], + '^.*/item/attribute/value/view(\?.*$|$)' => [ + [ + 'dest' => '\Modules\ItemManagement\Controller\BackendController:viewItemManagementAttributeValue', 'verb' => RouteVerb::GET, 'permission' => [ 'module' => BackendController::NAME, @@ -51,6 +62,17 @@ return [ ], ], ], + '^.*/item/attribute/value/create(\?.*$|$)' => [ + [ + 'dest' => '\Modules\ItemManagement\Controller\BackendController:viewItemManagementAttributeValueCreate', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::ATTRIBUTE, + ], + ], + ], '^/item/list(\?.*$|$)' => [ [ 'dest' => '\Modules\ItemManagement\Controller\BackendController:viewItemManagementItemList', diff --git a/Controller.js b/Controller.js index 90ab5ca..235ff55 100755 --- a/Controller.js +++ b/Controller.js @@ -41,6 +41,7 @@ omsApp.Modules.ItemManagement = class { const self = this; const data = JSON.parse(chart.getAttribute('data-chart')); + /** global: Chart */ const myChart = new Chart(chart.getContext('2d'), data); }; }; diff --git a/Controller/ApiController.php b/Controller/ApiController.php index f72bdb4..ee60711 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -188,7 +188,7 @@ final class ApiController extends Controller private function createItemDir(Item $item) : string { return '/Modules/ItemManagement/Items/' - . (empty($item->number) ? $item->id : $item->number); + . $item->id; } /** @@ -302,7 +302,8 @@ final class ApiController extends Controller $billing->apiPriceCreate($internalRequest, $internalResponse); } - $this->createMediaDirForItem($item->number, $request->header->account); + // @todo should this collection get added to the parent collection? + $this->createMediaDirForItem($item->id, $request->header->account); $path = $this->createItemDir($item); $uploadedFiles = $request->files['item_profile_image'] ?? []; @@ -396,19 +397,19 @@ final class ApiController extends Controller /** * Create directory for an account * - * @param string $number Item number - * @param int $createdBy Creator of the directory + * @param int $id Item number + * @param int $createdBy Creator of the directory * * @return Collection * * @since 1.0.0 */ - private function createMediaDirForItem(string $number, int $createdBy) : Collection + private function createMediaDirForItem(int $id, int $createdBy) : Collection { $collection = new Collection(); - $collection->name = $number; + $collection->name = $id; $collection->setVirtualPath('/Modules/ItemManagement/Items'); - $collection->setPath('/Modules/Media/Files/Modules/ItemManagement/Items/' . $number); + $collection->setPath('/Modules/Media/Files/Modules/ItemManagement/Items/' . $id); $collection->createdBy = new NullAccount($createdBy); CollectionMapper::create()->execute($collection); diff --git a/Controller/BackendController.php b/Controller/BackendController.php index 96d1b85..1bc218d 100755 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -73,46 +73,15 @@ final class BackendController extends Controller */ public function viewItemManagementAttributeTypeList(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface { - $view = new View($this->app->l11nManager, $request, $response); - $view->setTemplate('/Modules/ItemManagement/Theme/Backend/attribute-type-list'); + $view = new \Modules\Attribute\Theme\Backend\Components\AttributeTypeListView($this->app->l11nManager, $request, $response); $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1004802001, $request, $response); - /** @var \Modules\Attribute\Models\AttributeType[] $attributes */ - $attributes = ItemAttributeTypeMapper::getAll() + $view->attributes = ItemAttributeTypeMapper::getAll() ->with('l11n') ->where('l11n/language', $response->header->l11n->language) ->execute(); - $view->data['attributes'] = $attributes; - - return $view; - } - - /** - * Routing end-point for application behavior. - * - * @param RequestAbstract $request Request - * @param ResponseAbstract $response Response - * @param array $data Generic data - * - * @return RenderableInterface - * - * @since 1.0.0 - * @codeCoverageIgnore - */ - public function viewItemManagementAttributeValues(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface - { - $view = new View($this->app->l11nManager, $request, $response); - $view->setTemplate('/Modules/ItemManagement/Theme/Backend/attribute-value-list'); - $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1004802001, $request, $response); - - /** @var \Modules\Attribute\Models\AttributeValue[] $attributes */ - $attributes = ItemAttributeValueMapper::getAll() - ->with('l11n') - ->where('l11n/language', $response->header->l11n->language) - ->execute(); - - $view->data['attributes'] = $attributes; + $view->path = 'item'; return $view; } @@ -131,25 +100,23 @@ final class BackendController extends Controller */ public function viewItemManagementAttributeType(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface { - $view = new View($this->app->l11nManager, $request, $response); - $view->setTemplate('/Modules/ItemManagement/Theme/Backend/attribute-type'); + $view = new \Modules\Attribute\Theme\Backend\Components\AttributeTypeView($this->app->l11nManager, $request, $response); $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1004802001, $request, $response); - /** @var \Modules\Attribute\Models\AttributeType $attribute */ - $attribute = ItemAttributeTypeMapper::get() + $view->attribute = ItemAttributeTypeMapper::get() ->with('l11n') + ->with('defaults') + ->with('defaults/l11n') ->where('id', (int) $request->getData('id')) ->where('l11n/language', $response->header->l11n->language) + ->where('defaults/l11n/language', [$response->header->l11n->language, null]) ->execute(); - $l11ns = ItemAttributeTypeL11nMapper::getAll() - ->where('ref', $attribute->id) + $view->l11ns = ItemAttributeTypeL11nMapper::getAll() + ->where('ref', $view->attribute->id) ->execute(); - $view->data['attribute'] = $attribute; - $view->data['l11nValues'] = $l11ns; - - $view->data['l11nView'] = new \Web\Backend\Views\L11nView($this->app->l11nManager, $request, $response); + $view->path = 'item'; return $view; } @@ -168,18 +135,20 @@ final class BackendController extends Controller */ public function viewItemManagementAttributeValue(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface { - $view = new View($this->app->l11nManager, $request, $response); - $view->setTemplate('/Modules/ItemManagement/Theme/Backend/attribute-value'); + $view = new \Modules\Attribute\Theme\Backend\Components\AttributeValueView($this->app->l11nManager, $request, $response); $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1004802001, $request, $response); - /** @var \Modules\Attribute\Models\AttributeValue $attribute */ - $attribute = ItemAttributeValueMapper::get() + $view->attribute = ItemAttributeValueMapper::get() ->with('l11n') ->where('id', (int) $request->getData('id')) - ->where('l11n/language', $response->header->l11n->language) + ->where('l11n/language', [$response->header->l11n->language, null]) ->execute(); - $view->data['attribute'] = $attribute; + $view->l11ns = ItemAttributeValueL11nMapper::getAll() + ->where('ref', $view->attribute->id) + ->execute(); + + // @todo Also find the ItemAttributeType return $view; } @@ -846,7 +815,7 @@ final class BackendController extends Controller { $view = new View($this->app->l11nManager, $request, $response); $view->setTemplate('/Modules/ItemManagement/Theme/Backend/material-type-list'); - $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1002901101, $request, $response); + $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1004802001, $request, $response); $view->data['types'] = MaterialTypeMapper::getAll() ->with('l11n') @@ -872,7 +841,7 @@ final class BackendController extends Controller { $view = new View($this->app->l11nManager, $request, $response); $view->setTemplate('/Modules/ItemManagement/Theme/Backend/material-view'); - $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1002901101, $request, $response); + $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1004802001, $request, $response); $view->data['type'] = MaterialTypeMapper::get() ->with('l11n') diff --git a/Theme/Backend/Lang/de.lang.php b/Theme/Backend/Lang/de.lang.php index 2886a3b..a716932 100755 --- a/Theme/Backend/Lang/de.lang.php +++ b/Theme/Backend/Lang/de.lang.php @@ -124,6 +124,7 @@ return ['ItemManagement' => [ 'Text' => 'Text', 'TimeUnit' => 'Zeiteinheit', 'Title' => 'Titel', + 'Defaults' => 'Standard', 'TopCustomers' => 'Top Kunden', 'Tracking' => 'Verfolgung', 'TradingUnit' => 'Handelseinheit', diff --git a/Theme/Backend/Lang/en.lang.php b/Theme/Backend/Lang/en.lang.php index ddca57c..e0d8385 100755 --- a/Theme/Backend/Lang/en.lang.php +++ b/Theme/Backend/Lang/en.lang.php @@ -125,6 +125,7 @@ return ['ItemManagement' => [ 'Text' => 'Text', 'TimeUnit' => 'Unit of time', 'Title' => 'Title', + 'Defaults' => 'Defaults', 'TopCustomers' => 'Top Customers', 'Tracking' => 'Tracking', 'TradingUnit' => 'Trading Unit', diff --git a/Theme/Backend/attribute-type-list.tpl.php b/Theme/Backend/attribute-type-list.tpl.php deleted file mode 100755 index eace333..0000000 --- a/Theme/Backend/attribute-type-list.tpl.php +++ /dev/null @@ -1,71 +0,0 @@ -data['attributes']; - -echo $this->data['nav']->render(); ?> - -
| - |
| + |
| - |
| + |
| - |
| + |
| - |
| + |
| - |
| + |
| - |
| + |