File: /home/retile.ru/public_html/system/tweak.ocmod.xml
<?xml version="1.0" encoding="utf-8"?>
<modification>
<name>Tweak for OpenCart 3x Russkaya sborka</name>
<code>Tweak for OpenCart 3x Russkaya sborka</code>
<version>3.0.3.2-1</version>
<date>11.03.2019</date>
<author>Romans</author>
<link>http://opencart-russia.ru</link>
<file path="admin/view/template/common/header.twig">
<!-- Расширяем колонку меню для русских слов и подключаем translit.js-->
<operation>
<search><![CDATA[
{% for link in links %}
]]></search>
<add position="before"><![CDATA[
<script type="text/javascript" src="view/javascript/jquery/translit.js"></script>
<style>
@media (min-width: 768px){
#column-left {width: 260px !important;}
#column-left + #content {margin-left: 260px !important;}
.bimage {margin:0;}
}
</style>
]]></add>
</operation>
<!-- Добавляем ссылки на сайт, документацию, форум -->
<operation>
<search><![CDATA[
<li><a href="http://www.opencart.com" target="_blank"><i class="fa fa-opencart fa-fw"></i> {{ text_homepage }}</a></li>
]]></search>
<add position="replace"><![CDATA[
<li><a href="http://opencart-russia.ru/" target="_blank"><i class="fa fa-opencart fa-fw"></i> {{ text_homepage }}</a></li>
]]></add>
</operation>
<operation>
<search><![CDATA[
<li><a href="http://docs.opencart.com" target="_blank"><i class="fa fa-file-text-o fa-fw"></i> {{ text_documentation }}</a></li>
]]></search>
<add position="replace"><![CDATA[
<li><a href="http://forum.opencart-russia.ru/threads/soderzhanie.6030/" target="_blank"><i class="fa fa-file-text-o fa-fw"></i> {{ text_documentation }}</a></li>
]]></add>
</operation>
<operation>
<search><![CDATA[
<li><a href="http://forum.opencart.com" target="_blank"><i class="fa fa-comments-o fa-fw"></i> {{ text_support }}</a></li>
]]></search>
<add position="replace"><![CDATA[
<li><a href="http://forum.opencart-russia.ru" target="_blank"><i class="fa fa-comments-o fa-fw"></i> {{ text_support }}</a></li>
]]></add>
</operation>
</file>
<!-- Скрываем поля в форме товара -->
<file path="admin/view/template/catalog/product_form.twig">
<operation>
<search><![CDATA[
<label class="col-sm-2 control-label" for="input-sku"><span data-toggle="tooltip" title="{{ help_sku }}">{{ entry_sku }}</span></label>
]]></search>
<add position="replace" offset="-2"><![CDATA[
<label class="col-sm-2 control-label" for="input-sku"><span data-toggle="tooltip" title="{{ help_sku }}">{{ entry_sku }}</span></label>
]]></add>
</operation>
<operation>
<search><![CDATA[
<label class="col-sm-2 control-label" for="input-sku">
]]></search>
<add position="before"><![CDATA[
<div class="col-sm-1 text-right">
<a type="button" title="Показать/Скрыть - Дополнительные поля " class="btn btn-info " data-toggle="collapse" data-parent="#accordion" href="#pcollapse"><i class="fa fa-arrows-v"></i></a>
</div>
</div>
<div class="collapse" id="pcollapse">
<div class="form-group">
]]></add>
</operation>
<operation>
<search><![CDATA[
<label class="col-sm-2 control-label" for="input-location">{{ entry_location }}</label>
]]></search>
<add position="before" offset="1"><![CDATA[
</div>
]]></add>
</operation>
<operation>
<search><![CDATA[
<input type="text" name="model" value="{{ model }}" placeholder="{{ entry_model }}" id="input-model" class="form-control"/>
]]></search>
<add position="replace" offset="-1"><![CDATA[
<div class="col-sm-9">
<input type="text" name="model" value="{{ model }}" placeholder="{{ entry_model }}" id="input-model" class="form-control"/>
]]></add>
</operation>
<operation> <!-- Попутно удаляем вкладку "Периодичность", почему то она всем мешает. -->
<search><![CDATA[
<li><a href="#tab-recurring" data-toggle="tab">{{ tab_recurring }}</a></li>
]]></search>
<add position="replace"><![CDATA[ ]]></add>
</operation>
</file>
<!-- Делаем в файловом менеджере сохранение последней открытой директории и крошки -->
<file path="admin/controller/common/filemanager.php">
<operation>
<search index="0"><![CDATA[
$this->load->language('common/filemanager');
]]></search>
<add position="after"><![CDATA[
// Запоминае последней директории
if (!isset($this->request->get['directory']) && !isset($this->request->get['parent']) && !isset($this->request->get['page']) && !isset($this->request->get['go'])) {
$this->request->get['directory'] = isset($this->session->data['directory_file_manager']) ? $this->session->data['directory_file_manager'] : null;
$this->request->get['page'] = isset($this->session->data['page_file_manager']) ? $this->session->data['page_file_manager'] : null;
} else {
$this->session->data['directory_file_manager'] = isset($this->request->get['directory']) ? $this->request->get['directory'] : null;
$this->session->data['page_file_manager'] = isset($this->request->get['page']) ? $this->request->get['page'] : null;
}
]]></add>
</operation>
<operation>
<search><![CDATA[
// Parent
]]></search>
<add position="replace" offset="1"><![CDATA[
// Parent
$url = '&parent';
]]></add>
</operation>
<operation>
<search><![CDATA[
$pagination = new Pagination();
]]></search>
<add position="before"><![CDATA[
$url .= '&go';
]]></add>
</operation>
<operation>
<search><![CDATA[
$directory = rtrim(DIR_IMAGE . 'catalog/' . str_replace('*', '', $this->request->get['directory']), '/');
]]></search>
<add position="after"><![CDATA[
$data['dirs'] = explode("/", $this->request->get['directory']);
]]></add>
</operation>
<operation>
<search><![CDATA[
$directory = rtrim(DIR_IMAGE . 'catalog/' . str_replace('*', '', $this->request->get['directory']), '/');
]]></search>
<add position="after" offset="4"><![CDATA[
$data['dirs'] = false;
]]></add>
</operation>
<!-- Делаем возможность транислитерации русских имен изображений и директории при загрузке через файловый менеджер.-->
<operation>
<search><![CDATA[
public function index() {
]]></search>
<add position="before"><![CDATA[
function translit ($text) {
$rus = array("а","А","б","Б","в","В","г","Г","д","Д","е","Е","ё","Ё","ж", "Ж", "з","З","и","И","й","Й","к","К","л","Л","м","М","н","Н","о","О","п","П","р","Р", "с","С","т","Т","у","У","ф","Ф","х","Х","ц","Ц","ч", "Ч", "ш", "Ш", "щ", "Щ", "ъ","Ъ", "ы","Ы","ь","Ь","э","Э","ю", "Ю", "я","Я",'/',' ','—');
$eng =array("a","A","b","B","v","V","g","G","d","D","e","E","e","E", "zh","ZH","z","Z","i","I","j","J","k","K","l","L","m","M","n","N","o","O", "p","P","r","R","s","S","t","T","u","U","f","F","h","H","c","C","ch","CH", "sh","SH","sch","SCH","", "", "i","I","","","e","E","yu","YU","ya","YA",'','','-');
$text = str_replace($rus,$eng,$text);
return $text;
}
]]></add>
</operation>
<operation>
<search><![CDATA[
$filename = basename(html_entity_decode($file['name'], ENT_QUOTES, 'UTF-8'));
]]></search>
<add position="replace"><![CDATA[
$filename = basename(html_entity_decode($this->translit($file['name']), ENT_QUOTES, 'UTF-8'));
]]></add>
</operation>
<operation>
<search><![CDATA[
$folder = basename(html_entity_decode($this->request->post['folder'], ENT_QUOTES, 'UTF-8'));
]]></search>
<add position="replace"><![CDATA[
$folder = basename(html_entity_decode($this->translit($this->request->post['folder']), ENT_QUOTES, 'UTF-8'));
]]></add>
</operation>
</file>
<file path="admin/view/template/common/filemanager.twig">
<operation>
<search><![CDATA[
{% for image in images|batch(4) %}
]]></search>
<add position="before"><![CDATA[
<ol class="breadcrumb bimage">
<li><i class="fa fa-home fa-lg"></i></li>
{% if dirs %}
{% for dir in dirs %}
<li>{{ dir }}</li>
{% endfor %}
{% endif %}
<li></li>
</ol>
<hr />
]]></add>
</operation>
</file>
<!-- Делаем возможность транислитерации русских имен файлов при загрузке файлов с витрины.-->
<file path="catalog/controller/tool/upload.php">
<operation>
<search><![CDATA[
public function index() {
]]></search>
<add position="before"><![CDATA[
function translit ($text) {
$rus = array("а","А","б","Б","в","В","г","Г","д","Д","е","Е","ё","Ё","ж", "Ж", "з","З","и","И","й","Й","к","К","л","Л","м","М","н","Н","о","О","п","П","р","Р", "с","С","т","Т","у","У","ф","Ф","х","Х","ц","Ц","ч", "Ч", "ш", "Ш", "щ", "Щ", "ъ","Ъ", "ы","Ы","ь","Ь","э","Э","ю", "Ю", "я","Я",'/',' ','—');
$eng =array("a","A","b","B","v","V","g","G","d","D","e","E","e","E", "zh","ZH","z","Z","i","I","j","J","k","K","l","L","m","M","n","N","o","O", "p","P","r","R","s","S","t","T","u","U","f","F","h","H","c","C","ch","CH", "sh","SH","sch","SCH","", "", "i","I","","","e","E","yu","YU","ya","YA",'','','-');
$text = str_replace($rus,$eng,$text);
return $text;
}
]]></add>
</operation>
<operation>
<search><![CDATA[
$filename = basename(preg_replace('/[^a-zA-Z0-9\.\-\s+]/', '', html_entity_decode($this->request->files['file']['name'], ENT_QUOTES, 'UTF-8')));
]]></search>
<add position="replace"><![CDATA[
$filename = basename(preg_replace('/[^a-zA-Z0-9\.\-\s+]/', '', html_entity_decode($this->translit($this->request->files['file']['name']), ENT_QUOTES, 'UTF-8')));
]]></add>
</operation>
</file>
<!-- Тип расширения Модули по умолчанию, вместо первого повавшегося Аналитика -->
<file path="admin/controller/marketplace/extension.php">
<operation>
<search><![CDATA[
$data['type'] = '';
]]></search>
<add position="replace" trim="true"><![CDATA[
$data['type'] = 'module';
]]></add>
</operation>
</file>
<!-- Магазин, добавляем ссылку на свой сайт -->
<file path="admin/view/template/marketplace/marketplace_list.twig">
<operation>
<search><![CDATA[
{% if license.value == filter_license %}<a href="{{ license.href }}" class="btn btn-default active">{{ license.text }}</a>{% else %}<a href="{{ license.href }}" class="btn btn-default">{{ license.text }}</a>{% endif %}
]]></search>
<add position="replace" offset="1"><![CDATA[
{% if license.value == filter_license %}<a href="{{ license.href }}" class="btn btn-default active">{{ license.text }}</a>{% else %}<a href="{{ license.href }}" class="btn btn-default">{{ license.text }}</a>{% endif %}
{% endfor %}
<a href="http://shop.opencart-russia.ru/" target="_blank" class="btn btn-default">Расширения c opencart-russia.ru</a>
</div>
]]></add>
</operation>
</file>
<!-- Приводим немного сайт к 152 ФЗ -->
<file path="catalog/controller/information/contact.php">
<operation>
<search><![CDATA[
if (isset($this->error['name'])) {
]]></search>
<add position="before"><![CDATA[
if (isset($this->error['warning'])) {
$data['error_warning'] = $this->error['warning'];
} else {
$data['error_warning'] = '';
}
]]></add>
</operation>
<operation>
<search><![CDATA[
$data['comment'] = $this->config->get('config_comment');
]]></search>
<add position="after"><![CDATA[
if ($this->config->get('config_account_id')) {
$this->load->model('catalog/information');
$information_info = $this->model_catalog_information->getInformation($this->config->get('config_account_id'));
if ($information_info) {
$data['text_agree'] = sprintf($this->language->get('text_agree'), $this->url->link('information/information/agree', 'information_id=' . $this->config->get('config_account_id'), true), $information_info['title'], $information_info['title']);
} else {
$data['text_agree'] = '';
}
} else {
$data['text_agree'] = '';
}
if (isset($this->request->post['agree'])) {
$data['agree'] = $this->request->post['agree'];
} else {
$data['agree'] = false;
}
]]></add>
</operation>
<operation>
<search><![CDATA[
return !$this->error;
]]></search>
<add position="before"><![CDATA[
// Agree to terms
if ($this->config->get('config_account_id')) {
$this->load->model('catalog/information');
$information_info = $this->model_catalog_information->getInformation($this->config->get('config_account_id'));
if ($information_info && !isset($this->request->post['agree'])) {
$this->error['warning'] = sprintf($this->language->get('error_agree'), $information_info['title']);
}
}
]]></add>
</operation>
</file>
<file path="catalog/view/theme/*/template/information/contact.twig">
<operation>
<search><![CDATA[
<div class="row">{{ column_left }}
]]></search>
<add position="before"><![CDATA[
{% if error_warning %}
<div class="alert alert-danger alert-dismissible"><i class="fa fa-exclamation-circle"></i> {{ error_warning }}</div>
{% endif %}
]]></add>
</operation>
<operation>
<search><![CDATA[
<div class="buttons">
]]></search>
<add position="before"><![CDATA[
{% if text_agree %}
<div class="buttons">
<div class="pull-right">{{ text_agree }}
{% if agree %}
<input type="checkbox" name="agree" value="1" checked="checked" />
{% else %}
<input type="checkbox" name="agree" value="1" />
{% endif %}
<input type="submit" value="{{ button_submit }}" class="btn btn-primary" />
</div>
</div>
{% else %}
]]></add>
</operation>
<operation>
<search><![CDATA[
</form>
]]></search>
<add position="before"><![CDATA[
{% endif %}
]]></add>
</operation>
</file>
<!-- Курсы валют с ЦБРФ -->
<file path="admin/model/localisation/currency.php">
<operation>
<search><![CDATA[
public function refresh($force = false) {
]]></search>
<add position="replace"><![CDATA[
public function old_refresh($force = false) {
]]></add>
</operation>
<operation>
<search><![CDATA[
public function getTotalCurrencies() {
]]></search>
<add position="before"><![CDATA[
// Обновление валюты с ЦБРФ
public function refresh($force = true) {
$currencies_data = array();
if ($force) {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "currency WHERE code != '" . $this->db->escape($this->config->get('config_currency')) . "'");
} else {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "currency WHERE code != '" . $this->db->escape($this->config->get('config_currency')) . "' AND date_modified < '" . $this->db->escape(date('Y-m-d H:i:s', strtotime('-1 day'))) . "'");
}
$currencies_data[$this->config->get('config_currency')] = true;
foreach ($query->rows as $result) {
$currencies_data[$result['code']] = true;
}
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://www.cbr.ru/scripts/XML_daily.asp');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
$content = curl_exec($curl);
curl_close($curl);
if (!$content) return false;
$currencies = simplexml_load_string($content);
if (!$currencies || count($currencies) == 0) return false;
foreach ($currencies as $currency) {
if (isset($currencies_data[(string)$currency->CharCode])) {
$value = str_replace(',', '.', (string)$currency->Value);
$currencies_data[(string)$currency->CharCode] = $value / $currency->Nominal;
}
}
foreach ($currencies_data as $currency => $value) {
if ($currency != $this->config->get('config_currency')) {
$currencies_data[$currency] = $currencies_data[$this->config->get('config_currency')] / $value;
}
}
$currencies_data[$this->config->get('config_currency')] = 1;
foreach ($currencies_data as $currency => $value) {
$this->db->query("UPDATE " . DB_PREFIX . "currency SET value = '" . (float)$value . "', date_modified = '" . $this->db->escape(date('Y-m-d H:i:s')) . "' WHERE code = '" . $this->db->escape($currency) . "'");
}
$this->cache->delete('currency');
}
]]></add>
</operation>
</file>
<!-- Заглушаем пока будущий функционал рекламы OpenCart в модулях-->
<file path="admin/controller/extension/extension/promotion.php">
<operation>
<search><![CDATA[
$curl = curl_init();
]]></search>
<add position="before"><![CDATA[
return '';
]]></add>
</operation>
</file>
<!-- Вырезаем OpenBay он не нужен нам -->
<file path="admin/view/template/sale/order_info.twig">
<operation>
<search><![CDATA[
function changeStatus(){
]]></search>
<add position="before"><![CDATA[
/*
]]></add>
</operation>
<operation>
<search><![CDATA[
$('select[name="order_status_id"]').change(function(){
]]></search>
<add position="after" offset="2"><![CDATA[
*/
]]></add>
</operation>
<operation>
<search><![CDATA[
addOrderInfo();
]]></search>
<add position="replace"><![CDATA[
]]></add>
</operation>
</file>
<!-- Мелкие ошибки мешающие работать и временные меры-->
<file path="admin/view/template/common/developer.twig">
<operation>
<search><![CDATA[
<td style="width: 150px;">{{ entry_cache }}</td>
]]></search>
<add position="replace"><![CDATA[
<td style="width: 200px;">{{ entry_cache }}</td>
]]></add>
</operation>
</file>
</modification>