core/api/php/core.php

288 lines
13 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
class core{
public static $settings = '';
/* ----------------------------------------------------------------------
08.12.2022
Наполняем базу городов, регионов и стран
---------------------------------------------------------------------- */
private static function get_geo_api($ip){
$ch = curl_init('http://ip-api.com/json/' . $ip . '?lang=ru');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$res = curl_exec($ch);
curl_close($ch);
$res = json_decode($res, true);
return $res;
}
static function geo(){
$res=self::get_geo_api($_SERVER['REMOTE_ADDR']);
$strana_id = \DB::getValue('SELECT `id` FROM `strana` WHERE `txt` = "' . $res['country'] . '"');
if (!$strana_id && $res['country'])$strana_id=\DB::add("INSERT INTO `strana` (`txt`) VALUES (?)", array($res['country']));
$region_id = \DB::getValue('SELECT `id` FROM `region` WHERE `txt` = "' . $res['regionName'] . '" AND `strana_id` = ' . $strana_id);
if ( !$region_id && $res['regionName'] )$region_id = \DB::add("INSERT INTO `region` (`txt`, `strana_id`) VALUES (?, ?)", array($res['regionName'], $strana_id));
$city_id = \DB::getValue('SELECT `id` FROM `city` WHERE `txt` = "' . $res['city'] . '" AND `strana_id` = ' . $strana_id . ' AND `region_id`=' . $region_id);
if (!$city_id && $res['city'] ){
$city_id = \DB::add("INSERT INTO `city` (`txt`, `strana_id`, `region_id`) VALUES (?, ?, ?)" , array( $res['city'], $strana_id, $region_id) );
$_SESSION['city']=$city_id;
}
}
/* ----------------------------------------------------------------------
08.12.2022
Берем настройки модуля/сайта
---------------------------------------------------------------------- */
static function getSettings($set, $mod='global'){
//echo 'SELECT `json` FROM `settings` WHERE `mod` = "' . $mod . '" LIMIT 1';
$txt = \DB::getValue('SELECT `json` FROM `settings` WHERE `mod` = "' . $mod . '" LIMIT 1');
$massiv = \json::from_j($txt);
return $massiv[$set];
}
/* ----------------------------------------------------------------------
21.12.2022
Берем пишем модуля/сайта
---------------------------------------------------------------------- */
static function setSettings($param, $val, $mod='global'){
return $massiv[$set];
}
/* ----------------------------------------------------------------------
08.12.2022
Авторизация по куки
---------------------------------------------------------------------- */
static function loginCookies ( ) {
if ( @$_COOKIE['cookies'] && !@$_SESSION['user_id']){
$res = \json::from_j ( base64_decode ( $_COOKIE['cookies'] ) );
$users = \DB::getAll('SELECT `dostup`, `act` FROM `users` WHERE `id` = "' . $res['user_id'] . '" AND `pwd`="' . $res['pwd'] . '" LIMIT 1');
if ( $users[0]['dostup'] ) {
$_SESSION['user_id'] = $res['user_id'];
$_SESSION['dostup'] = $users[0]['dostup'];
}
}
}
/* ----------------------------------------------------------------------
09.12.2022
Получаем данные корзины
Выводим массив, в массиве cart - все содержимое корзины, в summ - итог корзины
---------------------------------------------------------------------- */
static function getCart ( ) {
$session_id = ( $_SESSION['user_id'] ) ? $_SESSION['user_id'] : session_id();
$cart = \DB::getAll( "SELECT * FROM `cart` WHERE `user_id`=? AND `order` IS NULL", $session_id );
$summ = 0;
//Получаем название товаров и цены
for ( $i = 0; $i < count( $cart ); $i++ ){
$cart[$i]['title'] = \DB::getValue( "SELECT `title` FROM `tovar` WHERE `id`=? LIMIT 1", $cart[$i]['tovar_id'] );
$cart[$i]['img'] = \DB::getValue( "SELECT `filename` FROM `tovar_img` WHERE `tovar_id`=? LIMIT 1", $cart[$i]['tovar_id'] );
$cart[$i]['cena'] = \DB::getValue( "SELECT `cena` FROM `tovar_price_history` WHERE `tovar_id`=? ORDER BY `t` DESC LIMIT 1", $cart[$i]['tovar_id'] );
$cart[$i]['st'] = $cart[$i]['kolvo'] * $cart[$i]['cena'];
$summ = $summ + $cart[$i]['st'];
}
$result['cart'] = $cart;
$result['summ'] = $summ;
return $result;
}
/* ----------------------------------------------------------------------
20.12.2022
Получаем данные об основной организации пользователя
---------------------------------------------------------------------- */
static function getUserMainOrg ( $user_id ) {
}
/* ----------------------------------------------------------------------
09.12.2022
IP
---------------------------------------------------------------------- */
static function detect_ip ( ) {
$ip = false;
if (isset($_SERVER["HTTP_X_FORWARDED_FOR"]) and preg_match("#^[0-9.]+$#", $_SERVER["HTTP_X_FORWARDED_FOR"])) {
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
}
else if (isset($_SERVER["HTTP_X_REAL_IP"]) and preg_match("#^[0-9.]+$#", $_SERVER["HTTP_X_REAL_IP"])) {
$ip = $_SERVER["HTTP_X_REAL_IP"];
}
else if (preg_match("#^[0-9.]+$#", $_SERVER["REMOTE_ADDR"])) {
$ip = $_SERVER["REMOTE_ADDR"];
}
return $ip;
}
/* ----------------------------------------------------------------------
09.12.2022
Авторизация
---------------------------------------------------------------------- */
private static function redirectAfterLogin($dostup){
if ( $dostup=='a' || $dostup=='m' ) header( 'Location: /admin/' );
if ( $dostup=='u' ) header( 'Location: /' . self::getSettings('default_mod_auth') . '/' );
}
static function login ( ) {
$user = \DB::getAll( 'SELECT `id`, `dostup` FROM `users` WHERE `email` = ? AND `pwd`=? LIMIT 1', array( $_POST['email'], md5( $_POST['pwd'] ) ) );
if ( $user[0]['dostup'] ) {
$_SESSION['dostup'] = $user[0]['dostup'];
$_SESSION['user_id'] = $user[0]['id'];
}
if ( $_POST['remember'] == 'on' && $user[0]['dostup'] ) {
$_SESSION['pwd'] = md5($_POST['pwd']);
$cookies = base64_encode ( \json::to_j ( $_SESSION ) );
$tri_mes = time() + 31536000;
setcookie ( 'cookies', $cookies, $tri_mes, '/', $_SERVER['SERVER_NAME'] );
}
self::redirectAfterLogin( $user[0]['dostup'] );
}
/* ----------------------------------------------------------------------
12.12.2022
Получаем данные о пользователе
---------------------------------------------------------------------- */
static function getUserInfo ( $id ) {
$user = \DB::getAll( 'SELECT * FROM `users` WHERE `id` = ? LIMIT 1', array( $id ) );
return $user;
}
/* ----------------------------------------------------------------------
13.12.2022
Шифровальщик
---------------------------------------------------------------------- */
static function crypt ( $String, $act='crypt', $pwd ) {
if ($act=='crypt')$String=base64_encode($String);
$Salt='BGuxLWQtKweKEMV4';
$StrLen = strlen($String);
$Seq = $Password;
$Gamma = '';
while (strlen($Gamma)<$StrLen){
$Seq = pack("H*",sha1($Gamma.$Seq.$Salt));
$Gamma.=substr($Seq,0,8);
}
$result = $String^$Gamma;
if ($act=='decrypt')$String=base64_decode($String);
return $result;
}
/* ----------------------------------------------------------------------
15.12.2022
Генератор паролей
---------------------------------------------------------------------- */
static function genpassword ( $number=10 ) {
$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;
}
/* ----------------------------------------------------------------------
28.12.2022
Получаем мета-теги - для модулей не имеющих свои теги (используется в /main)
---------------------------------------------------------------------- */
static function getMeta ( $mod, $id=0) {
$massiv= \DB::getAll( 'SELECT * FROM `meta` WHERE `id` = ? AND `mod`=? LIMIT 1', array( $id, $mod ) );
if (count($massiv)==0) \DB::add("INSERT INTO `meta` (`id`, `mod`) VALUES (?, ?)", array( $id, $mod ));
$res=$massiv[0];
return $res;
}
/* ----------------------------------------------------------------------
03.01.2023
Хлебные крошки
---------------------------------------------------------------------- */
static function getBreadcrumb ( $table, $category ) {
$p = $category;
$i = 0;
while ( $p!=0 ){
$massiv = \DB::getAll( "SELECT `id`, `title`, `category` FROM `" . $table . "` WHERE `id`=? LIMIT 1", $p );
$res[$i]['id'] = $massiv[0]['id'];
$res[$i]['title'] = $massiv[0]['title'];
$i++;
$p = $massiv[0]['category'];
}
return array_reverse ( $res );
}
/* ----------------------------------------------------------------------
02.02.2023
Архиватор и разорхиватор
---------------------------------------------------------------------- */
static function zip ( $txt ) {
return base64_encode(gzcompress ( $txt, 9 ) );
}
static function unzip ( $txt ) {
return gzuncompress ( base64_decode ( $txt ) );
}
/* ----------------------------------------------------------------------
27.02.2023
Проверяем ид или ид сессии пользователя (для Интернет-магазина)
---------------------------------------------------------------------- */
static function checkMe ( ) {
return ( $_SESSION['user_id'] ) ? $_SESSION['user_id'] : session_id();
}
/* ----------------------------------------------------------------------
07.02.2023
Добавляем в корзину
---------------------------------------------------------------------- */
static function addToCart ($tovar_id, $kolvo=1 ) {
$user_id=self::checkMe();
\DB::set("ALTER TABLE `cart`
CHANGE `user_id` `user_id` varchar(50) NULL AFTER `tovar_id`;");
// $session_id = \core::checkMe();
//Получаем количество, если есть...
$kolvo = \DB::getValue( "SELECT `kolvo` FROM `cart` WHERE `user_id`=? AND `tovar_id`=?", array( $user_id, $_POST['pages_id'] ) );
if ($kolvo){
$kolvo=$kolvo+$_POST['kolvo'];
\DB::set("UPDATE `cart` SET `kolvo`=? WHERE `user_id`=? AND `tovar_id`=?", array( $kolvo, $user_id, $_POST['pages_id'] ) );
}else
$insert_id = \DB::add( "INSERT INTO `cart` (`t`, `tovar_id`, `user_id`, `kolvo`) VALUES(?, ?, ?, ?)", array(time(), $_POST['pages_id'], $user_id, $_POST['kolvo'] ) );
//Суммируем содержимое корзины и выводим в js
$summ = 0;
$cart = \DB::getAll( "SELECT `tovar_id`, `kolvo` FROM `cart` WHERE `user_id`=?", $user_id );
for ( $i=0; $i<count( $cart ); $i++ ){
$cena = \DB::getValue( "SELECT `cena` FROM `tovar_price_history` WHERE `tovar_id`=? AND `status`=1", $cart[$i]['tovar_id'] );
$m = $cena * $cart[$i]['kolvo'];
$summ = $summ + $m;
}
return $summ;
}
/* ----------------------------------------------------------------------
07.03.2023
Делаем превьюшку
---------------------------------------------------------------------- */
static function imgPreview ( $src, $dst, $w=800, $h=600 ) {
$tmp = self::genpassword(10);
exec ("convert -define jpeg:size=640x480 " . $src . " -thumbnail '800x600>' -background white -gravity center -extent 800x600 " . $dst);
//exec ("convert " . $src . " -resize " . $w . "x" . $h . "^ " . $dst);
//if ( $wr > $hr ){ //Ширина больше высоты и ужимаем по ширине -resize 64x64^ \ -gravity center -extent 64x64
//exec ("convert /tmp/" . $tmp . ".jpg -gravity Center -crop 640x640+0 " . $dst );
//}else{
// exec ("convert " . $src . " -resize x" . $w . "\! " . $dst);
//exec ("convert /tmp/" . $tmp . ".jpg -gravity Center -crop 640x640+0 " . $dst );
//}
}
}