diff --git a/upload/admin/controller/marketplace/event.php b/upload/admin/controller/marketplace/event.php index 153fae00..559af8b7 100644 --- a/upload/admin/controller/marketplace/event.php +++ b/upload/admin/controller/marketplace/event.php @@ -75,6 +75,70 @@ public function disable() { $this->getList(); } + + public function add() { + $this->load->language('marketplace/event'); + + $this->document->setTitle($this->language->get('heading_title')); + + $this->load->model('setting/event'); + + if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validateForm()) { + $this->model_setting_event->addEvent($this->request->post['code'], $this->request->post['trigger'], $this->request->post['action'], $this->request->post['status'], $this->request->post['sort_order']); + + $this->session->data['success'] = $this->language->get('text_success'); + + $url = ''; + + if (isset($this->request->get['sort'])) { + $url .= '&sort=' . $this->request->get['sort']; + } + + if (isset($this->request->get['order'])) { + $url .= '&order=' . $this->request->get['order']; + } + + if (isset($this->request->get['page'])) { + $url .= '&page=' . $this->request->get['page']; + } + + $this->response->redirect($this->url->link('marketplace/event', 'user_token=' . $this->session->data['user_token'] . $url, true)); + } + + $this->getForm(); + } + + public function edit() { + $this->load->language('marketplace/event'); + + $this->document->setTitle($this->language->get('heading_title')); + + $this->load->model('setting/event'); + + if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validateForm()) { + $this->model_setting_event->editEvent($this->request->get['event_id'], $this->request->post); + + $this->session->data['success'] = $this->language->get('text_success'); + + $url = ''; + + if (isset($this->request->get['sort'])) { + $url .= '&sort=' . $this->request->get['sort']; + } + + if (isset($this->request->get['order'])) { + $url .= '&order=' . $this->request->get['order']; + } + + if (isset($this->request->get['page'])) { + $url .= '&page=' . $this->request->get['page']; + } + + $this->response->redirect($this->url->link('marketplace/event', 'user_token=' . $this->session->data['user_token'] . $url, true)); + } + + $this->getForm(); + } public function delete() { $this->load->language('marketplace/event'); @@ -156,6 +220,7 @@ public function getList() { ); $data['delete'] = $this->url->link('marketplace/event/delete', 'user_token=' . $this->session->data['user_token'] . $url, true); + $data['add'] = $this->url->link('marketplace/event/add', 'user_token=' . $this->session->data['user_token'] . $url, true); $data['events'] = array(); @@ -180,6 +245,7 @@ public function getList() { 'status' => $result['status'] ? $this->language->get('text_enabled') : $this->language->get('text_disabled'), 'enable' => $this->url->link('marketplace/event/enable', 'user_token=' . $this->session->data['user_token'] . '&event_id=' . $result['event_id'] . $url, true), 'disable' => $this->url->link('marketplace/event/disable', 'user_token=' . $this->session->data['user_token'] . '&event_id=' . $result['event_id'] . $url, true), + 'edit' => $this->url->link('marketplace/event/edit', 'user_token=' . $this->session->data['user_token'] . '&event_id=' . $result['event_id'] . $url, true), 'enabled' => $result['status'] ); } @@ -250,6 +316,126 @@ public function getList() { $this->response->setOutput($this->load->view('marketplace/event', $data)); } + protected function getForm() { + $data['text_form'] = !isset($this->request->get['event_id']) ? $this->language->get('text_add') : $this->language->get('text_edit'); + + if (isset($this->error['warning'])) { + $data['error_warning'] = $this->error['warning']; + } else { + $data['error_warning'] = ''; + } + + if (isset($this->error['code'])) { + $data['error_code'] = $this->error['code']; + } else { + $data['error_code'] = ''; + } + + if (isset($this->error['trigger'])) { + $data['error_trigger'] = $this->error['trigger']; + } else { + $data['error_trigger'] = ''; + } + + if (isset($this->error['action'])) { + $data['error_action'] = $this->error['action']; + } else { + $data['error_action'] = ''; + } + + $url = ''; + + if (isset($this->request->get['sort'])) { + $url .= '&sort=' . $this->request->get['sort']; + } + + if (isset($this->request->get['order'])) { + $url .= '&order=' . $this->request->get['order']; + } + + if (isset($this->request->get['page'])) { + $url .= '&page=' . $this->request->get['page']; + } + + $data['breadcrumbs'] = []; + + $data['breadcrumbs'][] = [ + 'text' => $this->language->get('text_home'), + 'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true) + ]; + + $data['breadcrumbs'][] = [ + 'text' => $this->language->get('heading_title'), + 'href' => $this->url->link('marketplace/event', 'user_token=' . $this->session->data['user_token'] . $url, true) + ]; + + if (isset($this->request->get['event_id'])) { + $data['form_action'] = $this->url->link('marketplace/event/edit', 'user_token=' . $this->session->data['user_token'] . '&event_id=' . $this->request->get['event_id'] . $url, true); + } else { + $data['form_action'] = $this->url->link('marketplace/event/add', 'user_token=' . $this->session->data['user_token'] . $url, true); + } + + $data['cancel'] = $this->url->link('marketplace/event', 'user_token=' . $this->session->data['user_token'] . $url, true); + + if (isset($this->request->get['event_id']) && $this->request->server['REQUEST_METHOD'] != 'POST') { + $event_info = $this->model_setting_event->getEvent($this->request->get['event_id']); + } + + $fields = [ + 'code', + 'trigger', + 'action', + 'status', + 'sort_order' + ]; + + foreach ($fields as $field) { + if (isset($this->request->post[$field])) { + $data[$field] = $this->request->post[$field]; + } elseif (isset($event_info[$field])) { + $data[$field] = $event_info[$field]; + } else { + if ($field == 'status') { + $data[$field] = 1; + } else { + $data[$field] = ''; + } + } + } + + $data['header'] = $this->load->controller('common/header'); + $data['column_left'] = $this->load->controller('common/column_left'); + $data['footer'] = $this->load->controller('common/footer'); + + $this->response->setOutput($this->load->view('marketplace/event_form', $data)); + } + + protected function validateForm() { + if (!$this->user->hasPermission('modify', 'marketplace/event')) { + $this->error['warning'] = $this->language->get('error_permission'); + } + + if (empty($this->request->post['code'])) { + $this->error['code'] = $this->language->get('error_code'); + } elseif (utf8_strlen($this->request->post['code']) < 3 || utf8_strlen($this->request->post['code']) > 64) { + $this->error['code'] = $this->language->get('error_code_length'); + } + + if (empty($this->request->post['trigger'])) { + $this->error['trigger'] = $this->language->get('error_trigger'); + } elseif (!preg_match('/^[a-zA-Z0-9_\/]+\/(before|after)$/', $this->request->post['trigger'])) { + $this->error['trigger'] = $this->language->get('error_trigger_format'); + } + + if (empty($this->request->post['action'])) { + $this->error['action'] = $this->language->get('error_action'); + } elseif (!preg_match('/^[a-zA-Z0-9_\/]+$/', $this->request->post['action'])) { + $this->error['action'] = $this->language->get('error_action_format'); + } + + return !$this->error; + } + protected function validate() { if (!$this->user->hasPermission('modify', 'marketplace/event')) { $this->error['warning'] = $this->language->get('error_permission'); diff --git a/upload/admin/language/en-gb/marketplace/event.php b/upload/admin/language/en-gb/marketplace/event.php index c02c5842..5f12b91e 100644 --- a/upload/admin/language/en-gb/marketplace/event.php +++ b/upload/admin/language/en-gb/marketplace/event.php @@ -5,6 +5,9 @@ // Text $_['text_success'] = 'Success: You have modified events!'; $_['text_list'] = 'Event List'; +$_['text_add'] = 'Add Event'; +$_['text_edit'] = 'Edit Event'; +$_['text_form'] = 'Event Settings'; $_['text_event'] = 'Events are used by extensions to override the default functionality of your store. If you have issues you can disable or enable the events here.'; $_['text_info'] = 'Event Information'; $_['text_trigger'] = 'Trigger'; @@ -16,5 +19,18 @@ $_['column_sort_order'] = 'Sort Order'; $_['column_action'] = 'Action'; +// Entry +$_['entry_code'] = 'Event Code'; +$_['entry_trigger'] = 'Trigger'; +$_['entry_action'] = 'Action'; +$_['entry_status'] = 'Status'; +$_['entry_sort_order'] = 'Sort Order'; + // Error -$_['error_permission'] = 'Warning: You do not have permission to modify extensions!'; +$_['error_permission'] = 'Warning: You do not have permission to modify extensions!'; +$_['error_code'] = 'Event code is required!'; +$_['error_code_length'] = 'Event code must be between 3 and 64 characters!'; +$_['error_trigger'] = 'Trigger is required!'; +$_['error_trigger_format'] = 'Trigger must end with /before or /after!'; +$_['error_action'] = 'Action is required!'; +$_['error_action_format'] = 'Action format is invalid!'; \ No newline at end of file diff --git a/upload/admin/language/ru-ru/marketplace/event.php b/upload/admin/language/ru-ru/marketplace/event.php index 9df42168..291098b0 100644 --- a/upload/admin/language/ru-ru/marketplace/event.php +++ b/upload/admin/language/ru-ru/marketplace/event.php @@ -8,6 +8,9 @@ // Text $_['text_success'] = 'Настройки успешно изменены!'; $_['text_list'] = 'Список событий'; +$_['text_add'] = 'Добавление события'; +$_['text_edit'] = 'Редактирование события'; +$_['text_form'] = 'Настройки события'; $_['text_event'] = 'События используются расширениями для переопределения стандартных функций вашего магазина. Если у вас есть проблемы, вы можете отключить или включить события здесь.'; $_['text_info'] = 'Информация о мероприятии'; $_['text_trigger'] = 'Trigger'; @@ -19,5 +22,18 @@ $_['column_sort_order'] = 'Порядок сортировки'; $_['column_action'] = 'Действие'; +// Entry +$_['entry_code'] = 'Код события'; +$_['entry_trigger'] = 'Trigger'; +$_['entry_action'] = 'Действие'; +$_['entry_status'] = 'Статус'; +$_['entry_sort_order'] = 'Порядок сортировки'; + // Error -$_['error_permission'] = 'У вас недостаточно прав для внесения изменений!'; \ No newline at end of file +$_['error_permission'] = 'У вас недостаточно прав для внесения изменений!'; +$_['error_code'] = 'Код события обязателен!'; +$_['error_code_length'] = 'Код события должен быть от 3 до 64 символов!'; +$_['error_trigger'] = 'Trigger обязателен!'; +$_['error_trigger_format'] = 'Trigger должен заканчиваться на /before или /after!'; +$_['error_action'] = 'Действие обязателен!'; +$_['error_action_format'] = 'Действие имеет неверный формат!'; \ No newline at end of file diff --git a/upload/admin/model/setting/event.php b/upload/admin/model/setting/event.php index 6e76425c..e32d7896 100644 --- a/upload/admin/model/setting/event.php +++ b/upload/admin/model/setting/event.php @@ -6,6 +6,10 @@ public function addEvent($code, $trigger, $action, $status = 1, $sort_order = 0) return $this->db->getLastId(); } + public function editEvent($event_id, $data) { + $this->db->query("UPDATE `" . DB_PREFIX . "event` SET `code` = '" . $this->db->escape($data['code']) . "',`trigger` = '" . $this->db->escape($data['trigger']) . "', `action` = '" . $this->db->escape($data['action']) . "', `sort_order` = '" . (int)$data['sort_order'] . "', `status` = '" . (int)$data['status'] . "' WHERE `event_id` = '" . (int)$event_id . "'"); + } + public function deleteEvent($event_id) { $this->db->query("DELETE FROM `" . DB_PREFIX . "event` WHERE `event_id` = '" . (int)$event_id . "'"); } diff --git a/upload/admin/view/template/marketplace/event.twig b/upload/admin/view/template/marketplace/event.twig index 2f25f5a4..61b22a8b 100644 --- a/upload/admin/view/template/marketplace/event.twig +++ b/upload/admin/view/template/marketplace/event.twig @@ -3,6 +3,7 @@