diff --git a/Admin/Install/Media.install.json b/Admin/Install/Media.install.json new file mode 100644 index 0000000..7f7c084 --- /dev/null +++ b/Admin/Install/Media.install.json @@ -0,0 +1,17 @@ +[ + { + "name": "ItemManagement", + "virtualPath": "/Modules", + "user": 1 + }, + { + "name": "Articles", + "virtualPath": "/Modules/ItemManagement", + "user": 1 + }, + { + "name": "Images", + "virtualPath": "/Modules/ItemManagement/Articles", + "user": 1 + } +] \ No newline at end of file diff --git a/Admin/Install/Media.php b/Admin/Install/Media.php new file mode 100644 index 0000000..ec472a3 --- /dev/null +++ b/Admin/Install/Media.php @@ -0,0 +1,43 @@ + __DIR__ . '/Media.install.json']); + } +} diff --git a/Admin/Install/db.json b/Admin/Install/db.json index 5b57d05..9dfd230 100644 --- a/Admin/Install/db.json +++ b/Admin/Install/db.json @@ -234,23 +234,6 @@ } } }, - "itemmgmt_item_media_type": { - "name": "itemmgmt_item_media_type", - "fields": { - "itemmgmt_item_media_type_id": { - "name": "itemmgmt_item_media_type_id", - "type": "INT", - "null": false, - "primary": true, - "autoincrement": true - }, - "itemmgmt_item_media_type_title": { - "name": "itemmgmt_item_media_type_title", - "type": "VARCHAR(255)", - "null": false - } - } - }, "itemmgmt_item_media": { "name": "itemmgmt_item_media", "fields": { @@ -261,13 +244,6 @@ "primary": true, "autoincrement": true }, - "itemmgmt_item_media_type": { - "name": "itemmgmt_item_media_type", - "type": "INT", - "null": false, - "foreignTable": "itemmgmt_item_media_type", - "foreignKey": "itemmgmt_item_media_type_id" - }, "itemmgmt_item_media_item": { "name": "itemmgmt_item_media_item", "type": "INT", diff --git a/Models/Item.php b/Models/Item.php index dd703d2..8afbb71 100644 --- a/Models/Item.php +++ b/Models/Item.php @@ -14,6 +14,8 @@ declare(strict_types=1); namespace Modules\ItemManagement\Models; +use Modules\Media\Models\NullMedia; + /** * Account class. * @@ -46,7 +48,7 @@ class Item private int $type = 0; - private $media = []; + private $files = []; private $l11n = []; @@ -179,4 +181,32 @@ class Item return new NullItemL11n(); } + + public function addFile($media) : void + { + $this->files[] = $media; + } + + public function getFileByType(string $type) + { + foreach ($this->files as $file) { + if ($file->getType() === $type) { + return $file; + } + } + + return new NullMedia(); + } + + public function getFilesByType(string $type) : array + { + $files = []; + foreach ($this->files as $file) { + if ($file->getType() === $type) { + $files[] = $file; + } + } + + return $files; + } } diff --git a/Models/ItemAttributeMapper.php b/Models/ItemAttributeMapper.php index cf25f5d..8c3a050 100644 --- a/Models/ItemAttributeMapper.php +++ b/Models/ItemAttributeMapper.php @@ -51,11 +51,11 @@ final class ItemAttributeMapper extends DataMapperAbstract protected static array $ownsOne = [ 'type' => [ 'mapper' => ItemAttributeTypeMapper::class, - 'self' => 'itemmgmt_item_l11n_typeref', + 'external' => 'itemmgmt_item_l11n_typeref', ], 'value' => [ 'mapper' => ItemAttributeValueMapper::class, - 'self' => 'itemmgmt_item_l11n_typeref', + 'external' => 'itemmgmt_item_l11n_typeref', ], ]; diff --git a/Models/ItemAttributeTypeL11nMapper.php b/Models/ItemAttributeTypeL11nMapper.php index 72d56b9..a18cabb 100644 --- a/Models/ItemAttributeTypeL11nMapper.php +++ b/Models/ItemAttributeTypeL11nMapper.php @@ -51,7 +51,7 @@ final class ItemAttributeTypeL11nMapper extends DataMapperAbstract protected static array $ownsOne = [ 'language' => [ 'mapper' => LanguageMapper::class, - 'self' => 'itemmgmt_attr_type_l11n_lang', + 'external' => 'itemmgmt_attr_type_l11n_lang', 'by' => 'code2', 'column' => 'code2', 'conditional' => true, diff --git a/Models/ItemAttributeTypeMapper.php b/Models/ItemAttributeTypeMapper.php index f236106..70eeaf5 100644 --- a/Models/ItemAttributeTypeMapper.php +++ b/Models/ItemAttributeTypeMapper.php @@ -52,10 +52,10 @@ final class ItemAttributeTypeMapper extends DataMapperAbstract 'l11n' => [ 'mapper' => ItemAttributeTypeL11nMapper::class, 'table' => 'itemmgmt_attr_type_l11n', - 'external' => 'itemmgmt_attr_type_l11n_type', + 'self' => 'itemmgmt_attr_type_l11n_type', 'column' => 'title', 'conditional' => true, - 'self' => null, + 'external' => null, ], ]; diff --git a/Models/ItemAttributeValueMapper.php b/Models/ItemAttributeValueMapper.php index e8912ea..5ec7534 100644 --- a/Models/ItemAttributeValueMapper.php +++ b/Models/ItemAttributeValueMapper.php @@ -57,14 +57,14 @@ final class ItemAttributeValueMapper extends DataMapperAbstract protected static array $ownsOne = [ 'language' => [ 'mapper' => LanguageMapper::class, - 'self' => 'itemmgmt_attr_value_lang', + 'external' => 'itemmgmt_attr_value_lang', 'by' => 'code2', 'column' => 'code2', 'conditional' => true, ], 'country' => [ 'mapper' => CountryMapper::class, - 'self' => 'itemmgmt_attr_value_country', + 'external' => 'itemmgmt_attr_value_country', 'by' => 'code2', 'column' => 'code2', 'conditional' => true, diff --git a/Models/ItemL11nMapper.php b/Models/ItemL11nMapper.php index 20e59ac..f240db3 100644 --- a/Models/ItemL11nMapper.php +++ b/Models/ItemL11nMapper.php @@ -52,14 +52,14 @@ final class ItemL11nMapper extends DataMapperAbstract protected static array $ownsOne = [ 'language' => [ 'mapper' => LanguageMapper::class, - 'self' => 'itemmgmt_item_l11n_lang', + 'external' => 'itemmgmt_item_l11n_lang', 'by' => 'code2', 'column' => 'code2', 'conditional' => true, ], 'type' => [ 'mapper' => ItemL11nTypeMapper::class, - 'self' => 'itemmgmt_item_l11n_typeref', + 'external' => 'itemmgmt_item_l11n_typeref', ], ]; diff --git a/Models/ItemMapper.php b/Models/ItemMapper.php index 6926d5e..fd0c7e1 100644 --- a/Models/ItemMapper.php +++ b/Models/ItemMapper.php @@ -66,25 +66,25 @@ final class ItemMapper extends DataMapperAbstract * @since 1.0.0 */ protected static array $hasMany = [ -// 'media' => [ -// 'mapper' => MediaMapper::class, /* mapper of the related object */ -// 'table' => 'itemmgmt_item_media', /* table of the related object, null if no relation table is used (many->1) */ -// 'external' => 'itemmgmt_item_media_dst', -// 'self' => 'itemmgmt_item_media_src', -// ], + 'files' => [ + 'mapper' => MediaMapper::class, /* mapper of the related object */ + 'table' => 'itemmgmt_item_media', /* table of the related object, null if no relation table is used (many->1) */ + 'external' => 'itemmgmt_item_media_media', + 'self' => 'itemmgmt_item_media_item', + ], 'l11n' => [ 'mapper' => ItemL11nMapper::class, 'table' => 'itemmgmt_item_l11n', - 'external' => 'itemmgmt_item_l11n_item', + 'self' => 'itemmgmt_item_l11n_item', 'conditional' => true, - 'self' => null, + 'external' => null, ], 'attributes' => [ 'mapper' => ItemAttributeMapper::class, 'table' => 'itemmgmt_item_attr', - 'external' => 'itemmgmt_item_attr_item', + 'self' => 'itemmgmt_item_attr_item', 'conditional' => true, - 'self' => null, + 'external' => null, ], ]; } diff --git a/Theme/Backend/sales-item-list.tpl.php b/Theme/Backend/sales-item-list.tpl.php index 61e4ed9..179c3d6 100644 --- a/Theme/Backend/sales-item-list.tpl.php +++ b/Theme/Backend/sales-item-list.tpl.php @@ -13,6 +13,7 @@ declare(strict_types=1); use phpOMS\Uri\UriFactory; +use Modules\Media\Models\NullMedia; /** @var \phpOMS\Views\View $this */ $items = $this->getData('items'); @@ -26,6 +27,7 @@ echo $this->getData('nav')->render(); ?> + $value) : ++$count; - $url = UriFactory::build('{/prefix}sales/item/profile?{?}&id=' . $value->getId()); ?> + $url = UriFactory::build('{/prefix}sales/item/profile?{?}&id=' . $value->getId()); + $image = $value->getFileByType('backend_image'); + ?> +
getHtml('ID', '0', '0'); ?> getHtml('ID', '0', '0'); ?> @@ -52,8 +54,14 @@ echo $this->getData('nav')->render(); ?>
printHtml($value->getNumber()); ?> printHtml($value->getL11n('name1')->getDescription()); ?> printHtml($value->getL11n('name2')->getDescription()); ?>