2847 lines
92 KiB
PHP
2847 lines
92 KiB
PHP
|
|
<?php
|
|||
|
|
|
|||
|
|
namespace App\v2\Controller;
|
|||
|
|
|
|||
|
|
use Complex\Exception;
|
|||
|
|
|
|||
|
|
class AdvertsController extends ApiController
|
|||
|
|
{
|
|||
|
|
public function getPublishedPackages($app, $get, $post) {
|
|||
|
|
|
|||
|
|
$error = false;
|
|||
|
|
$errors = [];
|
|||
|
|
$packages = [];
|
|||
|
|
|
|||
|
|
$object_id = null;
|
|||
|
|
if (isset($get['object_id']))
|
|||
|
|
$object_id = intval($get['object_id']);
|
|||
|
|
|
|||
|
|
if (($user_id = $_SESSION['id']) && !is_null($object_id)) {
|
|||
|
|
|
|||
|
|
// Открываем соединение с БД
|
|||
|
|
$mdb = $app->container->get('mysql');
|
|||
|
|
|
|||
|
|
$sql = "SELECT published.days AS days, published.publish_date AS publish_date, packs.name, published.advertising_package_id AS package
|
|||
|
|
FROM advertising_package_object_publish published
|
|||
|
|
JOIN advertising_package packs ON packs.id=published.advertising_package_id
|
|||
|
|
WHERE published.active=1 AND published.object_id=$object_id";
|
|||
|
|
|
|||
|
|
if ($query = mysql_query($sql)) {
|
|||
|
|
if (mysql_num_rows($query) > 0) {
|
|||
|
|
while ($row = mysql_fetch_assoc($query)) {
|
|||
|
|
$left_days = ceil(((strtotime($row['publish_date']) + $row['days'] * 86400) - time()) / 86400);
|
|||
|
|
$status_text = declOfNum($left_days, array('остался %d день', 'осталось %d дня', 'осталось %d дней'));
|
|||
|
|
$packages[] = [
|
|||
|
|
'name' => $row['package'],
|
|||
|
|
'package_id' => $row['advertising_package_id'],
|
|||
|
|
'left_days' => (!empty($left_days)) ? (int)$left_days : false,
|
|||
|
|
'status_text' => (!empty($status_text)) ? $status_text : false,
|
|||
|
|
'is_error' => (!empty($row['error_text'])) ? true : false,
|
|||
|
|
'error_text' => (!empty($row['error_text'])) ? $row['error_text'] : null,
|
|||
|
|
'is_active' => (!empty($row['zipal_active'])) ? true : false,
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$error = true;
|
|||
|
|
$sqls[] = $sql;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$app->response->header('Content-Type', 'application/json');
|
|||
|
|
$app->response->setStatus(200);
|
|||
|
|
$app->response->setBody(json_encode([
|
|||
|
|
'success' => !$error,
|
|||
|
|
'user_id' => (int)$user_id,
|
|||
|
|
'object_id' => $object_id,
|
|||
|
|
'packages' => count($packages) ? $packages : false
|
|||
|
|
], JSON_UNESCAPED_UNICODE));
|
|||
|
|
$app->stop();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$app->response->header('Content-Type', 'application/json');
|
|||
|
|
$app->response->setStatus(200);
|
|||
|
|
$app->response->setBody(json_encode([
|
|||
|
|
'success' => false,
|
|||
|
|
'user_id' => (int)$_SESSION['id'],
|
|||
|
|
'errors' => $errors,
|
|||
|
|
], JSON_UNESCAPED_UNICODE));
|
|||
|
|
$app->stop();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function setObjectState($app, $get, $post) {
|
|||
|
|
|
|||
|
|
$sqls = [];
|
|||
|
|
$errors = [];
|
|||
|
|
|
|||
|
|
$sql = null;
|
|||
|
|
$sql_sph = null;
|
|||
|
|
$sql2 = null;
|
|||
|
|
|
|||
|
|
$body = $app->request->getBody();
|
|||
|
|
$data = json_decode(stripcslashes($body), true);
|
|||
|
|
|
|||
|
|
if (($user_id = $_SESSION['id']) && isset($data['object_id']) && isset($data['service']) && isset($data['current'])) {
|
|||
|
|
|
|||
|
|
// Открываем соединение с БД
|
|||
|
|
$mdb = $app->container->get('mysql');
|
|||
|
|
|
|||
|
|
$object_id = null;
|
|||
|
|
if (isset($data['object_id']))
|
|||
|
|
$object_id = $data['object_id'];
|
|||
|
|
|
|||
|
|
$service = null;
|
|||
|
|
if (isset($data['service']))
|
|||
|
|
$service = $data['service'];
|
|||
|
|
|
|||
|
|
$price = null;
|
|||
|
|
if (isset($data['price']))
|
|||
|
|
$price = (int)$data['price'];
|
|||
|
|
|
|||
|
|
$days = null;
|
|||
|
|
if (isset($data['days']))
|
|||
|
|
$days = (int)$data['days'];
|
|||
|
|
|
|||
|
|
$publish = null;
|
|||
|
|
if (isset($data['publish']))
|
|||
|
|
$publish = $data['publish'];
|
|||
|
|
|
|||
|
|
$is_moderation = false;
|
|||
|
|
if (isset($data['is_moderation']))
|
|||
|
|
$is_moderation = (bool)$data['is_moderation'];
|
|||
|
|
|
|||
|
|
$unpublish = null;
|
|||
|
|
if (isset($data['unpublish']))
|
|||
|
|
$unpublish = $data['unpublish'];
|
|||
|
|
|
|||
|
|
$user = new \User;
|
|||
|
|
$user->get($user_id);
|
|||
|
|
$user->checkPermissions($user_id, false);
|
|||
|
|
$agency_id = $user->agencyId;
|
|||
|
|
$agency_users_ids = \User::getAllAgencyUsers($agency_id);
|
|||
|
|
|
|||
|
|
// Предмодерация рекламы по объектам
|
|||
|
|
$sql = "SELECT * FROM `advert_moderation_agency` WHERE `agency_id` = {$agency_id}";
|
|||
|
|
|
|||
|
|
$adverts_moderator = false; // Рекламый модератор (руковод.)
|
|||
|
|
if ($query = mysql_query($sql)) {
|
|||
|
|
if (mysql_num_rows($query) > 0) {
|
|||
|
|
$adverts_moderator = true;
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$new_state = !boolval($data['current']); // Ивертируем текущее состояние (статус) публикации
|
|||
|
|
|
|||
|
|
if (is_null($publish) && is_null($unpublish)) { // Стандартные способы размещения
|
|||
|
|
|
|||
|
|
// Открываем соединение с БД и Сфинксом
|
|||
|
|
$pdo = $app->container->get('pdo');
|
|||
|
|
$mypdo = $app->container->get('mypdo');
|
|||
|
|
$db_sphinx = $app->container->get('sphinx2');
|
|||
|
|
|
|||
|
|
$set = [];
|
|||
|
|
$destination = null;
|
|||
|
|
$moderation_inst = new \ModerationAdvert($mypdo);
|
|||
|
|
|
|||
|
|
switch ($service) {
|
|||
|
|
case 'global':
|
|||
|
|
if ($new_state) {
|
|||
|
|
$set['use_in_advert'] = "use_in_advert = 1";
|
|||
|
|
} else {
|
|||
|
|
$set['use_in_advert'] = "use_in_advert = 0";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case 'yandex':
|
|||
|
|
|
|||
|
|
if ($new_state)
|
|||
|
|
$set['add_to_bn_feed'] = "add_to_bn_feed = 1";
|
|||
|
|
else
|
|||
|
|
$set['add_to_bn_feed'] = "add_to_bn_feed = 0";
|
|||
|
|
|
|||
|
|
$destination = "YANDEX_JW_FEED";
|
|||
|
|
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case 'domclick':
|
|||
|
|
|
|||
|
|
if ($new_state)
|
|||
|
|
$set['add_to_domclick_feed'] = "add_to_domclick_feed = 1";
|
|||
|
|
else
|
|||
|
|
$set['add_to_domclick_feed'] = "add_to_domclick_feed = 0";
|
|||
|
|
|
|||
|
|
$destination = "DOMCLICK_JW_FEED";
|
|||
|
|
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case 'avito':
|
|||
|
|
|
|||
|
|
if ($new_state)
|
|||
|
|
$set['add_to_avito_feed'] = "add_to_avito_feed = 1";
|
|||
|
|
else
|
|||
|
|
$set['add_to_avito_feed'] = "add_to_avito_feed = 0";
|
|||
|
|
|
|||
|
|
$destination = "AVITO_JW_FEED";
|
|||
|
|
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case 'emls':
|
|||
|
|
case 'jcat':
|
|||
|
|
|
|||
|
|
if ($new_state)
|
|||
|
|
$set['add_to_emls_feed'] = "add_to_emls_feed = 1";
|
|||
|
|
else
|
|||
|
|
$set['add_to_emls_feed'] = "add_to_emls_feed = 0";
|
|||
|
|
|
|||
|
|
$destination = "EMLS_JW_FEED";
|
|||
|
|
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case 'cian':
|
|||
|
|
|
|||
|
|
if ($new_state)
|
|||
|
|
$set['add_to_cian_feed'] = "add_to_cian_feed = 1";
|
|||
|
|
else
|
|||
|
|
$set['add_to_cian_feed'] = "add_to_cian_feed = 0";
|
|||
|
|
|
|||
|
|
$destination = "CIAN_JW_FEED";
|
|||
|
|
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case 'free':
|
|||
|
|
if ($new_state) {
|
|||
|
|
$set['add_to_yandex_feed'] = "add_to_yandex_feed = 1";
|
|||
|
|
} else {
|
|||
|
|
$set['add_to_yandex_feed'] = "add_to_yandex_feed = 0";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$destination = "FREE_JW_FEED";
|
|||
|
|
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case 'zipal':
|
|||
|
|
if ($new_state) {
|
|||
|
|
$set['add_to_zipal'] = "add_to_zipal = 1";
|
|||
|
|
} else {
|
|||
|
|
$set['add_to_zipal'] = "add_to_zipal = 0";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$advertBudgets = new \AdvertBudgets();
|
|||
|
|
|
|||
|
|
if ($service === 'global' && !$is_moderation) {
|
|||
|
|
if (!$new_state) {
|
|||
|
|
$set['add_to_bn_feed'] = "add_to_bn_feed = 0";
|
|||
|
|
$set['add_to_domclick_feed'] = "add_to_domclick_feed = 0";
|
|||
|
|
$set['add_to_avito_feed'] = "add_to_avito_feed = 0";
|
|||
|
|
$set['add_to_emls_feed'] = "add_to_emls_feed = 0";
|
|||
|
|
$set['add_to_cian_feed'] = "add_to_cian_feed = 0";
|
|||
|
|
$set['add_to_zipal'] = "add_to_zipal = 0";
|
|||
|
|
$set['add_to_yandex_feed'] = "add_to_yandex_feed = 0";
|
|||
|
|
|
|||
|
|
$results = $advertBudgets->updateObjectCost($object_id, 1);
|
|||
|
|
if (!$results['success']) {
|
|||
|
|
$error = true;
|
|||
|
|
$errors = array_merge($errors, $results['errors']);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$results = $advertBudgets->updateObjectCost($object_id, 2);
|
|||
|
|
if (!$results['success']) {
|
|||
|
|
$error = true;
|
|||
|
|
$errors = array_merge($errors, $results['errors']);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$results = $advertBudgets->updateObjectCost($object_id, 3);
|
|||
|
|
if (!$results['success']) {
|
|||
|
|
$error = true;
|
|||
|
|
$errors = array_merge($errors, $results['errors']);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$results = $advertBudgets->updateObjectCost($object_id, 4);
|
|||
|
|
if (!$results['success']) {
|
|||
|
|
$error = true;
|
|||
|
|
$errors = array_merge($errors, $results['errors']);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$results = $advertBudgets->updateObjectCost($object_id, 5);
|
|||
|
|
if (!$results['success']) {
|
|||
|
|
$error = true;
|
|||
|
|
$errors = array_merge($errors, $results['errors']);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (count($set) > 0) {
|
|||
|
|
foreach ($set as $adv_field => $adv_data) {
|
|||
|
|
if (in_array($adv_field, ['add_to_bn_feed', 'add_to_domclick_feed', 'add_to_avito_feed', 'add_to_emls_feed', 'add_to_cian_feed', 'add_to_zipal', 'add_to_yandex_feed'])) {
|
|||
|
|
$moderation_inst->checkAndClear($object_id, $adv_field);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Установка уведомлений в ТГ
|
|||
|
|
$telegram = new \Telegram(true);
|
|||
|
|
|
|||
|
|
if ($new_state)
|
|||
|
|
$telegram->object_ad($object_id);
|
|||
|
|
else
|
|||
|
|
$telegram->object_ad($object_id, 0);
|
|||
|
|
|
|||
|
|
|
|||
|
|
} else {
|
|||
|
|
|
|||
|
|
$error = false;
|
|||
|
|
$no_insert = false;
|
|||
|
|
$service_id = 0;
|
|||
|
|
if (!is_null($destination)) {
|
|||
|
|
$advertBudgets = new \AdvertBudgets();
|
|||
|
|
$service_id = $advertBudgets->getServiceIdByCommonId($destination);
|
|||
|
|
$results = $advertBudgets->getObjectAdvertPrices($object_id, $service_id, $days);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($new_state) {
|
|||
|
|
|
|||
|
|
// Стоимость размещения за весь период
|
|||
|
|
$price = 0;
|
|||
|
|
if (!is_null($results['price']))
|
|||
|
|
$price = $results['price'];
|
|||
|
|
|
|||
|
|
// Стоимость размещения за 1 период (30 дней)
|
|||
|
|
$price_period = 0;
|
|||
|
|
if (!is_null($results['price_period']))
|
|||
|
|
$price_period = $results['price_period'];
|
|||
|
|
|
|||
|
|
// Если агентство использует рекламный бюджет
|
|||
|
|
if (!is_null($results['budget'])) {
|
|||
|
|
|
|||
|
|
// Если пользователь руковод или у него безлимит
|
|||
|
|
$unlimited = false;
|
|||
|
|
if (isset($results['is_unlimited']))
|
|||
|
|
$unlimited = boolval($results['is_unlimited']);
|
|||
|
|
|
|||
|
|
$budget = $results['budget'];
|
|||
|
|
if ($price > $budget && !$unlimited) { // Если нехватка бюджета - выходим
|
|||
|
|
$error = true;
|
|||
|
|
$errors[] = "Размещение не возможно по причине не достаточного баланса рекламного бюджета.";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$set['use_in_advert'] = "use_in_advert = 1";
|
|||
|
|
|
|||
|
|
$days = 5000;
|
|||
|
|
if (isset($data['days']) && $data['days'])
|
|||
|
|
$days = $data['days'];
|
|||
|
|
|
|||
|
|
if ($days > 5000)
|
|||
|
|
$days = 5000;
|
|||
|
|
|
|||
|
|
$id_add_user = null;
|
|||
|
|
$sql_obj = "SELECT id, nazv, id_add_user from objects WHERE id = $object_id";
|
|||
|
|
|
|||
|
|
$sth = $pdo->prepare($sql_obj);
|
|||
|
|
if ($sth->execute()) {
|
|||
|
|
if ($object = $sth->fetch(\PDO::FETCH_ASSOC)) {
|
|||
|
|
$id_add_user = $object['id_add_user'];
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$error = true;
|
|||
|
|
$errors[] = $sth->pdo->errorInfo();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!$is_moderation) {
|
|||
|
|
|
|||
|
|
// Обновляем в статистике старую запись объекта из модерации
|
|||
|
|
/*$sqlCheck = "SELECT object_publish_statistic.id AS stat_id
|
|||
|
|
FROM object_publish_statistic
|
|||
|
|
WHERE object_id = '$object_id' AND
|
|||
|
|
destination = '$destination' AND
|
|||
|
|
publish_user_id = (
|
|||
|
|
SELECT moderation.agent_id
|
|||
|
|
FROM objects_moderation_advert AS moderation
|
|||
|
|
LEFT JOIN objects_moderation_advert_user_work AS user_work ON user_work.moderation_id = moderation.id
|
|||
|
|
WHERE moderation.object_id = '$object_id' AND
|
|||
|
|
DATE(moderation.created_at) >= DATE(object_publish_statistic.created_at) AND
|
|||
|
|
moderation.send_moderation = 0
|
|||
|
|
LIMIT 1
|
|||
|
|
)";
|
|||
|
|
|
|||
|
|
if ($sqlCheckRez = mysql_query($sqlCheck)) {
|
|||
|
|
if (mysql_num_rows($sqlCheckRez)) {
|
|||
|
|
|
|||
|
|
$stat_id = mysql_fetch_assoc($sqlCheckRez)['stat_id'];
|
|||
|
|
$sqlUpRc = "UPDATE object_publish_statistic
|
|||
|
|
SET publish_start_date = NOW(),
|
|||
|
|
publish_end_date = DATE_ADD(NOW(), INTERVAL $days DAY),
|
|||
|
|
days_count = '$days',
|
|||
|
|
price = '$price',
|
|||
|
|
publish_user_id = '$user_id',
|
|||
|
|
on_moderation = 0
|
|||
|
|
WHERE id = $stat_id";
|
|||
|
|
|
|||
|
|
mysql_query($sqlUpRc);
|
|||
|
|
$no_insert = true;
|
|||
|
|
}
|
|||
|
|
}*/
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!$no_insert && ($days && !is_null($id_add_user) && !is_null($destination))) {
|
|||
|
|
$sql2 = "INSERT INTO object_publish_statistic (
|
|||
|
|
object_id,
|
|||
|
|
user_owner_id,
|
|||
|
|
publish_user_id,
|
|||
|
|
created_at,
|
|||
|
|
publish_start_date,
|
|||
|
|
publish_end_date,
|
|||
|
|
days_count,
|
|||
|
|
destination,
|
|||
|
|
price,
|
|||
|
|
price_period,
|
|||
|
|
on_moderation
|
|||
|
|
) VALUES (
|
|||
|
|
'$object_id',
|
|||
|
|
'$id_add_user',
|
|||
|
|
'$user_id',
|
|||
|
|
NOW(),
|
|||
|
|
NOW(),
|
|||
|
|
DATE_ADD(NOW(), INTERVAL $days DAY),
|
|||
|
|
'$days',
|
|||
|
|
'$destination',
|
|||
|
|
'$price',
|
|||
|
|
'$price_period',
|
|||
|
|
'".($is_moderation ? 1 : 0)."'
|
|||
|
|
)";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
} else if (!is_null($destination) && $service_id) {
|
|||
|
|
$results = $advertBudgets->updateObjectCost($object_id, $service_id);
|
|||
|
|
if (!$results['success']) {
|
|||
|
|
$error = true;
|
|||
|
|
$errors = array_merge($errors, $results['errors']);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!empty($sql2)) {
|
|||
|
|
$sth = $pdo->prepare($sql2);
|
|||
|
|
if (!$sth->execute()) {
|
|||
|
|
$error = true;
|
|||
|
|
$errors[] = $sth->pdo->errorInfo();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (count($set) > 0) {
|
|||
|
|
|
|||
|
|
if (!$is_moderation) {
|
|||
|
|
|
|||
|
|
$sql = "UPDATE objects
|
|||
|
|
SET " . implode(', ', $set) . ", is_main = 0
|
|||
|
|
WHERE id = $object_id";
|
|||
|
|
|
|||
|
|
$sql_sph = "UPDATE objects
|
|||
|
|
SET " . implode(', ', $set) . "
|
|||
|
|
WHERE id = $object_id";
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!$error) {
|
|||
|
|
if ($is_moderation) {
|
|||
|
|
foreach ($set as $adv_field => $adv_data) {
|
|||
|
|
if (in_array($adv_field, ['add_to_bn_feed', 'add_to_domclick_feed', 'add_to_avito_feed', 'add_to_emls_feed', 'add_to_cian_feed', 'add_to_zipal', 'add_to_yandex_feed'])) {
|
|||
|
|
$moderation_inst->addUpdate($user_id, $object_id, [
|
|||
|
|
'field' => $adv_field,
|
|||
|
|
'value' => 1
|
|||
|
|
]);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
} else if (!$is_moderation && $adverts_moderator && !$new_state) {
|
|||
|
|
foreach ($set as $adv_field => $adv_data) {
|
|||
|
|
if (in_array($adv_field, ['add_to_bn_feed', 'add_to_domclick_feed', 'add_to_avito_feed', 'add_to_emls_feed', 'add_to_cian_feed', 'add_to_zipal', 'add_to_yandex_feed'])) {
|
|||
|
|
$sql3 = "UPDATE `objects_moderation_advert` SET `$adv_field` = 0 WHERE `object_id` = {$object_id} AND `agent_id` IN (" . implode(',', $agency_users_ids) . ")";
|
|||
|
|
$sth = $pdo->prepare($sql3);
|
|||
|
|
if (!$sth->execute()) {
|
|||
|
|
$error = true;
|
|||
|
|
$errors[] = $sth->pdo->errorInfo();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!$error && !empty($sql)) {
|
|||
|
|
$sth = $pdo->prepare($sql);
|
|||
|
|
if (!$sth->execute()) {
|
|||
|
|
$error = true;
|
|||
|
|
$errors[] = $sth->pdo->errorInfo();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!$error && !empty($sql_sph)) {
|
|||
|
|
if (!$db_sphinx->query($sql_sph)) {
|
|||
|
|
$error = true;
|
|||
|
|
$errors[] = $db_sphinx->pdo->errorInfo();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($service === 'packages') { // Пакетное размещение
|
|||
|
|
|
|||
|
|
if (is_array($publish))
|
|||
|
|
$publish = array_unique($publish);
|
|||
|
|
else
|
|||
|
|
$publish = [];
|
|||
|
|
|
|||
|
|
if (is_array($unpublish))
|
|||
|
|
$unpublish = array_unique($unpublish);
|
|||
|
|
else
|
|||
|
|
$unpublish = [];
|
|||
|
|
|
|||
|
|
if (count($publish)) { // постановка в публикацию
|
|||
|
|
foreach ($publish as $data) {
|
|||
|
|
|
|||
|
|
if (is_null($data))
|
|||
|
|
continue;
|
|||
|
|
|
|||
|
|
$package_id = $data['package_id'];
|
|||
|
|
$days = $data['days_count'];
|
|||
|
|
$price = $data['zipal_price'];
|
|||
|
|
|
|||
|
|
$sqlPackData = "SELECT * FROM advertising_package WHERE id = $package_id";
|
|||
|
|
if ($query = mysql_query($sqlPackData)) {
|
|||
|
|
$package = mysql_fetch_assoc($query);
|
|||
|
|
|
|||
|
|
$sql = "SELECT count(id) FROM advertising_package_object_publish WHERE object_id = $object_id AND advertising_package_id = $package_id";
|
|||
|
|
|
|||
|
|
$count = 0;
|
|||
|
|
if ($rez = mysql_query($sql)) {
|
|||
|
|
$count = mysql_result($rez, 0);
|
|||
|
|
} else {
|
|||
|
|
$error = true;
|
|||
|
|
$sqls[] = $sql;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//если объект уже был, то обновляем, иначе создаем
|
|||
|
|
if ($count > 0) {
|
|||
|
|
$sql = "UPDATE advertising_package_object_publish SET unpublish_user_id = NULL, user_id = '$user_id', sended = 0, published = 0, unpublish = 0, active = 1, publish_date = NOW(), error_text = NULL, price = '$price', days = '$days' WHERE object_id = $object_id AND advertising_package_id = $package_id";
|
|||
|
|
|
|||
|
|
if (!mysql_query($sql)) {
|
|||
|
|
$error = true;
|
|||
|
|
$sqls[] = $sql;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$sql = "INSERT INTO advertising_package_object_publish (object_id, advertising_package_id, user_id, days, price, active, publish_date) VALUES ('$object_id', '$package_id', '$user_id', '$days', '$price', 1, NOW())";
|
|||
|
|
|
|||
|
|
if (!mysql_query($sql)) {
|
|||
|
|
$error = true;
|
|||
|
|
$sqls[] = $sql;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$logText = "Отправлен на публикацию через пакет $package[name] (ID = $package_id) на $days дней";
|
|||
|
|
|
|||
|
|
$sqlLog = "INSERT INTO object_publish_log(object_id, created_at, user_id, log_text) VALUES ('$object_id', NOW(), '$user_id', '$logText')";
|
|||
|
|
if (!mysql_query($sqlLog)) {
|
|||
|
|
$error = true;
|
|||
|
|
$sqls[] = $sqlLog;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$user = new \User;
|
|||
|
|
$user->get($user_id);
|
|||
|
|
|
|||
|
|
if (empty($user->zipal_balance)) {
|
|||
|
|
$newBalance = $user->agencyZipalBalance - $price;
|
|||
|
|
$sql = "UPDATE users SET zipal_balance='$newBalance' WHERE id=" . $user->agencyId;
|
|||
|
|
if (!mysql_query($sql)) {
|
|||
|
|
$error = true;
|
|||
|
|
$sqls[] = $sql;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$newBalance = $user->zipal_balance - $price;
|
|||
|
|
$sql = "UPDATE users SET zipal_balance='$newBalance' WHERE id=$user_id";
|
|||
|
|
if (!mysql_query($sql)) {
|
|||
|
|
$error = true;
|
|||
|
|
$sqls[] = $sql;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$checked = false;
|
|||
|
|
$published = zipalPackageCountText($object_id, $package_id);
|
|||
|
|
|
|||
|
|
if ($published['zipal_active'] == 1 && (int)$published['zipal_days'] > 0)
|
|||
|
|
$checked = true;
|
|||
|
|
|
|||
|
|
$is_error = (!empty($published['error_text'])) ? true : false;
|
|||
|
|
|
|||
|
|
$error_text = null;
|
|||
|
|
if ($is_error)
|
|||
|
|
$error_text = "Ошибка: " . $published['error_text'][0]['defaultMessage'];
|
|||
|
|
|
|||
|
|
$packages[$package_id] = [
|
|||
|
|
'left_days' => (!empty($published['zipal_day'])) ? (int)$published['zipal_day'] : false,
|
|||
|
|
'status_text' => (!empty($published['zipal_day_text'])) ? $published['zipal_day_text'] : false,
|
|||
|
|
'is_error' => $is_error,
|
|||
|
|
'error_text' => $error_text,
|
|||
|
|
'is_active' => (!empty($published['zipal_active'])) ? true : false,
|
|||
|
|
'is_active' => (!$is_error) ? $checked : false,
|
|||
|
|
];
|
|||
|
|
} else {
|
|||
|
|
$error = true;
|
|||
|
|
$sqls[] = $sqlPackData;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
} else if (count($unpublish)) { // снятие с публикации
|
|||
|
|
foreach ($unpublish as $data) {
|
|||
|
|
|
|||
|
|
if (is_null($data))
|
|||
|
|
continue;
|
|||
|
|
|
|||
|
|
$package_id = $data['package_id'];
|
|||
|
|
|
|||
|
|
$sqlPackData = "SELECT * FROM advertising_package WHERE id = $package_id";
|
|||
|
|
if ($query = mysql_query($sqlPackData)) {
|
|||
|
|
$package = mysql_fetch_assoc($query);
|
|||
|
|
|
|||
|
|
$count = 0;
|
|||
|
|
$sql = "SELECT count(id) FROM advertising_package_object_publish WHERE zipal_id IS NOT NULL AND object_id = $object_id AND advertising_package_id = $package_id";
|
|||
|
|
if ($query = mysql_query($sql)) {
|
|||
|
|
$count = mysql_result($query,0);
|
|||
|
|
} else {
|
|||
|
|
$error = true;
|
|||
|
|
$sqls[] = $sql;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//если объект уже был отправлен, то распубликовываем, иначе удаляем
|
|||
|
|
if ($count > 0) {
|
|||
|
|
$sql = "UPDATE advertising_package_object_publish SET sended = 1, published = 1, unpublish = 1, active = 0, unpublish_user_id = $user_id WHERE object_id = $object_id AND advertising_package_id = $package_id";
|
|||
|
|
if (!mysql_query($sql)) {
|
|||
|
|
$error = true;
|
|||
|
|
$sqls[] = $sql;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
} else {
|
|||
|
|
$sql = "DELETE FROM advertising_package_object_publish WHERE object_id = $object_id AND advertising_package_id = $package_id";
|
|||
|
|
if (!mysql_query($sql)) {
|
|||
|
|
$error = true;
|
|||
|
|
$sqls[] = $sql;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$logText = "Отправлен на отмену публикации через пакет $package[name] (ID = $package_id)";
|
|||
|
|
$sqlLog = "INSERT INTO object_publish_log(object_id, created_at, user_id, log_text) VALUES ('$object_id', NOW(), '$user_id', '$logText')";
|
|||
|
|
if (!mysql_query($sqlLog)) {
|
|||
|
|
$error = true;
|
|||
|
|
$sqls[] = $sqlLog;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$packages[$package_id] = [
|
|||
|
|
'status_text' => 'Снятие с публикации…',
|
|||
|
|
'is_active' => false
|
|||
|
|
];
|
|||
|
|
} else {
|
|||
|
|
$error = true;
|
|||
|
|
$sqls[] = $sqlPackData;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$error = true;
|
|||
|
|
$errors[] = 'Не выбран ни один пакет размещения.';
|
|||
|
|
}
|
|||
|
|
} else if ($service === 'zipal') { // Размещение с отчётами
|
|||
|
|
|
|||
|
|
if (!is_array($publish))
|
|||
|
|
$publish = [];
|
|||
|
|
|
|||
|
|
if ($new_state) {
|
|||
|
|
if (count($publish)) { // Постановка в публикацию
|
|||
|
|
|
|||
|
|
$user = new \User;
|
|||
|
|
$user->get($user_id);
|
|||
|
|
|
|||
|
|
$zipalBalance = $user->zipal_balance;
|
|||
|
|
if (empty($zipalBalance)) {
|
|||
|
|
$zipalBalance = $user->agencyZipalBalance;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$prices = self::getZipalPrices($app, $get, $post, true);
|
|||
|
|
|
|||
|
|
$destinations = [];
|
|||
|
|
foreach($publish as $data) {
|
|||
|
|
|
|||
|
|
if (is_null($data))
|
|||
|
|
continue;
|
|||
|
|
|
|||
|
|
$destination = trim($data[0]);
|
|||
|
|
$placements = (array)$data[1];
|
|||
|
|
if ($destination && !empty($placements)) {
|
|||
|
|
foreach($placements as $placement) {
|
|||
|
|
$destinations[] = [
|
|||
|
|
'destination' => strtoupper(trim($destination)),
|
|||
|
|
'feed' => (isset($prices[$destination][trim($placement)]['is_feed'])) ? "true" : "false",
|
|||
|
|
'placementType' => strtoupper(trim($placement)),
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (count($destinations) && $zipalBalance > $price) {
|
|||
|
|
|
|||
|
|
$sql = "SELECT count(id) FROM zipal_objects WHERE object_id = $object_id";
|
|||
|
|
|
|||
|
|
if ($query = mysql_query($sql)) {
|
|||
|
|
|
|||
|
|
// Постановка в публикацию
|
|||
|
|
$count = mysql_result($query,0);
|
|||
|
|
if ($count > 0) {
|
|||
|
|
$sql = "UPDATE zipal_objects SET unpublish_user_id = NULL, user_id = '$user_id', sended = 0, published = 0, unpublish = 0, error_text = NULL, price = '$price', destinations = '". json_encode($destinations) ."', days = '$days', add_to_zipal_at = NOW() WHERE object_id = $object_id";
|
|||
|
|
if (!mysql_query($sql)) {
|
|||
|
|
$error = true;
|
|||
|
|
$sqls[] = $sql;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
//var_export($sql) && die();
|
|||
|
|
} else {
|
|||
|
|
$sql = "INSERT into zipal_objects (object_id, user_id, destinations, days, price, add_to_zipal_at) VALUES ('$object_id', '$user_id', '". json_encode($destinations) ."', '$days', '$price', NOW())";
|
|||
|
|
if (!mysql_query($sql)) {
|
|||
|
|
$error = true;
|
|||
|
|
$sqls[] = $sql;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
//var_export($sql) && die();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Обновление статуса объекта В рекламе
|
|||
|
|
$sql = "UPDATE objects SET use_in_advert=1, add_to_zipal=1, is_main = 0 WHERE id=$object_id";
|
|||
|
|
if (!mysql_query($sql)) {
|
|||
|
|
$error = true;
|
|||
|
|
$sqls[] = $sql;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Запись лога
|
|||
|
|
$logText = "Отправлен на публикацию через кнопку С отчетами на $days дней";
|
|||
|
|
$sqlLog = "INSERT INTO object_publish_log(object_id, created_at, user_id, log_text) VALUES ('$object_id', NOW(), '$user_id', '$logText')";
|
|||
|
|
if (!mysql_query($sqlLog)) {
|
|||
|
|
$error = true;
|
|||
|
|
$sqls[] = $sqlLog;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
} else {
|
|||
|
|
$error = true;
|
|||
|
|
$sqls[] = $sql;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Списание с баланса
|
|||
|
|
if (empty($user->zipal_balance)) {
|
|||
|
|
$newBalance = $user->agencyZipalBalance - $price;
|
|||
|
|
$sql = "UPDATE users SET zipal_balance='$newBalance' WHERE id=" . $user->agencyId;
|
|||
|
|
if (!mysql_query($sql)) {
|
|||
|
|
$error = true;
|
|||
|
|
$sqls[] = $sql;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$newBalance = $user->zipal_balance - $price;
|
|||
|
|
$sql = "UPDATE users SET zipal_balance='$newBalance' WHERE id=$user_id";
|
|||
|
|
if (!mysql_query($sql)) {
|
|||
|
|
$error = true;
|
|||
|
|
$sqls[] = $sql;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$error = true;
|
|||
|
|
$errors[] = 'Не достаточно средств на балансе пользователя (агентства).';
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$error = true;
|
|||
|
|
$errors[] = 'Не выбрана ни одна плащадка размещения.';
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
|
|||
|
|
$sql = "SELECT count(id) FROM zipal_objects WHERE zipal_id is not null and object_id = $object_id";
|
|||
|
|
if ($query = mysql_query($sql)) {
|
|||
|
|
|
|||
|
|
$count = mysql_result($query,0);
|
|||
|
|
if ($count > 0) {
|
|||
|
|
$sql = "UPDATE zipal_objects SET sended = 1, published = 1, unpublish = 1, unpublish_user_id = $user_id WHERE object_id = $object_id";
|
|||
|
|
if (!mysql_query($sql)) {
|
|||
|
|
$error = true;
|
|||
|
|
$sqls[] = $sql;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$sql = "DELETE from zipal_objects WHERE object_id = $object_id";
|
|||
|
|
if (!mysql_query($sql)) {
|
|||
|
|
$error = true;
|
|||
|
|
$sqls[] = $sql;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$sql = "UPDATE objects
|
|||
|
|
SET use_in_advert = IF(
|
|||
|
|
add_to_bn_feed = 0 AND
|
|||
|
|
add_to_yandex_feed = 0 AND
|
|||
|
|
add_to_domclick_feed = 0 AND
|
|||
|
|
add_to_avito_feed = 0 AND
|
|||
|
|
add_to_emls_feed = 0 AND
|
|||
|
|
add_to_cian_feed = 0, 0, 1),
|
|||
|
|
add_to_zipal=0,
|
|||
|
|
is_main = 0
|
|||
|
|
WHERE id=$object_id";
|
|||
|
|
|
|||
|
|
if (!mysql_query($sql)) {
|
|||
|
|
$error = true;
|
|||
|
|
$sqls[] = $sql;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$logText = "Отправлен на отмену публикации через кнопку С отчетами";
|
|||
|
|
$sqlLog = "INSERT INTO object_publish_log(object_id, created_at, user_id, log_text) VALUES ('$object_id', NOW(), '$user_id', '$logText')";
|
|||
|
|
if (!mysql_query($sqlLog)) {
|
|||
|
|
$error = true;
|
|||
|
|
$sqls[] = $sql;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!$error) {
|
|||
|
|
|
|||
|
|
// Вебхук: смена статуса рекламы
|
|||
|
|
$service_to_button = [
|
|||
|
|
'yandex' => 'add_to_bn_feed',
|
|||
|
|
'domclick' => 'add_to_domclick_feed',
|
|||
|
|
'avito' => 'add_to_avito_feed',
|
|||
|
|
'emls' => 'add_to_emls_feed',
|
|||
|
|
'jcat' => 'add_to_emls_feed',
|
|||
|
|
'cian' => 'add_to_cian_feed',
|
|||
|
|
'free' => 'add_to_yandex_feed',
|
|||
|
|
];
|
|||
|
|
if (isset($service_to_button[$service])) {
|
|||
|
|
$advert_action = $new_state ? 'object_advertise' : 'object_unadvertise';
|
|||
|
|
$w_in = new \WebHookIn(null, $agency_id);
|
|||
|
|
$w_in->check_send([
|
|||
|
|
'action' => $advert_action,
|
|||
|
|
'object_id' => $object_id,
|
|||
|
|
'section' => 'object',
|
|||
|
|
'user_id' => $user_id,
|
|||
|
|
'agency_id' => $agency_id,
|
|||
|
|
'button' => $service_to_button[$service],
|
|||
|
|
]);
|
|||
|
|
} else if ($service === 'global' && !$new_state) {
|
|||
|
|
// Глобальное снятие с рекламы — со всех площадок
|
|||
|
|
$w_in = new \WebHookIn(null, $agency_id);
|
|||
|
|
$w_in->check_send([
|
|||
|
|
'action' => 'object_unadvertise',
|
|||
|
|
'object_id' => $object_id,
|
|||
|
|
'section' => 'object',
|
|||
|
|
'user_id' => $user_id,
|
|||
|
|
'agency_id' => $agency_id,
|
|||
|
|
'button' => 'all',
|
|||
|
|
]);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$app->response->header('Content-Type', 'application/json');
|
|||
|
|
$app->response->setStatus(200);
|
|||
|
|
$app->response->setBody(json_encode([
|
|||
|
|
'success' => true,
|
|||
|
|
'user_id' => (int)$user_id,
|
|||
|
|
'object_id' => $object_id,
|
|||
|
|
'service' => $service,
|
|||
|
|
'state' => $new_state,
|
|||
|
|
'packages' => $packages,
|
|||
|
|
/*'queries' => [
|
|||
|
|
'sql' => $sql,
|
|||
|
|
'sql_sph' => $sql_sph,
|
|||
|
|
'sql2' => $sql2
|
|||
|
|
]*/
|
|||
|
|
], JSON_UNESCAPED_UNICODE));
|
|||
|
|
$app->stop();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$app->response->header('Content-Type', 'application/json');
|
|||
|
|
$app->response->setStatus(200);
|
|||
|
|
$app->response->setBody(json_encode([
|
|||
|
|
'success' => false,
|
|||
|
|
'user_id' => (int)$user_id,
|
|||
|
|
'sqls' => $sqls,
|
|||
|
|
'errors' => $errors,
|
|||
|
|
/*'queries' => [
|
|||
|
|
'sql' => $sql,
|
|||
|
|
'sql_sph' => $sql_sph,
|
|||
|
|
'sql2' => $sql2
|
|||
|
|
]*/
|
|||
|
|
], JSON_UNESCAPED_UNICODE));
|
|||
|
|
$app->stop();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function getZipalPackages($app, $get, $post, $need_return = false) {
|
|||
|
|
|
|||
|
|
/*error_reporting(E_ERROR | E_WARNING | E_PARSE);
|
|||
|
|
ini_set('display_errors', 1);*/
|
|||
|
|
global $ZIPAL_TARGETS;
|
|||
|
|
global $ZIPAL_MULTIPLY;
|
|||
|
|
|
|||
|
|
$error = false;
|
|||
|
|
$errors = [];
|
|||
|
|
|
|||
|
|
$object_id = null;
|
|||
|
|
if (isset($get['object_id']))
|
|||
|
|
$object_id = intval($get['object_id']);
|
|||
|
|
|
|||
|
|
$days_num = 0;
|
|||
|
|
if (isset($get['days_num']))
|
|||
|
|
$days_num = intval($get['days_num']);
|
|||
|
|
|
|||
|
|
$package_id = null;
|
|||
|
|
if (isset($get['package_id']))
|
|||
|
|
$package_id = $get['package_id'];
|
|||
|
|
|
|||
|
|
if (($user_id = $_SESSION['id']) && !is_null($object_id)) {
|
|||
|
|
|
|||
|
|
// Открываем соединение с БД
|
|||
|
|
$mdb = $app->container->get('mysql');
|
|||
|
|
|
|||
|
|
$package = [];
|
|||
|
|
$packages = [];
|
|||
|
|
$destinations = [];
|
|||
|
|
|
|||
|
|
$obj = null;
|
|||
|
|
$sql = "SELECT objects.* FROM objects WHERE objects.id = $object_id";
|
|||
|
|
if ($query = mysql_query($sql)) {
|
|||
|
|
$obj = mysql_fetch_assoc($query);
|
|||
|
|
} else {
|
|||
|
|
$error = true;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!is_null($package_id)) {
|
|||
|
|
|
|||
|
|
$curUser = new \User();
|
|||
|
|
$curUser->get($user_id);
|
|||
|
|
|
|||
|
|
$request = [];
|
|||
|
|
$login = $curUser->zipal_login;
|
|||
|
|
$password = $curUser->zipal_password;
|
|||
|
|
|
|||
|
|
if (empty($login) || empty($password)) {
|
|||
|
|
$login = $curUser->agencyZipalLogin;
|
|||
|
|
$password = $curUser->agencyZipalPassword;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$request['login'] = $login;
|
|||
|
|
$request['password'] = $password;
|
|||
|
|
$request['method'] = 'GetPrices';
|
|||
|
|
$request['request'] = [];
|
|||
|
|
$request['request']['requestType'] = 'GetPricesByParamsRequestType';
|
|||
|
|
|
|||
|
|
if ($obj['id_rf_region']) {
|
|||
|
|
$sql = "SELECT code FROM rf_regions WHERE rf_regions.id = ".$obj['id_rf_region'];
|
|||
|
|
if ($query = mysql_query($sql)) {
|
|||
|
|
$request['request']['region'] = mysql_fetch_assoc($query)['code'];
|
|||
|
|
} else {
|
|||
|
|
$error = true;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$request['request']['region'] = 78;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$sql = "SELECT * FROM advertising_package WHERE id=$package_id";
|
|||
|
|
if ($query = mysql_query($sql)) {
|
|||
|
|
$package = mysql_fetch_assoc($query);
|
|||
|
|
if (!is_null($package)) {
|
|||
|
|
|
|||
|
|
$sql = "SELECT * FROM advertising_package_destinations WHERE deleted=0 AND advertising_package_id=$package_id";
|
|||
|
|
if ($query = mysql_query($sql)) {
|
|||
|
|
while ($row = mysql_fetch_assoc($query)) {
|
|||
|
|
array_push($destinations, $row);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$request['request']['days'] = $days_num;
|
|||
|
|
$request['request']['hasPhotos'] = $package['has_photo'] == 1 ? true : false;
|
|||
|
|
|
|||
|
|
$deal_type_id = $package['advertising_package_deal_type_id'];
|
|||
|
|
$object_type_id = $package['advertising_package_object_type_id'];
|
|||
|
|
$price_type_id = $package['advertising_package_price_type_id'];
|
|||
|
|
|
|||
|
|
$sql = "SELECT * FROM advertising_package_deal_type WHERE id=$deal_type_id";
|
|||
|
|
if ($query = mysql_query($sql)) {
|
|||
|
|
$deal_type = mysql_fetch_assoc($query);
|
|||
|
|
} else {
|
|||
|
|
$error = true;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$sql = "SELECT * FROM advertising_package_object_type WHERE id=$object_type_id";
|
|||
|
|
if ($query = mysql_query($sql)) {
|
|||
|
|
$object_type = mysql_fetch_assoc($query);
|
|||
|
|
} else {
|
|||
|
|
$error = true;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$priceType = null;
|
|||
|
|
if ($deal_type['code'] == 'RENT') {
|
|||
|
|
if (!$price_type_id || $price_type_id == -1) {
|
|||
|
|
$error = true;
|
|||
|
|
$errors[] = "Необходимо указать Тип цены для типа сделки Аренда";
|
|||
|
|
} else {
|
|||
|
|
$sql = "SELECT * FROM advertising_package_price_type WHERE id=$price_type_id";
|
|||
|
|
if ($query = mysql_query($sql)) {
|
|||
|
|
$priceType = mysql_fetch_assoc($query);
|
|||
|
|
} else {
|
|||
|
|
$error = true;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$request['request']['room'] = $object_type['is_room'] == 1 ? true : false;
|
|||
|
|
$request['request']['dealType'] = $deal_type['code'];
|
|||
|
|
|
|||
|
|
if ($priceType != null)
|
|||
|
|
$request['request']['priceType'] = $priceType['code'];
|
|||
|
|
|
|||
|
|
$request['request']['objectType'] = $object_type['code'];
|
|||
|
|
|
|||
|
|
$jsonResult = [];
|
|||
|
|
try {
|
|||
|
|
$user_agent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; HTC_Touch_Diamond2_T5353; Windows Phone 6.5)';
|
|||
|
|
$result = curl_request_zipal_json("https://zipal.ru/ws/json", $user_id, $user_agent, json_encode($request));
|
|||
|
|
$jsonResult = json_decode($result, true);
|
|||
|
|
} catch (\Exception $exception) {
|
|||
|
|
$error = true;
|
|||
|
|
$errors[] = $exception->getMessage();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($jsonResult['resultCode'] == "FAIL") {
|
|||
|
|
|
|||
|
|
$error = true;
|
|||
|
|
if ($res = strpos($jsonResult['result'], "at [Source:"))
|
|||
|
|
$errors[] = substr($jsonResult['result'], $res);
|
|||
|
|
else
|
|||
|
|
$errors[] = $jsonResult['result'];
|
|||
|
|
|
|||
|
|
} else if ($jsonResult['resultCode'] == "OK") {
|
|||
|
|
|
|||
|
|
$zipal_price = $jsonResult['result']['basePrice'] / 100;
|
|||
|
|
$non_zipal_price = 0;
|
|||
|
|
|
|||
|
|
$base_price = ($jsonResult['result']['basePrice'] / 100) * $ZIPAL_MULTIPLY;
|
|||
|
|
|
|||
|
|
foreach ($destinations as $dbDest) {
|
|||
|
|
|
|||
|
|
/*$targetName = $ZIPAL_TARGETS[$dbDest['destination']];
|
|||
|
|
if (!$targetName)
|
|||
|
|
$targetName = $dbDest['destination'];*/
|
|||
|
|
|
|||
|
|
$zipalDest = null;
|
|||
|
|
$zipalDestPrice = null;
|
|||
|
|
|
|||
|
|
foreach ($jsonResult['result']['destination'] as $dest) {
|
|||
|
|
if ($dbDest['destination'] === $dest['destination']) {
|
|||
|
|
$zipalDest = $dest;
|
|||
|
|
|
|||
|
|
foreach ($dest['price'] as $price) {
|
|||
|
|
if ($price['type'] === $dbDest['placement_type']) {
|
|||
|
|
$zipalDestPrice = $price;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($zipalDest != null && $zipalDestPrice != null) {
|
|||
|
|
|
|||
|
|
/*$priceTypeVal = $ZIPAL_PRICE_TYPES[$zipalDestPrice['type']];
|
|||
|
|
if (!$priceTypeVal)
|
|||
|
|
$priceTypeVal = $zipalDestPrice['type'];*/
|
|||
|
|
|
|||
|
|
$manPrice = 0;
|
|||
|
|
if ($dbDest['manual_price'] > 0) {
|
|||
|
|
if ($zipalDest['destination'] === 'AVITO') {
|
|||
|
|
$manPrice = $dbDest['manual_price'];
|
|||
|
|
} else {
|
|||
|
|
$manPrice = $dbDest['manual_price'] * $days_num;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($zipalDestPrice['price'] > 0)
|
|||
|
|
$zipal_price = $zipal_price + ($zipalDestPrice['price'] / 100);
|
|||
|
|
|
|||
|
|
if ($dbDest['manual_price'] > 0)
|
|||
|
|
$non_zipal_price = $non_zipal_price + $manPrice;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$price = $dbDest['manual_price'] > 0 ? $manPrice : $zipalDestPrice['price'] / 100;
|
|||
|
|
|
|||
|
|
/*if ($zipalDest['destination'] === 'AVITO' || $zipalDest['destination'] === 'YANDEX' || $zipalDest['destination'] === 'CIAN' || $zipalDest['destination'] === 'EMLS') {
|
|||
|
|
$non_zipal_price = $non_zipal_price + $price;
|
|||
|
|
} else {
|
|||
|
|
$zipal_price = $zipal_price + $price;
|
|||
|
|
}*/
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$total_price = ($package) ? (float)$package['price'] : ($jsonResult['result']['basePrice'] / 100) * $ZIPAL_MULTIPLY;
|
|||
|
|
|
|||
|
|
$package = [
|
|||
|
|
'days_count' => $days_num,
|
|||
|
|
'base_price' => $base_price,
|
|||
|
|
'zipal_price' => $zipal_price,
|
|||
|
|
'addition_price' => $non_zipal_price,
|
|||
|
|
'total_price' => $total_price + $base_price,
|
|||
|
|
'_meta' => ($package) ? $package : null
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$error = true;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$error = true;
|
|||
|
|
$errors[] = "Пакет не найден";
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$error = true;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$sql = "SELECT objects.* FROM objects WHERE objects.id = $object_id";
|
|||
|
|
$query = mysql_query($sql);
|
|||
|
|
if ($obj = mysql_fetch_assoc($query)) {
|
|||
|
|
|
|||
|
|
$curUser = new \User();
|
|||
|
|
$curUser->get($user_id);
|
|||
|
|
$agency_id = $curUser->agencyId;
|
|||
|
|
|
|||
|
|
if ($obj['operation_type'] == 1) {
|
|||
|
|
$deal_type = 'SELL';
|
|||
|
|
$sql_price = "true";
|
|||
|
|
} else {
|
|||
|
|
|
|||
|
|
$deal_type = 'RENT';
|
|||
|
|
$priceType = 'MONTH';
|
|||
|
|
|
|||
|
|
if ($obj['srok'] == 1)
|
|||
|
|
$priceType = 'DAY';
|
|||
|
|
|
|||
|
|
$sql_price = " advertising_package_price_type_id IN (SELECT id FROM advertising_package_price_type WHERE code = '$priceType') ";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$has_photos = 0;
|
|||
|
|
$sql = "SELECT id FROM objects_object_photo oop WHERE oop.object_id = $obj[id] LIMIT 1";
|
|||
|
|
if ($query = mysql_query($sql)) {
|
|||
|
|
if (mysql_num_rows($query) > 0) {
|
|||
|
|
$has_photos = 1;
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$error = true;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$is_room = 0;
|
|||
|
|
$object_type = 'FLAT';
|
|||
|
|
switch ($obj['type']) {
|
|||
|
|
case 1:
|
|||
|
|
$object_type = 'FLAT';
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case 2:
|
|||
|
|
$object_type = 'FLAT';
|
|||
|
|
$is_room = 1;
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case 5:
|
|||
|
|
case 3:
|
|||
|
|
$object_type = 'HOUSE';
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case 4:
|
|||
|
|
case 6:
|
|||
|
|
if ($obj['type_category']) {
|
|||
|
|
if ($obj['type_category'] == 1) {
|
|||
|
|
$object_type = 'BUSINESS';
|
|||
|
|
}
|
|||
|
|
if ($obj['type_category'] == 2) {
|
|||
|
|
$object_type = 'WAREHOUSE';
|
|||
|
|
}
|
|||
|
|
if ($obj['type_category'] >= 3) {
|
|||
|
|
$object_type = 'BUSINESS';
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$object_type = 'BUSINESS';
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
case 7:
|
|||
|
|
$object_type = 'LAND';
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($obj['id_rf_region'])
|
|||
|
|
$region_id = $obj['id_rf_region'];
|
|||
|
|
else
|
|||
|
|
$region_id = 78;
|
|||
|
|
|
|||
|
|
$sql_a = "SELECT * FROM advertising_package
|
|||
|
|
WHERE is_room=$is_room AND
|
|||
|
|
has_photo = $has_photos AND
|
|||
|
|
advertising_package_deal_type_id IN (SELECT id FROM advertising_package_deal_type WHERE code = '$deal_type') AND
|
|||
|
|
advertising_package_object_type_id IN (SELECT id FROM advertising_package_object_type WHERE code = '$object_type') AND
|
|||
|
|
$sql_price AND
|
|||
|
|
deleted = 0 AND
|
|||
|
|
agency_id = $agency_id AND
|
|||
|
|
(region_rf_id = $region_id OR region_rf_id IN (SELECT parent FROM rf_regions WHERE id = $region_id))";
|
|||
|
|
|
|||
|
|
if ($query = mysql_query($sql_a)) {
|
|||
|
|
if (mysql_num_rows($query)) {
|
|||
|
|
|
|||
|
|
while ($package = mysql_fetch_assoc($query)) {
|
|||
|
|
|
|||
|
|
$checked = false;
|
|||
|
|
$published = \zipalPackageCountText($obj['id'], $package['id']);
|
|||
|
|
|
|||
|
|
if ($published['zipal_active'] == 1 && (int)$published['zipal_days'] > 0)
|
|||
|
|
$checked = true;
|
|||
|
|
|
|||
|
|
$targets = [];
|
|||
|
|
$sql = "SELECT * FROM advertising_package_destinations WHERE advertising_package_id = '$package[id]' AND deleted = 0";
|
|||
|
|
if ($query_d = mysql_query($sql)) {
|
|||
|
|
while ($destination = mysql_fetch_assoc($query_d)) {
|
|||
|
|
|
|||
|
|
$target = $ZIPAL_TARGETS[$destination['destination']];
|
|||
|
|
if (!$target)
|
|||
|
|
$target = $destination['destination'];
|
|||
|
|
|
|||
|
|
$targets[] = $target;
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$error = true;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$is_error = (!empty($published['error_text'])) ? true : false;
|
|||
|
|
|
|||
|
|
$error_text = null;
|
|||
|
|
if ($is_error)
|
|||
|
|
$error_text = "Ошибка: " . $published['error_text'][0]['defaultMessage'];
|
|||
|
|
|
|||
|
|
$packages[] = [
|
|||
|
|
'id' => intval($package['id']),
|
|||
|
|
'name' => trim($package['name']),
|
|||
|
|
'days_count' => (int)$package['days_count'],
|
|||
|
|
'days_count_string' => \declOfNum((int)$package['days_count'], ['%d день', '%d дня', '%d дней']),
|
|||
|
|
'targets' => $targets,
|
|||
|
|
'is_active' => (!$is_error) ? $checked : false,
|
|||
|
|
|
|||
|
|
'left_days' => (!empty($published['zipal_days'])) ? (int)$published['zipal_days'] : false,
|
|||
|
|
'status_text' => (!empty($published['zipal_days_text'])) ? $published['zipal_days_text'] : false,
|
|||
|
|
|
|||
|
|
'is_error' => $is_error,
|
|||
|
|
'error_text' => $error_text,
|
|||
|
|
/*'_meta' => $published,
|
|||
|
|
'_meta2' => $package,*/
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$error = true;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!$error && $need_return) {
|
|||
|
|
if (!is_null($package_id))
|
|||
|
|
return $package;
|
|||
|
|
else
|
|||
|
|
return $packages;
|
|||
|
|
} else {
|
|||
|
|
$app->response->header('Content-Type', 'application/json');
|
|||
|
|
$app->response->setStatus(200);
|
|||
|
|
if (!is_null($package_id)) {
|
|||
|
|
$app->response->setBody(json_encode([
|
|||
|
|
'success' => true,
|
|||
|
|
'user_id' => (int)$user_id,
|
|||
|
|
'object_id' => $object_id,
|
|||
|
|
'package' => $package
|
|||
|
|
], JSON_UNESCAPED_UNICODE));
|
|||
|
|
} else {
|
|||
|
|
$app->response->setBody(json_encode([
|
|||
|
|
'success' => true,
|
|||
|
|
'user_id' => (int)$user_id,
|
|||
|
|
'object_id' => $object_id,
|
|||
|
|
'packages' => $packages
|
|||
|
|
], JSON_UNESCAPED_UNICODE));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$app->stop();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($need_return) {
|
|||
|
|
return false;
|
|||
|
|
} else {
|
|||
|
|
$app->response->header('Content-Type', 'application/json');
|
|||
|
|
$app->response->setStatus(200);
|
|||
|
|
$app->response->setBody(json_encode([
|
|||
|
|
'success' => false,
|
|||
|
|
'user_id' => (int)$user_id,
|
|||
|
|
'errors' => $errors,
|
|||
|
|
], JSON_UNESCAPED_UNICODE));
|
|||
|
|
$app->stop();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function getBudget($app, $get, $post, $need_return = false) {
|
|||
|
|
|
|||
|
|
/*error_reporting(E_ERROR | E_WARNING | E_PARSE);
|
|||
|
|
ini_set('display_errors', 1);*/
|
|||
|
|
|
|||
|
|
$error = false;
|
|||
|
|
$errors = [];
|
|||
|
|
|
|||
|
|
$is_agency_summary = false;
|
|||
|
|
$is_department_user = false;
|
|||
|
|
if (isset($get['is_agency']))
|
|||
|
|
$is_agency_summary = boolval($get['is_agency']);
|
|||
|
|
|
|||
|
|
if (($user_id = $_SESSION['id']) && $_SESSION['use_advert_budget']) {
|
|||
|
|
|
|||
|
|
// Открываем соединение с БД
|
|||
|
|
$mdb = $app->container->get('mysql');
|
|||
|
|
|
|||
|
|
// Текущий пользователь
|
|||
|
|
$user = new \User;
|
|||
|
|
$user->get($user_id);
|
|||
|
|
$user->checkPermissions($user_id, false);
|
|||
|
|
|
|||
|
|
$departments_inst = new \Department();
|
|||
|
|
$departments = $departments_inst->getDepartments((int)$user_id);
|
|||
|
|
|
|||
|
|
foreach ($departments as $department) {
|
|||
|
|
if ($department['department_id'] == intval($user->department_id)) {
|
|||
|
|
$is_department_user = true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$is_budget_of = null;
|
|||
|
|
$advert_budgets = new \AdvertBudgets();
|
|||
|
|
|
|||
|
|
$budget = [];
|
|||
|
|
if ($is_agency_summary || ($user->agency || $user->users_admin)) {
|
|||
|
|
$is_budget_of = 'agency';
|
|||
|
|
$budgets = $advert_budgets->getAdvertBudgets(null, true);
|
|||
|
|
$budget = $budgets;
|
|||
|
|
} else {
|
|||
|
|
$budgets = $advert_budgets->getAdvertBudgets($user_id);
|
|||
|
|
$budget = $budgets[(int)$user_id];
|
|||
|
|
if ($is_department_user) {
|
|||
|
|
|
|||
|
|
if ($user->agency)
|
|||
|
|
$is_budget_of = "agency";
|
|||
|
|
else if ($departments[$user->role_id]['role'] == 'admin_department')
|
|||
|
|
$is_budget_of = "department_admin";
|
|||
|
|
else if ($departments[$user->role_id]['role'] == 'manager_office_menager')
|
|||
|
|
$is_budget_of = "department_manager_office_manager";
|
|||
|
|
else if ($departments[$user->role_id]['role'] == 'manager_office')
|
|||
|
|
$is_budget_of = "department_manager_office";
|
|||
|
|
else if ($departments[$user->role_id]['role'] == 'agent')
|
|||
|
|
$is_budget_of = "department_agent";
|
|||
|
|
else
|
|||
|
|
$is_department_user = !($is_office_user = true);
|
|||
|
|
|
|||
|
|
} else {
|
|||
|
|
if ($user->agency)
|
|||
|
|
$is_budget_of = "agency";
|
|||
|
|
else if ($user->manager > 0)
|
|||
|
|
$is_budget_of = "manager";
|
|||
|
|
else
|
|||
|
|
$is_budget_of = "agent";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$label = "Рекламный бюджет";
|
|||
|
|
switch($is_budget_of) {
|
|||
|
|
case 'agency':
|
|||
|
|
$label = "Рекламный бюджет Агентства";
|
|||
|
|
break;
|
|||
|
|
case 'manager':
|
|||
|
|
$label = "Рекламный бюджет менеджера и подчиненных агентов";
|
|||
|
|
break;
|
|||
|
|
case 'agent':
|
|||
|
|
$label = "Рекламный бюджет агента";
|
|||
|
|
break;
|
|||
|
|
case 'department_admin':
|
|||
|
|
$label = "Рекламный бюджет Отдела и подчиненных";
|
|||
|
|
break;
|
|||
|
|
case 'department_manager_office_manager':
|
|||
|
|
$label = "Рекламный бюджет менеджера Офиса и подчиненных агентов";
|
|||
|
|
break;
|
|||
|
|
case 'department_manager_office':
|
|||
|
|
$label = "Рекламный бюджет менеджера Отдела и подчиненных агентов";
|
|||
|
|
break;
|
|||
|
|
case 'department_agent':
|
|||
|
|
$label = "Рекламный бюджет агента Отдела";
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$data = array_merge([
|
|||
|
|
'avito' => [
|
|||
|
|
'total' => ($budget['avito']) ? $budget['avito'] : 0,
|
|||
|
|
'amount' => ($budget['avito_amount']) ? $budget['avito_amount'] : 0,
|
|||
|
|
'available' => ($budget['avito_available']) ? $budget['avito_available'] : 0,
|
|||
|
|
'is_unlimited' => (int)$budget['avito_unlimited'],
|
|||
|
|
],
|
|||
|
|
'cian' => [
|
|||
|
|
'total' => ($budget['cian']) ? $budget['cian'] : 0,
|
|||
|
|
'amount' => ($budget['cian_amount']) ? $budget['cian_amount'] : 0,
|
|||
|
|
'available' => ($budget['cian_available']) ? $budget['cian_available'] : 0,
|
|||
|
|
'is_unlimited' => (int)$budget['cian_unlimited'],
|
|||
|
|
],
|
|||
|
|
'domclick' => [
|
|||
|
|
'total' => ($budget['domclick']) ? $budget['domclick'] : 0,
|
|||
|
|
'amount' => ($budget['domclick_amount']) ? $budget['domclick_amount'] : 0,
|
|||
|
|
'available' => ($budget['domclick_available']) ? $budget['domclick_available'] : 0,
|
|||
|
|
'is_unlimited' => (int)$budget['domclick_unlimited'],
|
|||
|
|
],
|
|||
|
|
'yandex' => [
|
|||
|
|
'total' => ($budget['yandex']) ? $budget['yandex'] : 0,
|
|||
|
|
'amount' => ($budget['yandex_amount']) ? $budget['yandex_amount'] : 0,
|
|||
|
|
'available' => ($budget['yandex_available']) ? $budget['yandex_available'] : 0,
|
|||
|
|
'is_unlimited' => (int)$budget['yandex_unlimited'],
|
|||
|
|
],
|
|||
|
|
'jcat' => [
|
|||
|
|
'total' => ($budget['jcat']) ? $budget['jcat'] : 0,
|
|||
|
|
'amount' => ($budget['jcat_amount']) ? $budget['jcat_amount'] : 0,
|
|||
|
|
'available' => ($budget['jcat_available']) ? $budget['jcat_available'] : 0,
|
|||
|
|
'is_unlimited' => (int)$budget['jcat_unlimited'],
|
|||
|
|
],
|
|||
|
|
], [
|
|||
|
|
'total' => ($budget['total']) ? $budget['total'] : 0,
|
|||
|
|
'amount' => ($budget['amount']) ? $budget['amount'] : 0,
|
|||
|
|
'balance' => ($budget['balance']) ? $budget['balance'] : 0,
|
|||
|
|
'label' => $label,
|
|||
|
|
'is_budget_of' => $is_budget_of,
|
|||
|
|
'is_department_user' => $is_department_user,
|
|||
|
|
]);
|
|||
|
|
|
|||
|
|
if (!$error && $need_return) {
|
|||
|
|
return $data;
|
|||
|
|
} else {
|
|||
|
|
$app->response->header('Content-Type', 'application/json');
|
|||
|
|
$app->response->setStatus(200);
|
|||
|
|
$app->response->setBody(json_encode([
|
|||
|
|
'success' => true,
|
|||
|
|
'user_id' => (int)$user_id,
|
|||
|
|
'budget' => $data
|
|||
|
|
], JSON_UNESCAPED_UNICODE));
|
|||
|
|
$app->stop();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($need_return) {
|
|||
|
|
return false;
|
|||
|
|
} else {
|
|||
|
|
$app->response->header('Content-Type', 'application/json');
|
|||
|
|
$app->response->setStatus(200);
|
|||
|
|
$app->response->setBody(json_encode([
|
|||
|
|
'success' => false,
|
|||
|
|
'user_id' => (int)$user_id,
|
|||
|
|
'errors' => $errors,
|
|||
|
|
], JSON_UNESCAPED_UNICODE));
|
|||
|
|
$app->stop();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function getPrice($app, $get, $post, $need_return = false) {
|
|||
|
|
|
|||
|
|
/*error_reporting(E_ERROR | E_WARNING | E_PARSE);
|
|||
|
|
ini_set('display_errors', 1);*/
|
|||
|
|
|
|||
|
|
$error = false;
|
|||
|
|
$errors = [];
|
|||
|
|
|
|||
|
|
$id = null;
|
|||
|
|
if (isset($get['id']))
|
|||
|
|
$id = intval($get['id']);
|
|||
|
|
|
|||
|
|
$object_id = null;
|
|||
|
|
if (isset($get['object_id']))
|
|||
|
|
$object_id = intval($get['object_id']);
|
|||
|
|
|
|||
|
|
$service = null;
|
|||
|
|
if (isset($get['service']))
|
|||
|
|
$service = trim($get['service']);
|
|||
|
|
|
|||
|
|
$days_num = 0;
|
|||
|
|
if (isset($get['days_num']))
|
|||
|
|
$days_num = intval($get['days_num']);
|
|||
|
|
|
|||
|
|
$price = 0;
|
|||
|
|
$budget = 0;
|
|||
|
|
if (($user_id = $_SESSION['id']) && !is_null($object_id)) {
|
|||
|
|
|
|||
|
|
// Открываем соединение с БД
|
|||
|
|
$mdb = $app->container->get('mysql');
|
|||
|
|
|
|||
|
|
$advert_budget = new \AdvertBudgets();
|
|||
|
|
$service_id = $advert_budget->getServiceByName($service);
|
|||
|
|
$results = $advert_budget->getObjectAdvertPrices($object_id, $service_id, $days_num);
|
|||
|
|
|
|||
|
|
if (!is_null($results['price']))
|
|||
|
|
$price = $results['price'];
|
|||
|
|
|
|||
|
|
if (!is_null($results['budget']))
|
|||
|
|
$budget = $results['budget'];
|
|||
|
|
|
|||
|
|
if ($need_return) {
|
|||
|
|
return [
|
|||
|
|
'object_id' => $object_id,
|
|||
|
|
'service_id' => $service_id,
|
|||
|
|
'price' => $price,
|
|||
|
|
'owner_user_id' => $price['owner_user_id'],
|
|||
|
|
'budget' => $budget,
|
|||
|
|
];
|
|||
|
|
} else {
|
|||
|
|
$app->response->header('Content-Type', 'application/json');
|
|||
|
|
$app->response->setStatus(200);
|
|||
|
|
$app->response->setBody(json_encode([
|
|||
|
|
'success' => true,
|
|||
|
|
'user_id' => (int)$user_id,
|
|||
|
|
'object_id' => $object_id,
|
|||
|
|
'service_id' => $service_id,
|
|||
|
|
'price' => $price,
|
|||
|
|
'owner_user_id' => $price['owner_user_id'],
|
|||
|
|
'budget' => $budget,
|
|||
|
|
//'_raw' => $results,
|
|||
|
|
], JSON_UNESCAPED_UNICODE));
|
|||
|
|
$app->stop();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($need_return) {
|
|||
|
|
return false;
|
|||
|
|
} else {
|
|||
|
|
$app->response->header('Content-Type', 'application/json');
|
|||
|
|
$app->response->setStatus(200);
|
|||
|
|
$app->response->setBody(json_encode([
|
|||
|
|
'success' => false,
|
|||
|
|
'user_id' => (int)$user_id,
|
|||
|
|
'errors' => $errors,
|
|||
|
|
], JSON_UNESCAPED_UNICODE));
|
|||
|
|
$app->stop();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function getZipalPrices($app, $get, $post, $need_return = false) {
|
|||
|
|
|
|||
|
|
global $ZIPAL_TARGETS;
|
|||
|
|
global $ZIPAL_PRICE_TYPES;
|
|||
|
|
global $ZIPAL_MULTIPLY;
|
|||
|
|
|
|||
|
|
/*error_reporting(E_ERROR | E_WARNING | E_PARSE);
|
|||
|
|
ini_set('display_errors', 1);*/
|
|||
|
|
|
|||
|
|
$error = false;
|
|||
|
|
$errors = [];
|
|||
|
|
|
|||
|
|
$object_id = null;
|
|||
|
|
if (isset($get['object_id']))
|
|||
|
|
$object_id = intval($get['object_id']);
|
|||
|
|
|
|||
|
|
$days_num = 0;
|
|||
|
|
if (isset($get['days_num']))
|
|||
|
|
$days_num = intval($get['days_num']);
|
|||
|
|
|
|||
|
|
if (($user_id = $_SESSION['id']) && !is_null($object_id)) {
|
|||
|
|
|
|||
|
|
// Открываем соединение с БД
|
|||
|
|
$mdb = $app->container->get('mysql');
|
|||
|
|
|
|||
|
|
$packages = [];
|
|||
|
|
$request = [];
|
|||
|
|
|
|||
|
|
$sql = "SELECT objects.* FROM objects WHERE objects.id = $object_id";
|
|||
|
|
$query = mysql_query($sql);
|
|||
|
|
if ($obj = mysql_fetch_assoc($query)) {
|
|||
|
|
|
|||
|
|
$curUser = new \User();
|
|||
|
|
$curUser->get($user_id);
|
|||
|
|
$agency_id = $curUser->agencyId;
|
|||
|
|
$login = $curUser->zipal_login;
|
|||
|
|
$password = $curUser->zipal_password;
|
|||
|
|
if (empty($login) || empty($password)) {
|
|||
|
|
$login = $curUser->agencyZipalLogin;
|
|||
|
|
$password = $curUser->agencyZipalPassword;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$request['login'] = $login;
|
|||
|
|
$request['password'] = $password;
|
|||
|
|
$request['method'] = 'GetPrices';
|
|||
|
|
$request['request'] = [];
|
|||
|
|
$request['request']['requestType'] = 'GetPricesByParamsRequestType';
|
|||
|
|
$request['request']['days'] = $days_num;
|
|||
|
|
$request['request']['hasPhotos'] = false;
|
|||
|
|
$request['request']['room'] = false;
|
|||
|
|
|
|||
|
|
if ($obj['id_rf_region']) {
|
|||
|
|
$sql = "SELECT code FROM rf_regions WHERE rf_regions.id = ".$obj['id_rf_region'];
|
|||
|
|
if ($query = mysql_query($sql)) {
|
|||
|
|
$request['request']['region'] = mysql_fetch_assoc($query)['code'];
|
|||
|
|
} else {
|
|||
|
|
$error = true;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$request['request']['region'] = 78;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($obj['operation_type'] == 1) {
|
|||
|
|
$request['request']['dealType'] = 'SELL';
|
|||
|
|
} else {
|
|||
|
|
$request['request']['dealType'] = 'RENT';
|
|||
|
|
$request['request']['priceType'] = 'MONTH';
|
|||
|
|
if ($obj['srok'] == 1) {
|
|||
|
|
$request['request']['priceType'] = 'DAY';
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$sql = "SELECT oop.sort_order FROM objects_object_photo oop WHERE oop.object_id = $obj[id]";
|
|||
|
|
if ($query = mysql_query($sql)) {
|
|||
|
|
if (mysql_num_rows($query) > 0) {
|
|||
|
|
$request['request']['hasPhotos'] = true;
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$error = true;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
switch ($obj['type']) {
|
|||
|
|
case 1:
|
|||
|
|
$request['request']['objectType'] = 'FLAT';
|
|||
|
|
break;
|
|||
|
|
case 2:
|
|||
|
|
$request['request']['objectType'] = 'FLAT';
|
|||
|
|
$request['request']['room'] = true;
|
|||
|
|
break;
|
|||
|
|
case 3:
|
|||
|
|
case 5:
|
|||
|
|
$request['request']['objectType'] = 'HOUSE';
|
|||
|
|
break;
|
|||
|
|
case 4:
|
|||
|
|
case 6:
|
|||
|
|
if ($obj['type_category']) {
|
|||
|
|
if ($obj['type_category'] == 1) {
|
|||
|
|
$request['request']['objectType'] = 'BUSINESS';
|
|||
|
|
}
|
|||
|
|
if ($obj['type_category'] == 2) {
|
|||
|
|
$request['request']['objectType'] = 'WAREHOUSE';
|
|||
|
|
}
|
|||
|
|
if ($obj['type_category'] >= 3) {
|
|||
|
|
$request['request']['objectType'] = 'BUSINESS';
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$request['request']['objectType'] = 'BUSINESS';
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case 7:
|
|||
|
|
$request['request']['objectType'] = 'LAND';
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$jsonResult = [];
|
|||
|
|
try {
|
|||
|
|
$user_agent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; HTC_Touch_Diamond2_T5353; Windows Phone 6.5)';
|
|||
|
|
$result = curl_request_zipal_json("https://zipal.ru/ws/json", $user_id, $user_agent, json_encode($request));
|
|||
|
|
$jsonResult = json_decode($result, true);
|
|||
|
|
} catch (\Exception $exception) {
|
|||
|
|
$error = true;
|
|||
|
|
$errors[] = $exception->getMessage();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($jsonResult['resultCode'] == "FAIL") { // ошибка
|
|||
|
|
$res = strpos($jsonResult['result'], "at [Source:");
|
|||
|
|
if ($res) {
|
|||
|
|
$errors[] = substr($jsonResult['result'], $res);
|
|||
|
|
} else {
|
|||
|
|
$errors[] = $jsonResult['result'];
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
if ($jsonResult['resultCode'] == "OK") {
|
|||
|
|
|
|||
|
|
$base_price = (($jsonResult['result']['basePrice'] / 100) * $ZIPAL_MULTIPLY);
|
|||
|
|
|
|||
|
|
$groups = [];
|
|||
|
|
$destinations = [];
|
|||
|
|
foreach ($jsonResult['result']['destination'] as $dest) {
|
|||
|
|
|
|||
|
|
$skipped = false;
|
|||
|
|
foreach ($dest['price'] as $price) {
|
|||
|
|
|
|||
|
|
if (!$price['feedOnly'])
|
|||
|
|
$skipped = true;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!isset($dest['destination']))
|
|||
|
|
continue;
|
|||
|
|
|
|||
|
|
$target_name = $dest['destination'];
|
|||
|
|
if(isset($ZIPAL_TARGETS[$dest['destination']])){
|
|||
|
|
$target_name = $ZIPAL_TARGETS[$dest['destination']];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$destination = strtolower(trim($dest['destination']));
|
|||
|
|
|
|||
|
|
if (!isset($groups[$destination]))
|
|||
|
|
$groups[$destination] = $target_name;
|
|||
|
|
|
|||
|
|
if ($dest['destination'] === 'YANDEX')
|
|||
|
|
$skipped = true;
|
|||
|
|
|
|||
|
|
if ($dest['destination'] === 'CIAN')
|
|||
|
|
$skipped = true;
|
|||
|
|
|
|||
|
|
if ($dest['destination'] === 'EMLS')
|
|||
|
|
$skipped = true;
|
|||
|
|
|
|||
|
|
if ($dest['destination'] === 'AVITO')
|
|||
|
|
$skipped = true;
|
|||
|
|
|
|||
|
|
if ($skipped) {
|
|||
|
|
|
|||
|
|
foreach ($dest['price'] as $price) {
|
|||
|
|
|
|||
|
|
$is_feed = false;
|
|||
|
|
if ($price['feedOnly']) {
|
|||
|
|
$is_feed = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$amount = $price['price'] > 0 ? floatval($price['price']) / 100 : null;
|
|||
|
|
|
|||
|
|
$is_free = false;
|
|||
|
|
if ((floatval($amount) == 0 && !$price['feedOnly']) || $dest['destination'] === 'YANDEX' || $dest['destination'] === 'CIAN' || $dest['destination'] === 'EMLS' || $dest['destination'] === 'AVITO') {
|
|||
|
|
$is_free = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($is_free && floatval($amount) > 0)
|
|||
|
|
$is_free = false;
|
|||
|
|
|
|||
|
|
$type = $price['type'];
|
|||
|
|
$destinations[$destination][$type] = [
|
|||
|
|
'type' => $type,
|
|||
|
|
'price' => $amount,
|
|||
|
|
'description' => (isset($ZIPAL_PRICE_TYPES[$price['type']])) ? $ZIPAL_PRICE_TYPES[$price['type']] : trim($price['type']),
|
|||
|
|
'is_feed' => $is_feed,
|
|||
|
|
'is_free' => $is_free
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$packages[] = [
|
|||
|
|
'days_count' => $days_num,
|
|||
|
|
'base_price' => $base_price,
|
|||
|
|
'groups' => $groups,
|
|||
|
|
'destinations' => $destinations,
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
$error = true;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!$error && $need_return) {
|
|||
|
|
return $packages;
|
|||
|
|
} else {
|
|||
|
|
$app->response->header('Content-Type', 'application/json');
|
|||
|
|
$app->response->setStatus(200);
|
|||
|
|
$app->response->setBody(json_encode([
|
|||
|
|
'success' => true,
|
|||
|
|
'user_id' => (int)$user_id,
|
|||
|
|
'object_id' => $object_id,
|
|||
|
|
'packages' => count($packages) ? $packages : null,
|
|||
|
|
//'_raw' => $jsonResult
|
|||
|
|
], JSON_UNESCAPED_UNICODE));
|
|||
|
|
$app->stop();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($need_return) {
|
|||
|
|
return false;
|
|||
|
|
} else {
|
|||
|
|
$app->response->header('Content-Type', 'application/json');
|
|||
|
|
$app->response->setStatus(200);
|
|||
|
|
$app->response->setBody(json_encode([
|
|||
|
|
'success' => false,
|
|||
|
|
'user_id' => (int)$user_id,
|
|||
|
|
'errors' => $errors,
|
|||
|
|
], JSON_UNESCAPED_UNICODE));
|
|||
|
|
$app->stop();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function getPromotion($app, $get, $post) {
|
|||
|
|
$error = false;
|
|||
|
|
$errors = [];
|
|||
|
|
|
|||
|
|
$object_id = null;
|
|||
|
|
if (isset($get['object_id']))
|
|||
|
|
$object_id = $get['object_id'];
|
|||
|
|
|
|||
|
|
if (($user_id = $_SESSION['id']) && !is_null($object_id)) {
|
|||
|
|
|
|||
|
|
// Открываем соединение с БД
|
|||
|
|
$mdb = $app->container->get('mysql');
|
|||
|
|
|
|||
|
|
$promo = [];
|
|||
|
|
|
|||
|
|
$get = clearInputData($_GET);
|
|||
|
|
$agency_id = \User::getUserAgencyID($user_id);
|
|||
|
|
if ($get['object_id']) {
|
|||
|
|
$sql = "SELECT * FROM `ads_promo`
|
|||
|
|
WHERE `object_id` = '$object_id' AND
|
|||
|
|
`agency_id` = '$agency_id'
|
|||
|
|
LIMIT 1";
|
|||
|
|
|
|||
|
|
if ($query = mysql_query($sql)) {
|
|||
|
|
$promo = mysql_fetch_assoc($query);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$app->response->header('Content-Type', 'application/json');
|
|||
|
|
$app->response->setStatus(200);
|
|||
|
|
$app->response->setBody(json_encode([
|
|||
|
|
'success' => true,
|
|||
|
|
'user_id' => (int)$user_id,
|
|||
|
|
'object_id' => $object_id,
|
|||
|
|
'packages' => count($promo) ? $promo : false
|
|||
|
|
], JSON_UNESCAPED_UNICODE));
|
|||
|
|
$app->stop();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$app->response->header('Content-Type', 'application/json');
|
|||
|
|
$app->response->setStatus(200);
|
|||
|
|
$app->response->setBody(json_encode([
|
|||
|
|
'success' => false,
|
|||
|
|
'user_id' => (int)$_SESSION['id'],
|
|||
|
|
'errors' => $errors,
|
|||
|
|
], JSON_UNESCAPED_UNICODE));
|
|||
|
|
$app->stop();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function setPromotion($app, $get, $post) {
|
|||
|
|
|
|||
|
|
$error = false;
|
|||
|
|
$errors = [];
|
|||
|
|
|
|||
|
|
$body = $app->request->getBody();
|
|||
|
|
$data = json_decode($body, true);
|
|||
|
|
|
|||
|
|
$object_id = null;
|
|||
|
|
if (isset($data['object_id']))
|
|||
|
|
$object_id = $data['object_id'];
|
|||
|
|
|
|||
|
|
$packages = null;
|
|||
|
|
if (isset($data['packages']))
|
|||
|
|
$packages = $data['packages'];
|
|||
|
|
|
|||
|
|
if (($user_id = $_SESSION['id']) && !is_null($object_id) && !is_null($packages)) {
|
|||
|
|
|
|||
|
|
// Открываем соединение с БД
|
|||
|
|
$mdb = $app->container->get('mysql');
|
|||
|
|
|
|||
|
|
$agency_id = \User::getUserAgencyID($user_id);
|
|||
|
|
|
|||
|
|
$owner_id = (int)mysql_fetch_assoc(mysql_query("SELECT * FROM `objects` WHERE id = '$post[object_id]'"))['id_add_user'];
|
|||
|
|
|
|||
|
|
if (!$owner_id)
|
|||
|
|
$owner_id = (int)$user_id;
|
|||
|
|
|
|||
|
|
$sql = "SELECT `id` FROM `ads_promo` WHERE `object_id` = '$object_id' AND `agency_id` = '$agency_id' LIMIT 1";
|
|||
|
|
|
|||
|
|
$packages = array_map('intval', $packages);
|
|||
|
|
|
|||
|
|
if ($id = (int)mysql_fetch_assoc(mysql_query($sql))['id']) {
|
|||
|
|
$sql = "UPDATE `ads_promo`
|
|||
|
|
SET `avito_highlight` = '$packages[avito_highlight]',
|
|||
|
|
`avito_xl` = '$packages[avito_xl]',
|
|||
|
|
`avito_x2_1` = '$packages[avito_x2_1]',
|
|||
|
|
`avito_x2_7` = '$packages[avito_x2_7]',
|
|||
|
|
`avito_x5_1` = '$packages[avito_x5_1]',
|
|||
|
|
`avito_x5_7` = '$packages[avito_x5_7]',
|
|||
|
|
`avito_x10_1` = '$packages[avito_x10_1]',
|
|||
|
|
`avito_x10_7` = '$packages[avito_x10_7]',
|
|||
|
|
`avito_price` = '$packages[avito_price]',
|
|||
|
|
`cian_highlight` = '$packages[cian_highlight]',
|
|||
|
|
`cian_standard` = '$packages[cian_standard]',
|
|||
|
|
`cian_paid` = '$packages[cian_paid]',
|
|||
|
|
`cian_premium` = '$packages[cian_premium]',
|
|||
|
|
`cian_top3` = '$packages[cian_top3]',
|
|||
|
|
`cian_bet` = '$packages[cian_bet]',
|
|||
|
|
`cian_ignore_pkg` = '$packages[cian_ignore_pkg]',
|
|||
|
|
`cian_price` = '$packages[cian_price]',
|
|||
|
|
`yandex_premium` = '$packages[yandex_premium]',
|
|||
|
|
`yandex_raise` = '$packages[yandex_raise]',
|
|||
|
|
`yandex_promotion` = '$packages[yandex_promotion]',
|
|||
|
|
`yandex_price` = '$packages[yandex_price]',
|
|||
|
|
`domclick_express` = '$packages[domclick_express]',
|
|||
|
|
`domclick_premium` = '$packages[domclick_premium]',
|
|||
|
|
`domclick_top` = '$packages[domclick_top]',
|
|||
|
|
`domclick_price` = '$packages[domclick_price]',
|
|||
|
|
`object_owner_id` = '$owner_id',
|
|||
|
|
`avito_promo_type` = '$packages[avito_promo_type]',
|
|||
|
|
`updated_at` = NOW(),
|
|||
|
|
`updated_by` = '$user_id'
|
|||
|
|
WHERE `id` = '$id'";
|
|||
|
|
|
|||
|
|
} else {
|
|||
|
|
$sql = "INSERT INTO `ads_promo` (
|
|||
|
|
`object_id`,
|
|||
|
|
`agency_id`,
|
|||
|
|
`avito_highlight`,
|
|||
|
|
`avito_xl`,
|
|||
|
|
`avito_x2_1`,
|
|||
|
|
`avito_x2_7`,
|
|||
|
|
`avito_x5_1`,
|
|||
|
|
`avito_x5_7`,
|
|||
|
|
`avito_x10_1`,
|
|||
|
|
`avito_x10_7`,
|
|||
|
|
`avito_price`,
|
|||
|
|
`cian_highlight`,
|
|||
|
|
`cian_standard`,
|
|||
|
|
`cian_paid`,
|
|||
|
|
`cian_premium`,
|
|||
|
|
`cian_top3`,
|
|||
|
|
`cian_bet`,
|
|||
|
|
`cian_ignore_pkg`,
|
|||
|
|
`cian_price`,
|
|||
|
|
`yandex_premium`,
|
|||
|
|
`yandex_raise`,
|
|||
|
|
`yandex_promotion`,
|
|||
|
|
`yandex_price`,
|
|||
|
|
`domclick_express`,
|
|||
|
|
`domclick_premium`,
|
|||
|
|
`domclick_top`,
|
|||
|
|
`domclick_price`,
|
|||
|
|
`object_owner_id`,
|
|||
|
|
`created_at`,
|
|||
|
|
`created_by`,
|
|||
|
|
`updated_at`,
|
|||
|
|
`updated_by`,
|
|||
|
|
`avito_promo_type`
|
|||
|
|
) VALUES(
|
|||
|
|
'$object_id',
|
|||
|
|
'$agency_id',
|
|||
|
|
'$packages[avito_highlight]',
|
|||
|
|
'$packages[avito_xl]',
|
|||
|
|
'$packages[avito_x2_1]',
|
|||
|
|
'$packages[avito_x2_7]',
|
|||
|
|
'$packages[avito_x5_1]',
|
|||
|
|
'$packages[avito_x5_7]',
|
|||
|
|
'$packages[avito_x10_1]',
|
|||
|
|
'$packages[avito_x10_7]',
|
|||
|
|
'$packages[avito_price]',
|
|||
|
|
'$packages[cian_highlight]',
|
|||
|
|
'$packages[cian_standard]',
|
|||
|
|
'$packages[cian_paid]',
|
|||
|
|
'$packages[cian_premium]',
|
|||
|
|
'$packages[cian_top3]',
|
|||
|
|
'$packages[cian_bet]',
|
|||
|
|
'$packages[cian_ignore_pkg]',
|
|||
|
|
'$packages[cian_price]',
|
|||
|
|
'$packages[yandex_premium]',
|
|||
|
|
'$packages[yandex_raise]',
|
|||
|
|
'$packages[yandex_promotion]',
|
|||
|
|
'$packages[yandex_price]',
|
|||
|
|
'$packages[domclick_express]',
|
|||
|
|
'$packages[domclick_premium]',
|
|||
|
|
'$packages[domclick_top]',
|
|||
|
|
'$packages[domclick_price]',
|
|||
|
|
'$owner_id',
|
|||
|
|
NOW(),
|
|||
|
|
'$user_id',
|
|||
|
|
NULL,
|
|||
|
|
NULL,
|
|||
|
|
'$packages[avito_promo_type]'
|
|||
|
|
)";
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!mysql_query($sql)) {
|
|||
|
|
$error = true;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!$error) {
|
|||
|
|
$app->response->header('Content-Type', 'application/json');
|
|||
|
|
$app->response->setStatus(200);
|
|||
|
|
$app->response->setBody(json_encode([
|
|||
|
|
'success' => true,
|
|||
|
|
'user_id' => (int)$user_id,
|
|||
|
|
'sql' => $sql,
|
|||
|
|
], JSON_UNESCAPED_UNICODE));
|
|||
|
|
$app->stop();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$app->response->header('Content-Type', 'application/json');
|
|||
|
|
$app->response->setStatus(200);
|
|||
|
|
$app->response->setBody(json_encode([
|
|||
|
|
'success' => false,
|
|||
|
|
'user_id' => (int)$_SESSION['id'],
|
|||
|
|
'errors' => $errors,
|
|||
|
|
], JSON_UNESCAPED_UNICODE));
|
|||
|
|
$app->stop();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function editAdvertPrice($app, $get, $post) {
|
|||
|
|
|
|||
|
|
$error = false;
|
|||
|
|
$errors = [];
|
|||
|
|
|
|||
|
|
$body = $app->request->getBody();
|
|||
|
|
$data = json_decode($body, true);
|
|||
|
|
|
|||
|
|
$id = null;
|
|||
|
|
if (isset($data['id']))
|
|||
|
|
$id = $data['id'];
|
|||
|
|
|
|||
|
|
$object_id = null;
|
|||
|
|
if (isset($data['object_id']))
|
|||
|
|
$object_id = $data['object_id'];
|
|||
|
|
|
|||
|
|
$price = null;
|
|||
|
|
if (isset($data['price']))
|
|||
|
|
$price = $data['price'];
|
|||
|
|
|
|||
|
|
$old_price_string = null;
|
|||
|
|
if (isset($data['old_price']))
|
|||
|
|
$old_price_string = trim($data['old_price']);
|
|||
|
|
|
|||
|
|
$destination = null;
|
|||
|
|
if (isset($data['destination']))
|
|||
|
|
$destination = $data['destination'];
|
|||
|
|
|
|||
|
|
if (($user_id = $_SESSION['id']) && !is_null($id) && !is_null($object_id) && !is_null($destination) && !is_null($price)) {
|
|||
|
|
|
|||
|
|
// Открываем соединение с БД
|
|||
|
|
$mdb = $app->container->get('mysql');
|
|||
|
|
|
|||
|
|
$service_name = '';
|
|||
|
|
if ($destination == 'avito') {
|
|||
|
|
$service_name = ' для Фида Avito';
|
|||
|
|
$destination = 'AVITO_JW_FEED';
|
|||
|
|
}
|
|||
|
|
else if ($destination == 'cian') {
|
|||
|
|
$service_name = ' для Фида ЦИАН';
|
|||
|
|
$destination = 'CIAN_JW_FEED';
|
|||
|
|
}
|
|||
|
|
else if ($destination == 'yandex') {
|
|||
|
|
$service_name = ' для Фида Я.Недвижимость';
|
|||
|
|
$destination = 'YANDEX_JW_FEED';
|
|||
|
|
}
|
|||
|
|
else if ($destination == 'domclick') {
|
|||
|
|
$service_name = ' для Фида ДомКлик';
|
|||
|
|
$destination = 'DOMCLICK_JW_FEED';
|
|||
|
|
}
|
|||
|
|
else if ($destination == 'jcat') {
|
|||
|
|
$service_name = ' для Фида JCat';
|
|||
|
|
$destination = 'EMLS_JW_FEED';
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$sql = "UPDATE `object_publish_statistic`
|
|||
|
|
SET `price`='$price'
|
|||
|
|
WHERE `id`='$id' AND
|
|||
|
|
`object_id`='$object_id' AND
|
|||
|
|
`destination`='$destination'
|
|||
|
|
LIMIT 1";
|
|||
|
|
|
|||
|
|
if (mysql_query($sql)) {
|
|||
|
|
$price_string = (((float)$price < 1) ? declOfNum((float)$price * 100, ['%d копейка', '%d копейки', '%d копеек']) : declOfNum((float)$price, ['%s рубль', '%s рубля', '%s рублей']));
|
|||
|
|
$message = 'Изменена стоимость продвижения в Рекламе' . $service_name . ' с '. $old_price_string . ' на ' . $price_string;
|
|||
|
|
$sql = "INSERT INTO user_object_events(user_id, object_id, type, comment) VALUES($user_id, $object_id, 'comment', '$message')";
|
|||
|
|
mysql_query($sql);
|
|||
|
|
} else {
|
|||
|
|
$error = true;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!$error) {
|
|||
|
|
$app->response->header('Content-Type', 'application/json');
|
|||
|
|
$app->response->setStatus(200);
|
|||
|
|
$app->response->setBody(json_encode([
|
|||
|
|
'success' => true,
|
|||
|
|
'user_id' => (int)$user_id,
|
|||
|
|
'destination' => $destination,
|
|||
|
|
'price' => $price,
|
|||
|
|
], JSON_UNESCAPED_UNICODE));
|
|||
|
|
$app->stop();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$app->response->header('Content-Type', 'application/json');
|
|||
|
|
$app->response->setStatus(200);
|
|||
|
|
$app->response->setBody(json_encode([
|
|||
|
|
'success' => false,
|
|||
|
|
'user_id' => (int)$_SESSION['id'],
|
|||
|
|
'errors' => $errors,
|
|||
|
|
], JSON_UNESCAPED_UNICODE));
|
|||
|
|
$app->stop();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function editPromotionPrice($app, $get, $post) {
|
|||
|
|
|
|||
|
|
$error = false;
|
|||
|
|
$errors = [];
|
|||
|
|
|
|||
|
|
$body = $app->request->getBody();
|
|||
|
|
$data = json_decode($body, true);
|
|||
|
|
|
|||
|
|
$id = null;
|
|||
|
|
if (isset($data['id']))
|
|||
|
|
$id = $data['id'];
|
|||
|
|
|
|||
|
|
$object_id = null;
|
|||
|
|
if (isset($data['object_id']))
|
|||
|
|
$object_id = $data['object_id'];
|
|||
|
|
|
|||
|
|
$price = null;
|
|||
|
|
if (isset($data['price']))
|
|||
|
|
$price = $data['price'];
|
|||
|
|
|
|||
|
|
$old_price_string = null;
|
|||
|
|
if (isset($data['old_price']))
|
|||
|
|
$old_price_string = trim($data['old_price']);
|
|||
|
|
|
|||
|
|
$destination = null;
|
|||
|
|
if (isset($data['destination']))
|
|||
|
|
$destination = $data['destination'];
|
|||
|
|
|
|||
|
|
if (($user_id = $_SESSION['id']) && !is_null($id) && !is_null($object_id) && !is_null($destination) && !is_null($price)) {
|
|||
|
|
|
|||
|
|
// Открываем соединение с БД
|
|||
|
|
$mdb = $app->container->get('mysql');
|
|||
|
|
|
|||
|
|
$agency_id = \User::getUserAgencyID($user_id);
|
|||
|
|
|
|||
|
|
$service_name = '';
|
|||
|
|
if ($destination == 'avito') {
|
|||
|
|
$service_name = ' для Avito';
|
|||
|
|
$sql = "UPDATE `ads_promo` SET `avito_price`='$price', `updated_by`='$user_id' WHERE `id`='$id' AND `object_id`='$object_id' AND `agency_id`='$agency_id'";
|
|||
|
|
}
|
|||
|
|
else if ($destination == 'cian') {
|
|||
|
|
$service_name = ' для ЦИАН';
|
|||
|
|
$sql = "UPDATE `ads_promo` SET `cian_price`='$price', `updated_by`='$user_id' WHERE `id`='$id' AND `object_id`='$object_id' AND `agency_id`='$agency_id'";
|
|||
|
|
}
|
|||
|
|
else if ($destination == 'yandex') {
|
|||
|
|
$service_name = ' для Я.Недвижимость';
|
|||
|
|
$sql = "UPDATE `ads_promo` SET `yandex_price`='$price', `updated_by`='$user_id' WHERE `id`='$id' AND `object_id`='$object_id' AND `agency_id`='$agency_id'";
|
|||
|
|
}
|
|||
|
|
else if ($destination == 'domclick') {
|
|||
|
|
$service_name = ' для ДомКлик';
|
|||
|
|
$sql = "UPDATE `ads_promo` SET `domclick_price`='$price', `updated_by`='$user_id' WHERE `id`='$id' AND `object_id`='$object_id' AND `agency_id`='$agency_id'";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (mysql_query($sql)) {
|
|||
|
|
$price_string = (((float)$price < 1) ? declOfNum((float)$price * 100, ['%d копейка', '%d копейки', '%d копеек']) : declOfNum((float)$price, ['%s рубль', '%s рубля', '%s рублей']));
|
|||
|
|
$message = 'Изменена стоимость продвижения в Рекламе' . $service_name . ' с '. $old_price_string . ' на ' . $price_string;
|
|||
|
|
$sql = "INSERT INTO user_object_events(user_id, object_id, type, comment) VALUES($user_id, $object_id, 'comment', '$message')";
|
|||
|
|
mysql_query($sql);
|
|||
|
|
} else {
|
|||
|
|
$error = true;
|
|||
|
|
$errors[] = mysql_error();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!$error) {
|
|||
|
|
$app->response->header('Content-Type', 'application/json');
|
|||
|
|
$app->response->setStatus(200);
|
|||
|
|
$app->response->setBody(json_encode([
|
|||
|
|
'success' => true,
|
|||
|
|
'user_id' => (int)$user_id,
|
|||
|
|
'destination' => $destination,
|
|||
|
|
'price' => $price,
|
|||
|
|
], JSON_UNESCAPED_UNICODE));
|
|||
|
|
$app->stop();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$app->response->header('Content-Type', 'application/json');
|
|||
|
|
$app->response->setStatus(200);
|
|||
|
|
$app->response->setBody(json_encode([
|
|||
|
|
'success' => false,
|
|||
|
|
'user_id' => (int)$_SESSION['id'],
|
|||
|
|
'errors' => $errors,
|
|||
|
|
], JSON_UNESCAPED_UNICODE));
|
|||
|
|
$app->stop();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
public function getObjectCosts($app, $get = null, $post = null) {
|
|||
|
|
|
|||
|
|
global $PROMO_TARGETS;
|
|||
|
|
global $ZIPAL_TARGETS;
|
|||
|
|
|
|||
|
|
$error = false;
|
|||
|
|
$errors = [];
|
|||
|
|
$object_id = intval($get['object_id']);
|
|||
|
|
|
|||
|
|
if (($user_id = $_SESSION['id']) && $object_id) {
|
|||
|
|
|
|||
|
|
// Открываем соединение с БД
|
|||
|
|
$mdb = $app->container->get('mysql');
|
|||
|
|
$pdo = $app->container->get('pdo');
|
|||
|
|
|
|||
|
|
/*error_reporting(E_ALL | E_STRICT);
|
|||
|
|
ini_set('display_errors', 1);*/
|
|||
|
|
|
|||
|
|
$user = new \User;
|
|||
|
|
$user->get($user_id);
|
|||
|
|
|
|||
|
|
$gmtmsk =$user->gmtmsk;
|
|||
|
|
$time_zone = '';
|
|||
|
|
if($gmtmsk >= 0){
|
|||
|
|
$time_zone = '+'.$gmtmsk.' hour';
|
|||
|
|
} else {
|
|||
|
|
$time_zone = '-'.$gmtmsk.' hour';
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$user->checkPermissions($user_id, false);
|
|||
|
|
|
|||
|
|
$results = [];
|
|||
|
|
$today = 0;
|
|||
|
|
$total = 0;
|
|||
|
|
|
|||
|
|
$sql = "SELECT `stats`.*,
|
|||
|
|
`stats`.`id` AS `id`,
|
|||
|
|
`users`.`last_name` AS `last_name`,
|
|||
|
|
`users`.`first_name` AS `first_name`,
|
|||
|
|
`users`.`middle_name` AS `middle_name`,
|
|||
|
|
`users`.`agency` AS `agency`,
|
|||
|
|
`users`.`fio` AS `fio`,
|
|||
|
|
`users`.`manager` AS `manager`
|
|||
|
|
FROM `object_publish_statistic` AS `stats`
|
|||
|
|
LEFT JOIN `users` AS `users` ON `users`.`id` = `stats`.`publish_user_id`
|
|||
|
|
WHERE `stats`.`object_id` = '$object_id' AND `stats`.`on_moderation` = 0
|
|||
|
|
ORDER BY `stats`.`publish_start_date` DESC,
|
|||
|
|
`stats`.`id` ASC";
|
|||
|
|
|
|||
|
|
if ($rez = mysql_query($sql)) {
|
|||
|
|
|
|||
|
|
$date = '';
|
|||
|
|
$new_date = '';
|
|||
|
|
|
|||
|
|
$stats = [];
|
|||
|
|
while ($stat = mysql_fetch_assoc($rez)) {
|
|||
|
|
|
|||
|
|
if (in_array($stat['destination'], array_keys($PROMO_TARGETS)))
|
|||
|
|
$stat['type'] = 'promotion';
|
|||
|
|
else
|
|||
|
|
$stat['type'] = 'regular';
|
|||
|
|
|
|||
|
|
$stats[] = $stat;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$num = 0;
|
|||
|
|
$targets = array_merge($PROMO_TARGETS, $ZIPAL_TARGETS);
|
|||
|
|
foreach ($stats as $stat) {
|
|||
|
|
|
|||
|
|
$num++;
|
|||
|
|
$target = $targets[$stat['destination']];
|
|||
|
|
|
|||
|
|
$publisher_id = (int)$stat['publish_user_id'];
|
|||
|
|
|
|||
|
|
$unpublisher_id = null;
|
|||
|
|
$unpublisher_at = null;
|
|||
|
|
if (isset($stat['unpublish_user_id'])) {
|
|||
|
|
$unpublisher_id = (int)$stat['unpublish_user_id'];
|
|||
|
|
$unpublisher_at = strtotime($time_zone, strtotime($stat['updated_at']));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$row = mysql_fetch_assoc(mysql_query("SELECT agency, manager, fio FROM users WHERE id=$publisher_id"));
|
|||
|
|
if ($row['agency'])
|
|||
|
|
$publisher = "Агентство $row[fio]";
|
|||
|
|
elseif ($row['manager'])
|
|||
|
|
$publisher = "Менеджер $row[fio]";
|
|||
|
|
else
|
|||
|
|
$publisher = "Агент $row[fio]";
|
|||
|
|
|
|||
|
|
$unpublisher = null;
|
|||
|
|
if ($unpublisher_id) {
|
|||
|
|
$row = mysql_fetch_assoc(mysql_query("SELECT agency, manager, fio FROM users WHERE id=$unpublisher_id"));
|
|||
|
|
if ($row['agency'])
|
|||
|
|
$unpublisher = "Агентство $row[fio]";
|
|||
|
|
elseif ($row['manager'])
|
|||
|
|
$unpublisher = "Менеджер $row[fio]";
|
|||
|
|
else
|
|||
|
|
$unpublisher = "Агент $row[fio]";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$publisher_at = strtotime($time_zone, strtotime($stat['publish_start_date']));
|
|||
|
|
$date = date('d', $publisher_at) . ' ' . getRusMonth(date('m', $publisher_at)) . ' ' . date('Y', $publisher_at). ' г.';
|
|||
|
|
$new_date = $date;
|
|||
|
|
|
|||
|
|
if (!$target)
|
|||
|
|
$target = $stat['destination'];
|
|||
|
|
|
|||
|
|
if ($stat['type'] == 'promotion')
|
|||
|
|
$target = 'Продвижение от ' . $target;
|
|||
|
|
else
|
|||
|
|
$target = 'Размещено ' . ((strpos($target, 'Фид') !== false) ? 'в ' : 'на ') . $target;
|
|||
|
|
|
|||
|
|
|
|||
|
|
$price = 0;
|
|||
|
|
if ($stat['price'] > 0) {
|
|||
|
|
$price = (float)$stat['price'] < 1 ? (float)$stat['price'] * 100 : (float)$stat['price'];
|
|||
|
|
$today = $today + $stat['price'];
|
|||
|
|
$total = $total + $stat['price'];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$datetime = date('H:i:s', $publisher_at);
|
|||
|
|
|
|||
|
|
$destination = $stat['destination'];
|
|||
|
|
if ($stat['type'] == 'promotion') {
|
|||
|
|
if (strpos($destination, 'AVITO') !== false)
|
|||
|
|
$destination = 'avito';
|
|||
|
|
else if (strpos($destination, 'CIAN') !== false)
|
|||
|
|
$destination = 'cian';
|
|||
|
|
else if (strpos($destination, 'DOMCLICK') !== false)
|
|||
|
|
$destination = 'domclick';
|
|||
|
|
else if (strpos($destination, 'JCAT') !== false)
|
|||
|
|
$destination = 'jcat';
|
|||
|
|
else if (strpos($destination, 'YANDEX') !== false)
|
|||
|
|
$destination = 'yandex';
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$results['stats'][$date][$datetime][] = [
|
|||
|
|
'id' => (int)$stat['id'],
|
|||
|
|
'target' => $target,
|
|||
|
|
'type' => $stat['type'],
|
|||
|
|
'destination' => $destination,
|
|||
|
|
'publisher' => $publisher,
|
|||
|
|
'publisher_at' => date('d.m.Y в H:i:s', $publisher_at),
|
|||
|
|
'publisher_by' => $publisher_id,
|
|||
|
|
'unpublisher' => $unpublisher,
|
|||
|
|
'unpublished_at' => date('d.m.Y в H:i:s', $unpublisher_at),
|
|||
|
|
'unpublished_by' => $unpublisher_id,
|
|||
|
|
'days' => ($stat['days_count'] < 5000) ? (int)$stat['days_count'] : false,
|
|||
|
|
'expired' => ($stat['days_count'] < 5000) ? date('d.m.Y', strtotime($stat['publish_end_date'])) : false,
|
|||
|
|
'price' => $price,
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
$results['stats'][$date]['amount'] = $price+$results['stats'][$date]['amount'];
|
|||
|
|
|
|||
|
|
if ($date != $new_date) {
|
|||
|
|
$today = 0;
|
|||
|
|
$date = '';
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$results['total'] = (float)$total < 1 ? (float)$total * 100 : (float)$total;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$results['stats'] = array_reverse($results['stats']);
|
|||
|
|
|
|||
|
|
$app->response->header('Content-Type', 'application/json');
|
|||
|
|
$app->response->setStatus(200);
|
|||
|
|
$app->response->setBody(json_encode([
|
|||
|
|
'success' => true,
|
|||
|
|
'user_id' => (int)$user_id,
|
|||
|
|
'results' => $results,
|
|||
|
|
'errors' => $errors,
|
|||
|
|
], JSON_UNESCAPED_UNICODE));
|
|||
|
|
$app->stop();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$app->response->header('Content-Type', 'application/json');
|
|||
|
|
$app->response->setStatus(200);
|
|||
|
|
$app->response->setBody(json_encode([
|
|||
|
|
'success' => false,
|
|||
|
|
'user_id' => (int)$user_id,
|
|||
|
|
'errors' => $errors,
|
|||
|
|
], JSON_UNESCAPED_UNICODE));
|
|||
|
|
$app->stop();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function getModerators($app, $get = null, $post = null) {
|
|||
|
|
|
|||
|
|
$error = false;
|
|||
|
|
$errors = [];
|
|||
|
|
|
|||
|
|
$section = null;
|
|||
|
|
if (isset($get['section']))
|
|||
|
|
$section = trim($get['section']);
|
|||
|
|
|
|||
|
|
if (($user_id = $_SESSION['id']) && !is_null($section)) {
|
|||
|
|
|
|||
|
|
// Открываем соединение с БД
|
|||
|
|
$mdb = $app->container->get('mysql');
|
|||
|
|
$pdo = $app->container->get('mypdo');
|
|||
|
|
|
|||
|
|
/*error_reporting(E_ERROR | E_WARNING | E_PARSE);
|
|||
|
|
ini_set('display_errors', 1);*/
|
|||
|
|
|
|||
|
|
$employees = [];
|
|||
|
|
$meta = [];
|
|||
|
|
|
|||
|
|
// Текущий пользователь
|
|||
|
|
$user = new \User;
|
|||
|
|
$user->get($user_id);
|
|||
|
|
|
|||
|
|
$object_id = null;
|
|||
|
|
if (isset($get['object_id']))
|
|||
|
|
$object_id = intval($get['object_id']);
|
|||
|
|
|
|||
|
|
$event_id = null;
|
|||
|
|
if (isset($get['event_id']))
|
|||
|
|
$event_id = intval($get['event_id']);
|
|||
|
|
|
|||
|
|
$sub_id = null;
|
|||
|
|
if (isset($get['sub_id']))
|
|||
|
|
$sub_id = intval($get['sub_id']);
|
|||
|
|
|
|||
|
|
if ($section == 'adverts') {
|
|||
|
|
|
|||
|
|
$users = [];
|
|||
|
|
$this_users = [];
|
|||
|
|
|
|||
|
|
$user = new \User();
|
|||
|
|
$user->get($user_id);
|
|||
|
|
$agency_id = $user->agencyId;
|
|||
|
|
|
|||
|
|
$users_moderation = [];
|
|||
|
|
|
|||
|
|
//Все юзеры агенства
|
|||
|
|
$sql_users = "SELECT * FROM users WHERE id in (select id from users where id=$agency_id or id_manager=$agency_id or id_manager in
|
|||
|
|
(select id from users where id_manager=$agency_id or id_manager in
|
|||
|
|
(select id from users where id_manager=$agency_id)))";
|
|||
|
|
|
|||
|
|
$q_users = $pdo->query($sql_users);
|
|||
|
|
while($r_users = $pdo->fetch_assoc($q_users)) {
|
|||
|
|
$users[$r_users['id']] = $r_users;
|
|||
|
|
if ($r_users['id'] == $user_id) {
|
|||
|
|
$this_users = $r_users;
|
|||
|
|
//$meta['this_users'] = $this_users;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//Поиск модераций
|
|||
|
|
$sql_modr = "SELECT * FROM objects_moderation_advert WHERE object_id={$object_id} AND agent_id={$user_id}";
|
|||
|
|
$q_modr = $pdo->query($sql_modr);
|
|||
|
|
if ($pdo->num_rows($q_modr) > 0) {
|
|||
|
|
$r_modr = $pdo->fetch_assoc($q_modr);
|
|||
|
|
$sql_modr_users = "SELECT * FROM `objects_moderation_advert_user_work` WHERE moderation_id = {$r_modr['id']}";
|
|||
|
|
$q_modr_users = $pdo->query($sql_modr_users);
|
|||
|
|
if ($pdo->num_rows($q_modr_users) > 0) {
|
|||
|
|
$meta['moderator'] = $r_modr;
|
|||
|
|
while($r_moder_users = $pdo->fetch_assoc($q_modr_users)) {
|
|||
|
|
$users_moderation[] = (int)$r_moder_users['user_id'];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$db_sphinx = $app->container->get('sphinx2');
|
|||
|
|
$obj = $db_sphinx->fetch_assoc($db_sphinx->query("SELECT * FROM objects WHERE id={$object_id}"));
|
|||
|
|
|
|||
|
|
if ($obj)
|
|||
|
|
$meta['object'] = $obj;
|
|||
|
|
|
|||
|
|
$meta['users'] = $users_moderation;
|
|||
|
|
|
|||
|
|
foreach ($users as $emp) {
|
|||
|
|
if ($emp['blocked'] == 0) {
|
|||
|
|
if (($emp['manager'] == 1 || $emp['agency'] == 1 || $emp['users_admin'] == 1) && $emp['show_all_objects_page'] == 1) {
|
|||
|
|
$employees[] = [
|
|||
|
|
'id' => intval($emp['id']),
|
|||
|
|
'name' => htmlspecialchars_decode(trim($emp['last_name'] . ' ' . $emp['first_name'] . ' ' . $emp['middle_name'])),
|
|||
|
|
'is_selected' => (in_array($emp['id'], $users_moderation)),
|
|||
|
|
'is_agent' => boolval($emp['agent']),
|
|||
|
|
'is_manager' => boolval($emp['manager']),
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
} else if ($section == 'events') {
|
|||
|
|
|
|||
|
|
$users = [];
|
|||
|
|
$this_users = [];
|
|||
|
|
|
|||
|
|
$user = new \User();
|
|||
|
|
$user->get($user_id);
|
|||
|
|
$agency_id = $user->agencyId;
|
|||
|
|
|
|||
|
|
//Все юзеры агенства
|
|||
|
|
$sql_users = "SELECT * FROM users WHERE id in (select id from users where id=$agency_id or id_manager=$agency_id or id_manager in
|
|||
|
|
(select id from users where id_manager=$agency_id or id_manager in
|
|||
|
|
(select id from users where id_manager=$agency_id)))";
|
|||
|
|
|
|||
|
|
$q_users = $pdo->query($sql_users);
|
|||
|
|
while($r_users = $pdo->fetch_assoc($q_users)) {
|
|||
|
|
$users[$r_users['id']] = $r_users;
|
|||
|
|
if ($r_users['id'] == $user_id) {
|
|||
|
|
$this_users = $r_users;
|
|||
|
|
//$meta['this_users'] = $this_users;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$sql_event = "SELECT * FROM user_object_events WHERE id = {$event_id}";
|
|||
|
|
$q_event = $pdo->query($sql_event);
|
|||
|
|
$r_event = $pdo->fetch_assoc($q_event);
|
|||
|
|
if (isset($r_event['object_id']) && $r_event['object_id'] > 0) {
|
|||
|
|
$object_id = (int)$r_event['object_id'];
|
|||
|
|
$meta['object_id'] = $object_id;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if ($object_id > 0) {
|
|||
|
|
|
|||
|
|
$db_sphinx = $app->container->get('sphinx2');
|
|||
|
|
|
|||
|
|
//ответственный по объекту
|
|||
|
|
$sql_obj = "SELECT * FROM objects WHERE id={$object_id}";
|
|||
|
|
$q_obj = $db_sphinx->query($sql_obj);
|
|||
|
|
$r_obj = $db_sphinx->fetch_assoc($q_obj);
|
|||
|
|
if (isset($r_obj['id_add_user']) && $r_obj['id_add_user'] > 0) {
|
|||
|
|
$user_add = (int)$r_obj['id_add_user'];
|
|||
|
|
$meta['user_add'] = $user_add;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$user_for = 0;
|
|||
|
|
if ($sub_id > 0) {
|
|||
|
|
$sql_sub = "SELECT * FROM user_sub_comments WHERE id = {$sub_id}";
|
|||
|
|
$q_sub = $pdo->query($sql_sub);
|
|||
|
|
$r_sub = $pdo->fetch_assoc($q_sub);
|
|||
|
|
$meta['event_id'] = $event_id;
|
|||
|
|
$meta['sub_comment'] = $r_sub['sub_comment'];
|
|||
|
|
$meta['user_for'] = (int)$r_sub['user_for'];
|
|||
|
|
$user_for = (int)$r_sub['user_for'];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
foreach ($users as $emp) {
|
|||
|
|
if ($emp['blocked'] == 0) {
|
|||
|
|
if (
|
|||
|
|
(($emp['manager'] == 1 || $emp['agency'] == 1 || $emp['users_admin'] == 1) && $emp['show_all_objects_page'] == 1) ||
|
|||
|
|
($user_add > 0 && $emp['id'] == $user_add)
|
|||
|
|
) {
|
|||
|
|
$employees[] = [
|
|||
|
|
'id' => intval($emp['id']),
|
|||
|
|
'name' => htmlspecialchars_decode(trim($emp['last_name'] . ' ' . $emp['first_name'] . ' ' . $emp['middle_name'])),
|
|||
|
|
'is_selected' => ($emp['id'] == $user_for),
|
|||
|
|
'is_agent' => boolval($emp['agent']),
|
|||
|
|
'is_manager' => boolval($emp['manager']),
|
|||
|
|
];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (!$error) {
|
|||
|
|
$app->response->header('Content-Type', 'application/json');
|
|||
|
|
$app->response->setStatus(200);
|
|||
|
|
|
|||
|
|
$sources = [
|
|||
|
|
'success' => true,
|
|||
|
|
'user_id' => (int)$user_id,
|
|||
|
|
'list' => $employees,
|
|||
|
|
'meta' => $meta
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
$app->response->setBody(json_encode($sources, JSON_UNESCAPED_UNICODE));
|
|||
|
|
$app->stop();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$app->response->header('Content-Type', 'application/json');
|
|||
|
|
$app->response->setStatus(200);
|
|||
|
|
$app->response->setBody(json_encode([
|
|||
|
|
'success' => false,
|
|||
|
|
'user_id' => (int)$user_id
|
|||
|
|
], JSON_UNESCAPED_UNICODE));
|
|||
|
|
$app->stop();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function setConfirmModeration($app, $get, $post) {
|
|||
|
|
|
|||
|
|
$error = false;
|
|||
|
|
$errors = [];
|
|||
|
|
|
|||
|
|
$body = $app->request->getBody();
|
|||
|
|
$data = json_decode($body, true);
|
|||
|
|
|
|||
|
|
$object_id = null;
|
|||
|
|
if (isset($data['object_id']))
|
|||
|
|
$object_id = $data['object_id'];
|
|||
|
|
|
|||
|
|
$services = null;
|
|||
|
|
if (isset($data['services']))
|
|||
|
|
$services = $data['services'];
|
|||
|
|
|
|||
|
|
if (($user_id = $_SESSION['id']) && !is_null($object_id) && !is_null($services)) {
|
|||
|
|
|
|||
|
|
// Открываем соединение с БД
|
|||
|
|
$mypdo = $app->container->get('mypdo');
|
|||
|
|
|
|||
|
|
$moderation_inst = new \ModerationAdvert($mypdo);
|
|||
|
|
$result = $moderation_inst->confirmModeration($object_id);
|
|||
|
|
|
|||
|
|
if (!empty($result['errors']))
|
|||
|
|
$errors = $result['errors'];
|
|||
|
|
|
|||
|
|
//$moderation_inst->checkAndClear($object_id, 'use_in_advert', false);
|
|||
|
|
|
|||
|
|
if (empty($errors)) {
|
|||
|
|
$app->response->header('Content-Type', 'application/json');
|
|||
|
|
$app->response->setStatus(200);
|
|||
|
|
$app->response->setBody(json_encode([
|
|||
|
|
'success' => ($result['result'] == 'done'),
|
|||
|
|
'user_id' => (int)$user_id,
|
|||
|
|
], JSON_UNESCAPED_UNICODE));
|
|||
|
|
$app->stop();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$app->response->header('Content-Type', 'application/json');
|
|||
|
|
$app->response->setStatus(200);
|
|||
|
|
$app->response->setBody(json_encode([
|
|||
|
|
'success' => false,
|
|||
|
|
'user_id' => (int)$_SESSION['id'],
|
|||
|
|
'errors' => $errors,
|
|||
|
|
], JSON_UNESCAPED_UNICODE));
|
|||
|
|
$app->stop();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function setModeration($app, $get, $post) {
|
|||
|
|
|
|||
|
|
$error = false;
|
|||
|
|
$errors = [];
|
|||
|
|
|
|||
|
|
$body = $app->request->getBody();
|
|||
|
|
$data = json_decode($body, true);
|
|||
|
|
|
|||
|
|
$object_id = null;
|
|||
|
|
if (isset($data['object_id']))
|
|||
|
|
$object_id = $data['object_id'];
|
|||
|
|
|
|||
|
|
$employee_ids = null;
|
|||
|
|
if (isset($data['employee_ids']))
|
|||
|
|
$employee_ids = $data['employee_ids'];
|
|||
|
|
|
|||
|
|
$comment = '';
|
|||
|
|
if (isset($data['comment']))
|
|||
|
|
$comment = trim($data['comment']);
|
|||
|
|
|
|||
|
|
if (($user_id = $_SESSION['id']) && !is_null($object_id) && is_array($employee_ids)) {
|
|||
|
|
|
|||
|
|
// Открываем соединение с БД
|
|||
|
|
$mypdo = $app->container->get('mypdo');
|
|||
|
|
$mdb = $app->container->get('mysql');
|
|||
|
|
|
|||
|
|
$moderation_inst = new \ModerationAdvert($mypdo);
|
|||
|
|
$result = $moderation_inst->sendModeration($user_id, $object_id, $employee_ids, $comment);
|
|||
|
|
|
|||
|
|
if (!empty($result['errors']))
|
|||
|
|
$errors = $result['errors'];
|
|||
|
|
|
|||
|
|
if (empty($errors)) {
|
|||
|
|
$app->response->header('Content-Type', 'application/json');
|
|||
|
|
$app->response->setStatus(200);
|
|||
|
|
$app->response->setBody(json_encode([
|
|||
|
|
'success' => true,
|
|||
|
|
'user_id' => (int)$user_id
|
|||
|
|
], JSON_UNESCAPED_UNICODE));
|
|||
|
|
$app->stop();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$app->response->header('Content-Type', 'application/json');
|
|||
|
|
$app->response->setStatus(200);
|
|||
|
|
$app->response->setBody(json_encode([
|
|||
|
|
'success' => false,
|
|||
|
|
'user_id' => (int)$_SESSION['id'],
|
|||
|
|
'errors' => $errors
|
|||
|
|
], JSON_UNESCAPED_UNICODE));
|
|||
|
|
$app->stop();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function unsetModeration($app, $get, $post) {
|
|||
|
|
|
|||
|
|
$error = false;
|
|||
|
|
$errors = [];
|
|||
|
|
|
|||
|
|
$object_id = null;
|
|||
|
|
if (isset($get['object_id']))
|
|||
|
|
$object_id = intval($get['object_id']);
|
|||
|
|
|
|||
|
|
if (($user_id = $_SESSION['id']) && !is_null($object_id)) {
|
|||
|
|
|
|||
|
|
// Открываем соединение с БД
|
|||
|
|
$mypdo = $app->container->get('mypdo');
|
|||
|
|
$mdb = $app->container->get('mysql');
|
|||
|
|
|
|||
|
|
$moderation_inst = new \ModerationAdvert($mypdo);
|
|||
|
|
$result = $moderation_inst->checkAndClear($object_id, 'use_in_advert', true);
|
|||
|
|
|
|||
|
|
if (!empty($result['errors']))
|
|||
|
|
$errors = $result['errors'];
|
|||
|
|
|
|||
|
|
if (empty($errors)) {
|
|||
|
|
$app->response->header('Content-Type', 'application/json');
|
|||
|
|
$app->response->setStatus(200);
|
|||
|
|
$app->response->setBody(json_encode([
|
|||
|
|
'success' => true,
|
|||
|
|
'user_id' => (int)$user_id
|
|||
|
|
], JSON_UNESCAPED_UNICODE));
|
|||
|
|
$app->stop();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$app->response->header('Content-Type', 'application/json');
|
|||
|
|
$app->response->setStatus(200);
|
|||
|
|
$app->response->setBody(json_encode([
|
|||
|
|
'success' => false,
|
|||
|
|
'user_id' => (int)$_SESSION['id'],
|
|||
|
|
'errors' => $errors
|
|||
|
|
], JSON_UNESCAPED_UNICODE));
|
|||
|
|
$app->stop();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public function checkAdUnique($app, $post) {
|
|||
|
|
$pdo = $app->container->get('mypdo');
|
|||
|
|
|
|||
|
|
$body = $app->request->getBody();
|
|||
|
|
|
|||
|
|
$object_id = $_GET['object_id'];
|
|||
|
|
$agency_id = $_SESSION['agency_id'];
|
|||
|
|
|
|||
|
|
$agents = [$agency_id]; // Добавляем самого главу
|
|||
|
|
$queue = [$agency_id];
|
|||
|
|
|
|||
|
|
|
|||
|
|
while (!empty($queue)) {
|
|||
|
|
$current_id = array_shift($queue);
|
|||
|
|
$sql = "SELECT id FROM users WHERE id_manager = $current_id";
|
|||
|
|
$result = $pdo->query($sql);
|
|||
|
|
|
|||
|
|
while ($row = $pdo->fetch_assoc($result)) {
|
|||
|
|
$agents[] = $row['id'];
|
|||
|
|
$queue[] = $row['id'];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
$all_agents = $agents;
|
|||
|
|
|
|||
|
|
$this_object_sql = "SELECT id FROM objects WHERE id = $object_id AND use_in_advert = 1";
|
|||
|
|
$this_object_query = $pdo->query($this_object_sql);
|
|||
|
|
$this_object = $pdo->fetch_assoc($this_object_query);
|
|||
|
|
$sql_object = "SELECT o.adres, o.cadastral_number, o.cadastral_number_land, o.id_add_user, oai.flat_number, o.id
|
|||
|
|
FROM objects o
|
|||
|
|
LEFT JOIN objects_additional_information oai ON o.id = oai.object_id
|
|||
|
|
WHERE o.id = $object_id";
|
|||
|
|
|
|||
|
|
$result = $pdo->query($sql_object);
|
|||
|
|
$obj_data = $pdo->fetch_assoc($result);
|
|||
|
|
|
|||
|
|
if (!empty($obj_data['cadastral_number'])) {
|
|||
|
|
$cadastral_number_to_check = $obj_data['cadastral_number'];
|
|||
|
|
$cad_column = 'cadastral_number';
|
|||
|
|
} elseif (!empty($obj_data['cadastral_number_land']) && empty($obj_data['cadastral_number'])) {
|
|||
|
|
$cadastral_number_to_check = $obj_data['cadastral_number_land'];
|
|||
|
|
$cad_column = 'cadastral_number_land';
|
|||
|
|
}
|
|||
|
|
if ($cadastral_number_to_check) {
|
|||
|
|
// Проверяем по кадастровому номеру
|
|||
|
|
$cad_sql = "SELECT id FROM objects
|
|||
|
|
WHERE $cad_column = '" . addslashes($cadastral_number_to_check) . "'
|
|||
|
|
AND id != " . intval($obj_data['id']) . "
|
|||
|
|
AND id_add_user IN (" . implode(",", $all_agents) . ")
|
|||
|
|
AND use_in_advert = 1"; // Исключаем текущий ID сразу в SQL
|
|||
|
|
$cad_res = $pdo->query($cad_sql);
|
|||
|
|
|
|||
|
|
$object_ids = [];
|
|||
|
|
while ($cad_obj = $pdo->fetch_assoc($cad_res)) {
|
|||
|
|
$object_ids[] = $cad_obj['id'];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
if (!empty($object_ids)) {
|
|||
|
|
echo json_encode(["object_in_ads" => true, "object_ids" => $object_ids]);
|
|||
|
|
exit();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
// Если нет кадастрового номера, идем по обычной логике
|
|||
|
|
$sim_sql = "SELECT o.id, o.id_add_user
|
|||
|
|
FROM objects o
|
|||
|
|
LEFT JOIN objects_additional_information oai ON o.id = oai.object_id
|
|||
|
|
WHERE o.id_add_user IN (" . implode(",", $all_agents) . ")";
|
|||
|
|
|
|||
|
|
$conditions = [];
|
|||
|
|
|
|||
|
|
if (!empty($obj_data['adres']) && !empty($obj_data['flat_number'])) {
|
|||
|
|
$conditions[] = "(o.adres = '" . addslashes($obj_data['adres']) . "'
|
|||
|
|
AND oai.flat_number = '" . addslashes($obj_data['flat_number']) . "')";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (empty($conditions)) {
|
|||
|
|
echo json_encode(["object_in_ads" => false]);
|
|||
|
|
exit();
|
|||
|
|
} else {
|
|||
|
|
$sim_sql .= " AND (" . implode(" OR ", $conditions) . ")";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$sim_res = $pdo->query($sim_sql);
|
|||
|
|
|
|||
|
|
$matching_objects = [];
|
|||
|
|
while ($row = $pdo->fetch_assoc($sim_res)) {
|
|||
|
|
$matching_objects[$row['id']] = $row['id_add_user'];
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$filtered_objects = [];
|
|||
|
|
foreach ($matching_objects as $id => $id_add_user) {
|
|||
|
|
if (in_array($id_add_user, $all_agents)) {
|
|||
|
|
$filtered_objects[] = $id;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
$object_in_ads = false;
|
|||
|
|
$objects_in_ads = [];
|
|||
|
|
$this_object_id = intval($this_object['id']);
|
|||
|
|
foreach ($filtered_objects as $obj_id) {
|
|||
|
|
$sql_ad = "SELECT COUNT(*) as count FROM objects WHERE id = $obj_id AND use_in_advert = 1";
|
|||
|
|
$ad_res = $pdo->query($sql_ad);
|
|||
|
|
$ad_row = $pdo->fetch_assoc($ad_res);
|
|||
|
|
if ($ad_row['count'] > 0 && $obj_id !== $this_object_id) {
|
|||
|
|
$objects_in_ads[] = $obj_id;
|
|||
|
|
$object_in_ads = true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
echo json_encode(["object_in_ads" => $object_in_ads, "object_ids" => $objects_in_ads]);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|