debug = true; error_reporting(E_ALL | E_STRICT); ini_set('display_errors', 1); } if (!is_null($db)) { $this->pdo = $db; } else { $pdo = new MysqlPdo(hst, ndb, user, pass); $pdo->query("SET NAMES 'utf8'"); $this->pdo = $pdo; } } /** * Подключение сфинкса */ private function setSphinx(){ $this->pdo_sphinx = new MysqlPdo(hstsph2, null, null, null, true, '9306'); } /* * Запись в таблицу модерации */ public function addUpdate($agent_id, $object_id, $field){ /* error_reporting(E_ALL | E_STRICT); ini_set('display_errors', 1);*/ $sql_moderation = "SELECT id FROM objects_moderation_advert WHERE agent_id = {$agent_id} AND object_id = {$object_id}"; $q_moderation = $this->pdo->query($sql_moderation); if($this->pdo->num_rows($q_moderation) == 0){ $in_moderation = "INSERT INTO objects_moderation_advert (object_id, agent_id, {$field['field']}) VALUES ({$object_id}, {$agent_id}, {$field['value']})"; $this->pdo->query($in_moderation); } else { $r_moderation = $this->pdo->fetch_assoc($q_moderation); $up_moderation = "UPDATE objects_moderation_advert SET {$field['field']} = {$field['value']} WHERE id={$r_moderation['id']}"; $this->pdo->query($up_moderation); } } /* * Проверка и очистка таблицы модерации по объекту * */ public function checkAndClear($object_id, $type, $unset_advert = false) { $types = ['add_to_bn_feed','add_to_yandex_feed','add_to_domclick_feed','add_to_emls_feed','add_to_cian_feed','add_to_zipal','add_to_avito_feed']; $sql = "SELECT * FROM objects_moderation_advert WHERE object_id = {$object_id}"; $q = $this->pdo->query($sql); if($this->pdo->num_rows($q) > 0){ $r = $this->pdo->fetch_assoc($q); if($type =='use_in_advert') { $this->clearModeration($r['id']); if ($unset_advert) $this->unsetGlobalAdvert($object_id); } else { $this->pdo->query("UPDATE objects_moderation_advert SET {$type}=0 WHERE id = {$r['id']}"); $clear = true; foreach($types as $t){ if($t != $type && $r[$t] == 1){ $clear = false; } } if($clear){ $this->clearModeration($r['id']); if ($unset_advert) $this->unsetGlobalAdvert($object_id); } } } /* $sql_check = "SELECT id FROM object_publish_statistic WHERE object_id={$object_id} AND publish_user_id={$agent_id} AND on_moderation = 0"; $q_check = $this->pdo->query($sql_check); // $r_check = $this->pdo->fetch_assoc($q_check); if($this->pdo->num_rows($q_check) == 0){ $this->pdo->query("DELETE FROM objects_moderation_advert WHERE object_id={$object_id} AND agent_id={$agent_id}"); }*/ } /** * Удаление модерациий */ private function clearModeration($moderationId){ $this->pdo->query("DELETE FROM objects_moderation_advert WHERE id={$moderationId}"); $this->pdo->query("DELETE FROM objects_moderation_advert_user_work WHERE moderation_id={$moderationId}"); } /** * Снятие с рекламы, глобальный флаг */ private function unsetGlobalAdvert($object_id) { $this->setSphinx(); $this->pdo->query("UPDATE `objects` SET `use_in_advert` = 0 WHERE `id` = {$object_id}"); $sql_object_sph = "UPDATE objects SET use_in_advert = 0 WHERE id={$object_id}"; $this->pdo_sphinx->query($sql_object_sph); } /*** * Отправка модерации * */ public function sendModeration($agent_id, $object_id, $who_work, $comment){ $this->setSphinx(); $types = ['add_to_bn_feed','add_to_yandex_feed','add_to_domclick_feed','add_to_emls_feed','add_to_cian_feed','add_to_zipal','add_to_avito_feed']; $types_days = array('add_to_bn_feed'=>'YANDEX_JW_FEED', 'add_to_yandex_feed'=>'FREE_JW_FEED', 'add_to_domclick_feed'=>'DOMCLICK_JW_FEED', 'add_to_emls_feed'=>'EMLS_JW_FEED', 'add_to_cian_feed'=>'CIAN_JW_FEED', 'add_to_zipal'=>'ZIPAL', 'add_to_avito_feed'=>'AVITO_JW_FEED'); $result = array(); $comment = mysql_escape_string($comment); if($agent_id > 0 && $object_id > 0 && !empty($who_work)){ $sql_moderation = "SELECT * FROM objects_moderation_advert WHERE agent_id = {$agent_id} AND object_id = {$object_id}"; $q_moderation = $this->pdo->query($sql_moderation); if($this->pdo->num_rows($q_moderation) > 0){ $r_moderation = $this->pdo->fetch_assoc($q_moderation); $sql_up_modr = "UPDATE objects_moderation_advert SET comment = '{$comment}' WHERE id = {$r_moderation['id']}"; $this->pdo->query($sql_up_modr); $this->pdo->query("DELETE FROM objects_moderation_advert_user_work WHERE moderation_id={$r_moderation['id']}"); $sql_object = "UPDATE objects SET use_in_advert = 1, is_main = 0 WHERE id={$object_id}"; $this->pdo->query($sql_object); $sql_object_sph = "UPDATE objects SET use_in_advert = 1 WHERE id={$object_id}"; $this->pdo_sphinx->query($sql_object_sph); $user = new User(); $user->get($agent_id); $users = array(); $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 = $this->pdo->query($sql_users); while($r_users = $this->pdo->fetch_assoc($q_users)){ $users[$r_users['id']] = $r_users; } //Отправляем на модерацию всем начальникам 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){ $sql_moderation_user_work_in = "INSERT INTO objects_moderation_advert_user_work (moderation_id, user_id) VALUES ({$r_moderation['id']}, {$emp['id']})"; $this->pdo->query($sql_moderation_user_work_in); } } } //Выборка количества дней рекламы $days = array(); $sql_days = "SELECT * FROM object_publish_statistic WHERE object_id = {$object_id} AND on_moderation = 1 ORDER BY id DESC"; $q_days = $this->pdo->query($sql_days); while($r_days = $this->pdo->fetch_assoc($q_days)){ $days[] = $r_days; } foreach($who_work as $user_id){ //Записываем уведомления и задачи для модераторов $platforms_advert = array(); foreach($types as $type){ if($r_moderation[$type] > 0){ $days_platfotm = ''; foreach($days as $day){ if($day['destination'] == $types_days[$type]){ $days_platfotm = $day['days_count'].' дн.'; if($day['days_count'] == 5000) $days_platfotm = 'без ограничения дн.'; $platforms_advert[] = array('platform'=>$type, 'stage' => 1, 'days'=>$days_platfotm); break; } } } } $sql_platforms_advert = json_encode($platforms_advert, JSON_UNESCAPED_UNICODE); $sql_event_obj = "INSERT INTO user_object_events SET user_id ={$user_id}, from_id={$agent_id}, object_id={$object_id}, comment = '{$comment}', platforms_advert = '{$sql_platforms_advert}', type='moderation', schedule_date=NOW()"; $this->pdo->query($sql_event_obj); $result['result'] = 'done'; } } } return $result; } /** * */ public function get_object_moderation($objectsIds = array(), $user_ids = array(), $all = false){ $result = array(); if(isset($_SESSION['id']) && $_SESSION['id'] > 0 && (!empty($objectsIds) || !empty($user_ids))) { if(empty($user_ids)){ $user_ids[] = (int)$_SESSION['id']; } $sql_modr_users = "SELECT * FROM objects_moderation_advert_user_work as w LEFT JOIN objects_moderation_advert as m on w.moderation_id=m.id WHERE w.user_id in (".implode(',',$user_ids).")"; if(!empty($objectsIds)){ $sql_modr_users .= " AND m.object_id in (".implode(',',$objectsIds).")"; } if(!$all){ $sql_modr_users .= " AND w.is_moderation = 0"; } $q_modr_users = $this->pdo->query($sql_modr_users); if($this->pdo->num_rows($q_modr_users) > 0){ while($r_modr = $this->pdo->fetch_assoc($q_modr_users)){ $result[$r_modr['object_id']] = $r_modr; } } } return $result; } /** * */ public function get_object_moderation_agency($user_ids){ if(!empty($user_ids) && is_array($user_ids)){ $sql_moderation = "SELECT id FROM objects_moderation_advert WHERE agent_id in (".implode(',', $user_ids).")"; } } /** * */ public function confirmModeration($object_id){ /*error_reporting(E_ALL | E_STRICT); ini_set('display_errors', 1);*/ $result = array(); $this->setSphinx(); if ($object_id > 0) { $sql_moderation = "SELECT *, m.id as id_moderation FROM objects_moderation_advert_user_work as w LEFT JOIN objects_moderation_advert as m on w.moderation_id=m.id WHERE m.object_id = $object_id AND w.is_moderation = 0"; $q_moderation = $this->pdo->query($sql_moderation); if ($this->pdo->num_rows($q_moderation) > 0) { $sql_obj = "SELECT * FROM objects WHERE id = {$object_id}"; $q_obj = $this->pdo->query($sql_obj); $obj = $this->pdo->fetch_assoc($q_obj); $r_moderation = $this->pdo->fetch_assoc($q_moderation); $agent_id = $r_moderation['agent_id']; $use_in_advert = 0; $created_at = date('Y-m-d H:i:s', strtotime($r_moderation['created_at'])); $updated_at = date('Y-m-d H:i:s', strtotime($r_moderation['updated_at'])); $add_to_bn_feed = ($r_moderation['add_to_bn_feed'] == 1 || $obj['add_to_bn_feed'] == 1) ? 1 : 0; $add_to_yandex_feed = ($r_moderation['add_to_yandex_feed'] == 1 || $obj['add_to_yandex_feed'] == 1) ? 1 : 0; $add_to_domclick_feed = ($r_moderation['add_to_domclick_feed'] == 1 || $obj['add_to_domclick_feed'] == 1) ? 1 : 0; $add_to_emls_feed = ($r_moderation['add_to_emls_feed'] == 1 || $obj['add_to_emls_feed'] == 1) ? 1 : 0; $add_to_zipal = ($r_moderation['add_to_zipal'] == 1 || $obj['add_to_zipal'] == 1) ? 1 : 0; $add_to_avito_feed = ($r_moderation['add_to_avito_feed'] == 1 || $obj['add_to_avito_feed'] == 1) ? 1 : 0; $add_to_cian_feed = ($r_moderation['add_to_cian_feed'] == 1 || $obj['add_to_cian_feed'] == 1) ? 1 : 0; if($add_to_bn_feed == 1 || $add_to_yandex_feed == 1 || $add_to_domclick_feed == 1 || $add_to_emls_feed == 1 || $add_to_zipal == 1 || $add_to_avito_feed == 1 || $add_to_cian_feed == 1 ) $use_in_advert = 1; $sql_up_obj = "UPDATE objects SET add_to_bn_feed = {$add_to_bn_feed}, add_to_yandex_feed = {$add_to_yandex_feed}, add_to_domclick_feed = {$add_to_domclick_feed}, add_to_emls_feed = {$add_to_emls_feed}, add_to_cian_feed = {$add_to_cian_feed}, add_to_zipal = {$add_to_zipal}, add_to_avito_feed = {$add_to_avito_feed}, use_in_advert = {$use_in_advert} WHERE id = {$object_id}"; $this->pdo->query($sql_up_obj); $this->pdo_sphinx->query($sql_up_obj); $sql_up_moderation = "UPDATE objects_moderation_advert_user_work SET is_moderation = 1 WHERE moderation_id = {$r_moderation['id_moderation']}"; //echo $sql_up_moderation; $this->pdo->query($sql_up_moderation); $user = new User(); $user->get($_SESSION['id']); //Коммент и выполненость задачи $comment = date('d.m.Y H:i:s')." ".$user->last_name." ".$user->first_name." ".$user->middle_name; $sql_event = "INSERT INTO user_object_events (user_id, from_id, object_id, type, comment) VALUES ($agent_id, {$_SESSION['id']}, $object_id, 'comment_moderation', '$comment')"; $this->pdo->query($sql_event); $sql_up_event = "UPDATE user_object_events SET calendar_view = 1 WHERE object_id = {$object_id} AND type = 'moderation'"; $this->pdo->query($sql_up_event); $destinations = []; if ($add_to_bn_feed) $destinations[] = "'YANDEX_JW_FEED'"; if ($add_to_yandex_feed) $destinations[] = "'FREE_JW_FEED'"; if ($add_to_domclick_feed) $destinations[] = "'DOMCLICK_JW_FEED'"; if ($add_to_emls_feed) $destinations[] = "'EMLS_JW_FEED'"; if ($add_to_cian_feed) $destinations[] = "'CIAN_JW_FEED'"; if ($add_to_zipal) $destinations[] = "'ZIPAL'"; // Модерация не используется для пакетов, но оставим на всякий:) if ($add_to_avito_feed) $destinations[] = "'AVITO_JW_FEED'"; // Смена статуса модерации и даты публикации в статистике размещения if (!empty($destinations)) { /*$sql_up_stats = "UPDATE object_publish_statistic SET publish_start_date = NOW(), publish_end_date = DATE_ADD(NOW(), INTERVAL days_count DAY), on_moderation = 0 WHERE object_id = {$object_id} AND publish_user_id = {$agent_id} AND unpublish_user_id IS NULL AND (created_at >= '$created_at' AND created_at <= '$updated_at') AND on_moderation = 1 AND destination IN (" . implode(',', $destinations) . ")"; $this->pdo->query($sql_up_stats);*/ foreach ($destinations as $destination) { $sql = "UPDATE object_publish_statistic SET publish_start_date = NOW(), publish_end_date = DATE_ADD(NOW(), INTERVAL days_count DAY), on_moderation = 0 WHERE id IN ( SELECT id FROM ( SELECT id FROM object_publish_statistic WHERE object_id = {$object_id} AND publish_user_id = {$agent_id} AND unpublish_user_id IS NULL AND destination = $destination AND on_moderation = 1 ORDER BY created_at DESC LIMIT 1 ) stats )"; $this->pdo->query($sql); } $sql_cleanup = "DELETE FROM object_publish_statistic WHERE object_id = {$object_id} AND publish_user_id = {$agent_id} AND destination IN ('YANDEX_JW_FEED','FREE_JW_FEED','DOMCLICK_JW_FEED','EMLS_JW_FEED','CIAN_JW_FEED','ZIPAL','AVITO_JW_FEED') AND on_moderation = 1"; $this->pdo->query($sql_cleanup); } $result['result'] = 'done'; } else { $result['errors'][] = 'Объект модерации не найден.'; $result['result'] = false; } } else { $result['errors'][] = 'Не указан ИД объекта.'; $result['result'] = false; } return $result; } }