HEX
Server: LiteSpeed
System: Linux php-prod-3.spaceapp.ru 5.15.0-151-generic #161-Ubuntu SMP Tue Jul 22 14:25:40 UTC 2025 x86_64
User: xnsbl7462 (1008)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
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 %}
			&nbsp;
			<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>