-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
1957b7a
commit 1ad5a19
Showing
12 changed files
with
960 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,141 @@ | ||
<?php | ||
|
||
namespace Opencart\Admin\Controller\Extension\Yandex\Analytics; | ||
|
||
class Metrica extends \Opencart\System\Engine\Controller | ||
{ | ||
public function index(): void | ||
{ | ||
$this->load->language('extension/yandex/analytics/metrica'); | ||
|
||
$this->document->setTitle($this->language->get('heading_title')); | ||
|
||
$this->load->model('extension/yandex/analytics/metrica'); | ||
|
||
if ($this->model_extension_yandex_analytics_metrica->hasUpdates()) { | ||
$data['notify_module_version'] = $this->language->get('text_notify_module_version'); | ||
} | ||
|
||
$data['breadcrumbs'] = []; | ||
|
||
$data['breadcrumbs'][] = [ | ||
'text' => $this->language->get('text_home'), | ||
'href' => $this->url->link('common/dashboard', 'user_token' . '=' . $this->session->data['user_token']) | ||
]; | ||
|
||
$data['breadcrumbs'][] = [ | ||
'text' => $this->language->get('text_extension'), | ||
'href' => $this->url->link('marketplace/extension', 'user_token' . '=' . $this->session->data['user_token'] . '&type=analytics') | ||
]; | ||
|
||
$data['breadcrumbs'][] = [ | ||
'text' => $this->language->get('heading_title'), | ||
'href' => $this->url->link('extension/yandex/analytics/metrica', 'user_token=' . $this->session->data['user_token']) | ||
]; | ||
|
||
$data['save'] = $this->url->link('extension/yandex/analytics/metrica|save', 'user_token=' . $this->session->data['user_token']); | ||
$data['back'] = $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=analytics'); | ||
|
||
$data['logo'] = $this->url->link('extension/yandex/analytics/metrica|logo', 'user_token=' . $this->session->data['user_token']); | ||
$data['find_ya_metrica'] = $this->url->link('extension/yandex/analytics/metrica|find_ya_metrica', 'user_token=' . $this->session->data['user_token']); | ||
|
||
$data['has_settings'] = !!$this->model_setting_setting->getSetting('analytics_metrica'); | ||
$data['analytics_metrica_status'] = $this->model_setting_setting->getValue('analytics_metrica_status'); | ||
$data['analytics_metrica_code'] = $this->model_setting_setting->getValue('analytics_metrica_code'); | ||
$data['analytics_metrica_codes'] = json_decode($this->model_setting_setting->getValue('analytics_metrica_codes'), true); | ||
$data['analytics_metrica_log'] = $this->model_setting_setting->getValue('analytics_metrica_log'); | ||
$data['analytics_metrica_debug'] = $this->model_setting_setting->getValue('analytics_metrica_debug'); | ||
|
||
$data['log'] = ''; | ||
|
||
$file = DIR_LOGS . 'log_yandex_metrica.log'; | ||
|
||
if (file_exists($file)) { | ||
$size = filesize($file); | ||
|
||
if ($size >= 3145728) { | ||
$suffix = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; | ||
|
||
$i = 0; | ||
|
||
while (($size / 1024) > 1) { | ||
$size = $size / 1024; | ||
$i++; | ||
} | ||
|
||
$data['error_warning'] = sprintf($this->language->get('error_warning'), basename($file), round(substr($size, 0, strpos($size, '.') + 4), 2) . $suffix[$i]); | ||
} else { | ||
$data['log'] = file_get_contents($file, FILE_USE_INCLUDE_PATH, null); | ||
} | ||
} | ||
|
||
$data['user_token'] = $this->session->data['user_token']; | ||
|
||
$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('extension/yandex/analytics/metrica', $data)); | ||
} | ||
|
||
|
||
public function save(): void | ||
{ | ||
$this->load->language('extension/yandex/analytics/metrica'); | ||
|
||
$json = []; | ||
|
||
if (!$this->user->hasPermission('modify', 'extension/yandex/analytics/metrica')) { | ||
$json['error']['warning'] = $this->language->get('error_permission'); | ||
} | ||
|
||
if (isset($this->request->post['analytics_metrica_codes'])) { | ||
foreach ($this->request->post['analytics_metrica_codes'] as $row => $metrica) { | ||
if (empty($metrica['code'])) { | ||
$json['error']['metrica-' . $row . '-code'] = $this->language->get('error_metric_code'); | ||
} | ||
} | ||
} | ||
|
||
if (!$json) { | ||
$this->model_setting_setting->editSetting('analytics_metrica', $this->request->post); | ||
$json['success'] = $this->language->get('text_success'); | ||
} | ||
|
||
$this->response->addHeader('Content-Type: application/json'); | ||
$this->response->setOutput(json_encode($json)); | ||
} | ||
|
||
public function logo(): void | ||
{ | ||
$this->response->addHeader('Content-Type: image/svg+xml'); | ||
|
||
if ($this->config->get('config_admin_language') === 'ru-ru') { | ||
$this->response->setOutput(file_get_contents(DIR_EXTENSION . 'yandex/admin/view/image/analytics/metrica/logo-ru.svg')); | ||
} else { | ||
$this->response->setOutput(file_get_contents(DIR_EXTENSION . 'yandex/admin/view/image/analytics/metrica/logo-en.svg')); | ||
} | ||
} | ||
|
||
public function findMetrica() | ||
{ | ||
$json = $this->model_extension_yandex_analytics_metrica->findMetrica(); | ||
|
||
$this->response->addHeader('Content-Type: application/json'); | ||
$this->response->setOutput(json_encode($json)); | ||
} | ||
|
||
public function install() | ||
{ | ||
$this->load->model('setting/event'); | ||
|
||
$this->model_setting_event->addEvent('yandex_metrica_checkout', '', 'catalog/controller/checkout/success/before', 'extension/yandex/analytics/metrica|checkout'); | ||
} | ||
|
||
public function uninstall() | ||
{ | ||
$this->load->model('setting/event'); | ||
|
||
$this->model_setting_event->deleteEventByCode('yandex_metrica_checkout'); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
<?php | ||
$_['heading_title'] = 'Yandex.Metrica'; | ||
|
||
// Text | ||
$_['text_yes'] = 'Yes'; | ||
$_['text_no'] = 'No'; | ||
$_['text_enabled'] = 'Enabled'; | ||
$_['text_disabled'] = 'Disabled'; | ||
$_['text_loading'] = 'Loading...'; | ||
$_['text_extension'] = 'Extensions'; | ||
$_['text_success'] = 'Settings changed'; | ||
$_['text_edit'] = 'Module settings'; | ||
$_['text_signup'] = 'To get started, enter the relevant Yandex.Metrica tag numbers and the company information. The tag number is specified on the page "<a href="https://metrika.yandex.ru/list">My tags</a>" in Yandex.Metrica next to the site address. | ||
You can create a new tag in the Yandex.Metrica interface at <a href="https://metrika.yandex.ru/">https://metrika.yandex.ru/</a>'; | ||
$_['text_default'] = 'By default'; | ||
$_['text_find_metric'] = 'Find metric'; | ||
$_['text_write_logs'] = 'Record logs'; | ||
$_['text_debug'] = 'Debug mode'; | ||
$_['text_logs'] = 'Logs'; | ||
$_['text_start_of_search_metric'] = 'Start of search'; | ||
$_['text_end_of_search_metric'] = 'End of search'; | ||
$_['text_metrics_found'] = 'The following metrics were found'; | ||
$_['text_metrics_not_found'] = 'Metrics not found'; | ||
$_['text_counter_number'] = 'Tag number'; | ||
$_['text_notify_module_version'] = 'New module version detected'; | ||
$_['text_instructions'] = <<<INSTRUCTIONS | ||
<h2>Instructions for configuring the module</h2> | ||
</br> | ||
<h3>"Main" tab.</h3> | ||
<p>The main settings for the module are here.</p> | ||
<p><b>Status</b>: Enabling/Disabling the module.</p> | ||
<p><b>Metrics</b>: Metric codes are added here, as well as the status of enabling/disabling Session Replay for metrics.</p> | ||
</br> | ||
<p>To add a metric, click "+".</p> | ||
<p>Next, in the "Metric code" column, enter the metric code created on the site <a href="https://metrika.yandex.ru/">https://metrika.yandex.ru/</a></p> | ||
<p>Also on this tab, you can enable and disable Session Replay in the Settings column.</p> | ||
</br> | ||
<h3>"Metric search" tab</h3> | ||
<p>Here you can check whether a Yandex.Metrica tag is installed on your site. To do this, go to the "Metric search" tab and click "Find metric".</p> | ||
</br> | ||
<h3>"Logging" tab</h3> | ||
<p>On this tab, module error logging is enabled and disabled. When this option is enabled, entries about errors that occur will appear here.</p> | ||
</br> | ||
<p>To save the module settings, click the blue "Save" button in the upper-right corner.</p> | ||
INSTRUCTIONS; | ||
|
||
// Tabs | ||
$_['tab_metrics'] = 'Main'; | ||
$_['tab_metric_search'] = 'Metric search'; | ||
$_['tab_logging'] = 'Logging'; | ||
$_['tab_info'] = 'Instructions'; | ||
|
||
// Column | ||
$_['column_metric_code'] = 'Metric code'; | ||
$_['column_settings'] = 'Settings'; | ||
$_['column_sort_order'] = 'Sort order'; | ||
$_['column_name'] = 'Name'; | ||
$_['column_selector'] = 'Selector'; | ||
$_['column_action'] = 'Action'; | ||
|
||
|
||
// Entry | ||
$_['entry_code'] = 'Yandex.Metrica code'; | ||
$_['entry_metrics_list'] = 'Metrics'; | ||
$_['entry_status'] = 'Status'; | ||
$_['entry_webvisor'] = 'Session Replay'; | ||
$_['entry_clickmap'] = 'Click Map'; | ||
$_['entry_ecommerce'] = 'E-commerce'; | ||
$_['entry_tracking_the_hash'] = 'Hash tracking in the address bar'; | ||
|
||
// Error | ||
$_['error_permission'] = 'You do not have the rights to manage this module'; | ||
$_['error_metric_code'] = 'Metric code missing'; | ||
$_['error_selector'] = 'Selector missing'; | ||
$_['error_selector_name'] = 'Name missing'; | ||
$_['error_selector_defined'] = 'This selector has already been defined'; | ||
|
||
// Button | ||
$_['button_remove'] = 'Remove'; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
<?php | ||
$_['heading_title'] = 'Яндекс.Метрика'; | ||
|
||
// Text | ||
$_['text_yes'] = 'Да'; | ||
$_['text_no'] = 'Нет'; | ||
$_['text_enabled'] = 'Включено'; | ||
$_['text_disabled'] = 'Отключено'; | ||
$_['text_loading'] = 'Загрузка...'; | ||
$_['text_extension'] = 'Расширения'; | ||
$_['text_success'] = 'Настройки успешно изменены!'; | ||
$_['text_edit'] = 'Настройки модуля'; | ||
$_['text_signup'] = 'Для начала работы укажите номер счётчика Яндекс.Метрики. Номер счётчика можно найти на странице <a href="https://metrika.yandex.ru/list/" target="_blank">"Мои счетчики"</a> в Метрике рядом с адресом сайта.<br> | ||
Если у вас еще нет счетчика Метрики, то создайте его на сайте <a href="https://metrika.yandex.ru/" target="_blank">Метрики</a>.<br> | ||
Убедитесь, что у вас в настройках счетчика в Метрике включена опция «Электронная коммерция». Подробнее о том, как включить электронную коммерцию можно почитать в <a href="https://yandex.ru/support/metrica/ecommerce/enabling.html" target="_blank">Справке</a>.'; | ||
$_['text_default'] = 'По умолчанию'; | ||
$_['text_find_metric'] = 'Найти метрику'; | ||
$_['text_write_logs'] = 'Записывать логи'; | ||
$_['text_debug'] = 'Режим отладки'; | ||
$_['text_logs'] = 'Логи'; | ||
$_['text_start_of_search_metric'] = 'Начало поиска'; | ||
$_['text_end_of_search_metric'] = 'Конец поиска'; | ||
$_['text_metrics_found'] = 'Найдены следующие метрики'; | ||
$_['text_metrics_not_found'] = 'Метрики не найдены'; | ||
$_['text_counter_number'] = 'Номер счетчика'; | ||
$_['text_notify_module_version'] = 'Обнаружена новая версия модуля. Узнайте подробнее про установку обновления в <a href="https://yandex.ru/support/metrica/ecommerce/opencart.html#update" target="_blank">Справке Яндекс.Метрики</a>'; | ||
$_['text_instructions'] = <<<INSTRUCTIONS | ||
<h3>Вкладка «Основное»</h3> | ||
<p>Этот раздел содержит основные настройки модуля.<br> | ||
В этом разделе вы сможете включить или выключить модуль, выбрав соответствующее значение в поле "Статус".<br> | ||
В поле "Номер счетчика" вам необходимо указать ваш номер счетчика Метрики.</p> | ||
<p>Модуль может помочь вам обнаружить уже установленный на сайте счетчик Метрики. Чтобы узнать его номер, перейдите на вкладку "Поиск метрики" и нажмите кнопку "Найти метрику"</p> | ||
<p><span style="color:#cf2015">Внимание!</span> Убедитесь, что в OpenCart не активирован другой аналогичный модуль, устанавливающий счетчик Метрики. Для этого перейдите на страницу Расширения → Модификации и поищите модуль с фрагментом в названии: «Metrica» или «Metrika». Если такой модуль установлен, отключите его.</p> | ||
<p>По умолчанию опция Вебвизор включена. Она позволяет записывать визиты посетителей, чтобы вы могли более полно анализировать статистику. Вы можете включить или отключить опцию Вебвизор для каждого из ваших счетчиков Метрики.</p> | ||
<br> | ||
<h3>Вкладка «Поиск Метрики»</h3> | ||
<p>На этой вкладке вы можете проверить установлен ли на вашем сайте счетчик Метрики. Чтобы узнать его номер, перейдите на вкладку "Поиск метрики" и нажмите кнопку "Найти метрику".</p> | ||
<br> | ||
<h3>Вкладка «Логирование»</h3> | ||
<p>Чтобы включить запись ошибок, которые происходят во время работы модуля, на вкладке "Логирование" установите переключатель в положение «Да».</p> | ||
<p>Подробнее о настройке модуля можно прочитать в <a href="https://yandex.ru/support/metrica/ecommerce/opencart.html" target="_blank">Справке</a>.</p> | ||
INSTRUCTIONS; | ||
|
||
// Tabs | ||
$_['tab_metrics'] = 'Основное'; | ||
$_['tab_metric_search'] = 'Поиск метрики'; | ||
$_['tab_logging'] = 'Логирование'; | ||
$_['tab_info'] = 'Инструкция'; | ||
|
||
// Column | ||
$_['column_metric_code'] = 'Номер счетчика Метрики'; | ||
$_['column_settings'] = 'Настройки'; | ||
$_['column_sort_order'] = 'Порядок сортировки'; | ||
$_['column_name'] = 'Название'; | ||
$_['column_selector'] = 'Селектор'; | ||
$_['column_action'] = 'Действие'; | ||
|
||
// Entry | ||
$_['entry_code'] = 'Код Яндекс.Метрика'; | ||
$_['entry_metrics_list'] = 'Метрики'; | ||
$_['entry_status'] = 'Статус'; | ||
$_['entry_webvisor'] = 'Вебвизор'; | ||
$_['entry_clickmap'] = 'Карта кликов'; | ||
$_['entry_ecommerce'] = 'Электронная коммерция'; | ||
$_['entry_tracking_the_hash'] = 'Отслеживание хеша в адресной строке'; | ||
|
||
// Error | ||
$_['error_permission'] = 'У Вас нет прав для управления данным модулем!'; | ||
$_['error_metric_code'] = 'Отсутствует номер счетчика Метрики!'; | ||
$_['error_selector'] = 'Отсутсвует селектор!'; | ||
$_['error_selector_name'] = 'Отсутсвует название!'; | ||
$_['error_selector_defined'] = 'Такой селектор уже задан!'; | ||
|
||
// Button | ||
$_['button_remove'] = 'Удалить'; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
<?php | ||
|
||
namespace Opencart\Admin\Model\Extension\Yandex\Analytics; | ||
|
||
class Metrica extends \Opencart\System\Engine\Model | ||
{ | ||
public function hasUpdates(): bool | ||
{ | ||
$this->load->model('setting/extension'); | ||
|
||
if (!empty($extension = $this->model_setting_extension->getInstallByCode('yandex')) && $latestVersion = $this->getLatestVersion()) | ||
return version_compare($extension['version'], $latestVersion) < 0; | ||
else | ||
return false; | ||
} | ||
|
||
protected function getLatestVersion(): ?string | ||
{ | ||
if ($json = json_decode($this->file_get_contents_curl('https://api.github.com/repos/dima424658/oc-yandex-metrica/releases/latest'), true)) | ||
return $json['tag_name']; | ||
else | ||
return null; | ||
} | ||
|
||
public function findMetrica(): array | ||
{ | ||
$count_of_metrik = 0; | ||
$codes_metrik = ''; | ||
$page_code = $this->file_get_contents_curl(HTTP_CATALOG); | ||
$status = str_contains($page_code, 'https://mc.yandex.ru/metrika/tag.js'); | ||
|
||
if ($status) { | ||
$regexp = '/ym\((.+?), \"init\"/'; | ||
$count_of_metrik = preg_match_all($regexp, $page_code, $matches); | ||
$codes_metrik = $matches[1]; | ||
} | ||
|
||
return [ | ||
'success' => $status, | ||
'count_of_metrik' => $count_of_metrik, | ||
'codes_metrik' => $codes_metrik, | ||
]; | ||
} | ||
|
||
protected function file_get_contents_curl(string $url): string | ||
{ | ||
if ($ch = curl_init()) { | ||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); | ||
curl_setopt($ch, CURLOPT_URL, $url); | ||
curl_setopt($ch, CURLOPT_USERAGENT, 'OpenCart'); | ||
|
||
if (($result = curl_exec($ch)) !== false) | ||
return $result; | ||
} | ||
|
||
return ''; | ||
} | ||
} |
Oops, something went wrong.