679 lines
30 KiB
PHP
Executable File
679 lines
30 KiB
PHP
Executable File
<?php
|
||
#namespace anySite\db;
|
||
#use anySite\initSite as initSite;
|
||
#use \PDO;
|
||
|
||
class MySQL {
|
||
var $debug; //дебажим?
|
||
var $id; //возвращает или принимает id
|
||
var $num; //возвращает колличество
|
||
var $result; //возвращает результат
|
||
var $or_by_desc;
|
||
var $tmp;
|
||
var $connection;
|
||
var $conn;//взамен конектион
|
||
var $mod_set;
|
||
var $settings;
|
||
//Конструктор
|
||
public function __construct($mod='main'){//тип базы, если SQLITE3 то остальные параметры не важны
|
||
switch( BD_TYPE ) {
|
||
//Выбираем субд
|
||
case 'SQLITE3':
|
||
$this -> conn = new PDO( 'sqlite:' . $_SERVER['DOCUMENT_ROOT'] . '/bd/'. BD_NAME . '.db' );
|
||
//делаем бэкап
|
||
if (!file_exists('bd/' . date("Y.m.d") . '.zip')) exec("zip bd/" . date("Y.m.d") . ".zip bd/" . BD_NAME . ".db 9");
|
||
$sql = 'PRAGMA foreign_keys=on;';
|
||
$this -> conn -> query ( $sql );
|
||
break;
|
||
default: //по умолчанию MySQL
|
||
$this -> conn = new PDO('mysql:host=' . BD_HOST . ';dbname=' . BD_NAME . ';charset=utf8', BD_USER, BD_PWD);
|
||
$this -> conn -> exec("set names utf8");
|
||
}
|
||
|
||
//Получаем настройки сайта
|
||
$this->get_settings();
|
||
//Получаем текущий модуль
|
||
$this->get_mod();
|
||
|
||
|
||
|
||
//Проверяем есть ли инсталлятор модуля
|
||
if (file_exists(MYDIR . '/api/modules/' . MOD . '/install_' . BD_TYPE . '.php')) require_once MYDIR . '/api/modules/' . MOD . '/install_' . BD_TYPE . '.php';
|
||
$this -> mod_set = $this -> get_settings_mod($mod);
|
||
}
|
||
|
||
|
||
/* ----------------------------------------------------------------------
|
||
06.11.2022
|
||
Узнаем текущий модуль
|
||
---------------------------------------------------------------------- */
|
||
function get_mod(){
|
||
//выбор модуля
|
||
if ( isset ( $_GET['mod'] ) )
|
||
define ( 'MOD', @$_GET['mod'] );
|
||
else
|
||
define ( 'MOD', $this->settings['default_mod'] );
|
||
|
||
}
|
||
|
||
|
||
function get_settings($mod='global'){
|
||
//Получаем глобальные настройки
|
||
$b['mod']=$mod;
|
||
$json=$this->get_val('settings', $b, 'json');
|
||
//Если ничего нет, создаем настроки по умолчанию
|
||
if ( !$json ) $this->free_sql('INSERT INTO `settings` (`id`,`mod`,`json`) VALUES (\'1\',\'global\',\'{"default_mod":"main","default_mod_auth":"main","logo":"","main_page":"1","show_h1":"1","site_name":"Y-CMS","show_news_main_page":"0","show_slider":"0","cat_alias_news":"","news_limit":"10","editor":"","capcha_auth":"","lazyload":"1","show_description_in_cat":"1","cachePage":"1800","email":"","typepage":"2","otzyv":"1","like_page":"1","sezon_img":"1","autoseo":"0","templ":"","h1_page":"1","last_blogs":"","yawebmaster":"","yametrika":"","link_vk":"","link_fb":"","link_instagramm":"","gen_keywords":"","check_https":"1"}\')');
|
||
//Расшифровываем json
|
||
$this -> settings = $this -> from_j( $json );
|
||
}
|
||
|
||
|
||
|
||
function to_log($sql){
|
||
if ($this->debug=='1'){
|
||
require_once MYDIR . '/api/php/log.php';
|
||
$log1 = new save_log;
|
||
$log1->file_name = @MOD;
|
||
$log1->print_log($sql);
|
||
}
|
||
if ($this->debug=='2')echo $sql;
|
||
}
|
||
|
||
function clear_json ($text) { // ФУНКЦИЯ очистки кода для xml
|
||
$old1 = array('\"', '["', '"]' , '}","{', '\/');#Ищем вредное ">",, "<"
|
||
$new1 = array('"', '[', ']', '},{', '/');#Меняем на полезное">", , "<"
|
||
$text = str_replace($old1, $new1, $text);#Собсно сама замена =)
|
||
return $text;
|
||
}
|
||
|
||
function del_str ($text, $str) { // ФУНКЦИЯ очистки кода для xml
|
||
$old1 = array($str);#Ищем вредное ">",, "<"
|
||
$new1 = array('');#Меняем на полезное">", , "<"
|
||
$text = str_replace($old1, $new1, $text);#Собсно сама замена =)
|
||
return $text;
|
||
}
|
||
|
||
function to_j($txt){
|
||
return json_encode($txt, JSON_UNESCAPED_UNICODE);
|
||
}
|
||
|
||
function from_j($txt){
|
||
return json_decode($txt, true);
|
||
}
|
||
|
||
function replacer_param_xml ($text) { // ФУНКЦИЯ очистки кода для xml
|
||
$old1 = array("<", ">", "/");#Ищем вредное ">",, "<"
|
||
$new1 = array("", "", "");#Меняем на полезное">", , "<"
|
||
$text = str_replace($old1, $new1, $text);#Собсно сама замена =)
|
||
$this -> tmp = $text;
|
||
}
|
||
|
||
function clean ($text) { // ФУНКЦИЯ очистки кода для xml
|
||
$old1 = array('"', "'");#Ищем вредное ">",, "<"
|
||
$new1 = array('\"', "\'");#Меняем на полезное">", , "<"
|
||
$text = str_replace($old1, $new1, $text);#Собсно сама замена =)
|
||
return $text;
|
||
}
|
||
|
||
/* коннект к бд */
|
||
function connect($host,$login_mysql,$password_mysql,$baza_name) {
|
||
$this -> connection = new PDO('mysql:host=yurecnt.ru;dbname=' . $baza_name . ';charset=utf8', $login_mysql, $password_mysql);
|
||
$this -> connection -> exec("set names utf8");
|
||
}
|
||
|
||
//Изменение базы
|
||
function change_db( $baza_name ) {
|
||
$this -> connection = new PDO('mysql:host=yurecnt.ru;dbname=' . $baza_name . ';charset=utf8', 'admin', '32143214');//исправить!
|
||
$this->connection->exec("set names utf8");
|
||
}
|
||
|
||
public function get_massiv( $table, $where='', $order='', $limit='', $collums='*' ){
|
||
|
||
$debug = $this -> debug;
|
||
@$or_by_desc=$this->or_by_desc;
|
||
/*where - массив колонок и желаемых значений*/
|
||
$sql='SELECT ' . $collums . ' FROM `' . $table . '`';
|
||
if ($where){
|
||
$sql.=' WHERE ';
|
||
foreach ($where as $key => $value) @$str.=' `' . $key . '` = "' . $this->clean($value) . '" AND ';
|
||
/* отрезаем лишнее */
|
||
$len = strlen( $str )-4;
|
||
$sql .= substr( $str, 0, $len );
|
||
}
|
||
/* выясняем сортировку */
|
||
if ( $order ) $sql .= ' ORDER BY `' . $order . '` ';
|
||
if (@$or_by_desc==1)$sql.=' DESC ';
|
||
if ( $limit ) $sql .= ' LIMIT ' . $limit;
|
||
/* если указан дебаг, пишем в лог */
|
||
if ($debug)$this->to_log($sql);
|
||
$result = $this -> conn -> query($sql) -> fetchAll( PDO::FETCH_ASSOC );
|
||
$this -> num = count($result);
|
||
return $result;
|
||
|
||
}
|
||
|
||
/* выборка по лайку */
|
||
function get_massiv_like($table, $where='', $order='', $limit='', $collums='*'){
|
||
$debug=$this->debug;
|
||
$or_by_decs=$this->or_by_decs;
|
||
/*where - массив колонок и желаемых значений*/
|
||
$sql='SELECT ' . $collums . ' FROM `' . $table . '`';
|
||
if ($where){
|
||
$sql.=' WHERE ';
|
||
foreach ($where as $key => $value) @$str.=' `' . $key . '` LIKE "%' . $value . '%" AND ';
|
||
/* отрезаем лишнее */
|
||
$len = strlen( $str )-4;
|
||
$sql .= substr( $str, 0, $len );
|
||
}
|
||
/* выясняем сортировку */
|
||
if ( $order ) $sql .= ' ORDER BY `' . $order . '` ';
|
||
if ($or_by_desc==1)$sql.=' DESC ';
|
||
if ( $limit ) $sql .= ' LIMIT ' . $limit;
|
||
/* если указан дебаг, пишем в лог */
|
||
if ($debug)$this->to_log($sql);
|
||
/* наконец то запрашиваем */
|
||
$result=mysql_query($sql);
|
||
$this -> num = mysql_numrows( $result );
|
||
while ( $postrow[] = mysql_fetch_array($result));/*Кидаем в переменную*/
|
||
$this -> result = $postrow;
|
||
unset($postrow);
|
||
}
|
||
|
||
function free_sql($sql){
|
||
if ($this -> debug)$this->to_log($sql);
|
||
/* наконец то запрашиваем */
|
||
//$data = $this -> connection -> query($sql)->fetchAll(PDO::FETCH_ASSOC);
|
||
// $this -> num = count($data);
|
||
// $this -> result = $data;//когда нибудь убрать
|
||
try {
|
||
$result = $this -> conn -> query($sql) -> fetchAll( PDO::FETCH_ASSOC );
|
||
}catch (Exception $e) {
|
||
$this -> to_log( MOD . ': Выброшено исключение: ' . $e->getMessage() );
|
||
}
|
||
//$row = $result->fetch();
|
||
if ($result)$this -> num = count($result);
|
||
return $result;
|
||
}
|
||
|
||
function free_sql2($sql){
|
||
if ($this -> debug)$this->to_log($sql);
|
||
/* наконец то запрашиваем */
|
||
if ($this -> conn)//убрать костыль, когда будет переписан этот файл
|
||
$this -> conn -> query($sql);
|
||
else
|
||
$this -> connection -> query($sql);
|
||
}
|
||
|
||
/* простой запрос - одно значение, по одному запросу */
|
||
function get_val( $table, $where, $collum ){
|
||
$debug = $this -> debug;
|
||
foreach ( $where as $key => $value ) @$str.=' `' . $key . '` = "' . $value . '" AND ';
|
||
$len = strlen( $str )-4;
|
||
$str2 = substr( $str, 0, $len );
|
||
$sql = 'SELECT `' . $collum . '` FROM `' . $table . '` WHERE ' . $str2 . ' LIMIT 1';
|
||
/* если указан дебаг, пишем в лог */
|
||
if ( $debug ) $this -> to_log( $sql );
|
||
$result = $this -> conn -> query($sql) -> fetchAll( PDO::FETCH_ASSOC );
|
||
$res=$result[0];
|
||
return $res[$collum];
|
||
}
|
||
|
||
/* Функция добавления контента */
|
||
function add($tab, $massiv) {
|
||
$debug=$this->debug;
|
||
foreach ($massiv as $key => $value) {
|
||
if ($key!='ok'){
|
||
@$tabs.='`' . $key . '`, ';
|
||
@$val.="'" . $value . "', ";
|
||
}
|
||
}
|
||
$tabs=substr($tabs, 0, strlen($tabs)-2);
|
||
$val=substr($val, 0, strlen($val)-2);
|
||
$sql='insert into `' . $tab . '` (' . $tabs . ') VALUES (' . $val . ')';
|
||
//echo $sql;
|
||
if ($debug)$this->to_log($sql);
|
||
|
||
$this -> conn -> query($sql);
|
||
|
||
//$query = $this->connection->prepare($sql);
|
||
//$query->execute();
|
||
//$this -> id = ;//когда нибудь убрать
|
||
return $this->conn->lastInsertId();
|
||
}
|
||
|
||
/* функция обновления таблиц по ИД */
|
||
function update($tab, $id, $massiv) {
|
||
$debug=$this->debug;
|
||
foreach ($massiv as $key => $value) {
|
||
if ($key!='ok') @$res.="`" . $key . "` = '" . $this->clean($value) . "', ";
|
||
}
|
||
$res=substr($res, 0, strlen($res)-2);
|
||
$sql='UPDATE `' . $tab . '` SET ' . $res . ' WHERE `id` = "' . $id . '"';
|
||
$this -> conn -> query($sql);
|
||
if ($debug)$this->to_log($sql);
|
||
}
|
||
|
||
/* функция обновления таблиц по ИД в формате XML */
|
||
function update_xml($tab, $id, $massiv, $base64=0) {
|
||
$debug=$this->debug;
|
||
if ($base64==1){
|
||
foreach ($massiv as $key => $value) {
|
||
if ($key!='ok') $res.='<' . $key . '>' . base64_encode( $value ) . '</' . $key . '>';
|
||
}
|
||
}else{
|
||
foreach ($massiv as $key => $value) {
|
||
if ($key!='ok') $res.='<' . $key . '>' . $this->clean($value) . '</' . $key . '>';
|
||
}
|
||
}
|
||
$sql='UPDATE `' . $tab . '` SET `xml` = "' . $res . '" WHERE `id` = "' . $id . '"';
|
||
$query = $this->connection->prepare($sql);
|
||
$query->execute();
|
||
if ($debug)$this->to_log($sql);
|
||
}
|
||
|
||
/* Функция добавления контента */
|
||
function add_xml($tab, $massiv, $base64) {
|
||
$debug=$this->debug;
|
||
if ($base64==1){
|
||
foreach ($massiv as $key => $value) { if ($key!='ok') $res.='<' . $key . '>' . base64_encode($value) . '</' . $key . '>';}
|
||
}else{
|
||
foreach ($massiv as $key => $value) { if ($key!='ok') $res.='<' . $key . '>' . $value . '</' . $key . '>';}
|
||
}
|
||
$sql='insert into `' . $tab . '` (`xml`) VALUES ("' . $res . '")';
|
||
if ($debug)$this->to_log($sql);
|
||
$query = $this->connection->prepare($sql);
|
||
$query->execute();
|
||
$this -> id = $db->lastInsertId();
|
||
}
|
||
|
||
/* функция удаления по ИД */
|
||
function del_id ( $tab, $id ) {
|
||
$debug = $this -> debug;
|
||
$sql='DELETE FROM `' . $tab . '` WHERE `id` = "' . $id . '"';
|
||
$this -> connection -> query($sql);
|
||
if ( $debug ) $this -> to_log ( $sql );
|
||
}
|
||
|
||
/*счетчик записей*/
|
||
function count_sql($tab, $where) {
|
||
$debug=$this->debug;
|
||
/*where - массив колонок и желаемых значений*/
|
||
$sql='SELECT COUNT(*) FROM `' . $tab . '`';
|
||
if ($where){
|
||
$sql.=' WHERE ';
|
||
foreach ($where as $key => $value) @$str.=' `' . $key . '` = "' . $value . '" AND ';
|
||
/* отрезаем лишнее */
|
||
$len = strlen( $str )-4;
|
||
$sql .= substr( $str, 0, $len );
|
||
}
|
||
if ($debug)$this->to_log($sql);
|
||
/* наконец то запрашиваем */
|
||
$res=$this->conn->query($sql);
|
||
$this -> result = $res->fetchColumn();//когда нибудь убрать
|
||
return $this -> result;
|
||
}
|
||
|
||
/* не в тему - но пусть письмо админу будет здесь*/
|
||
function send_to_admin($tema, $txt, $email) {
|
||
include_once MYDIR . '/api/php/sendmail.php';
|
||
send_mime_mail( $_SERVER['SERVER_NAME'],
|
||
'info@' . $_SERVER['SERVER_NAME'],
|
||
'Вы',
|
||
$email,
|
||
'UTF-8', // кодировка, в которой находятся передаваемые строки
|
||
'WINDOWS-1251', // кодировка, в которой будет отправлено письмо
|
||
$tema,
|
||
$txt);
|
||
}
|
||
|
||
function get_settings_mod( $mod=MOD ){//получаем настройки модуля из json
|
||
unset( $a );
|
||
$a['mod'] = $mod;
|
||
//проверяем существование записи
|
||
$id = $this -> get_val( 'settings', $a, 'id' );
|
||
if ( !$id ) $this -> add( 'settings', $a );
|
||
$json = $this -> get_val( 'settings', $a, 'json' );
|
||
return $this -> from_j( $json );
|
||
}
|
||
|
||
/* функция получения настроек модуля del ?? */
|
||
/*function get_settings($mod){
|
||
unset($a);
|
||
$a['mod'] = $mod;
|
||
$xml = $this -> get_val( 'settings', $a, 'xml' );
|
||
require_once MYDIR . '/api/php/parsexml.php';
|
||
$parce = new parsexml;
|
||
$parce -> make_massiv ( $xml );
|
||
$arr = $parce -> res;
|
||
unset($tmp);
|
||
foreach ( $arr as $key => $value ) $tmp[$key] = $value;
|
||
return $tmp;
|
||
}*/
|
||
|
||
function get_settings_json($mod=MOD){
|
||
unset($a);
|
||
$a['mod'] = $mod;
|
||
$json = $this -> get_val( 'settings', $a, 'json' );
|
||
return $this->from_j($json);
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
function update_settings($massiv){
|
||
|
||
$m = $this -> get_settings_json( MOD );
|
||
|
||
|
||
|
||
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/*
|
||
Берем двухмерный массив данных
|
||
$db = new MySQL;
|
||
$db->connect('localhost','root','','b-install');
|
||
$st['id']=1; - какие колонки с каким значением нужны
|
||
$db -> debug = 2;// 1- пишет лог, 2 показывает на экране
|
||
$db -> get_massiv ( 'pages', $st, $order, $limit ); //исполняем функцию с параметрами
|
||
$massiv = $db->result; //получаем результат
|
||
*/
|
||
|
||
|
||
/* Функция вынимает xml профиля юзера */
|
||
function userxml($user_id){
|
||
unset($a);
|
||
$a['user_id']=$user_id;
|
||
$this->get_val('users_profiles', $a, 'xml');
|
||
return $this->result;
|
||
}
|
||
|
||
/* Интернет-магазин */
|
||
/* Берем нужные директории категорий */
|
||
function get_cat_im($id){
|
||
unset($tmp);
|
||
$tmp['id']=$id;
|
||
$tmp['public']=1;
|
||
$tmp['show_mnu']=1;
|
||
$this->get_massiv('m_groupe', $tmp, 'naim');
|
||
return $this->result;
|
||
}
|
||
|
||
|
||
/* Получаем итого заказа найти и удалить */
|
||
function zakaz_itog($zakaz_id){
|
||
unset($tmp);
|
||
$tmp['zakaz_id']=$zakaz_id;
|
||
$tovar = $this -> get_massiv('cart', $tmp);
|
||
$num = $this -> num;
|
||
for( $i = 0; $i < $num; $i++ ){
|
||
unset($a);
|
||
$a['id'] = $tovar[$i]['tovar_id'];
|
||
$cena = $this -> get_val( 'm_tovar', $a, 'akccena' );
|
||
if ( $cena < 1 ) $cena = $this -> get_val( 'm_tovar', $a, 'cena' );
|
||
$pod_itog[$i] = $cena * $tovar[$i]['col'];
|
||
unset($cena);
|
||
}
|
||
return array_sum($pod_itog);
|
||
}
|
||
|
||
/* 06.05.2021 проверка прав доступа к нужной записи в нужной таблице */
|
||
function check_access( $table, $id, $redirect=0 ){
|
||
$dostup = 0; //Все нельзя
|
||
//модератору и администратору все можно:
|
||
if ( $_SESSION['dostup']=='a' || $_SESSION['dostup']=='m' ) $dostup = 1;
|
||
if ( $dostup == 0 ){//Да, условие, чтобы при очевидном не делать лишнего обращения к БД
|
||
//Берем ИД пользователя из БД и сравниваем с сессией
|
||
$a['id'] = $id;
|
||
$user_id = $this -> get_val( $table, $a, 'user_id' );
|
||
if ( $user_id == $_SESSION['user_id'] ) $dostup = 1;
|
||
}
|
||
if ( $dostup == 0 && $redirect==1)
|
||
header( 'Location: /403/' );
|
||
else
|
||
return $dostup;
|
||
}
|
||
|
||
function get_user_id(){//Возвращает либо ид юзера либо ид сессии, в зависимости, авторизовался ли узер
|
||
if ($_SESSION['user_id'])
|
||
return $_SESSION['user_id'];
|
||
else
|
||
return session_id();
|
||
}
|
||
/* Экранирование SQLite3 */
|
||
function magicSQLite($txt){
|
||
$old = array('"', ' руб.');#Ищем вредное ">",, "<"
|
||
$new = array('""', '');#Меняем на полезное">", , "<"
|
||
$txt = str_replace($old, $new, $txt);#Собсно сама замена =)
|
||
return $txt;
|
||
}
|
||
|
||
|
||
function user_browser($agent) {//пишем статистику в базу по браузерам
|
||
//узнаем, есть ли запись об этом пользователе в базе данных... если нет, то определяем браузер и пишем...
|
||
unset($a);
|
||
$a['session_id']=session_id();
|
||
$a['type']='browser';
|
||
$id=$this->get_val('stat', $a, 'id');
|
||
if(!$id){
|
||
preg_match("/(MSIE|Opera|Firefox|Chrome|Version|Opera Mini|Netscape|Konqueror|SeaMonkey|Camino|Minefield|Iceweasel|K-Meleon|Maxthon)(?:\/| )([0-9.]+)/", $agent, $browser_info); // регулярное выражение, которое позволяет отпределить 90% браузеров
|
||
list(,$browser,$version) = $browser_info; // получаем данные из массива в переменную
|
||
if (preg_match("/Opera ([0-9.]+)/i", $agent, $opera)) return 'Opera '.$opera[1]; // определение _очень_старых_ версий Оперы (до 8.50), при желании можно убрать
|
||
if ($browser == 'MSIE') { // если браузер определён как IE
|
||
preg_match("/(Maxthon|Avant Browser|MyIE2)/i", $agent, $ie); // проверяем, не разработка ли это на основе IE
|
||
if ($ie) return $ie[1].' based on IE '.$version; // если да, то возвращаем сообщение об этом
|
||
return 'IE '.$version; // иначе просто возвращаем IE и номер версии
|
||
}
|
||
if ($browser == 'Firefox') { // если браузер определён как Firefox
|
||
preg_match("/(Flock|Navigator|Epiphany)\/([0-9.]+)/", $agent, $ff); // проверяем, не разработка ли это на основе Firefox
|
||
if ($ff) return $ff[1].' '.$ff[2]; // если да, то выводим номер и версию
|
||
}
|
||
if ($browser == 'Opera' && $version == '9.80') return 'Opera '.substr($agent,-5); // если браузер определён как Opera 9.80, берём версию Оперы из конца строки
|
||
if ($browser == 'Version') return 'Safari '.$version; // определяем Сафари
|
||
if (!$browser && strpos($agent, 'Gecko')) return 'Browser based on Gecko'; // для неопознанных браузеров проверяем, если они на движке Gecko, и возращаем сообщение об этом
|
||
if ($browser){
|
||
$res['browser'] = $browser; // для всех остальных возвращаем браузер и версию
|
||
$res['version'] = $version; // для всех остальных возвращаем браузер и версию
|
||
$json=$this->to_j($res);
|
||
$a['json']=$json;
|
||
$a['data']=date('Y-m-d');
|
||
$a['t']=time();
|
||
$this->add('stat', $a);
|
||
}
|
||
}
|
||
}
|
||
/* получаем сезон и выдергиваем картинку */
|
||
function sezon_img(){
|
||
if ( date("m")=='12' || date('m')=='01' || date('m')=='02' )$sezon='1';
|
||
if ( date("m")=='03' || date('m')=='04' || date('m')=='05' )$sezon='2';
|
||
if ( date("m")=='06' || date('m')=='07' || date('m')=='08' )$sezon='3';
|
||
if ( date("m")=='09' || date('m')=='10' || date('m')=='11' )$sezon='4';
|
||
@mkdir (MYDIR . '/files/template', 0700);
|
||
@mkdir (MYDIR . '/files/template/sezon', 0700);
|
||
@mkdir (MYDIR . '/files/template/sezon/1', 0700);
|
||
@mkdir (MYDIR . '/files/template/sezon/2', 0700);
|
||
@mkdir (MYDIR . '/files/template/sezon/3', 0700);
|
||
@mkdir (MYDIR . '/files/template/sezon/4', 0700);
|
||
$src=MYDIR . '/files/template/sezon/' . $sezon;
|
||
@include_once(MYDIR . '/api/php/list_file.php');
|
||
$fl=list_file($src);
|
||
@$count=count($fl);
|
||
$rnd=rand(0, $count-1);
|
||
define( 'SEZON_IMG', '/files/template/sezon/' . $sezon . '/' . $fl[$rnd] );
|
||
/*
|
||
|
||
в любое место шаблона поместить поле <input type="hidden" value="{$smarty.const.SEZON_IMG}" id="sezon_img">
|
||
|
||
в файл шаблона JS добавить строку
|
||
// рандомный сезонный фон
|
||
var sezon_img=$("#sezon_img").val();$("body").css({ "background-image": "url(" + sezon_img + ")", "background-attachment": "fixed", "background-size": "100%" });
|
||
|
||
|
||
включить в настройках сайта рандомный фон по сезону
|
||
*/
|
||
}
|
||
|
||
|
||
|
||
function resize_img($img, $w=400, $h=400, $zip=100, $square=false, $path){
|
||
$big= $_SERVER['DOCUMENT_ROOT'] . '/img/' . $path . '/' . $img . '.jpg';
|
||
$small = $_SERVER['DOCUMENT_ROOT'] . '/img/' . $path . '/' . $img . '_' . $w . '_' . $h . '.jpg';
|
||
$size = getimagesize ($big);
|
||
if ( $size[0] > $size[1] ){//ширина больше высоты
|
||
$min=$size[1];
|
||
exec('convert ' . $big . ' -resize ' . $w . ' -quality ' . $zip . ' ' . $small);
|
||
}else{//высота больше ширины
|
||
exec('convert ' . $big . ' -resize x' . $h . ' -quality ' . $zip . ' ' . $small);
|
||
$min=$size[0];
|
||
}
|
||
$size2 = getimagesize ($small);
|
||
if ( $size2[0] > $size2[1] ){//ширина больше высоты
|
||
$min=$size2[1];
|
||
}else{
|
||
$min=$size2[0];
|
||
}
|
||
if ($square==true){
|
||
$small_s = $_SERVER['DOCUMENT_ROOT'] . '/img/' . $path . '/' . $img . '_' . $w . '_' . $h . '_s.jpg';
|
||
exec('convert ' . $small . ' -gravity Center -crop ' . $min . 'x' . $min . '+0 ' . $small_s);
|
||
}
|
||
}
|
||
|
||
function generate_password($number){
|
||
$arr = array('a','b','c','d','e','f', 'g','h','i','j','k','l','m','n','o','p','r','s','t','u','v','x','y','z','1','2','3','4','5','6','7','8','9','0');
|
||
$pass = "";
|
||
for($i = 0; $i < $number; $i++){
|
||
$index = rand(0, count($arr) - 1);
|
||
$pass .= $arr[$index];
|
||
}
|
||
return $pass;
|
||
}
|
||
|
||
function upload_img($file, $path, $name_file){
|
||
if ( preg_match( '/[.](jpg)|(jpeg)|(JPG)|(JPEG)$/', $file[$name_file]['name'] ) ){
|
||
@mkdir( $_SERVER['DOCUMENT_ROOT'] . '/img/' . $path, 0700 );
|
||
$img_name = $this -> generate_password( 20 );
|
||
$source = $file[$name_file]['tmp_name'];
|
||
$target = $_SERVER['DOCUMENT_ROOT'] . '/img/' . $path . '/' . $img_name . '.jpg';
|
||
copy( $source, $target );
|
||
}
|
||
return $img_name;
|
||
}
|
||
//берем МАССИВ значений по типу с нужным паррентом из таблицы pages 14.03.2022
|
||
function get_massiv_from_pages( $parent=0, $tip ){
|
||
if ( $parent=='' ) $parent = 0;
|
||
unset($a);
|
||
$a['parent'] = $parent;
|
||
$a['tip'] = $tip;
|
||
//print_r($a);
|
||
$list = $this -> get_massiv ( 'pages', $a, 'txt' );
|
||
//print_r( $list );
|
||
$num = count( $list );
|
||
for( $i = 0; $i < $num; $i++ ){
|
||
if ( $list[$i]['id'] ){
|
||
unset( $b );
|
||
$tmp = $this -> from_j( $this -> clear_json( $list[$i]['json'] ) ); //строку в джейсона в массив
|
||
$this -> to_log ( $this -> clear_json( $list[$i]['json'] ) );
|
||
foreach ( $tmp as $key => $value ) $list[$i][$key] = $value;
|
||
unset( $tmp );
|
||
}
|
||
}
|
||
return $list;
|
||
}
|
||
|
||
//Берем контент по ИД
|
||
function get_content_from_pages($id){
|
||
unset($a);
|
||
$a['id'] = $id;
|
||
$list = $this -> get_massiv ( 'pages', $a, 'id', 1 );
|
||
//print_r( $list );
|
||
$num = count( $list );
|
||
for( $i = 0; $i < $num; $i++ ){
|
||
if ( $list[$i]['id'] ){
|
||
unset( $b );
|
||
$tmp = $this -> from_j( $this -> clear_json( $list[$i]['json'] ) ); //строку в джейсона в массив
|
||
$this -> to_log ( $this -> clear_json( $list[$i]['json'] ) );
|
||
foreach ( $tmp as $key => $value ) $list[$i][$key] = $value;
|
||
unset( $tmp );
|
||
}
|
||
}
|
||
return $list;
|
||
}
|
||
/*
|
||
21.05.2022
|
||
Берем настройки модуля
|
||
Читает JSON из таблицы settings нужного модуля и возвращает массив
|
||
Используется в модулях: main
|
||
|
||
*/
|
||
function get_mod_settings(){
|
||
|
||
$a['mod'] = ( MOD == '' ) ? "main" : MOD;
|
||
//if (MOD)$a['mod']=MOD;else $a['mod']='main';
|
||
$json = $this -> get_val( 'settings', $a, 'json' );
|
||
$res=$this->from_j($json);
|
||
return $res;
|
||
}
|
||
/* ----------------------------------------------------------------------
|
||
11.06.2022
|
||
Подсчет итога в корзине
|
||
---------------------------------------------------------------------- */
|
||
|
||
function get_itog(){
|
||
$a['user_id'] = ( $_SESSION['user_id'] ) ? $_SESSION['user_id'] : session_id();
|
||
$massiv=$this->get_massiv('cart', $a);
|
||
$count=count($massiv);
|
||
$itog=0;
|
||
|
||
for ( $i=0; $i < $count; $i++ ){
|
||
unset($a);
|
||
$a['id']=$massiv[$i]['pages_id'];
|
||
$cena = $this -> get_val( 'pages', $a, 'cena' );
|
||
$itog = $itog + ( $cena * $massiv[$i]['kolvo'] );
|
||
}
|
||
|
||
return $itog;
|
||
}
|
||
|
||
|
||
/* ----------------------------------------------------------------------
|
||
17.09.2022
|
||
Чиним сломанный json
|
||
---------------------------------------------------------------------- */
|
||
|
||
function json_fix($txt){
|
||
//Ищем служебные данные json и прячем
|
||
$old1 = array('{"', '":"', '"}');#Ищем вредное ">",, "<"
|
||
$new1 = array("{'", "':'", "'}");#Меняем на полезное">", , "<"
|
||
$txt = str_replace($old1, $new1, $txt);#Собсно сама замена =)
|
||
//Ищем ковычки в значениях и меняем на код ковычек
|
||
$old1 = array('\"', '"');#Ищем вредное ">",, "<"
|
||
$new1 = array('"', '"');#Меняем на полезное">", , "<"
|
||
$txt = str_replace($old1, $new1, $txt);
|
||
//Ищем служебные данные json и возвращаем
|
||
$old1 = array("{'", "':'", "'}");#Ищем вредное ">",, "<"
|
||
$new1 = array('{"', '":"', '"}');#Меняем на полезное">", , "<"
|
||
$txt = str_replace($old1, $new1, $txt);#Собсно сама замена =)
|
||
return $txt;
|
||
}
|
||
|
||
/* ----------------------------------------------------------------------
|
||
17.09.2022
|
||
Костыль подготовки данных для json
|
||
---------------------------------------------------------------------- */
|
||
function json_prepare($txt){
|
||
$old1 = array('"', "'");#Ищем вредное ">",, "<"
|
||
$new1 = array('"', "''");#Меняем на полезное">", , "<"
|
||
$txt = str_replace($old1, $new1, $txt);
|
||
return $txt;
|
||
}
|
||
|
||
|
||
}
|
||
?>
|