1: | <?php
2: | namespace Opencart\Admin\Model\Catalog;
3: | /**
4: | * Class Attribute
5: | *
6: | * Can be called from $this->load->model('catalog/attribute');
7: | *
8: | * @package Opencart\Admin\Model\Catalog
9: | */
10: | class Attribute extends \Opencart\System\Engine\Model {
11: | /**
12: | * Add Attribute
13: | *
14: | * Create a new attribute record in the database.
15: | *
16: | * @param array<string, mixed> $data
17: | *
18: | * @return int returns the primary key of the new attribute record
19: | */
20: | public function addAttribute(array $data): int {
21: | $this->db->query("INSERT INTO `" . DB_PREFIX . "attribute` SET `attribute_group_id` = '" . (int)$data['attribute_group_id'] . "', `sort_order` = '" . (int)$data['sort_order'] . "'");
22: |
23: | $attribute_id = $this->db->getLastId();
24: |
25: | foreach ($data['attribute_description'] as $language_id => $attribute_description) {
26: | $this->model_catalog_attribute->addDescription($attribute_id, $language_id, $attribute_description);
27: | }
28: |
29: | return $attribute_id;
30: | }
31: |
32: | /**
33: | * Edit Attribute
34: | *
35: | * Edit attribute record in the database.
36: | *
37: | * @param int $attribute_id primary key of the attribute record to edit
38: | * @param array<string, mixed> $data array of data
39: | *
40: | * @return void
41: | */
42: | public function editAttribute(int $attribute_id, array $data): void {
43: | $this->db->query("UPDATE `" . DB_PREFIX . "attribute` SET `attribute_group_id` = '" . (int)$data['attribute_group_id'] . "', `sort_order` = '" . (int)$data['sort_order'] . "' WHERE `attribute_id` = '" . (int)$attribute_id . "'");
44: |
45: | $this->model_catalog_attribute->deleteDescriptions($attribute_id);
46: |
47: | foreach ($data['attribute_description'] as $language_id => $attribute_description) {
48: | $this->model_catalog_attribute->addDescription($attribute_id, $language_id, $attribute_description);
49: | }
50: | }
51: |
52: | /**
53: | * Delete Attribute
54: | *
55: | * Delete attribute record in the database.
56: | *
57: | * @param int $attribute_id primary key of the attribute record to be deleted
58: | *
59: | * @return void
60: | */
61: | public function deleteAttribute(int $attribute_id): void {
62: | $this->db->query("DELETE FROM `" . DB_PREFIX . "attribute` WHERE `attribute_id` = '" . (int)$attribute_id . "'");
63: |
64: | $this->model_catalog_attribute->deleteDescriptions($attribute_id);
65: | }
66: |
67: | /**
68: | * Get Attribute
69: | *
70: | * Get the record of the attribute record in the database.
71: | *
72: | * @param int $attribute_id primary key of the attribute record to be fetched
73: | *
74: | * @return array<string, mixed>
75: | */
76: | public function getAttribute(int $attribute_id): array {
77: | $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "attribute` `a` LEFT JOIN `" . DB_PREFIX . "attribute_description` `ad` ON (`a`.`attribute_id` = `ad`.`attribute_id`) WHERE `a`.`attribute_id` = '" . (int)$attribute_id . "' AND `ad`.`language_id` = '" . (int)$this->config->get('config_language_id') . "'");
78: |
79: | return $query->row;
80: | }
81: |
82: | /**
83: | * Get Attributes
84: | *
85: | * Get the record of the attribute record in the database.
86: | *
87: | * @param array<string, mixed> $data array of filters
88: | *
89: | * @return array<int, array<string, mixed>>
90: | */
91: | public function getAttributes(array $data = []): array {
92: | $sql = "SELECT *, (SELECT `agd`.`name` FROM `" . DB_PREFIX . "attribute_group_description` `agd` WHERE `agd`.`attribute_group_id` = `a`.`attribute_group_id` AND `agd`.`language_id` = '" . (int)$this->config->get('config_language_id') . "') AS `attribute_group` FROM `" . DB_PREFIX . "attribute` `a` LEFT JOIN `" . DB_PREFIX . "attribute_description` `ad` ON (`a`.`attribute_id` = `ad`.`attribute_id`) WHERE `ad`.`language_id` = '" . (int)$this->config->get('config_language_id') . "'";
93: |
94: | if (!empty($data['filter_name'])) {
95: | $sql .= " AND LCASE(`ad`.`name`) LIKE '" . $this->db->escape(oc_strtolower($data['filter_name']) . '%') . "'";
96: | }
97: |
98: | if (!empty($data['filter_attribute_group_id'])) {
99: | $sql .= " AND `a`.`attribute_group_id` = '" . (int)$data['filter_attribute_group_id'] . "'";
100: | }
101: |
102: | $sort_data = [
103: | 'ad.name',
104: | 'attribute_group',
105: | 'a.sort_order'
106: | ];
107: |
108: | if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
109: | $sql .= " ORDER BY " . $data['sort'];
110: | } else {
111: | $sql .= " ORDER BY `attribute_group`, `ad`.`name`";
112: | }
113: |
114: | if (isset($data['order']) && ($data['order'] == 'DESC')) {
115: | $sql .= " DESC";
116: | } else {
117: | $sql .= " ASC";
118: | }
119: |
120: | if (isset($data['start']) || isset($data['limit'])) {
121: | if ($data['start'] < 0) {
122: | $data['start'] = 0;
123: | }
124: |
125: | if ($data['limit'] < 1) {
126: | $data['limit'] = 20;
127: | }
128: |
129: | $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
130: | }
131: |
132: | $query = $this->db->query($sql);
133: |
134: | return $query->rows;
135: | }
136: |
137: | /**
138: | * Get Total Attributes
139: | *
140: | * Get the total number of attribute records in the database.
141: | *
142: | * @return int total number of attribute records
143: | */
144: | public function getTotalAttributes(): int {
145: | $query = $this->db->query("SELECT COUNT(*) AS `total` FROM `" . DB_PREFIX . "attribute`");
146: |
147: | if ($query->num_rows) {
148: | return (int)$query->row['total'];
149: | } else {
150: | return 0;
151: | }
152: | }
153: |
154: | /**
155: | * Get Total Attributes By Attribute Group ID
156: | *
157: | * Get the total number of attribute records with group ID in the database.
158: | *
159: | * @param int $attribute_group_id foreign key of the attribute record to be fetched
160: | *
161: | * @return int total number of attribute records that have attribute group ID
162: | */
163: | public function getTotalAttributesByAttributeGroupId(int $attribute_group_id): int {
164: | $query = $this->db->query("SELECT COUNT(*) AS `total` FROM `" . DB_PREFIX . "attribute` WHERE `attribute_group_id` = '" . (int)$attribute_group_id . "'");
165: |
166: | return (int)$query->row['total'];
167: | }
168: |
169: | /**
170: | * Add Description
171: | *
172: | * @param int $attribute_id primary key of the attribute record
173: | * @param int $language_id primary key of the attribute language
174: | * @param array<string, mixed> $data
175: | *
176: | * @return void
177: | */
178: | public function addDescription(int $attribute_id, int $language_id, array $data): void {
179: | $this->db->query("INSERT INTO `" . DB_PREFIX . "attribute_description` SET `attribute_id` = '" . (int)$attribute_id . "', `language_id` = '" . (int)$language_id . "', `name` = '" . $this->db->escape($data['name']) . "'");
180: | }
181: |
182: | /**
183: | * Delete Descriptions
184: | *
185: | * Delete attribute description record in the database.
186: | *
187: | * @param int $attribute_id primary key of the attribute record to be fetched
188: | *
189: | * @return void
190: | */
191: | public function deleteDescriptions(int $attribute_id): void {
192: | $this->db->query("DELETE FROM `" . DB_PREFIX . "attribute_description` WHERE `attribute_id` = '" . (int)$attribute_id . "'");
193: | }
194: |
195: | /**
196: | * Delete Descriptions By Language ID
197: | *
198: | * Delete attribute description record in the database.
199: | *
200: | * @param int $language_id primary key of the attribute language
201: | *
202: | * @return void
203: | */
204: | public function deleteDescriptionsByLanguageId(int $language_id): void {
205: | $this->db->query("DELETE FROM `" . DB_PREFIX . "attribute_description` WHERE `language_id` = '" . (int)$language_id . "'");
206: | }
207: |
208: | /**
209: | * Get Description
210: | *
211: | * Get the record of the attribute description record in the database.
212: | *
213: | * @param int $attribute_id primary key of the attribute record to be fetched
214: | * @param int $language_id primary key of the attribute language
215: | *
216: | * @return array<string, mixed>
217: | */
218: | public function getDescription(int $attribute_id, int $language_id): array {
219: | $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "attribute_description` WHERE `attribute_id` = '" . (int)$attribute_id . "' AND language_id = '" . (int)$language_id . "'");
220: |
221: | return $query->row;
222: | }
223: |
224: | /**
225: | * Get Descriptions
226: | *
227: | * Get the record of the attribute record in the database.
228: | *
229: | * @param int $attribute_id primary key of the attribute record to be fetched
230: | *
231: | * @return array<int, array<string, string>> Descriptions
232: | */
233: | public function getDescriptions(int $attribute_id): array {
234: | $attribute_data = [];
235: |
236: | $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "attribute_description` WHERE `attribute_id` = '" . (int)$attribute_id . "'");
237: |
238: | foreach ($query->rows as $result) {
239: | $attribute_data[$result['language_id']] = ['name' => $result['name']];
240: | }
241: |
242: | return $attribute_data;
243: | }
244: |
245: | /**
246: | * Get Descriptions By Language ID
247: | *
248: | * Get the record of the attribute record in the database.
249: | *
250: | * @param int $language_id primary key of the attribute language
251: | *
252: | * @return array<int, array<string, string>> Descriptions by language_id
253: | */
254: | public function getDescriptionsByLanguageId(int $language_id): array {
255: | $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "attribute_description` WHERE `language_id` = '" . (int)$language_id . "'");
256: |
257: | return $query->rows;
258: | }
259: | }
260: |

OpenCart API API documentation generated by ApiGen dev-master