508 lines
23 KiB
PHP
508 lines
23 KiB
PHP
<?php
|
||
class Antiznak {
|
||
private $db;
|
||
private $base_url = 'https://antiznak.ru/api/v2.php';
|
||
private $api_key = 'Y2Q4G8GW3R';
|
||
|
||
public function __construct($db = null) {
|
||
|
||
if($db){
|
||
$this->db = $db;
|
||
} else {
|
||
$pdo = new MysqlPdo(hst, ndb, user, pass);
|
||
$sql = "SET NAMES 'utf8'";
|
||
$pdo->query($sql);
|
||
$this->db = $pdo;
|
||
}
|
||
|
||
|
||
}
|
||
|
||
public function get_tariffs() {
|
||
$result = array();
|
||
$sql = "SELECT * FROM antiznak_tariff";
|
||
$q = $this->db->query($sql);
|
||
while($r = $this->db->fetch_assoc($q)){
|
||
$average = ceil($r['price'] / $r['count']);
|
||
$r['average'] = $average;
|
||
$result[] = $r;
|
||
}
|
||
|
||
return $result;
|
||
}
|
||
|
||
|
||
public function save_tariff($id, $price, $count){
|
||
$result = array();
|
||
$sql = "UPDATE antiznak_tariff SET count='{$count}', price='{$price}' WHERE id={$id}";
|
||
$this->db->query($sql);
|
||
$result = $this->get_tariffs();
|
||
return $result;
|
||
|
||
}
|
||
|
||
public function request_tariff($user_id, $tariff){
|
||
$sqlCheck = "SELECT * from antiznak_user_request where paid = 0 and user_id = $user_id";
|
||
$rezCheck = $this->db->query($sqlCheck);
|
||
|
||
if ($this->db->num_rows($rezCheck) > 0) {
|
||
|
||
echo '<p><i style="color:#EE6161;font-size: 23px;margin-right: 7px;" class="ti-face-sad"></i><span>Имеются неоплаченные заказы. Ожидайте, пока с вами свяжется наш менеджер.</span></p>';
|
||
} else {
|
||
$user = new User;
|
||
$user->get($user_id);
|
||
|
||
$sql = "INSERT INTO antiznak_user_request(user_id, count, price, created_at, paid) VALUES ($user_id, $tariff->count, $tariff->price, NOW(), 0)";
|
||
$this->db->query($sql);
|
||
|
||
$noticeText = "Заявка на услугу АнтиЗнак. На " . $tariff->count . " объектов по цене " . $tariff->price . " рублей от пользователя." . " ФИО: " . $user->last_name ." ".$user->first_name . " " .$user->middle_name . ". Email: " . $user->email . ". Телефон: " . $user->phone;
|
||
|
||
//уведомления на мыло
|
||
mailClientFromJoywork("JoyWork2016@mail.ru", "Новая заявка на оплату пакета АнтиЗнак", $noticeText);
|
||
mailClientFromJoywork("sndmitrievsn@mail.ru", "Новая заявка на оплату пакета АнтиЗнак", $noticeText);
|
||
mailClientFromJoywork("Ellada-an@mail.ru", "Новая заявка на оплату пакета АнтиЗнак", $noticeText);
|
||
|
||
//уведомление Станиславу в телеграм
|
||
$sql = "INSERT INTO discharge_user_notice(user_id, text, sended, created_at) VALUES(4, '$noticeText', 0, NOW())";
|
||
$this->db->query($sql);
|
||
|
||
echo '<p><i style="color:#4CAF50;font-size: 23px;margin-right: 7px;" class="ti-face-smile"></i><span>Заявка на пакет успешно отправлена. Ожидайте, пока с вами свяжется наш менеджер.</span></p>';
|
||
}
|
||
}
|
||
|
||
public function confirm_request_pay($request_id){
|
||
$sqlRequest = "SELECT * from antiznak_user_request where id = {$request_id}";
|
||
$rezRequest = $this->db->query($sqlRequest);
|
||
|
||
$request = $this->db->fetch_assoc($rezRequest);
|
||
|
||
if ($request) {
|
||
|
||
$sqlUser = new User();
|
||
|
||
$sqlUser->get($request['user_id']);
|
||
|
||
$sql = "UPDATE antiznak_user_request SET paid = 1 where id = $request[id]";
|
||
$this->db->query($sql);
|
||
|
||
$newRequestsCount = 0;
|
||
|
||
if ($sqlUser->antiznak_request_count) {
|
||
$newRequestsCount = $sqlUser->antiznak_request_count;
|
||
}
|
||
|
||
$newRequestsCount = $newRequestsCount + $request['count'];
|
||
|
||
$sql = "UPDATE users SET antiznak_request_count = $newRequestsCount where id = $request[user_id]";
|
||
$this->db->query($sql);
|
||
} else {
|
||
echo "Не найден запрос на оплату в БД.";
|
||
}
|
||
}
|
||
|
||
/**
|
||
*
|
||
*/
|
||
public function get_place_object($object_id, $user_id){
|
||
$result = array();
|
||
|
||
$obj_ads_id = 0;
|
||
$url_place = '';
|
||
$photos_count = 0;
|
||
$sql_o_r = "SELECT * FROM `antiznak_object_result` WHERE object_id={$object_id} AND user_id={$user_id} AND status='save'";
|
||
|
||
$q_o_r = $this->db->query($sql_o_r);
|
||
if($this->db->num_rows($q_o_r) > 0){
|
||
$result['status'] = 'pre_save';
|
||
} else {
|
||
//Поиск объекта и фото
|
||
$sql = "SELECT * FROM objects WHERE id = {$object_id}";
|
||
|
||
$q = $this->db->query($sql);
|
||
$obj = $this->db->fetch_assoc($q);
|
||
if($obj['initial_object_id'] > 0){
|
||
$obj_ads_id = (int)$obj['initial_object_id'];
|
||
} else {
|
||
$obj_ads_id = $object_id;
|
||
}
|
||
|
||
//Оригинальные фото
|
||
$sql_photos = "SELECT count(*) as total FROM objects_object_photo WHERE object_id={$object_id}";
|
||
$q_photos = $this->db->query($sql_photos);
|
||
$r_photos = $this->db->fetch_assoc($q_photos);
|
||
if(isset($r_photos['total']) && $r_photos['total'] > 0){
|
||
$photos_count = (int)$r_photos['total'];
|
||
}
|
||
$is_photo_this = false;
|
||
//Есть ли уже фото
|
||
$sql_antiznak = "SELECT * FROM antiznak_object WHERE object_id = {$obj_ads_id}";
|
||
$q_antiznak = $this->db->query($sql_antiznak);
|
||
if($this->db->num_rows($q_antiznak) > 0){
|
||
$r_antiznak = $this->db->fetch_assoc($q_antiznak);
|
||
$antiznak_id = $r_antiznak['id'];
|
||
if($this->db->num_rows($this->db->query("SELECT * FROM antiznak_object_photos WHERE antiznak_id = {$antiznak_id}"))>0){
|
||
$is_photo_this = true;
|
||
$url_place = 'is_photo_this';
|
||
}
|
||
}
|
||
|
||
|
||
//Если фото ещё не определялись
|
||
if(!$is_photo_this){
|
||
|
||
$sql_ads = "SELECT * FROM ads_objects WHERE obj_id = {$obj_ads_id}";
|
||
$q_ads = $this->db->query($sql_ads);
|
||
$r_ads = $this->db->fetch_assoc($q_ads);
|
||
if(isset($r_ads['ads_url']) && !empty($r_ads['ads_url'])){
|
||
$url_place = $r_ads['ads_url'];
|
||
|
||
}
|
||
}
|
||
|
||
$result['object_ads_id'] = $obj_ads_id;
|
||
if($photos_count == 0){
|
||
$result['error']['no_photos'] = "Фотографии не найдены";
|
||
} else {
|
||
$result['photos'] = $photos_count;
|
||
}
|
||
if(empty($url_place)){
|
||
$result['error']['no_place'] = "Площадка оригинального объявления не найдена";
|
||
} else {
|
||
$result['place'] = $url_place;
|
||
}
|
||
}
|
||
|
||
return $result;
|
||
}
|
||
|
||
/**
|
||
* Сохранение фото
|
||
* @param array $photos
|
||
* @return array $photo_links
|
||
*/
|
||
private function save_photo($photos, $agency_id, $folder = ""){
|
||
|
||
$Selectel = SelectelApi::getTokenAndUrl();
|
||
|
||
$token = $Selectel[0];
|
||
$storageUrl = $Selectel[1];
|
||
|
||
if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/photos")) {
|
||
mkdir($_SERVER['DOCUMENT_ROOT'] . "/photos");
|
||
}
|
||
|
||
if(!empty($folder)){
|
||
if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/photos".$folder)) {
|
||
mkdir($_SERVER['DOCUMENT_ROOT'] . "/photos".$folder);
|
||
}
|
||
}
|
||
foreach ($photos as $index => $filePos) {
|
||
|
||
$originalName = $filePos;
|
||
/* $strArray = explode(".", $originalName);
|
||
$ext = end($strArray);
|
||
if ($ext == "pjpeg") {
|
||
$ext = "jpeg";
|
||
}*/
|
||
if(empty($ext)){
|
||
$ext = "jpeg";
|
||
}
|
||
|
||
$ext = mb_strtolower($ext);
|
||
|
||
$name = md5($originalName . time()) . "." . $ext;
|
||
|
||
$one = mb_substr($name, 0, 1);
|
||
|
||
if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/photos$folder/$one")) {
|
||
mkdir($_SERVER['DOCUMENT_ROOT'] . "/photos$folder/$one");
|
||
}
|
||
$two = mb_substr($name, 1, 1);
|
||
if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/photos$folder/$one/$two")) {
|
||
mkdir($_SERVER['DOCUMENT_ROOT'] . "/photos$folder/$one/$two");
|
||
}
|
||
$three = mb_substr($name, 3, 1);
|
||
if (!is_dir($_SERVER['DOCUMENT_ROOT'] . "/photos$folder/$one/$two/$three")) {
|
||
mkdir($_SERVER['DOCUMENT_ROOT'] . "/photos$folder/$one/$two/$three");
|
||
}
|
||
$new_path = "$one/$two/$three/$name";
|
||
|
||
$photo = "/photos".$folder."/" . $new_path;
|
||
|
||
$oldPath = $originalName;
|
||
|
||
try {
|
||
copy($oldPath, $_SERVER['DOCUMENT_ROOT'] . $photo);
|
||
|
||
$oldPathList[] = $oldPath;
|
||
|
||
|
||
|
||
resize($_SERVER['DOCUMENT_ROOT'] . $photo, null, null, null, null, 100, (isset($editor['rotation']) ? $editor['rotation'] : null));
|
||
|
||
$image = new Imagick();
|
||
|
||
$image->readImage($_SERVER['DOCUMENT_ROOT'] . $photo);
|
||
|
||
/* $resolution = 1024;
|
||
|
||
if ( $agency_id == 10919 || $agency_id == 8826 || $agency_id == 12482 || $agency_id == 11916) {
|
||
$resolution = 1920;
|
||
}
|
||
|
||
if ($image->getImageWidth() > $resolution) {
|
||
$image->scaleImage($resolution, $resolution, true);
|
||
}*/
|
||
|
||
|
||
|
||
$image->writeImage();
|
||
|
||
//загрузка в Selectel
|
||
$fp = $_SERVER['DOCUMENT_ROOT'] . "/photos".$folder."/" . $new_path;
|
||
|
||
$SelectelApi=new SelectelApi();
|
||
|
||
$r = $SelectelApi->uploadFile($storageUrl, $token, $fp, $folder.'/'.$new_path, 'image/'.$ext);
|
||
//если выложили в Selectel
|
||
|
||
if ($r) {
|
||
//заменяем путь на новый
|
||
$new_path = "https://data.joywork.ru".$folder . "/" . $new_path;
|
||
//удаляем файл с локального сервера
|
||
unlink($fp);
|
||
}
|
||
|
||
if ($index >= 0) {
|
||
$newPhotos[$index] = $new_path;
|
||
} else {
|
||
$newPhotos[] = $new_path;
|
||
}
|
||
} catch (Exception $e) {
|
||
$err = "Проблема загрузки фотографии " . $originalName . ", возможно, фото повреждено или его формат не соответствует расширению";
|
||
}
|
||
//}
|
||
|
||
}
|
||
if(isset($err)){
|
||
$result['error'] = $err;
|
||
}
|
||
if(isset($newPhotos)){
|
||
$result = $newPhotos;
|
||
}
|
||
return $result;
|
||
}
|
||
|
||
/**
|
||
*
|
||
* *
|
||
*/
|
||
public function save_object_photo($agency_id, $object_id, $photos) {
|
||
//вставляем фото
|
||
$photos_obj = $this->save_photo($photos,$agency_id);
|
||
if(!empty($photos_obj)){
|
||
foreach($photos_obj as $num => $photo_obj) {
|
||
$sqlSelectPhoto = "select oop.id, oop.object_photo_id from objects_object_photo oop where oop.object_id = {$object_id} and sort_order = {$num}";
|
||
$rezSelectPhoto = $this->db->query($sqlSelectPhoto);
|
||
|
||
|
||
if ($this->db->num_rows($rezSelectPhoto) > 0) {
|
||
|
||
$ph = $this->db->fetch_assoc($rezSelectPhoto);
|
||
|
||
$sqlUpdPhoto = "UPDATE object_photo SET photo = '{$photo_obj}' WHERE id = {$ph['object_photo_id']}";
|
||
$this->db->query($sqlUpdPhoto);
|
||
} else {
|
||
$sqlInsPhoto = "INSERT INTO object_photo(photo) VALUES('{$photo_obj}')";
|
||
$this->db->query($sqlInsPhoto);
|
||
|
||
$photoId = $this->db->insert_id();
|
||
$sqlInsPhotoLink = "INSERT INTO objects_object_photo(object_id, object_photo_id, sort_order) VALUES('{$photo_obj}', {$photoId}, {$num})";
|
||
$this->db->query($sqlInsPhotoLink);
|
||
}
|
||
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
*
|
||
*/
|
||
public function get_photo_antiznak($obj_ads_id, $photos_count, $num_query){
|
||
$result = new stdClass();
|
||
if($num_query <= $photos_count){
|
||
$pr = ceil(($num_query/$photos_count) * 100);
|
||
$result->status = 'processed '.$pr.'%';
|
||
} else {
|
||
$antiznak_id = 0;
|
||
$sql = "SELECT * FROM antiznak_object WHERE object_id = {$obj_ads_id}";
|
||
$q = $this->db->query($sql);
|
||
$r = $this->db->fetch_assoc($q);
|
||
if(isset($r['id'])){
|
||
$antiznak_id = $r['id'];
|
||
}
|
||
if($antiznak_id == 0){
|
||
$result->status = 'error';
|
||
} else {
|
||
$sql_photo = "SELECT * FROM antiznak_object_photos WHERE antiznak_id = {$antiznak_id}";
|
||
$q_photo = $this->db->query($sql_photo);
|
||
if($this->db->num_rows($q_photo)==0) {
|
||
$result->status = 'error';
|
||
} else {
|
||
$photos = array();
|
||
$num = 1;
|
||
while($r_photos = $this->db->fetch_assoc($q_photo)){
|
||
$photos[$num] = $r_photos['photo'];
|
||
$num++;
|
||
}
|
||
if(!empty($photos)){
|
||
$result->status = 'done';
|
||
$result->photos = $photos;
|
||
} else {
|
||
$result->status = 'error';
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return $result;
|
||
}
|
||
|
||
|
||
/**
|
||
*
|
||
*/
|
||
public function send_api($url, $user_id, $agency_id, $object_id, $obj_ads_id, $photos_count, $num_query) {
|
||
|
||
$antiznak_obj_id = 0;
|
||
$sql = "SELECT id FROM antiznak_object_result WHERE object_id={$object_id} AND user_id={$user_id}";
|
||
$q=$this->db->query($sql);
|
||
if($this->db->num_rows($q) > 0){
|
||
$antiznak_obj_id = $this->db->fetch_assoc($q)['id'];
|
||
|
||
} else {
|
||
$sql_in = "INSERT INTO antiznak_object_result (object_id, user_id, agency_id, status) " .
|
||
"VALUES ({$object_id}, {$user_id}, {$agency_id}, 'create')";
|
||
$this->db->query($sql_in);
|
||
$antiznak_obj_id = $this->db->insert_id();
|
||
}
|
||
if($url == 'is_photo_this'){
|
||
$result = $this->get_photo_antiznak($obj_ads_id, $photos_count, $num_query);
|
||
} else {
|
||
$url_place = '';
|
||
if(!empty($url)){
|
||
$url_place = urlencode($url);
|
||
$url_api = $this->base_url.'?k='.$this->api_key.'&u='.$url_place;
|
||
$str = file_get_contents($url_api);
|
||
/* $str = '{
|
||
"status": "done",
|
||
"ID": "283197661",
|
||
"api_id": "344776",
|
||
"title": "2-комн. квартира, 45,2 м²",
|
||
"address": "Московская область, Балашиха, ул. Чистопольская, 24",
|
||
"parameters": {
|
||
"Общая площадь": "45.2 м²",
|
||
"Площадь кухни": "15 м²",
|
||
"Этаж": "2 из 22",
|
||
"Год постройки": "2018"
|
||
},
|
||
"description": "Продам 2х комнатную квартиру, с/у раздельный с мебелью техникой и евро ремонтом , в монолитном доме на втором этаже , жк находиться в окружении леса ,все огорожено забором ,рядом протекает речка детские и спортивные площадки, подземный паркинг.",
|
||
"price": "7300000",
|
||
"photos": {
|
||
"1": "https://photu.ru/img_cache_WGQN_5fb18d36c17a58ad90b12c78141ebb53/w/",
|
||
"2": "https://photu.ru/img_cache_WGQN_14e17e544200f13eb955b6151d106ea4/f/",
|
||
"3": "https://photu.ru/img_cache_WGQN_b358c4b7f7881620586179f049d15f82/m/",
|
||
"4": "https://photu.ru/img_cache_WGQN_576ab3d1f191d115b4cca7268c89650a/S/",
|
||
"5": "https://photu.ru/img_cache_WGQN_215c98fe0dafa9fdf4ad931e12e51adb/V/",
|
||
"6": "https://photu.ru/img_cache_WGQN_0b60b98f02262995b1dfc8066830c9b2/NN/",
|
||
"7": "https://photu.ru/img_cache_WGQN_5b618850c1d17afd78cd29b09d917368/QQ/",
|
||
"8": "https://photu.ru/img_cache_WGQN_ec52176c00284d8f3707c1186cfc91e8/bb/",
|
||
"9": "https://photu.ru/img_cache_WGQN_5db30de2c24218d59613c29419230981/yy/",
|
||
"10": "https://photu.ru/img_cache_WGQN_4d4860be16520d133e9b58b9d047f079/1q/",
|
||
"11": "https://photu.ru/img_cache_WGQN_2c295160f025396a9bc4a8c0361862e5/e1/",
|
||
"12": "https://photu.ru/img_cache_WGQN_ee433f0a9108a7658c06cb90685e03a1/r2/",
|
||
"13": "https://photu.ru/img_cache_WGQN_7aa604d398b928fdfb137541ee539e02/t3/",
|
||
"14": "https://photu.ru/img_cache_WGQN_cdde672e7909a675810f36ed4d474926/u4/",
|
||
"15": "https://photu.ru/img_cache_WGQN_a93f571689b317fb4bb975a7d96190b8/i5/",
|
||
"16": "https://photu.ru/img_cache_WGQN_426772ac63590eea345b9f2ce7cc60b0/oN/",
|
||
"17": "https://photu.ru/img_cache_WGQN_3f8834720a30ddc87b6d43251ab46001/pQ/",
|
||
"18": "https://photu.ru/img_cache_WGQN_f46d4096b691cbd61ecebe4002b939c7/ab/",
|
||
"19": "https://photu.ru/img_cache_WGQN_808f384391f6c53729a65cb52614ec94/sy/"
|
||
},
|
||
"balance": "6"
|
||
}';*/
|
||
$result = json_decode($str);
|
||
|
||
}
|
||
}
|
||
if($result->status == 'done'){
|
||
if(isset($result->balance) && ($result->balance == 10 || $result->balance == 0)){
|
||
//уведомление Станиславу в телеграм
|
||
$noticeText = "В системе АнтиЗнак осталось {$result->balance} объявлений";
|
||
$sql = "INSERT INTO discharge_user_notice(user_id, text, sended, created_at) VALUES(4, '$noticeText', 0, NOW())";
|
||
$this->db->query($sql);
|
||
}
|
||
//Списание баланса попыток
|
||
$sql_user = "SELECT * FROM users WHERE id in ($user_id, $agency_id)";
|
||
$q_user = $this->db->query($sql_user);
|
||
while($r_user = $this->db->fetch_assoc($q_user)){
|
||
if($r_user['antiznak_request_count'] > 0){
|
||
$new_antiznak_count = $r_user['antiznak_request_count'] - 1;
|
||
$sql_new_count = "UPDATE users SET antiznak_request_count = {$new_antiznak_count} WHERE id={$r_user['id']}";
|
||
$this->db->query($sql_new_count);
|
||
break;
|
||
}
|
||
}
|
||
$result->status ='save';
|
||
if($url != 'is_photo_this'){
|
||
$antiznak_id = 0;
|
||
if($obj_ads_id > 0){
|
||
$sql_antiznak = "SELECT * FROM antiznak_object WHERE object_id = {$obj_ads_id}";
|
||
$q_antiznak = $this->db->query($sql_antiznak);
|
||
if($this->db->num_rows($q_antiznak) == 0){
|
||
$sql_antiznak_in = "INSERT INTO antiznak_object (object_id) VALUES ({$obj_ads_id})";
|
||
$this->db->query($sql_antiznak_in);
|
||
$antiznak_id = $this->db->insert_id();
|
||
} else {
|
||
$r_antiznak = $this->db->fetch_assoc($q_antiznak);
|
||
$antiznak_id = (int)$r_antiznak['id'];
|
||
}
|
||
}
|
||
|
||
if($antiznak_id > 0){
|
||
$photos_antyznak = $this->save_photo($result->photos, $agency_id, '/antyznak');
|
||
if(!empty($photos_antyznak)){
|
||
$this->db->query("DELETE from antiznak_object_photos WHERE antiznak_id = {$antiznak_id}");
|
||
$sql_photos_antiznak = "INSERT INTO antiznak_object_photos (antiznak_id, photo) VALUES ";
|
||
$num = 0;
|
||
foreach($photos_antyznak as $photo_antiznak){
|
||
|
||
if($num > 0) $sql_photos_antiznak .= ", ";
|
||
$sql_photos_antiznak .= "({$antiznak_id}, '{$photo_antiznak}')";
|
||
$num++;
|
||
}
|
||
$this->db->query($sql_photos_antiznak);
|
||
}
|
||
}
|
||
}
|
||
|
||
//Вставка фото для объекта
|
||
$this->save_object_photo($agency_id, $object_id, $result->photos);
|
||
}
|
||
|
||
|
||
if($antiznak_obj_id > 0){
|
||
if(isset($result->status)){
|
||
$status = $result->status;
|
||
} else if( isset($result['status'] )){
|
||
$status = $result['status'];
|
||
}
|
||
|
||
$this->db->query("UPDATE antiznak_object_result SET status='{$status}' WHERE id={$antiznak_obj_id}");
|
||
}
|
||
|
||
|
||
|
||
return $result;
|
||
}
|
||
|
||
} |