1: | <?php
|
2: | namespace Opencart\Admin\Model\Setting;
|
3: | |
4: | |
5: | |
6: | |
7: |
|
8: | class Extension extends \Opencart\System\Engine\Model {
|
9: | |
10: | |
11: | |
12: | |
13: |
|
14: | public function getExtensions(): array {
|
15: | $query = $this->db->query("SELECT DISTINCT `extension` FROM `" . DB_PREFIX . "extension`");
|
16: |
|
17: | return $query->rows;
|
18: | }
|
19: |
|
20: | |
21: | |
22: | |
23: | |
24: | |
25: | |
26: |
|
27: | public function getExtensionsByType(string $type): array {
|
28: | $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "extension` WHERE `type` = '" . $this->db->escape($type) . "' ORDER BY `code` ASC");
|
29: |
|
30: | return $query->rows;
|
31: | }
|
32: |
|
33: | |
34: | |
35: | |
36: | |
37: | |
38: | |
39: | |
40: |
|
41: | public function getExtensionByCode(string $type, string $code): array {
|
42: | $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "extension` WHERE `type` = '" . $this->db->escape($type) . "' AND `code` = '" . $this->db->escape($code) . "'");
|
43: |
|
44: | return $query->row;
|
45: | }
|
46: |
|
47: | |
48: | |
49: | |
50: | |
51: | |
52: | |
53: |
|
54: | public function getTotalExtensionsByExtension(string $extension): int {
|
55: | $query = $this->db->query("SELECT COUNT(*) AS `total` FROM `" . DB_PREFIX . "extension` WHERE `extension` = '" . $this->db->escape($extension) . "'");
|
56: |
|
57: | return (int)$query->row['total'];
|
58: | }
|
59: |
|
60: | |
61: | |
62: | |
63: | |
64: | |
65: | |
66: | |
67: | |
68: |
|
69: | public function install(string $type, string $extension, string $code): void {
|
70: | $extensions = $this->getExtensionsByType($type);
|
71: |
|
72: | $codes = array_column($extensions, 'code');
|
73: |
|
74: | if (!in_array($code, $codes)) {
|
75: | $this->db->query("INSERT INTO `" . DB_PREFIX . "extension` SET `extension` = '" . $this->db->escape($extension) . "', `type` = '" . $this->db->escape($type) . "', `code` = '" . $this->db->escape($code) . "'");
|
76: | }
|
77: | }
|
78: |
|
79: | |
80: | |
81: | |
82: | |
83: | |
84: | |
85: | |
86: |
|
87: | public function uninstall(string $type, string $code): void {
|
88: | $this->db->query("DELETE FROM `" . DB_PREFIX . "extension` WHERE `type` = '" . $this->db->escape($type) . "' AND `code` = '" . $this->db->escape($code) . "'");
|
89: |
|
90: | $this->load->model('setting/setting');
|
91: |
|
92: | $this->model_setting_setting->deleteSettingByCode($type . '_' . $code);
|
93: | }
|
94: |
|
95: | |
96: | |
97: | |
98: | |
99: | |
100: | |
101: |
|
102: | public function addInstall(array $data): int {
|
103: | $this->db->query("INSERT INTO `" . DB_PREFIX . "extension_install` SET `extension_id` = '" . (int)$data['extension_id'] . "', `extension_download_id` = '" . (int)$data['extension_download_id'] . "', `name` = '" . $this->db->escape($data['name']) . "', `description` = '" . $this->db->escape($data['description']) . "', `code` = '" . $this->db->escape($data['code']) . "', `version` = '" . $this->db->escape($data['version']) . "', `author` = '" . $this->db->escape($data['author']) . "', `link` = '" . $this->db->escape($data['link']) . "', `status` = '0', `date_added` = NOW()");
|
104: |
|
105: | return $this->db->getLastId();
|
106: | }
|
107: |
|
108: | |
109: | |
110: | |
111: | |
112: | |
113: | |
114: |
|
115: | public function deleteInstall(int $extension_install_id): void {
|
116: | $this->db->query("DELETE FROM `" . DB_PREFIX . "extension_install` WHERE `extension_install_id` = '" . (int)$extension_install_id . "'");
|
117: | }
|
118: |
|
119: | |
120: | |
121: | |
122: | |
123: | |
124: | |
125: | |
126: |
|
127: | public function editStatus(int $extension_install_id, bool $status): void {
|
128: | $this->db->query("UPDATE `" . DB_PREFIX . "extension_install` SET `status` = '" . (bool)$status . "' WHERE `extension_install_id` = '" . (int)$extension_install_id . "'");
|
129: | }
|
130: |
|
131: | |
132: | |
133: | |
134: | |
135: | |
136: | |
137: |
|
138: | public function getInstall(int $extension_install_id): array {
|
139: | $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "extension_install` WHERE `extension_install_id` = '" . (int)$extension_install_id . "'");
|
140: |
|
141: | return $query->row;
|
142: | }
|
143: |
|
144: | |
145: | |
146: | |
147: | |
148: | |
149: | |
150: |
|
151: | public function getInstallByExtensionDownloadId(int $extension_download_id): array {
|
152: | $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "extension_install` WHERE `extension_download_id` = '" . (int)$extension_download_id . "'");
|
153: |
|
154: | return $query->row;
|
155: | }
|
156: |
|
157: | |
158: | |
159: | |
160: | |
161: | |
162: | |
163: |
|
164: | public function getInstallByCode(string $code): array {
|
165: | $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "extension_install` WHERE `code` = '" . $this->db->escape($code) . "'");
|
166: |
|
167: | return $query->row;
|
168: | }
|
169: |
|
170: | |
171: | |
172: | |
173: | |
174: | |
175: | |
176: |
|
177: | public function getInstalls(array $data = []): array {
|
178: | $sql = "SELECT * FROM `" . DB_PREFIX . "extension_install`";
|
179: |
|
180: | if (!empty($data['filter_extension_download_id'])) {
|
181: | $sql .= " WHERE `extension_download_id` = '" . (int)$data['filter_extension_download_id'] . "'";
|
182: | }
|
183: |
|
184: | $sort_data = [
|
185: | 'name',
|
186: | 'version',
|
187: | 'date_added'
|
188: | ];
|
189: |
|
190: | if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
|
191: | $sql .= " ORDER BY " . $data['sort'];
|
192: | } else {
|
193: | $sql .= " ORDER BY `date_added`";
|
194: | }
|
195: |
|
196: | if (isset($data['order']) && ($data['order'] == 'DESC')) {
|
197: | $sql .= " DESC";
|
198: | } else {
|
199: | $sql .= " ASC";
|
200: | }
|
201: |
|
202: | if (isset($data['start']) || isset($data['limit'])) {
|
203: | if ($data['start'] < 0) {
|
204: | $data['start'] = 0;
|
205: | }
|
206: |
|
207: | if ($data['limit'] < 1) {
|
208: | $data['limit'] = 20;
|
209: | }
|
210: |
|
211: | $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
|
212: | }
|
213: |
|
214: | $query = $this->db->query($sql);
|
215: |
|
216: | return $query->rows;
|
217: | }
|
218: |
|
219: | |
220: | |
221: | |
222: | |
223: | |
224: | |
225: |
|
226: | public function getTotalInstalls(array $data = []): int {
|
227: | $sql = "SELECT COUNT(*) AS `total` FROM `" . DB_PREFIX . "extension_install`";
|
228: |
|
229: | if (!empty($data['filter_extension_download_id'])) {
|
230: | $sql .= " WHERE `extension_download_id` = '" . (int)$data['filter_extension_download_id'] . "'";
|
231: | }
|
232: |
|
233: | $query = $this->db->query($sql);
|
234: |
|
235: | return (int)$query->row['total'];
|
236: | }
|
237: |
|
238: | |
239: | |
240: | |
241: | |
242: | |
243: | |
244: | |
245: |
|
246: | public function addPath(int $extension_install_id, string $path): void {
|
247: | $this->db->query("INSERT INTO `" . DB_PREFIX . "extension_path` SET `extension_install_id` = '" . (int)$extension_install_id . "', `path` = '" . $this->db->escape($path) . "'");
|
248: | }
|
249: |
|
250: | |
251: | |
252: | |
253: | |
254: | |
255: | |
256: |
|
257: | public function deletePath(int $extension_path_id): void {
|
258: | $this->db->query("DELETE FROM `" . DB_PREFIX . "extension_path` WHERE `extension_path_id` = '" . (int)$extension_path_id . "'");
|
259: | }
|
260: |
|
261: | |
262: | |
263: | |
264: | |
265: | |
266: | |
267: |
|
268: | public function getPathsByExtensionInstallId(int $extension_install_id): array {
|
269: | $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "extension_path` WHERE `extension_install_id` = '" . (int)$extension_install_id . "' ORDER BY `extension_path_id` ASC");
|
270: |
|
271: | return $query->rows;
|
272: | }
|
273: |
|
274: | |
275: | |
276: | |
277: | |
278: | |
279: | |
280: |
|
281: | public function getPaths(string $path): array {
|
282: | $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "extension_path` WHERE `path` LIKE '" . $this->db->escape($path) . "' ORDER BY `path` ASC");
|
283: |
|
284: | return $query->rows;
|
285: | }
|
286: |
|
287: | |
288: | |
289: | |
290: | |
291: | |
292: | |
293: |
|
294: | public function getTotalPaths(string $path): int {
|
295: | $query = $this->db->query("SELECT COUNT(*) AS `total` FROM `" . DB_PREFIX . "extension_path` WHERE `path` LIKE '" . $this->db->escape($path) . "'");
|
296: |
|
297: | return (int)$query->row['total'];
|
298: | }
|
299: | }
|
300: | |