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 '

Имеются неоплаченные заказы. Ожидайте, пока с вами свяжется наш менеджер.

'; } 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 '

Заявка на пакет успешно отправлена. Ожидайте, пока с вами свяжется наш менеджер.

'; } } 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; } }