Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
186 changes: 186 additions & 0 deletions upload/admin/controller/marketplace/event.php
Original file line number Diff line number Diff line change
Expand Up @@ -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');
Expand Down Expand Up @@ -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();

Expand All @@ -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']
);
}
Expand Down Expand Up @@ -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');
Expand Down
18 changes: 17 additions & 1 deletion upload/admin/language/en-gb/marketplace/event.php
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand All @@ -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!';
18 changes: 17 additions & 1 deletion upload/admin/language/ru-ru/marketplace/event.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@
// Text
$_['text_success'] = 'Настройки успешно изменены!';
$_['text_list'] = 'Список событий';
$_['text_add'] = 'Добавление события';
$_['text_edit'] = 'Редактирование события';
$_['text_form'] = 'Настройки события';
$_['text_event'] = 'События используются расширениями для переопределения стандартных функций вашего магазина. Если у вас есть проблемы, вы можете отключить или включить события здесь.';
$_['text_info'] = 'Информация о мероприятии';
$_['text_trigger'] = 'Trigger';
Expand All @@ -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'] = 'У вас недостаточно прав для внесения изменений!';
$_['error_permission'] = 'У вас недостаточно прав для внесения изменений!';
$_['error_code'] = 'Код события обязателен!';
$_['error_code_length'] = 'Код события должен быть от 3 до 64 символов!';
$_['error_trigger'] = 'Trigger обязателен!';
$_['error_trigger_format'] = 'Trigger должен заканчиваться на /before или /after!';
$_['error_action'] = 'Действие обязателен!';
$_['error_action_format'] = 'Действие имеет неверный формат!';
4 changes: 4 additions & 0 deletions upload/admin/model/setting/event.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 . "'");
}
Expand Down
2 changes: 2 additions & 0 deletions upload/admin/view/template/marketplace/event.twig
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
<div class="page-header">
<div class="container-fluid">
<div class="pull-right">
<a href="{{ add }}" data-toggle="tooltip" title="{{ button_add }}" class="btn btn-primary"><i class="fa fa-plus"></i></a>
<button type="button" data-toggle="tooltip" title="{{ button_delete }}" class="btn btn-danger" onclick="confirm('{{ text_confirm }}') ? $('#form-event').submit() : false;"><i class="fa fa-trash-o"></i></button>
</div>
<h1>{{ heading_title }}</h1>
Expand Down Expand Up @@ -55,6 +56,7 @@
<td class="text-left">{{ event.status }}</td>
<td class="text-right">{{ event.sort_order }}</td>
<td class="text-right"><button type="button" data-toggle="modal" data-target="#modal-event{{ event.event_id }}" class="btn btn-info"><i class="fa fa-info-circle"></i></button>
<a href="{{ event.edit }}" data-toggle="tooltip" title="{{ button_edit }}" class="btn btn-primary"><i class="fa fa-pencil"></i></a>
{% if not event.enabled %}<a href="{{ event.enable }}" data-toggle="tooltip" title="{{ button_enable }}" class="btn btn-success"><i class="fa fa-plus-circle"></i></a>{% else %}<a href="{{ event.disable }}" data-toggle="tooltip" title="{{ button_disable }}" class="btn btn-danger"><i class="fa fa-minus-circle"></i></a>{% endif %}
<div id="modal-event{{ event.event_id }}" class="modal text-left">
<div class="modal-dialog">
Expand Down
80 changes: 80 additions & 0 deletions upload/admin/view/template/marketplace/event_form.twig
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
{{ header }}{{ column_left }}
<div id="content">
<div class="page-header">
<div class="container-fluid">
<div class="pull-right">
<button type="submit" form="form-event" data-toggle="tooltip" title="{{ button_save }}" class="btn btn-primary"><i class="fa fa-save"></i></button>
<a href="{{ cancel }}" data-toggle="tooltip" title="{{ button_cancel }}" class="btn btn-default"><i class="fa fa-reply"></i></a></div>
<h1>{{ heading_title }}</h1>
<ul class="breadcrumb">
{% for breadcrumb in breadcrumbs %}
<li><a href="{{ breadcrumb.href }}">{{ breadcrumb.text }}</a></li>
{% endfor %}
</ul>
</div>
</div>
<div class="container-fluid">
{% if error_warning %}
<div class="alert alert-danger alert-dismissible"><i class="fa fa-exclamation-circle"></i> {{ error_warning }}
<button type="button" class="close" data-dismiss="alert">&times;</button>
</div>
{% endif %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-puzzle-piece"></i> {{ text_form }}</h3>
</div>
<div class="panel-body">
<form action="{{ form_action }}" method="post" enctype="multipart/form-data" id="form-event" class="form-horizontal">
<div class="form-group required">
<label class="col-sm-2 control-label" for="input-code">{{ entry_code }}</label>
<div class="col-sm-10">
<input type="text" name="code" value="{{ code }}" placeholder="{{ entry_code }}" id="input-code" class="form-control" />
{% if error_code %}
<div class="text-danger">{{ error_code }}</div>
{% endif %}
</div>
</div>
<div class="form-group required">
<label class="col-sm-2 control-label" for="input-trigger">{{ entry_trigger }}</label>
<div class="col-sm-10">
<input type="text" name="trigger" value="{{ trigger }}" placeholder="{{ entry_trigger }}" id="input-trigger" class="form-control" />
{% if error_trigger %}
<div class="text-danger">{{ error_trigger }}</div>
{% endif %}
</div>
</div>
<div class="form-group required">
<label class="col-sm-2 control-label" for="input-action">{{ entry_action }}</label>
<div class="col-sm-10">
<input type="text" name="action" value="{{ action }}" placeholder="{{ entry_action }}" id="input-action" class="form-control"/>
{% if error_action %}
<div class="text-danger">{{ error_action }}</div>
{% endif %}
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">{{ entry_status }}</label>
<div class="col-sm-10">
<select name="status" id="input-status" class="form-control">
{% if status %}
<option value="1" selected="selected">{{ text_enabled }}</option>
<option value="0">{{ text_disabled }}</option>
{% else %}
<option value="1">{{ text_enabled }}</option>
<option value="0" selected="selected">{{ text_disabled }}</option>
{% endif %}
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label" for="input-sort-order">{{ entry_sort_order }}</label>
<div class="col-sm-10">
<input type="number" name="sort_order" value="{{ sort_order }}" id="input-sort-order" class="form-control"/>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
{{ footer }}