/engine/functions/classes/class_cron.php
PHP | 4032 lines | 3041 code | 683 blank | 308 comment | 344 complexity | e1d46bcdf34e2989a208985fe1fd66c9 MD5 | raw file
Possible License(s): LGPL-2.1, MPL-2.0-no-copyleft-exception
- <?php
- include_once(__ENGINE_PATH.'/functions/subfunctions/file_functions.php');
- class Cron
- {
- protected $db;
-
- public function __construct(&$db)
- {
- $this->db=&$db;
- }
- /**
- * Блок функций для контроля исполнения cron
- */
- /**
- * Запись в базу в момент запуска крона
- * @param $name
- * @param $interval
- * @return int OR false
- */
- public function cron_start($name, $interval){
- $sql="INSERT INTO `cron_report` (`name`,`interval`,`starttime`) VALUES('{$name}', {$interval}, NOW())";
- if(!$this->db->query($sql)) {
- $this->cron_bugreport("Ошибка старта крон-задания: {$name}.");
- return false;
- }
- return $this->db->get_insert_id();
- }
- /**
- * Промежуточное обновления крон отчёта
- * @param $id
- * @param $data
- * @return bool
- */
- public function cron_update_report($id, $data){
- $sql="UPDATE `cron_report` SET `report_data`='{$data}' WHERE `id`={$id}";
- if(!$this->db->query($sql)) return false;
- return true;
- }
- /**
- * Получить время последнего выполнения крона по name
- * @param $name
- * @return datetime OR false
- */
- public function get_last_runtime($name){
- $sql = "SELECT `starttime` FROM `cron_report` WHERE `name`='{$name}' ORDER BY `id` DESC LIMIT 1";
- $this->db->query($sql);
- $result = $this->db->get_result();
- if(count($result)){
- return $result[0]['starttime'];
- }
- return false;
- }
- /**
- *
- * Крон завершен - обновить отчёт
- * @param $id
- * @param $data
- * @return bool
- */
- public function cron_stop($id, $data){
- $sql="UPDATE `cron_report` SET `stoptime`=NOW(), `report_data`='{$data}' WHERE `id`={$id}";
- if(!$this->db->query($sql)) {
- $this->cron_bugreport("Ошибка остановки крон-задания: #{$id}.");
- file_put_contents(__LOG_ERROR_PATH.'/cronstop.txt',gmdate('d-m-Y H:i')."SQL: {$sql}, ID: {$id}\n",FILE_APPEND);
- return false;
- }
- return true;
- }
- /**
- * Отправка ошибки админу
- * @param $msg
- */
- public function cron_bugreport($msg){
- include_once(__ENGINE_PATH.'/functions/classes/class_mailer.php');
- $mailer=new Mailer();
- $mailer->mail(__SUPPORT_EMAIL, 'Багрепорт: ошибка при выполнении cron-задачи', $msg);
- }
- /**
- * Список отчётов
- * @param string $where
- * @return array
- */
- public function cron_get_reports($where = ''){
- $sql = "SELECT * FROM `cron_report`";
- if(strlen($where)) $sql .= " WHERE {$where}";
- $sql .= " ORDER BY `id` DESC";
- $this->db->query($sql);
- return $this->db->get_result();
- }
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
- //add remined event to write review
- public function remind_users_make_reviews(){
- $func_report = array("users_count"=>0, "guest_count"=>0);
- $users_no_visits = array();//юзеры, которые возможно долго не заходили на сайт и получается, что не видили первое оповещение(спустя 4 дня)
- $user_timetables = array();
- $sql="SELECT DISTINCTROW UNIX_TIMESTAMP(t.`date`) as `date`,t.`id` as `timetable_id`,t.`date_text`,a.`id` as `action_id`,a.`type`, a.`alias` as `action_link`, a.`name` as `action_name`,o.`user_id`
- FROM `timetable_orders` o force index (`user_id_type`)
- INNER JOIN `timetable` t ON o.`timetable_id`=t.`id`
- INNER JOIN `actions` a ON t.`action_id`=a.`id`
- LEFT JOIN `reviews` r ON r.`user_id`=o.`user_id` AND r.`object_type`=3 AND r.`object_id`=a.`id`
- WHERE o.`type`<3 AND
- o.`user_id`>0 AND
- r.`id` is NULL AND
- (
- (a.`type` NOT IN(2,3,6) AND (DATE(t.`date`)=DATE(NOW()-INTERVAL 4 DAY) OR DATE(t.`date`)=DATE(NOW()-INTERVAL 14 DAY)) )
- OR
- (a.`type` IN(2,3) AND DATE(o.`date`)=DATE(NOW()-INTERVAL 14 DAY))
- ) AND
- o.`user_id`!=a.`owner_id`
- ORDER BY o.`user_id`";
- $this->db->query($sql);
- $result=$this->db->get_result();
- if(count($result)){
- include_once(__ENGINE_PATH.'/functions/classes/class_eventer.php');
- $eventer=new Eventer($this->db);
-
- foreach($result as $item){
- //записываем id юзеров, чтобы проверить дату последнего визита сайта
- if(gmdate("d", $item["date"]) === gmdate("d", (time()-14*24*3600)) || in_array($item["type"], array(2,3,6))){
- $users_no_visits[] = $item["user_id"];
- $user_timetables[$item["user_id"]][] = array("action_link"=>$item["action_link"],"action_name"=>$item["action_name"],"timetable_id"=>$item["timetable_id"]);
- }
- $eventer->add_event(1,10,array($item['user_id']=>$item['user_id']),0,$item['action_id'],3,$item['timetable_id'],6,'',gmdate("Y-m-d",time()));
- }
- }
- //теперь проверим дату последнего посещения
- if(count($users_no_visits)){
- $sql="SELECT MAX(v.`date`) as `date`, v.`user_id`,u.`email`,u.`name`
- FROM `visits` v
- JOIN `users` u ON u.`id`=v.`user_id`
- WHERE
- v.`user_id` IN (".join(", ", $users_no_visits).")
- GROUP BY
- v.`user_id`
- HAVING
- MAX( v.`date`) <= (NOW()-INTERVAL 10 DAY)
- ORDER BY
- v.`date` DESC
- ";
- $this->db->query($sql);
- $result3=$this->db->get_result();
- if(count($result3)){
- global $object_types;
- include_once(__ENGINE_PATH.'/functions/classes/class_mailer.php');
- $mailer = new Mailer();
- foreach($result3 as $value){
- if(!trim($value["email"]))
- continue;
- foreach($user_timetables[$value["user_id"]] as $timetable_data){
- $msg = "";
- $subject = "";
- $action_link="/".$object_types[3]['url']."/".$timetable_data["action_link"]."/".($timetable_data["timetable_id"] ? "?date=".$timetable_data["timetable_id"] : "");
- $action_name=$timetable_data["action_name"];
- $user_name=$value["name"];
- include(__ENGINE_PATH."/templates/email.user_review_remind.php");
- if(@$mailer->mail($value["email"], $subject, $msg)) $func_report["users_count"] += 1;
- }
- }
- }
- }
- //напоминаем об отзыве гостям, подававшим заявку
- $sql = "
- SELECT
- t.`id` as `timetable_id`, a.`alias` as `action_link`, a.`name` as `action_name`, o.`email`, o.`name` as `guest_name`
- FROM `timetable_orders` o
- INNER JOIN `timetable` t ON o.`timetable_id`=t.`id`
- INNER JOIN `actions` a ON t.`action_id`=a.`id`
-
- WHERE
- o.`type`<3
- AND o.`user_id`=0
- AND o.`email` != ''
- AND (
- (a.`type` NOT IN(2,3,6) AND DATE(t.`date`)=DATE(NOW()-INTERVAL 4 DAY))
- OR
- (a.`type` IN(2,3) AND DATE(o.`date`)=DATE(NOW()-INTERVAL 14 DAY))
- )
-
- GROUP BY
- o.`order_id`
- ";
- $this->db->query($sql);
- $result2=$this->db->get_result();
- if(count($result2)){
- global $object_types;
- include_once(__ENGINE_PATH.'/functions/classes/class_mailer.php');
- $mailer = new Mailer();
-
- foreach($result2 as $value){
-
- if(!trim($value["email"]))
- continue;
-
- $msg = "";
- $subject = "";
- $action_link="/".$object_types[3]['url']."/".$value["action_link"]."/".($value["timetable_id"] ? "?date=".$value["timetable_id"] : "");
- $action_name=$value["action_name"];
- $guest_name=$value["guest_name"];
- include(__ENGINE_PATH."/templates/email.guest_review_remind.php");
- if(@$mailer->mail($value["email"], $subject, $msg)) $func_report["guest_count"] += 1;
- }
-
- }
- return "пользователям отправлено писем - ".$func_report["users_count"].", гостям отправлено писем - ".$func_report["guest_count"];
-
- }
-
- //send reminder to check actual information to object`s owners
- public function actuality_broodcast($actuality_days=180)
- {
- $mail_count=0;
- $sql='';
- global $object_types;
- $result=array();
- foreach($object_types as $key=>$object_type)
- {
- if(in_array($key,array(2,3,6,7,8,12,13,14)))continue;
- elseif($key==1){
- $sql="SELECT UNIX_TIMESTAMP(o.`created`) as `created`,o.`id`,u.`email`,u.`login`,u.`name` as `user_name`,u.`surname` ,COALESCE(h.`action_type`,0) as `action_type`, DATEDIFF( NOW(), MAX(COALESCE(h.`date`,o.`created`) )) AS `exist` ,o.`owner_id`,o.`name`,o.`alias`,{$key} as `object_type`, 0 as `type`, obr.`region`, obr.`id_object_regions`
- FROM `{$object_type['class']}` o
- LEFT JOIN `users` u ON o.`owner_id`=u.`id`
- LEFT JOIN `object_regions` obr ON obr.`object_type` IN(1,5) AND obr.`object_id`=o.`id` AND obr.`main_link`=1
- LEFT JOIN `objects_history` h ON h.`object_id`=o.`id` AND h.`object_type`={$key} AND h.`action_type` IN(1,2,3) /*AND h.`user_id`=o.`owner_id`*/
- WHERE o.`moderated`=1 AND o.`block`=0 AND o.`is_treiner`=1 AND o.`owner_id`!=30 AND u.`group`=1
- GROUP BY o.`id`
- HAVING (DATEDIFF(NOW(), MAX(COALESCE(h.`date`,o.`created`)))>0) AND (DATEDIFF(NOW(), MAX(COALESCE(h.`date`,o.`created`)))%{$actuality_days})=0
- ORDER BY MAX(COALESCE(h.`date`,o.`created`)) ASC,`id_object_regions` ASC";
- $this->db->query($sql);
- $result=array_merge($result,$this->db->get_result());
- }elseif($key==5){
- $sql="SELECT UNIX_TIMESTAMP(o.`created`) as `created`,o.`id`,u.`email`,u.`login`,u.`name` as `user_name`,u.`surname` ,COALESCE(h.`action_type`,0) as `action_type`, DATEDIFF( NOW(), MAX(COALESCE(h.`date`,o.`created`) )) AS `exist` ,o.`owner_id`,o.`name`,o.`alias`,{$key} as `object_type`, 0 as `type`, obr.`region`, obr.`id_object_regions`
- FROM `{$object_type['class']}` o
- LEFT JOIN `users` u ON o.`owner_id`=u.`id`
- LEFT JOIN `object_regions` obr ON obr.`object_type` IN(1,5) AND obr.`object_id`=o.`id` AND obr.`main_link`=1
- LEFT JOIN `objects_history` h ON h.`object_id`=o.`id` AND h.`object_type`={$key} AND h.`action_type` IN(1,2,3) /*AND h.`user_id`=o.`owner_id`*/
- WHERE o.`moderated`=1 AND o.`block`=0 AND o.`is_treiner`=0 AND o.`is_consultant`=1 AND o.`owner_id`!=30 AND u.`group`=1
- GROUP BY o.`id`
- HAVING (DATEDIFF(NOW(), MAX(COALESCE(h.`date`,o.`created`)))>0) AND (DATEDIFF(NOW(), MAX(COALESCE(h.`date`,o.`created`)))%{$actuality_days})=0
- ORDER BY MAX(COALESCE(h.`date`,o.`created`)) ASC,`id_object_regions` ASC";
- $this->db->query($sql);
- $result=array_merge($result,$this->db->get_result());
- }elseif($key==9){
- include_once(__ENGINE_PATH."/functions/classes/class_esoterics.php");
- $esoterics=new Esoterics($this->db);
- foreach($esoterics->esoteric_type as $key2=>$type)
- {
- $sql="SELECT UNIX_TIMESTAMP(o.`created`) as `created`,o.`id`,u.`email`,u.`login`,u.`name` as `user_name`,u.`surname` ,COALESCE(h.`action_type`,0) as `action_type`, DATEDIFF( NOW(), MAX(COALESCE(h.`date`,o.`created`) )) AS `exist` ,o.`owner_id`,o.`name`,o.`alias`,9 as `object_type`, o.`type`, obr.`region`, obr.`id_object_regions`
- FROM `{$object_type['class']}` o
- LEFT JOIN `users` u ON o.`owner_id`=u.`id`
- LEFT JOIN `object_regions` obr ON obr.`object_type`={$key} AND obr.`object_id`=o.`id` AND obr.`main_link`=1
- LEFT JOIN `objects_history` h ON h.`object_id`=o.`id` AND h.`object_type`={$key} AND h.`action_type` IN(1,2,3) /*AND h.`user_id`=o.`owner_id`*/
- WHERE o.`moderated`=1 AND o.`block`=0 AND o.`type`={$key2} AND o.`owner_id`!=30 AND u.`group`=1
- GROUP BY o.`id`
- HAVING (DATEDIFF(NOW(), MAX(COALESCE(h.`date`,o.`created`)))>0) AND (DATEDIFF(NOW(), MAX(COALESCE(h.`date`,o.`created`)))%{$actuality_days})=0
- ORDER BY MAX(COALESCE(h.`date`,o.`created`)) ASC,`id_object_regions` ASC";
- $this->db->query($sql);
- $result=array_merge($result,$this->db->get_result());
- }
- }elseif($key!=12){
- $sql="SELECT UNIX_TIMESTAMP(o.`created`) as `created`,o.`id`,u.`email`,u.`login`,u.`name` as `user_name`,u.`surname` ,COALESCE(h.`action_type`,0) as `action_type`, DATEDIFF( NOW(), MAX(COALESCE(h.`date`,o.`created`) )) AS `exist` ,o.`owner_id`,o.`name`,o.`alias`,{$key} as `object_type`, 0 as `type`, obr.`region`, obr.`id_object_regions`
- FROM `{$object_type['class']}` o
- LEFT JOIN `users` u ON o.`owner_id`=u.`id`
- LEFT JOIN `object_regions` obr ON obr.`object_type`={$key} AND obr.`object_id`=o.`id` AND obr.`main_link`=1
- LEFT JOIN `objects_history` h ON h.`object_id`=o.`id` AND h.`object_type`={$key} AND h.`action_type` IN(1,2,3) /*AND h.`user_id`=o.`owner_id`*/
- WHERE o.`moderated`=1 AND o.`block`=0 AND o.`owner_id`!=30 AND u.`group`=1
- GROUP BY o.`id`
- HAVING (DATEDIFF(NOW(), MAX(COALESCE(h.`date`,o.`created`)))>0) AND (DATEDIFF(NOW(), MAX(COALESCE(h.`date`,o.`created`)))%{$actuality_days})=0
- ORDER BY MAX(COALESCE(h.`date`,o.`created`)) ASC,`id_object_regions` ASC";
- $this->db->query($sql);
- $result=array_merge($result,$this->db->get_result());
- }else{
- $sql="SELECT UNIX_TIMESTAMP(o.`created`) as `created`,o.`id`,u.`email`,u.`login`,u.`name` as `user_name`,u.`surname` ,COALESCE(h.`action_type`,0) as `action_type`, DATEDIFF( NOW() , MAX(COALESCE(h.`date`,o.`created`) )) AS `exist` ,o.`owner_id`,o.`name`,o.`alias`,{$key} as `object_type`, 0 as `type`, 0 as `region`, 0 as `id_object_regions`
- FROM `{$object_type['class']}` o
- LEFT JOIN `users` u ON o.`owner_id`=u.`id`
- LEFT JOIN `objects_history` h ON h.`object_id`=o.`id` AND h.`object_type`={$key} AND h.`action_type` IN(1,2,3) /*AND h.`user_id`=o.`owner_id`*/
- WHERE o.`moderated`=1 AND o.`block`=0 AND o.`owner_id`!=30 AND u.`group`=1
- GROUP BY o.`id`
- HAVING (DATEDIFF(NOW(), MAX(COALESCE(h.`date`,o.`created`)))>0) AND (DATEDIFF(NOW(), MAX(COALESCE(h.`date`,o.`created`)))%{$actuality_days})=0
- ORDER BY MAX(COALESCE(h.`date`,o.`created`)) ASC";
- $this->db->query($sql);
- $result=array_merge($result,$this->db->get_result());
- }
- }
- $user_objects=array();
- global $new_region_codes;
- foreach($result as $item){
- if(!in_array($item['object_type'],array(9,12))){
- if($item['region']>0 && !in_array($item['object_type'],array(3,7,13))) $link='/'.$new_region_codes[$item['region']]['code'].'/'.$object_types[$item['object_type']]['url'].'/'.$item['alias'];
- else $link='/'.$object_types[$item['object_type']]['url'].'/'.$item['alias'];
- }elseif($item['object_type']!=12) $link='/'.$new_region_codes[$item['region']]['code'].'/'.$object_types[$item['object_type']]['url'.$item['type']].'/'.$item['alias'];
- else $link='/'.$object_types[$item['object_type']]['url'].'/';
- $user_objects[$item['owner_id']][0]=array('email'=>$item['email'],'login'=>$item['login'],'name'=>$item['user_name'],'surname'=>$item['surname']);
- if($item['object_type']==9) $item['object_type'].=$item['type'];
- $user_objects[$item['owner_id']][$item['object_type']][]=array('name'=>$item['name'],'alias'=>$item['alias'],'exist'=>$item['exist'],'link'=>$link,'type'=>$item['type'],'action_type'=>$item['action_type']);
- }
-
- if(count($user_objects)>0){
- include_once(__ENGINE_PATH.'/functions/classes/class_mailer.php');
- $mailer=new Mailer();
- foreach($user_objects as $item)
- {
- $subject='';
- $msg='';
- include(__ENGINE_PATH.'/templates/email.owners.broadcast.php');
- //echo $item[0]['email'].'<br/>'.$msg.'<br/><br/><br/>';
- if(!@$mailer->mail($item[0]['email'], $subject, $msg)) {
- trigger_error('Не удалось отправить напоминания о проверке актуальности объектов',E_USER_WARNING);
- }else $mail_count++;
- }
- }
- return "отправлено писем - ".$mail_count;
- }
-
-
- /**
- * Check media storage for avatars exist
- *
- */
- public function check_media_storage(){
- global $object_types;
- $sql='';
-
- foreach($object_types as $key=>&$value){
- if($key==5 || $key==6) continue;
- $sql.="SELECT {$key} as `object_type`,`id` FROM `{$value['class']}` UNION ";
- }
- unset($value);
- $sql=substr($sql,0,-7);
- $this->db->query($sql);
- $result=&$this->db->get_result();
- global $avatar_types;
- foreach($result as &$value){
- $path=__MEDIA_STORAGE_PATH.'/avatars/objects/'.$value['object_type'].'/'.$value['id'];
- if(!file_exists($path)){
- umask(0);
- if(@mkdir($path)){
- foreach($avatar_types as $key2=>&$value2){
- $path2=$path.'/'.$key2;
- if(!@mkdir($path2)) echo 'Не удалось создать '.$path2.'<br/>';
- }unset($value2);
- if($value['object_type']==4){
- $path2=$path.'/logotips';
- if(!@mkdir($path2)) echo 'Не удалось создать '.$path2.'<br/>';
- }
- }else echo 'Не удалось создать '.$path.' <br/>';
- }else {
- foreach($avatar_types as $key2=>&$value2){
- if(!file_exists($path.'/'.$key2)){
- umask(0);
- if(!@mkdir($path.'/'.$key2)) echo 'Не удалось создать '.$path.'/'.$key2.'<br/>';
- }unset($value2);
- }
- }
-
- if($value['object_type']==4 && !file_exists($path.'/logotips')){
- if(!mkdir($path.'/logotips')) echo 'Не удалось создать '.$path.'/logotips<br/>';
- }
- }
- unset ($value);
-
- $sql='SELECT u.`id` FROM `users` u';
- $this->db->query($sql);
- $result=&$this->db->get_result();
- foreach ($result as &$value) {
- $path=__MEDIA_STORAGE_PATH.'/avatars/users/'.$value['id'];
- if(!file_exists($path)){
- umask(0);
- if(@mkdir($path)){
- foreach($avatar_types as $key2=>&$value2){
- $path2=$path.'/'.$key2;
- if(!mkdir($path2)) echo 'Не удалось создать '.$path2.'<br/>';
- }unset($value2);
- }else echo 'Не удалось создать '.$path.' <br/>';
- }else {
- foreach($avatar_types as $key2=>&$value2){
- if(!file_exists($path.'/'.$key2)){
- umask(0);
- if(!@mkdir($path.'/'.$key2)) echo 'Не удалось создать '.$path.'/'.$key2.'<br/>';
- }unset($value2);
- }
- }
- }unset($value);
-
- $sql='SELECT p.`id`, p.`object_type`, p.`user_id`, p.`object_id` FROM `photoalbums` p';
- $this->db->query($sql);
- $result=&$this->db->get_result();
- global $image_types;
- foreach ($result as &$value) {
- if($value['user_id']>0)$path=__MEDIA_STORAGE_PATH.'/photos/users/'.$value['user_id'].'/'.$value['id'];
- else $path=__MEDIA_STORAGE_PATH.'/photos/objects/'.(($value['object_type']==5)?1:$value['object_type']).'/'.$value['object_id'].'/'.$value['id'];
- if(!file_exists($path)){
- umask(0);
- if(@mkdir($path)){
- foreach($image_types as $key2=>&$value2){
- if($key2==1)continue;
- $path2=$path.'/'.$key2;
- if(!@mkdir($path2)) echo 'Не удалось создать '.$path2.'<br/>';
- }unset($value2);
- }else echo 'Не удалось создать '.$path.' <br/>';
- }else {
- foreach($image_types as $key2=>&$value2){
- if($key2==1)continue;
- if(!file_exists($path.'/'.$key2)){
- umask(0);
- if(!@mkdir($path.'/'.$key2)) echo 'Не удалось создать '.$path.'/'.$key2.'<br/>';
- }
- }unset($value2);
- }
- }unset($value);
-
- }
-
- //рассылка юзерам, которые не заходили на сайт за опеределенный интервал времени
- public function email_broadcast($interval)
- {
- $sql="SELECT MAX(cv.`date`) as `maxdate`,MAX(UNIX_TIMESTAMP(cv.`date`)) as `date`,COUNT(DISTINCT e.`id`) as `events_count`,COUNT(DISTINCT m.`id`) as `message_count` ,u.`id` ,u.`login`,u.`email` ,u.`name`, u.`surname` ";
-
- include_once(__ENGINE_PATH.'/functions/classes/class_eventer.php');
- $eventer=new Eventer($this->db);
-
- foreach($eventer->event_types as $key=>$value){
- $sql.=" ,COUNT(DISTINCT IF(e.`type`={$key},e.`id`,NULL)) as `event_type_{$key}` ";
- }
-
- $sql.="FROM `users` u
- INNER JOIN `visits` cv ON cv.`user_id`=u.`id`
- LEFT JOIN `events` e ON e.`to`=u.`id` AND e.`to_readed`=0 AND e.`created`<NOW()
- LEFT JOIN `user_messages` m ON m.`to`=u.`id` AND m.`to_readed`=0
- WHERE u.`group`<50
- GROUP BY u.`id`
- HAVING DATEDIFF(NOW(),MAX( cv.`date`))>0 AND DATEDIFF(NOW(),MAX( cv.`date`))%{$interval}=0 AND (`events_count`>0 OR `message_count`>0)";
- if($this->db->query($sql))
- {
- include_once(__ENGINE_PATH.'/functions/classes/class_mailer.php');
- $mailer=new Mailer();
-
- include_once(__ENGINE_PATH.'/functions/classes/class_eventer.php');
- $eventer=new Eventer($this->db);
-
- $listeners=&$this->db->get_result();
- global $region_codes;
- $m_count=0;
- foreach($listeners as $adresat)
- {
- $user_id=$adresat['id'];
- $no_text=true;
- $subject='';
- $msg='';
- include(__ENGINE_PATH.'/functions/actions/users.reminder_all.php');
- if(count($result['important'])>0 || count($result['participation'])>0 || count($result['remind'])>0 || count($result['interesting'])>0){
- $adresat_email = $adresat['email'];
- include(__ENGINE_PATH.'/templates/email.broadcast.php');
- if(!@$mailer->mail($adresat['email'], $subject,$msg)) {
- echo ('Не удалось отправить информацию пользователям, не заходившим длительное время');
- }else {
- $m_count++;
- }
- }
- }
- return "отправлено писем - {$m_count}";
- }
- return false;
- }
-
- //рассыдка админам не заходившим на сайте $missing_days дней
- public function email_admins_broadcast($missing_days)
- {
- include_once(__ENGINE_PATH.'/functions/classes/class_eventer.php');
- $eventer=new Eventer($this->db);
-
- $sql="SELECT MAX(cv.`date`) as `maxdate`,MAX(UNIX_TIMESTAMP(cv.`date`)) as `date`,COUNT(DISTINCT e.`id`) as `events_count`,COUNT(DISTINCT m.`id`) as `message_count` ,u.`id` , ur.`region` ,u.`login`,u.`group`,u.`email` ,u.`name`, u.`surname` ";
-
- foreach($eventer->event_types as $key=>$value)
- {
- $sql.=" ,COUNT(DISTINCT IF(e.`type`={$key},e.`id`,NULL)) as `event_type_{$key}` ";
- }
-
- $sql.="FROM `users` u
- LEFT JOIN `users_regions` ur ON ur.`user_id`=u.`id`
- INNER JOIN `cms_visits` cv ON cv.`user_id`=u.`id`
- LEFT JOIN `events` e ON e.`to`=u.`id` AND e.`to_readed`=0 AND e.`created`<NOW()
- LEFT JOIN `user_messages` m ON m.`to`=u.`id` AND m.`to_readed`=0
- WHERE u.`group`>=90
- GROUP BY u.`id` , ur.`region`
- HAVING DATEDIFF(NOW(),MAX( cv.`date`))>0 AND DATEDIFF(NOW(),MAX( cv.`date`))%{$missing_days}=0";
-
-
- if($this->db->query($sql))
- {
- include_once(__ENGINE_PATH.'/functions/classes/class_mailer.php');
- $mailer=new Mailer();
-
- $listeners=&$this->db->get_result();
-
- global $region_codes;
- $m_count=0;
-
- include_once(__ENGINE_PATH.'/cms/functions/classes/class_objects.php');
- $object_objects=new Objects();
- foreach($listeners as $adresat)
- {
- $objects=&$object_objects->get_objects_count('(o.`moderated`=0 OR (om.`id` is not NULL AND om.`created`<(NOW()-INTERVAL '.__MAX_MODIFICATION_MODERATED_HOURS.' HOUR)) OR (om2.`id` is not NULL AND om2.`created`<(NOW()-INTERVAL '.__MAX_MODIFICATION_MODERATED_HOURS.' HOUR)))',$adresat['region'],$adresat['group']);
- $objects_count=$objects[0];
-
- //$censored=&$object_objects->get_objects_count(0,0,'` DESC',array('user_id'),'o.`censored`=1',0,0,$adresat['region'],true);
- $censored_count=0;
-
- $user_id=$adresat['id'];
- $no_text=true;
- include(__ENGINE_PATH.'/functions/actions/users.reminder_all.php');
- if( $objects_count > 0 || $censored_count >0 || count($result['important'])>0 || count($result['participation'])>0 || count($result['remind'])>0 || count($result['interesting'])>0)
- {
- $subject='';
- $msg='';
- $adresat_email = '';
- include(__ENGINE_PATH.'/templates/email.broadcast.php');
- if(!@$mailer->mail($adresat['email'], $subject,$msg)) {
- trigger_error('Не удалось отправить информацию об админах, не заходивших в CMS длительное время',E_USER_WARNING);
- }
- else $m_count++;
- }
- }
- return "отправлено писем - {$m_count}";
- }
- return false;
- }
-
- public function check_missing_filial_admins($actual_after_days,$emails)
- {
- $sql="SELECT MAX(cv.`date`) as `maxdate`,MAX(UNIX_TIMESTAMP(cv.`date`)) as `date`,cv.`user_id` ,u.`login`,u.`group` ,u.`name`, u.`surname`,GROUP_CONCAT(DISTINCT ur.`region`) as `regions`
- FROM `users` u
- LEFT JOIN `cms_visits` cv ON cv.`user_id`=u.`id`
- LEFT JOIN `users_regions` ur ON ur.`user_id`=u.`id`
- WHERE u.`group`>=80 AND u.`group`<100 AND u.`id`!=8439 /*татьяна*/
- GROUP BY cv.`user_id`
- HAVING `maxdate`<(NOW()-INTERVAL {$actual_after_days} DAY)";
-
- include_once(__ENGINE_PATH.'/functions/subfunctions/common.users_groups_arrays.php');
- if ($this->db->query($sql))
- {
- $admins=$this->db->get_result();
- //отправляем уведомление
- if(count($admins) > 0)
- {
- include_once(__ENGINE_PATH.'/functions/classes/class_mailer.php');
- $mailer=new Mailer();
-
- global $region_codes;
-
- $subject='';
- $msg='';
- include(__ENGINE_PATH.'/templates/email.missing_admins.php');
-
- if(!@$mailer->mail($emails, $subject,$msg)) {
- trigger_error('Не удалось отправить информацию об админах, не заходивших в CMS длительное время',E_USER_WARNING);
- }
- }
- }
- }
-
-
- //формируем таблицу последних посещений
- public function visit_last_days(){
- //обвновляем данные вспомогательной таблицы для посещений
- $sql='UPDATE `visits` SET `guest_id`=`user_id` WHERE `user_id`>0';
- $result=$this->db->query($sql);
- if(!$result) trigger_error('Не удалось обновить `visits`',E_USER_WARNING);
-
-
- $sql='TRUNCATE TABLE `visits_last_days`';
- if(!$result || !$this->db->query($sql)) {
- $result=false;
- trigger_error('Не удалось очистить `visits_last_days`',E_USER_WARNING);
- }
-
- $last_month=gmdate("Y-m-d",gmmktime(gmdate('H'),gmdate('i'),gmdate('s'),gmdate('m')-1,gmdate('d'),gmdate('Y')));
- $sql='INSERT INTO `visits_last_days` (`last_visit`,`object_type`,`object_id`,`user_id`,`guest_id`) SELECT MAX(`date`), `object_type`, `object_id`, `user_id`, `guest_id` FROM `visits` WHERE `date`>=\''.$last_month.'\' GROUP BY `object_type`, `object_id`, `guest_id`';
- if(!$result || !$this->db->query($sql)) {
- $result=false;
- trigger_error('Не удалось сформировать `visits_last_days`',E_USER_WARNING);
- }
-
- $sql='UPDATE `visits_last_days` SET `object_type`=1 WHERE `object_type`=5';
- if(!$result || !$this->db->query($sql)) {
- $result=false;
- trigger_error('Не удалось подготовить `visits_last_days` для консультантов',E_USER_WARNING);
- }
- return $result;
- }
- public function visits_intermediate_clear()
- {
- $func_report = array('replace'=>0, 'truncate'=>0);
- $this->db->query('SELECT MAX(`id`) as `max_id` FROM `visits_intermediate`');
- $id = $this->db->get_result();
- if (isset($id[0]['max_id'])) {
- $id = $id[0]['max_id'];
- if (is_numeric($id) && $id > 0) {
- if ($this->db->query('INSERT INTO `visits` SELECT `date`, `object_type`, `object_id`, `ip`, `browser`, `user_id`, `guest_id`, `ip_region` FROM `visits_intermediate` WHERE `id`<='.$id))
- $func_report['replace'] = 1;
- if ($this->db->query('DELETE FROM `visits_intermediate` WHERE `id`<='.$id))
- $func_report['truncate'] = 1;
- return 'таблица `visits` '.(!$func_report['replace'] ? 'НЕ ' : 'успешно ').'обновлена, данными из таблицы `visits_intermediate`; таблица `visits_intermediate` '.(!$func_report['truncate'] ? 'НЕ ' : 'успешно ').'очищена';
- }
- return 'неверно определен ID последней записи ('.$id.')';
- }
- return 'пустая таблица `visits_intermediate` или ошибка запроса';
- }
-
-
- //сворачиваем таблицы посещений
- public function visits_itog($visits_actual_days = 1, $visits_itog_actual_days = 30)
- {
- $func_report = array('visits_update_guestid_field'=>0, 'visits_visits_itog'=>0, 'visits_delete_old'=>0, 'visits_update_objects'=>0, 'visits_visits_interval_itog'=>0);
- //обвновляем данные вспомогательной таблицы для посещений
- $result = $this->db->query('UPDATE `visits` SET `guest_id`=`user_id` WHERE `user_id`>0 AND `user_id`!=`guest_id`');
- if ($result) {
- $func_report['visits_update_guestid_field'] = 1;
- //сворачиваем итоговые посещения
- $sql = 'REPLACE INTO `visits_itog` (`date`,`object_type`, `object_id`,`visits`, `unique_visits`)
- SELECT DATE(`date`) as mydate, `object_type`, `object_id`, COUNT(`guest_id`), COUNT(DISTINCT `guest_id`) FROM `visits`
- WHERE `date`>=DATE(NOW() - INTERVAL 1 DAY ) GROUP BY mydate, `object_id`, `object_type`';
- $result = $this->db->query($sql);
- if ($result) {
- $func_report['visits_visits_itog'] = 1;
- if ($this->db->query('DELETE FROM `visits` WHERE `date`<(NOW()-INTERVAL '.$visits_actual_days.' DAY)')
- && $this->db->query('DELETE FROM `visits_itog` WHERE `date`<(NOW()-INTERVAL '.$visits_itog_actual_days.' DAY)')
- && $this->db->query('DELETE FROM `cms_visits` WHERE `date`<(NOW()-INTERVAL '.$visits_itog_actual_days.' DAY)'))
- $func_report['visits_delete_old'] = 1;
- //обновляем количество посещений в объектах
- $update_obj = true;
- global $object_types;
- foreach ($object_types as $key => $value) {
- if (!in_array($key, array(5, 6))) {
- if ($key == 1) $object_type_where = 'vi.`object_type` IN(1,5)';
- else $object_type_where = 'vi.`object_type`='.$key;
- $sql="UPDATE `".$value['class']."` o SET o.`visits`=(SELECT IF(SUM(vi.`visits`) IS NOT NULL,SUM(vi.`visits`),0) FROM `visits_itog` vi WHERE vi.`object_id`=o.`id` AND {$object_type_where}),o.`unique_visits`=(SELECT IF(SUM(vi.`unique_visits`) IS NOT NULL,SUM(vi.`unique_visits`),0) FROM `visits_itog` vi WHERE vi.`object_id`=o.`id` AND {$object_type_where})";
- if (!$this->db->query($sql)) $update_obj = false;
- }
- }
- if ($update_obj) $func_report['visits_update_objects'] = 1;
- //обновляем кол-во посещений за промежуток времени
- $sql = "
- REPLACE INTO `visits_interval_itog`(`object_type`, `object_id`, `visits_last1month`, `visits_last3month`, `unique_visits_last1month`, `unique_visits_last3month`)
- (SELECT
- `object_type`,
- `object_id`,
- SUM(IF(`date` >= (DATE(NOW())-INTERVAL 1 MONTH), `visits`, 0)) as `visits_last1month`,
- SUM(IF(`date` >= (DATE(NOW())-INTERVAL 3 MONTH), `visits`, 0)) as `visits_last3month`,
- SUM(IF(`date` >= (DATE(NOW())-INTERVAL 1 MONTH), `unique_visits`, 0)) as `unique_visits_last1month`,
- SUM(IF(`date` >= (DATE(NOW())-INTERVAL 3 MONTH), `unique_visits`, 0)) as `unique_visits_last3month`
- FROM `visits_itog`
- WHERE `object_type` NOT IN (0,6)
- GROUP BY `object_type`, `object_id`
- )
- ";
- if ($this->db->query($sql)) $func_report['visits_visits_interval_itog'] = 1;
- }
- }
- return 'поле `guest_id` таблицы `visits` '.(!$func_report['visits_update_guestid_field'] ? 'НЕ ' : 'успешно ').'обновлено; таблица `visits_itog` '.(!$func_report['visits_visits_itog'] ? 'НЕ ' : 'успешно ').'обновлена; таблицы `visits, `cms_visits`, `visits_itog` '.(!$func_report['visits_visits_itog'] ? 'НЕ ' : 'успешно ').'очищены от старых записей; поле `visits` в таблицах объектов '.(!$func_report['visits_visits_itog'] ? 'НЕ ' : 'успешно ').'обновлено; таблица `visits_interval_itog` '.(!$func_report['visits_visits_itog'] ? 'НЕ ' : 'успешно ').'обновлена';
- }
-
- //сворачиваем таблицы посещений баннеров
- public function banners_visits_itog($visits_actual_days,$update_now=false)
- {
- $func_report = array('banners_visits_itog'=>0, 'banner_zones_visits_itog'=>0);
- //сворачиваем итоговые посещения
- $sql='REPLACE INTO `banners_visits_itog` (`date`,`banner_id`,`visits`, `clicks`)
- SELECT DATE(`date`) as mydate, `banner_id`, SUM(IF(IF(`event`=1,1,0) is not null,IF(`event`=1,1,0),0)), SUM(IF(IF(`event`=2,1,0) is not null,IF(`event`=2,1,0),0)) FROM `banners_visits`
- WHERE DATE(`date`)=DATE(NOW()';
- if(!$update_now)$sql.=' - INTERVAL 1 DAY ';
- $sql.=') GROUP BY mydate, `banner_id`';
-
- if ($this->db->query($sql))
- {
- $sql='DELETE FROM `banners_visits` WHERE `date`<(NOW()-INTERVAL '.$visits_actual_days.' DAY)';
- $this->db->query($sql);
- $func_report['banners_visits_itog'] = 1;
- }
-
- $sql='REPLACE INTO `banner_zones_visits_itog` (`date`,`zone_id`,`visits`, `clicks`)
- SELECT DATE(`date`) as mydate, `zone_id`, SUM(IF(IF(`event`=1,1,0) is not null,IF(`event`=1,1,0),0)), SUM(IF(IF(`event`=2,1,0) is not null,IF(`event`=2,1,0),0)) FROM `banner_zones_visits`
- WHERE DATE(`date`)=DATE(NOW()';
- if(!$update_now)$sql.=' - INTERVAL 1 DAY ';
- $sql.=') GROUP BY mydate, `zone_id`';
-
- if ($this->db->query($sql))
- {
- $sql='DELETE FROM `banner_zones_visits` WHERE `date`<(NOW()-INTERVAL 14 DAY)';
- $this->db->query($sql);
- $func_report['banner_zones_visits_itog'] = 1;
- }
- return 'таблица `banners_visits_itog` '.(!$func_report['banners_visits_itog'] ? 'НЕ ' : 'успешно ').'обновлена, таблица `banner_zones_visits_itog` '.(!$func_report['banner_zones_visits_itog'] ? 'НЕ ' : 'успешно ').'обновлена';
- }
-
- //отключаем прошедшие баннеры
- public function banners_deactivate_old(){
- $sql='UPDATE `banners` SET `active`=0 WHERE `public_date_end`<now();';
- return $this->db->query($sql);
- }
-
- //очистка таблицы object_links от мертвых ссылок
- public function clear_object_links($object_types)
- {
- set_time_limit(600);
- foreach($object_types as $key=>$value)
- {
- $sql='
- SELECT l.`object1_id` as `dead_id`, COUNT(o.`id`) as `count`
- FROM `object_links` l
- LEFT JOIN `'.$value['class'].'` o ON l.`object1_id`=o.`id`
- WHERE l.`object1_type`='.$key.'
- GROUP BY `dead_id`
- HAVING `count`=0
- UNION
- SELECT l.`object2_id` as `dead_id`, COUNT(o.`id`) as `count`
- FROM `object_links` l
- LEFT JOIN `'.$value['class'].'` o ON l.`object2_id`=o.`id`
- WHERE l.`object2_type`='.$key.'
- GROUP BY `dead_id`
- HAVING `count`=0
- ';
- if($this->db->query($sql))
- {
- $result=$this->db->get_result();
- if(count($result))
- {
- $sql='DELETE FROM `object_links` WHERE ';
- $i=0;
- foreach($result as $key2=>$value2)
- {
- $sql.='(`object1_type`='.$key.' AND `object1_id`='.$value2['dead_id'].') OR (`object2_type`='.$key.' AND `object2_id`='.$value2['dead_id'].') OR ';
- $i++;
- if($i==5)
- {
- $sql=substr($sql,0,-4);
- $this->db->query($sql);
- $sql='DELETE FROM `object_links` WHERE ';
- $i=0;
- }
- }
- if($i>0){
- $sql=substr($sql,0,-4);
- $this->db->query($sql);
- }
- }
- }
- }
- }
-
- //свернуть голоса у сообщений
- public function vote_message_itog()
- {
- $sql='UPDATE `messages` m SET
- m.`vote_ok`=m.`vote_ok`+(SELECT IF(SUM(m2.`vote_ok`) is not NULL,SUM(m2.`vote_ok`),0) FROM `messages_votes` m2 WHERE m2.`message_id`=m.`id` AND m2.`vote_ok`!=0 AND m2.`date`<(NOW() - INTERVAL 6 MONTH)),
- m.`vote_bad`=m.`vote_bad`+(SELECT IF(SUM(m2.`vote_bad`) is not NULL,SUM(m2.`vote_bad`),0) FROM `messages_votes` m2 WHERE m2.`message_id`=m.`id` AND m2.`vote_bad`!=0 AND m2.`date`<(NOW() - INTERVAL 6 MONTH)),
- m.`spam`=m.`spam`+(SELECT IF(SUM(m2.`spam`) is not NULL,SUM(m2.`spam`),0) FROM `messages_votes` m2 WHERE m2.`message_id`=m.`id` AND m2.`spam`!=0 AND m2.`date`<(NOW() - INTERVAL 6 MONTH)),
- m.`vote_count`=m.`vote_count`+(SELECT COUNT(m2.`message_id`) FROM `messages_votes` m2 WHERE m2.`message_id`=m.`id` AND m2.`spam`=0 AND m2.`date`<(NOW() - INTERVAL 6 MONTH))';
- if($this->db->query($sql)) {
- $sql='DELETE FROM `messages_votes` WHERE `date`<(NOW() - INTERVAL 6 MONTH)';
- return ($this->db->query($sql));
- }
- }
-
- //свернуть голоса у отзывов
- public function vote_review_itog()
- {
- $sql='UPDATE `reviews` r SET
- r.`vote_ok`=r.`vote_ok`+(SELECT IF(SUM(r2.`vote_ok`) is not NULL,SUM(r2.`vote_ok`),0) FROM `reviews_votes` r2 WHERE r2.`review_id`=r.`id` AND r2.`vote_ok`!=0 AND r2.`date`<(NOW() - INTERVAL 6 MONTH)),
- r.`vote_bad`=r.`vote_bad`+(SELECT IF(SUM(r2.`vote_bad`) is not NULL,SUM(r2.`vote_bad`),0) FROM `reviews_votes` r2 WHERE r2.`review_id`=r.`id` AND r2.`vote_bad`!=0 AND r2.`date`<(NOW() - INTERVAL 6 MONTH)),
- r.`vote_count`=r.`vote_count`+(SELECT COUNT(r2.`review_id`) FROM `reviews_votes` r2 WHERE r2.`review_id`=r.`id` AND r2.`date`<(NOW() - INTERVAL 6 MONTH))';
- if($this->db->query($sql)) {
- $sql='DELETE FROM `reviews_votes` WHERE `date`<(NOW() - INTERVAL 6 MONTH)';
- return ($this->db->query($sql));
- }
- }
-
- public function remove_media_storage_tempdirs()
- {
- $media_storages=array(__MEDIA_STORAGE_PATH.'/photos/temp',__MEDIA_STORAGE_PATH.'/avatars/temp',__MEDIA_STORAGE_PATH.'/banners/temp');
- foreach ($media_storages as $media_storage){
- $handle = opendir($media_storage);
- while (false !== ($photoalbum_id = readdir($handle)))
- {
- if ($photoalbum_id!=".." && $photoalbum_id!="." && is_dir($media_storage.'/'.$photoalbum_id))
- {
- if((time()-filemtime($media_storage.'/'.$photoalbum_id))>259200)
- {
- if(!dir_remove($media_storage.'/'.$photoalbum_id)) trigger_error('Невозможно удалить временную папку '.$media_storage.'/'.$photoalbum_id,E_USER_ERROR);
- }
- }
- }
- closedir($handle);
- }
- }
-
- public function clear_old_events()
- {
- $sql='DELETE FROM `events` WHERE `created`<(NOW()-INTERVAL 6 MONTH)';
- return ($this->db->query($sql));
- }
-
- //удаляет сообщения пользователей, когда они удалили их с обоих сторон
- public function remove_user_messages()
- {
- $sql='DELETE FROM `user_messages` WHERE `user_remove`=1 AND `to_remove`=1';
- return ($this->db->query($sql));
- }
-
- public function change_wallpaper()
- {
- $folder = __APP_PATH.'/design/background';
- $img = null;
-
- $fileList = array();
-
- $handle = @opendir($folder);
- if(!$handle){
- trigger_error('Не удалось открыть папку '.$folder,E_USER_ERROR);
- return false;
- }
- while (false !== ($file = readdir($handle))) {
-
- if(preg_match('|.+\.jpg|isu',$file) && $file != "ny2013.jpg"){
- $fileList[] = $file;
- }
- }
- closedir($handle);
- $count = count($fileList);
- if ($count > 0) {
- $imageNumber = rand(0,$count-1);
- $img = $fileList[$imageNumber];
- }
- if(in_array(gmdate("d.m.Y"), array("31.12.2012","01.01.2013","02.01.2013","03.01.2013","04.01.2013","05.01.2013","06.01.2013","14.01.2013"))) $img = "ny2013.jpg";
- //запись в файл
- $file=__ENGINE_PATH.'/templates/'.App::appPrefix().'/background.tpl';
- $fp=@fopen($file,'w');
- if($fp){
- fwrite($fp,$img);
- fclose($fp);
- }else trigger_error('Не удалось открыть для записи '.$file,E_USER_ERROR);
- }
-
- public function optimize_tables(array $tables)
- {
- if(count($tables)==0)return;
-
- foreach($tables as $item){
- $sql="OPTIMIZE TABLE `{$item}`";
- $this->db->query($sql);
- }
-
- foreach($tables as $item){
- $sql="ALTER TABLE `{$item}`";
- $this->db->query($sql);
- }
- return;
- }
-
-
- //remove dublicats from tables
- public function check_tables_dublicats(){
- $total_count=0;
-
- $sql='SELECT ol.`object_links_id` FROM `object_links` ol
- INNER JOIN `object_links` ol2 ON
- ol.`object_links_id`>ol2.`object_links_id` AND
- ol.`main_link`=ol2.`main_link` AND
- ol.`additional_link`=ol2.`additional_link` AND
- (
- ol2.`object1_id`=ol.`object2_id` AND
- (
- ol2.`object1_type`=ol.`object2_type` OR (ol2.`object1_type` IN(1,5) AND ol.`object2_type` IN(1,5))
- ) AND
- ol2.`object2_id`=ol.`object1_id` AND
- (
- ol2.`object2_type`=ol.`object1_type` OR (ol2.`object2_type` IN(1,5) AND ol.`object1_type` IN(1,5))
- )
- )';
- $this->db->query($sql);
- $result=&$this->db->get_result();
- if(count($result)>0){
- $sql='DELETE FROM `object_links` WHERE ';
- foreach($result as $value) $sql.='`object_links_id`='.$value['object_links_id'].' OR ';
- $sql=substr($sql,0,-4);
- if($this->db->query($sql)) $total_count+=count($result);
- }
-
- $sql='SELECT ol.`object_links_id` FROM `object_links` ol
- INNER JOIN `object_links` ol2 ON
- ol.`object_links_id`>ol2.`object_links_id` AND
- ol.`main_link`=ol2.`main_link` AND
- ol.`additional_link`=ol2.`additional_link` AND
- (
- ol2.`object1_id`=ol.`object1_id` AND
- (
- ol2.`object1_type`=ol.`object1_type` OR (ol2.`object1_type` IN(1,5) AND ol.`object1_type` IN(1,5))
- ) AND
- ol2.`object2_id`=ol.`object2_id` AND
- (
- ol2.`object2_type`=ol.`object2_type` OR (ol2.`object2_type` IN(1,5) AND ol.`object2_type` IN(1,5))
- )
- )';
- $this->db->query($sql);
- $result=&$this->db->get_result();
- if(count($result)>0){
- $sql='DELETE FROM `object_links` WHERE ';
- foreach($result as $value) $sql.='`object_links_id`='.$value['object_links_id'].' OR ';
- $sql=substr($sql,0,-4);
- if($this->db->query($sql)) $total_count+=count($result);
- }
- if($total_count>0) echo 'Удалено '.$total_count.' дубликатов из `object_links`<br/><br/>'."\n\n";
-
-
- $total_count=0;
- $sql='SELECT ol.`id_object_regions` FROM `object_regions` ol
- INNER JOIN `object_regions` ol2 ON
- ol.`id_object_regions`>ol2.`id_object_regions` AND
- ol.`main_link`=ol2.`main_link` AND
- ol.`region`=ol2.`region` AND
- (
- ol2.`object_id`=ol.`object_id` AND
- (
- ol2.`object_type`=ol.`object_type` OR (ol2.`object_type` IN(1,5) AND ol.`object_type` IN(1,5))
- )
- )';
- $this->db->query($sql);
- $result=&$this->db->get_result();
- if(count($result)>0){
- $sql='DELETE FROM `object_regions` WHERE ';
- foreach($result as $value) $sql.='`id_object_regions`='.$value['id_object_regions'].' OR ';
- $sql=substr($sql,0,-4);
- if($this->db->query($sql)) $total_count+=count($result);
- }
- if($total_count>0) echo 'Удалено '.$total_count.' дубликатов из `object_regions`<br/><br/>'."\n\n";
- }
-
-
- /**
- * Rebuild levels in guidelines table
- *
- */
- public function rebuild_guideline_levels(){
- $updated_guidelines=0;
- $sql='SELECT g.`left_index`, g.`right_index`, g.`id` FROM `guidelines` g ORDER BY g.`left_index`';
- $this->db->query($sql);
- $result=$this->db->get_result();
- foreach($result as $key=>&$value){
- $sql='SELECT g.`level` FROM `guidelines` g WHERE g.`left_index`<'.$value['left_index'].' AND g.`right_index`>'.$value['right_index'].' LIMIT 0,1';
- $this->db->query($sql);
- $result2=$this->db->get_result();
- if(count($result2)>0) {
- $level=$result2[0]['level']+1;
- $sql='UPDATE `guidelines` SET `level`='.$level.' WHERE `id`='.$value['id'];
- if($this->db->query($sql)) $updated_guidelines++;
- else echo 'CAN NOT EXECUTE: '.$sql.'<br/>' ;
- }
- }unset($value);
-
- echo 'Всего обновлено: '.$updated_guidelines.'';
- }
-
-
- /**
- * пересчет рейтингов для объектов у которых есть блок популярные объекты
- *
- * @param int $interval numder of days to count visits
- */
- public function calculate_ratings($interval=28){
- global $object_types;
- foreach($object_types as $key=>$item){
- if($key!=3 && $key!=6 && $key!=14){
- $preffix='';
- if($key==1)$preffix='t_';
- elseif($key==5)$preffix='c_';
- $sql=" UPDATE `{$item['class']}` o SET
- `{$preffix}rating`=(SELECT COALESCE(SUM(vi.`unique_visits`),0)
- FROM `visits_itog` vi WHERE vi.`object_type`".($key==1||$key==5?' IN(1,5)':'='.$key)." AND vi.`object_id`=o.`id` AND DATE(vi.`date`)<=DATE(NOW()) AND vi.`date`>(NOW()-INTERVAL $interval DAY))";
- $this->db->query($sql) or trigger_error("Не удалось посчитать рейтинг",E_USER_WARNING);
- }
- }
- }
- /**
- * пересчет рейтингов для объектов у которых есть блок популярные объекты - новая формула (формула Байеса + просмотры)
- * http://habrahabr.ru/company/darudar/blog/143188/#comment_4797256 , http://habrahabr.ru/qa/3491/
- */
- public function calculate_ratings_baies($types){
- global $object_types;
- foreach($object_types as $key=>$item){
- if(!in_array($key, $types) || in_array($key, array(6,14))) continue;
- $preffix='';
- if($key==1)$preffix='t_';
- elseif($key==5)$preffix='c_';
- $m = 3;//минимальное кол-во голосов для участия в рейтинге
- $c = 2;
- $v = "IF(SUM(r.`value_itog`) IS NULL, 0, SUM(r.`value_itog`))";
- $r = "(SUM(r.`value_itog`)/COUNT(r.`id`))";
- $k = "(1.5/5)";
- $formula = "ROUND((IF((({$v}/({$v}+{$m}))*{$r}) IS NULL, 0, (({$v}/({$v}+{$m}))*{$r})) + ({$m}/({$v}+{$m}))*{$c})*{$k},3)";
- $sql2 = "ROUND((((o.`{$preffix}srating_itog`*o.`{$preffix}svote_itog`)/(o.`{$preffix}svote_itog`+{$m}))+(({$m}*{$c})/({$m}+o.`{$preffix}svote_itog`)))/5 ,3)";
- if($key == 2){
- $k = "(1/5)";
- $sql2 = "
- SELECT {$formula}
- FROM `object_links` ol
- JOIN `reviews` r ON r.`object_type`=3 AND r.`object_id`=ol.`object1_id`
- WHERE ol.`object2_type`=2 AND ol.`object2_id`=o.`id` AND ol.`object1_type`=3
- GROUP BY ol.`object2_id`
- UNION SELECT {$c}*{$k}
- LIMIT 1
- ";
- }
- elseif($key == 4){
- $sql2 .= " +
- (SELECT {$formula}
- FROM `reviews_objects` ro
- JOIN `reviews` r ON r.`id`=ro.`review_id`
- WHERE ro.`object_type`=4 AND ro.`object_id`=o.`id`
- UNION SELECT {$c}*{$k}
- LIMIT 1)
- ";
- }
- elseif($key==5){
- $sql2 .= " +
- (SELECT {$formula}
- FROM `reviews` r
- WHERE r.`object_type`=5 AND r.`object_id`=o.`id`
- UNION SELECT {$c}*{$k}
- LIMIT 1)
- ";
- }
- elseif($key==1){
- $sql2 .= " +
- (SELECT {$formula}
- FROM `reviews_objects` ro
- JOIN `reviews` r ON r.`id`=ro.`review_id`
- WHERE ro.`object_type`=1 AND ro.`object_id`=o.`id`
- UNION SELECT {$c}*{$k}
- LIMIT 1)
- ";
- }
- elseif($key==3){
- $sql2 .= " +
- (SELECT {$formula}
- FROM `reviews_objects` ro
- JOIN `reviews` r ON r.`id`=ro.`review_id`
- WHERE ro.`object_type`=3 AND ro.`object_id`=o.`id`
- UNION SELECT {$c}*{$k}
- LIMIT 1)
- ";
- }
- elseif($key==12){
- $sql2 = "SELECT vii.`visits_last3month` FROM `visits_interval_itog` vii WHERE vii.`object_type`=12 AND vii.`object_id`=o.`id` UNION SELECT 0 LIMIT 1";
- }
- $sql="UPDATE `{$item['class']}` o SET `{$preffix}rating`=({$sql2})";
- $this->db->query($sql) or trigger_error("Не удалось посчитать рейтинг",E_USER_WARNING);
- }
- }
- /**
- * Подсчет кол-ва оценок пользователя за мероприятие
- * @param $types
- */
- public function calculate_object_action_rating($types){
- global $object_types;
- foreach($types as $type){
- if(!isset($object_types[$type]) || !in_array($type, array(1,2,4))) continue;
- $tbl = $object_types[$type]['class'];
- if($type == 4){
- $sql = "
- SELECT tbl.`id` as `id`, IF(SUM(tbl.`rate`)/SUM(IF(tbl.`count`=0,0,1)) IS NULL, 0, SUM(tbl.`rate`)/SUM(IF(tbl.`count`=0,0,1))) as `rate`, SUM(tbl.`count`) as `count`
- FROM
- (
- SELECT
- ol.`object2_id` as `id`, a.`srating_itog` as `rate`, a.`svote_itog` as `count`
- FROM
- `object_links` ol
- JOIN `timetable` t ON t.`id`=ol.`object1_id` AND t.`moderated` = 1 AND t.`block` = 0
- JOIN `actions` a ON t.`action_id`=a.`id`
- WHERE
- ol.`object2_type`=4 AND ol.`object1_type`=6 AND ol.`main_link`=1
- GROUP BY
- ol.`object2_id`, a.`id`
- ) as `tbl`
- GROUP BY tbl.`id`
- ";
- }
- elseif($type==1){
- $sql = "
- SELECT tbl.`id` as `id`, IF(SUM(tbl.`rate`)/SUM(IF(tbl.`count`=0,0,1)) IS NULL, 0, SUM(tbl.`rate`)/SUM(IF(tbl.`count`=0,0,1))) as `rate`, SUM(tbl.`count`) as `count`
- FROM
- (
- SELECT
- ol.`object2_id` as `id`, a.`srating_itog` as `rate`, a.`svote_itog` as `count`
- FROM
- `object_links` ol
- JOIN `timetable` t ON t.`id`=ol.`object1_id` AND t.`moderated` = 1 AND t.`block` = 0
- JOIN `actions` a ON t.`action_id`=a.`id`
- WHERE
- ol.`object2_type`=1 AND ol.`object1_type`=6
- GROUP BY
- ol.`object2_id`, a.`id`
- ) as `tbl`
- GROUP BY tbl.`id`
- ";
- }
- if($type == 2){
- $sql2 = "
- SELECT IF(SUM(a.`srating_itog`)/SUM(IF(a.`svote_itog`=0,0,1)) IS NULL, 0, SUM(a.`srating_itog`)/SUM(IF(a.`svote_itog`=0,0,1)))
- FROM `object_links` ol
- JOIN `actions` a ON a.`id`=ol.`object1_id`
- WHERE ol.`object2_type`=2 AND ol.`object2_id`=o.`id` AND ol.`object1_type`=3
- GROUP BY ol.`object2_id`
- UNION SELECT 0
- LIMIT 1
- ";
- $sql3 = "
- SELECT
- IF(SUM(a.`svote_itog`) IS NULL, 0, SUM(a.`svote_itog`))
- FROM `object_links` ol
- JOIN `actions` a ON a.`id`=ol.`object1_id`
- WHERE ol.`object2_type`=2 AND ol.`object2_id`=o.`id` AND ol.`object1_type`=3
- GROUP BY ol.`object2_id`
- ";
- $sql = "UPDATE `{$tbl}` o SET `srating_itog_action`=({$sql2}), `svote_itog_action`=({$sql3})";
- $this->db->query($sql) or trigger_error("Не удалось посчитать рейтинг",E_USER_WARNING);
- }
- else{
- $sql = "
- DROP TEMPORARY TABLE IF EXISTS `temp_ratings`;
- CREATE TEMPORARY TABLE `temp_ratings`
- {$sql};
- ALTER TABLE `temp_ratings` ADD INDEX `id` (`id`);
- UPDATE `{$tbl}`, `temp_ratings` SET `{$tbl}`.`srating_itog_action` = `temp_ratings`.`rate`, `{$tbl}`.`svote_itog_action` = `temp_ratings`.`count` WHERE `{$tbl}`.`id` = `temp_ratings`.`id`;
- DROP TEMPORARY TABLE `temp_ratings`
- ";
- $mysqli = new mysqli(__DB_HOST, __DB_USER, __DB_PASS, __DB_TABLE);
- if($mysqli->connect_error){
- die("Connect failed: ".$mysqli->connect_error);
- }
- else{
- $mysqli->multi_query($sql) or trigger_error("Не удалось посчитать рейтинг",E_USER_WARNING);
- }
- }
- }
- }
-
- /**
- * Set random numbers for regulars timetables daily random sort
- *
- * @return bool succesful
- */
- public function randomize_regular_timetables(){
- $sql="UPDATE `timetable` t SET t.`rand_sort`=RAND()*1000000000 WHERE (SELECT a.`type` FROM `actions` a WHERE a.`id`=t.`action_id`) IN (2,3)";
- return $this->db->query($sql);
- }
-
-
- /**
- * Remove events with expired timetables
- *
- */
- public function remove_expired_events(){
- $func_report = true;
- $sql='SELECT DISTINCT e.`id` FROM `events` e
- INNER JOIN `timetable` t ON e.`object_type`=6 AND e.`object_id`=t.`id`
- INNER JOIN `actions` a ON a.`id`=t.`action_id`
- WHERE e.`created`<NOW() AND e.`object_type`=6 AND
- ((e.`type`=1 AND e.`subtype`>=2 AND e.`subtype`<=9) OR (e.`type`=10 AND e.`subtype`=12)) AND
- ((a.`type` NOT IN(2,3,6) AND t.`date`<NOW()) OR (a.`type` IN(2,3,6) AND (e.`created`+INTERVAL 7 DAY)<NOW()))';
- $this->db->query($sql);
- $result=$this->db->get_result();
- if(count($result)>0){
- $sql='DELETE FROM `events` WHERE `id` IN(';
- foreach ($result as $value) $sql.=$value['id'].',';
- $func_report = $this->db->query(substr($sql,0,-1).')');
- }
- return $func_report;
- }
- //send reminder to prolong payment options
- public function payment_options_expiration_reminder($days=3)
- {
- $mail_count=0;
- global $object_types;
- global $filial_region_info;
- $users = array();
-
- $date1=date("Y-m-d 00:00:00",time()+($days*86400));
- $date2=date("Y-m-d 00:00:00",time()+(($days+1)*86400));
-
- $sql="SELECT `object_type`,`object_id`,`po1`,`po2`,`po3`,`po4`,`po5`,`po6`,`po7`,`po8`,UNIX_TIMESTAMP(`public_date_end`) as `public_date_end`
- FROM `objects_payment_options`
- WHERE `object_type` IN(1,4,5,6,9,10) AND `public_date_end`>'{$date1}' AND `public_date_end`<='{$date2}'
- ";
- $this->db->query($sql);
- $result=$this->db->get_result();
-
- //если выборка пустая
- if(count($result)){
-
- foreach($result as $value)
- $objects[$value['object_type']][$value['object_id']]=$value;
-
- foreach($objects as $key=>$value){
- $class=$object_types[$key]['class'];
- include_once(__ENGINE_PATH.'/functions/classes/class_'.$class.'.php');
- $class=ucwords($class);
- $object=new $class ($key);
- $atribs=array('owner_id','alias','name','filial');
- $where='';
- foreach($value as $key2=>$value2){
- $where.='o.`id`='.$key2.' OR ';
- }
- $where=substr($where,0,-4);
- $result=$object->get_objects($where,'o.`id`',0,0,$atribs);
- $full_objects[$key]=$result['objects'];
- }
- include_once(__ENGINE_PATH.'/functions/subfunctions/common.payment_options_array.php');
- global $objects_payment_options;
- foreach($full_objects as $key=>$value){
- foreach($value as $key2=>$value2){
- $users[$value2['owner_email']]['owner_name']=$value2['owner_name'];
- $users[$value2['owner_email']]['owner_surname']=$value2['owner_surname'];
- $users[$value2['owner_email']]['owner_login']=$value2['owner_login'];
- $users[$value2['owner_email']]['objects'][$key][$key2]['id']=$value2['id'];
- $users[$value2['owner_email']]['objects'][$key][$key2]['object_type']=$key;
- $users[$value2['owner_email']]['objects'][$key][$key2]['name']=$value2['name'];
- $users[$value2['owner_email']]['objects'][$key][$key2]['alias']=$value2['alias'];
- $users[$value2['owner_email']]['objects'][$key][$key2]['link']=$value2['link'];
- $users[$value2['owner_email']]['objects'][$key][$key2]['public_date_end']=$objects[$key][$key2]['public_date_end'];
- //Определяем какому филиалу отправить копию заявки
- $portal_email=(isset($value2['filial']) && isset($filial_region_info[$value2['filial']]['email'])) ? $filial_region_info[$value2['filial']]['email'] : "";
- $users[$value2['owner_email']]['objects'][$key][$key2]['filial_email']=$portal_email;
- $users[$value2['owner_email']]['objects'][$key][$key2]['filial']=(isset($value2['filial']) && isset($filial_region_info[$value2['filial']]) ? $value2['filial'] : 0);
-
- $users[$value2['owner_email']]['objects'][$key][$key2]['service']='';
- if($objects[$key][$key2]['po1'])$users[$value2['owner_email']]['objects'][$key][$key2]['service'].=$objects_payment_options[$key]['po1'][$objects[$key][$key2]['po1']].' + ';
- if($objects[$key][$key2]['po2'])$users[$value2['owner_email']]['objects'][$key][$key2]['service'].=$objects_payment_options[$key]['po2'][$objects[$key][$key2]['po2']].' + ';
- if($objects[$key][$key2]['po3'])$users[$value2['owner_email']]['objects'][$key][$key2]['service'].=$objects_payment_options[$key]['po3'][$objects[$key][$key2]['po3']].' + ';
- if($objects[$key][$key2]['po4'])$users[$value2['owner_email']]['objects'][$key][$key2]['service'].=$objects_payment_options[$key]['po4'][$objects[$key][$key2]['po4']].' + ';
- //if($objects[$key][$key2]['po5'])$users[$value2['owner_email']]['objects'][$key][$key2]['service'].=$objects_payment_options[$key]['po5'][$objects[$key][$key2]['po5']].' + ';
- if($objects[$key][$key2]['po6'])$users[$value2['owner_email']]['objects'][$key][$key2]['service'].=$objects_payment_options[$key]['po6'][$objects[$key][$key2]['po6']].' + ';
- if($objects[$key][$key2]['po7'])$users[$value2['owner_email']]['objects'][$key][$key2]['service'].=$objects_payment_options[$key]['po7'][$objects[$key][$key2]['po7']].' + ';
- if($objects[$key][$key2]['po8'])$users[$value2['owner_email']]['objects'][$key][$key2]['service'].=$objects_payment_options[$key]['po8'][$objects[$key][$key2]['po8']].' + ';
- $users[$value2['owner_email']]['objects'][$key][$key2]['service']=mb_substr($users[$value2['owner_email']]['objects'][$key][$key2]['service'],0,-3,'UTF-8');
- }
- }
-
- //получаем баннеры
- include_once(__ENGINE_PATH.'/functions/classes/class_banners.php');
- $banners=new Banners();
- $banner=&$banners->get_banners("b.`public_date_end`>'{$date1}' AND b.`public_date_end`<='{$date2}' AND b.`active`=1 AND b.`email`!=''",'NULL',array('name','zones','public_date_end','email','owner_id'));
-
- foreach ($banner['banners'] as $key=>$value){
- $users[$value['email']]['banners'][$key]=$value;
- }
- include_once(__ENGINE_PATH.'/functions/classes/class_mailer.php');
- $mailer=new Mailer();
- foreach($users as $email=>$item){
- $emails = array($email);
- //Определяем какому филиалу отправить копию заявки
- if(isset($item['objects'])){
- foreach($item['objects'] as $obj_type=>$object){
- foreach($object as $obj_id=>$obj_data){
- if(!in_array($obj_data['filial_email'], $emails) && strlen($obj_data['filial_email'])) {
- $emails[] = $obj_data['filial_email'];
- if (isset($obj_data['filial']) && $obj_data['filial'] == 54)
- $emails[] = 'yulia@samopoznanie.ru';
- }
- }
- }
- }
- $subject='';
- $msg='';
- include(__ENGINE_PATH.'/templates/email.payment_options_expiration_reminder.php');
- if(!@$mailer->mail(join(", ", $emails), $subject, $msg)){
- trigger_error('Не удалось отправить напоминания о продлении платных опций',E_USER_WARNING);
- }
- else $mail_count++;
- }
- }
- return 'отправлено писем - '.$mail_count;
- }
-
- function service_report(){
- set_time_limit(500);
- global $new_region_codes;
- $mail_count=0;
- include_once(__ENGINE_PATH.'/functions/subfunctions/common.payment_options_array.php');
- include_once(__ENGINE_PATH.'/functions/classes/class_statistics.php');
- $statistics=new Statistics();
-
- global $objects_payment_options;
- global $new_region_codes;
-
- $objects=array();
- $items=array();
-
- //получаем мероприятия
- include_once(__ENGINE_PATH.'/functions/classes/class_timetable.php');
- $object_object=new Timetable();
- $expiring=$object_object->get_expiring();
- if(count($expiring))
- $result=$object_object->get_objects('o.`id` IN('.join(',',$expiring).')','o.`created` DESC',0,0,array('options','filial','type','date_moderated','name','adress','region','interesting','orders','owner_id'),0,0,0,array(),true);
- //$result=$object_object->get_objects('DATE(opo.`public_date_end`)<NOW() AND DATEDIFF(opo.`public_date_end`,opo.`public_date_start`)>0','o.`created` DESC',1,1,array('options','filial','type','date_moderated','name','adress','region','interesting','orders','owner_id'),0,0,0,array(),true);
- //$result=$object_object->get_objects('o.`id`=11','o.`created` DESC',1,1,array('options','filial','type','date_moderated','name','adress','region','interesting','orders','owner_id'),0,0,0,array(),true);
-
- if(count($expiring) && $result['total_count']){
- $objects[3]=$result['objects'];
- include_once(__ENGINE_PATH.'/functions/classes/class_payment_options.php');
- $opo=new PaymentOptions_Actions();
- $options=$opo->GetOptions(array_keys($objects[3]));
- foreach ($objects[3] as $key=>&$item){
- if(@$options['period_end']>time()){
- unset($objects[3][$key]);
- continue;
- }
- $item['options']=@$options[$key];
- }unset($item);
- }
-
-
- //получаем тренеров
- include_once(__ENGINE_PATH.'/functions/classes/class_treiners.php');
- $object_object=new Treiners(1);
- $result=$object_object->get_objects('DATE(t_opo.`public_date_end`)=DATE(NOW()-INTERVAL 1 DAY) AND DATEDIFF(t_opo.`public_date_end`,t_opo.`public_date_start`)>0','o.`created` DESC',0,0,array('options','filial','name','owner_id'),0,0,0,array(),true);
- //$result=$object_object->get_objects('DATE(t_opo.`public_date_end`)<NOW() AND o.`is_treiner`=1 AND (t_opo.`po2`!=0 OR t_opo.`po3`!=0) AND DATEDIFF(t_opo.`public_date_end`,t_opo.`public_date_start`)>0','o.`created` DESC',20,1,array('options','name','owner_id'),0,0,0,array(),true);
-
- if($result['total_count'])
- $objects[1]=$result['objects'];
-
- //получаем консультантов
- include_once(__ENGINE_PATH.'/functions/classes/class_treiners.php');
- $object_object=new Treiners(5);
- $result=$object_object->get_objects('DATE(c_opo.`public_date_end`)=DATE(NOW()-INTERVAL 1 DAY) AND DATEDIFF(c_opo.`public_date_end`,c_opo.`public_date_start`)>0','o.`created` DESC',0,0,array('options','filial','name','owner_id'),0,0,0,array(),true);
- //$result=$object_object->get_objects('DATE(c_opo.`public_date_end`)<NOW() AND o.`is_consultant`=1 AND (c_opo.`po2`!=0 OR с_opo.`po3`!=0) AND DATEDIFF(c_opo.`public_date_end`,opo.`public_date_start`)>0','o.`created` DESC',20,1,array('options','name','owner_id'),0,0,0,array(),true);
- if($result['total_count'])
- $objects[5]=$result['objects'];
- //получаем организаторов
- include_once(__ENGINE_PATH.'/functions/classes/class_organizators.php');
- $object_object=new Organizators();
- $result=$object_object->get_objects('DATE(opo.`public_date_end`)=DATE(NOW()-INTERVAL 1 DAY) AND DATEDIFF(opo.`public_date_end`,opo.`public_date_start`)>0','o.`created` DESC',0,0,array('options','filial','name','owner_id','fullname'),0,0,0,array(),true);
- //$result=$object_object->get_objects('DATE(opo.`public_date_end`)<NOW() AND (opo.`po2`!=0 OR opo.`po3`!=0) AND DATEDIFF(opo.`public_date_end`,opo.`public_date_start`)>0','o.`created` DESC',20,1,array('options','name','fullname','owner_id'),0,0,0,array(),true);
-
- if($result['total_count'])
- $objects[4]=$result['objects'];
-
- //получаем новости
- include_once(__ENGINE_PATH.'/functions/classes/class_news.php');
- $object_object=new News();
- $result=$object_object->get_objects('DATE(opo.`public_date_end`)=DATE(NOW()-INTERVAL 1 DAY) AND opo.`po7`=1 AND DATEDIFF(opo.`public_date_end`,opo.`public_date_start`)>0','o.`created` DESC',0,0,array('options','filial','name','owner_id'),0,0,0,array(),true);
- //$result=$object_object->get_objects('DATE(opo.`public_date_end`)<NOW() AND opo.`po7`=1 AND DATEDIFF(opo.`public_date_end`,opo.`public_date_start`)>0','o.`created` DESC',20,1,array('options','name','owner_id'),0,0,0,array(),true);
-
- if($result['total_count'])
- $objects[7]=$result['objects'];
-
- //получаем статьи
- include_once(__ENGINE_PATH.'/functions/classes/class_articles.php');
- $object_object=new Articles();
- $result=$object_object->get_objects('DATE(opo.`public_date_end`)=DATE(NOW()-INTERVAL 1 DAY) AND opo.`po7`=1 AND DATEDIFF(opo.`public_date_end`,opo.`public_date_start`)>0','o.`created` DESC',0,0,array('options','filial','name','owner_id'),0,0,0,array(),true);
- //$result=$object_object->get_objects('DATE(opo.`public_date_end`)<NOW() AND opo.`po7`=1 AND DATEDIFF(opo.`public_date_end`,opo.`public_date_start`)>0','o.`created` DESC',20,1,array('options','name','owner_id'),0,0,0,array(),true);
-
- if($result['total_count'])
- $objects[8]=$result['objects'];
-
- //получаем залы
- include_once(__ENGINE_PATH.'/functions/classes/class_lease.php');
- $object_object=new Lease();
- $result=$object_object->get_objects('DATE(opo.`public_date_end`)=DATE(NOW()-INTERVAL 1 DAY) AND DATEDIFF(opo.`public_date_end`,opo.`public_date_start`)>0','o.`created` DESC',0,0,array('options','filial','name','owner_id'),0,0,0,array(),true);
- //$result=$object_object->get_objects('DATE(opo.`public_date_end`)<NOW() AND DATEDIFF(opo.`public_date_end`,opo.`public_date_start`)>0','o.`created` DESC',20,1,array('options','name','owner_id'),0,0,0,array(),true);
- if($result['total_count'])
- $objects[10]=$result['objects'];
-
- if(count($objects)){
-
- //проходим по типам объектов
- foreach($objects as $object_type=>$value){
- //проходим по объектам
- foreach($value as $object_id=>$item){
-
- //формируем адресата
- $t_email='';
- if($object_type==3){
- $first_adress=array_shift($item['adresses']);
- if($first_adress['email1']!='')$t_email=$first_adress['email1'];
- elseif($first_adress['email2']!='')$t_email=$first_adress['email2'];
- elseif($first_adress['email3']!='')$t_email=$first_adress['email3'];
- else{
- foreach($item['organizators']+$item['coorganizators'] as $item2){
- foreach($item2['email'] as $oe){
- if($oe!=''){
- $t_email=$oe;
- continue(2);
- }
- }
- }
- if($t_email==='')$t_email=$item['owner_email'];
- }
- }else $t_email=$item['owner_email'];
- if(!$t_email){
- continue;
- }
-
- $items[$t_email]['objects'][$object_type][$object_id]['type']=@$item['type'];
-
- $preffix='';
- if($object_type==1)$preffix='t_';
- elseif($object_type==5)$preffix='c_';
-
-
- $items[$t_email]['objects'][$object_type][$object_id]['name']=$object_type!=4?$item['name']:$item['fullname'];
- global $region_codes;
- if($object_type==3){
- $items[$t_email]['objects'][$object_type][$object_id]['service']='';
- //$items[$t_email]['objects'][$object_type][$object_id]['service'].='Размещение информации на портале '.__SITE_NAME.' c '.smarty_modifier_special_date_format($item['date_moderated'],false,true).' по '.smarty_modifier_special_date_format(time(),false,true).'.<br> В том числе платно: ';
- $i = 0;
- foreach ($item['options']['options'] as $oregion=>$value){
- //$items[$t_email]['objects'][$object_type][$object_id]['service'].='<b>'.$new_region_codes[$oregion]['city'].'</b> (c '.smarty_modifier_special_date_format($value['public_date_start'],false,true).' по '.smarty_modifier_special_date_format($value['public_date_end'],false,true).'):<br> ';
- $items[$t_email]['objects'][$object_type][$object_id]['service'].='<br><b>* '.($oregion==0?'Все регионы':$new_region_codes[$oregion]['city']).'</b>:<br> ';
- if($objects_payment_options[$object_type]['po1'][$value['po1']]){
- $items[$t_email]['objects'][$object_type][$object_id]['service'].=$objects_payment_options[$object_type]['po1'][$value['po1']].' (';
- $items[$t_email]['objects'][$object_type][$object_id]['service'].=$objects_payment_options[$object_type]['po2'][$value['po2']].'),<br/> ';
- if($objects_payment_options[$object_type]['po3'][$value['po3']])$items[$t_email]['objects'][$object_type][$object_id]['service'].='+ '.$objects_payment_options[$object_type]['po3'][$value['po3']].',<br/> ';
- }elseif($oregion==0){
- $items[$t_email]['objects'][$object_type][$object_id]['service'].='Размещение ';
- $items[$t_email]['objects'][$object_type][$object_id]['service'].=$objects_payment_options[$object_type]['po2'][$value['po2']].',<br/> ';
- if($objects_payment_options[$object_type]['po3'][$value['po3']])$items[$t_email]['objects'][$object_type][$object_id]['service'].='+ '.$objects_payment_options[$object_type]['po3'][$value['po3']].',<br/> ';
-
- }
- if($objects_payment_options[$object_type]['po4'][$value['po4']])$items[$t_email]['objects'][$object_type][$object_id]['service'].=$objects_payment_options[$object_type]['po4'][$value['po4']].',<br/> ';
- //if($objects_payment_options[$object_type]['po5'][$value['po5']])$items[$t_email]['objects'][$object_type][$object_id]['service'].=$objects_payment_options[$object_type]['po5'][$value['po5']].',<br/> ';
- if($objects_payment_options[$object_type]['po6'][$value['po6']])$items[$t_email]['objects'][$object_type][$object_id]['service'].=$objects_payment_options[$object_type]['po6'][$value['po6']].',<br/> ';
- if($objects_payment_options[$object_type]['po7'][$value['po7']])$items[$t_email]['objects'][$object_type][$object_id]['service'].=$objects_payment_options[$object_type]['po7'][$value['po7']].',<br/> ';
- if($objects_payment_options[$object_type]['po8'][$value['po8']])$items[$t_email]['objects'][$object_type][$object_id]['service'].=$objects_payment_options[$object_type]['po8'][$value['po8']].',<br/> ';
- //$items[$t_email]['objects'][$object_type][$object_id]['service']=mb_substr($items[$t_email]['objects'][$object_type][$object_id]['service'],0,-2,'UTF-8').' ('.$new_region_codes[$oregion]['city'].' c '.smarty_modifier_special_date_format($value['public_date_start'],false,true).' по '.smarty_modifier_special_date_format($value['public_date_end'],false,true).'),<br/>';
- $items[$t_email]['objects'][$object_type][$object_id]['service']=mb_substr($items[$t_email]['objects'][$object_type][$object_id]['service'],0,-30,'UTF-8').'.';
-
- $i++;
- }
- //$items[$t_email]['objects'][$object_type][$object_id]['service']=mb_substr($items[$t_email]['objects'][$object_type][$object_id]['service'],0,-6,'UTF-8');
- //период размещения
- $items[$t_email]['objects'][$object_type][$object_id]['public_date_start']=$item['options']['period_start'];
- $items[$t_email]['objects'][$object_type][$object_id]['public_date_end']=time();
- $items[$t_email]['filials'][$item['filial']]=$item['filial'];
- }
- else{
- $items[$t_email]['objects'][$object_type][$object_id]['service']='';//'Размещение информации на портале '.__SITE_NAME.': ';
- if($objects_payment_options[$object_type]['po1'][$item[$preffix.'po1']]){
- $items[$t_email]['objects'][$object_type][$object_id]['service'].=$objects_payment_options[$object_type]['po1'][$item[$preffix.'po1']].' c '.smarty_modifier_special_date_format($item[$preffix.'public_date_start'],false,true).' по '.smarty_modifier_special_date_format($item[$preffix.'public_date_end'],false,true).',<br/> ';
- if($objects_payment_options[$object_type]['po2'][$item[$preffix.'po2']])$items[$t_email]['objects'][$object_type][$object_id]['service'].=$objects_payment_options[$object_type]['po2'][$item[$preffix.'po2']].',<br/> ';
- if($objects_payment_options[$object_type]['po3'][$item[$preffix.'po3']])$items[$t_email]['objects'][$object_type][$object_id]['service'].='+ '.$objects_payment_options[$object_type]['po3'][$item[$preffix.'po3']].',<br/> ';
- //if($objects_payment_options[$object_type]['po2'][$item[$preffix.'po2']] || $objects_payment_options[$object_type]['po3'][$item[$preffix.'po3']])$items[$t_email]['objects'][$object_type][$object_id]['service'].=',<br/> ';
- //else $items[$t_email]['objects'][$object_type][$object_id]['service'].='<br/> ';
- }
- if($objects_payment_options[$object_type]['po4'][$item[$preffix.'po4']])$items[$t_email]['objects'][$object_type][$object_id]['service'].=$objects_payment_options[$object_type]['po4'][$item[$preffix.'po4']].',<br/> ';
- //if($objects_payment_options[$object_type]['po5'][$item[$preffix.'po5']])$items[$t_email]['objects'][$object_type][$object_id]['service'].=$objects_payment_options[$object_type]['po5'][$item[$preffix.'po5']].',<br/> ';
- if($objects_payment_options[$object_type]['po6'][$item[$preffix.'po6']])$items[$t_email]['objects'][$object_type][$object_id]['service'].=$objects_payment_options[$object_type]['po6'][$item[$preffix.'po6']].',<br/> ';
- if($objects_payment_options[$object_type]['po7'][$item[$preffix.'po7']])$items[$t_email]['objects'][$object_type][$object_id]['service'].=$objects_payment_options[$object_type]['po7'][$item[$preffix.'po7']].',<br/> ';
- if($objects_payment_options[$object_type]['po8'][$item[$preffix.'po8']])$items[$t_email]['objects'][$object_type][$object_id]['service'].=$objects_payment_options[$object_type]['po8'][$item[$preffix.'po8']].',<br/> ';
- $items[$t_email]['objects'][$object_type][$object_id]['service']=mb_substr($items[$t_email]['objects'][$object_type][$object_id]['service'],0,-30,'UTF-8').'.';
-
- //период размещения
- $items[$t_email]['objects'][$object_type][$object_id]['public_date_start']=$item[$preffix.'public_date_start'];
- $items[$t_email]['objects'][$object_type][$object_id]['public_date_end']=$item[$preffix.'public_date_end'];
- }
- //полчаем статистику
- if(in_array($object_type,array(3,6)))$stat=$statistics->get(6,$object_id,$item['options']['period_start'],$item['options']['period_end'],$item['action_id'],'cron');
- else $stat=$statistics->get($object_type,$object_id,$item[$preffix.'public_date_start'],$item[$preffix.'public_date_end'],0,'cron');
- $items[$t_email]['objects'][$object_type][$object_id]+=$stat;
- //$items[$t_email]['filials'][$item['filial']]=$item['filial'];
- }
- }
- }
- if(@$items[$t_email]['objects'][$object_type][$object_id]['service']==='')unset($items[$t_email]['objects'][$object_type][$object_id]);
- //получаем баннеры
- include_once(__ENGINE_PATH.'/functions/classes/class_banners.php');
- $banner=new Banners();
- $banners=$banner->get_banners('DATE(b.`public_date_end`)=DATE(NOW()-INTERVAL 1 DAY) AND b.`email`!="" AND DATEDIFF(b.`public_date_end`,b.`public_date_start`)>0','',array('email','region','public_date_start','public_date_end','zones','name','owner_id','visits','priority'));
- //$banners=$banner->get_banners('b.`id`=1059','',array('email','public_date_start','public_date_end','zones','name','owner_id','visits','priority'));
-
- foreach($banners['banners'] as $item){
- $zones_names=array();
-
- foreach($item['zones'] as $z){
- $zones_names[]=$z['name'];
- }
- $zones_names=implode(', ',$zones_names);
- $items[$item['email']]['banners'][$item['id']]['name']=$item['name'];
- $items[$item['email']]['banners'][$item['id']]['priority']=$item['priority'];
- $items[$item['email']]['banners'][$item['id']]['regions']=$item['regions'];
- $items[$item['email']]['banners'][$item['id']]['zones_names']=$zones_names;
- $items[$item['email']]['banners'][$item['id']]['zones']=$item['zones'];
- $items[$item['email']]['banners'][$item['id']]['visits']=$item['visits_period'];
- $items[$item['email']]['banners'][$item['id']]['clicks']=$item['clicks_period'];
- $items[$item['email']]['banners'][$item['id']]['public_date_start']=$item['public_date_start'];
- $items[$item['email']]['banners'][$item['id']]['public_date_end']=$item['public_date_end'];
- }
-
- $ctr = array();
- if($banners['total_count'] >0){
- $ctr = $banner->zones_average_ctr();
- }
- include_once(__ENGINE_PATH.'/functions/classes/class_mailer.php');
- $mailer=new Mailer();
- include_once(__ENGINE_PATH.'/functions/classes/class_opros.php');
- $class_opros=new Opros();
- foreach($items as $email=>$item){
- if(!$email){
- trigger_error('Адресат не указан',E_USER_WARNING);
- continue;
- }
- //Определяем какому филиалу отправить копию заявки
- global $filial_region_info;
- $portal_email=array();
- if(@is_array($item['filials']) && count($item['filials'])){
- foreach ($item['filials'] as $filial){
- if(isset($filial_region_info[$filial]["email"]))$portal_email[]=$filial_region_info[$filial]["email"];
- }
- }
- if(empty($portal_email))$portal_email=array(__DEFAULT_FILIAL_EMAIL);
- //сохраняем письмо в базе
- $service_id = $class_opros->save_mail($email, serialize($item));
- $anketa_hash = md5($service_id.Opros::salt());
- //отправляем письмо
- $subject='';
- $msg='';
- include(__ENGINE_PATH.'/templates/email.service_report.php');
- if(!@$mailer->mail($email.','.join(',',$portal_email).','.__SUPPORT_EMAIL, $subject, $msg)){
- trigger_error('Не удалось отправить отчет об оказаных услугах',E_USER_WARNING);
- }
- else
- $mail_count++;
- }
- return 'отправлено писем - '.$mail_count;
- }
-
- //удаляем Юзеров, которые не активировали свою учетную запись в течении 10 дней
- public function delete_inactive_users(){
- $count = 0;
- $sql = 'select u.`id` from `users` as u where u.`created_at` < NOW() - INTERVAL 10 DAY AND u.`block` = 1';
- $this->db->query($sql);
- $result = $this->db->get_result();
- if(count($result)){
- $users_id = array();
- foreach($result as $item){
- $users_id[] = $item['id'];
- }
- //удаляем данные из таблицы регионов
- $sql1 = "delete from `users_regions` where `user_id` in (".join(",", $users_id).")";
- $this->db->query($sql1);
- //удаляем данные из основной таблицы users
- $sql2 = "delete from `users` where `id` in (".join(",", $users_id).")";
- $this->db->query($sql2);
- $count = count($users_id);
- }
- return 'удалено пользователей - '.$count;
- }
-
- //отправка СМС
- public function send_sms(){
-
- include_once(__ENGINE_PATH.'/functions/classes/class_sms.php');
- $sms = new Sms();
-
- $sms->send_by_cron();
-
- }
- //отправка Email'ов
- public function send_emails(){
-
- include_once(__ENGINE_PATH.'/functions/classes/class_mailer.php');
- $mailer = new Mailer();
-
- $mailer->send_by_cron();
- }
- //очистка таблицы object_edit_access
- public function clear_table_eoa(){
-
- $sql = "DELETE FROM `object_edit_access`";
- return $this->db->query($sql);
- }
-
- //напоминание о заявке на вебинар за 20 минут до его начала
- public function webinar_order_remind($email_send = false, $sms_send = false){
-
- $gmtime = strtotime(gmdate("Y-m-d H:i:s"));
-
- set_time_limit(300);
-
- include_once(__ENGINE_PATH.'/functions/subfunctions/common.timezones.php');
- global $timezones;
- global $object_types;
-
- $adresats_email = array();
- $adresats_sms = array();
- $webinars = array();
-
- //получаем вебинары, которые проходят сегодня
- $sql = "
- SELECT
- t.`id` as `timetable_id`, a.`id` as `action_id`,
- a.`alias` as `webinar_alias`,
- CONCAT(a.name, ' ', t.name_extension) as `webinar_header`,
- convert(CONCAT(date(t.`date`), ' ', time(t.`time`)), datetime) as `webinar_time`
-
- FROM
- `timetable` as t
- JOIN `actions` as a
- ON t.`action_id` = a.`id`
-
- WHERE
- a.type = 4
- AND DATE(t.`date`) = DATE(NOW())
- AND IF(t.`time`, t.`time`, NULL) IS NOT NULL
-
- GROUP BY
- t.`id`
- ";
-
- $this->db->query($sql);
- $result = $this->db->get_result();
- if(count($result)){
- foreach($result as $value){
-
- $current_hour = gmdate("G");
- $webinar_time = explode(" ", $value["webinar_time"]);//date("G", (strtotime($value["webinar_time"])-(4*3600)));
- $webinar_date = explode("-", $webinar_time[0]);
- $webinar_time = explode(":", $webinar_time[1]);
- $webinar_hour = $webinar_time[0]-4;//отнимаем разницу с Московой
- $webinar_start_time = gmmktime($webinar_hour, $webinar_time[1], 0, $webinar_date[1], $webinar_date[2], $webinar_date[0]);//strtotime($value["webinar_time"])-(4*3600);
- if((($webinar_hour - $current_hour) <= 3 && ($webinar_hour - $current_hour) > 0 && $email_send) ||
- ($sms_send && ($webinar_start_time - (time()+1200)) <= 1260 && ($webinar_start_time - (time()+1200)) > 0) ){
-
- $webinars[$value["timetable_id"]] = array(
- "header"=>$value["webinar_header"],
- "time"=>$value["webinar_time"],
- "alias"=>$value["webinar_alias"],
- "id"=>$value["timetable_id"]);
- }
-
- }
- }
- if(!empty($webinars)){
- $sql = "
- SELECT
- `to`.`order_id` as `order_id`,
- `to`.`timetable_id` as `timetable_id`,
- IF(`to`.`user_id` > 0, u.`email`, `to`.`email`) as `email`,
- IF(`to`.`user_id` > 0, u.`phone`, `to`.`phone`) as `phone`
-
- FROM
- `timetable_orders` as `to`
- LEFT JOIN `users` as u
- ON u.`id` = `to`.`user_id`
-
- WHERE
- `to`.`timetable_id` IN (".join(", ", array_keys($webinars)).")
- AND `to`.`type` IN (1,2,11,12)
- ";
- $this->db->query($sql);
- $result = $this->db->get_result();
- if(count($result)){
-
- $orders = array();
-
- foreach($result as $value){
- if(isset($value["email"]) && $email_send && trim($value["email"]) && $value["email_remind_3h"] == 0)
- $adresats_email[$value["timetable_id"]][] = $value["email"];
-
- if(isset($value["phone"]) && $sms_send && trim($value["phone"])){
- if($value["phone"])
- $adresats_sms[$value["timetable_id"]][] = preg_replace('/[^0-9]/ui','', $value["phone"]);
- }
-
- $orders[] = $value["order_id"];
-
- }
-
- if($email_send && !empty($orders))
- $this->db->query("UPDATE `timetable_orders` SET `email_remind_3h` = 1 WHERE `order_id` IN (".join(",", $orders).")");
-
- }
-
- }
-
- $count = 0;
-
- //Если включена опция отправки по почте
- if($email_send){
- //формируем письмо
- if(!empty($adresats_email)){
-
- include_once(__ENGINE_PATH.'/functions/classes/class_mailer.php');
- $mailer=new Mailer();
-
- foreach($adresats_email as $t_id=>$emails){
-
- foreach(array_unique($emails) as $email){
-
- $subject = '';
- $msg = '';
- $timetable = $webinars[$t_id];
-
- include(__ENGINE_PATH.'/templates/email.webinar_order_remind.php');
-
- if(!@$mailer->mail($email, $subject, $msg)) {
- trigger_error('Не удалось отправить оповещения о мероприятии', E_USER_WARNING);
- }
- else
- $count++;
-
- }
-
- }
-
- }
-
- echo "Отправлено писем с напоминанием о вебинарах: {$count}</br>\n";
-
- }
-
- $count = 0;
-
- if($sms_send){
- //формируем письмо
- if(!empty($adresats_sms)){
-
- foreach($adresats_sms as $t_id=>$phones){
-
- foreach(array_unique($phones) as $phone){
-
- $sms_text = '';
- $timetable = $webinars[$t_id];
-
- $webinar_name = html_entity_decode(trim($timetable['header']), ENT_QUOTES, 'UTF-8');
- $webinar_link = 'http://'.__SITE_URL.'/'.$object_types[3]['url'].'/'.$timetable['alias'].'/?date='.$timetable['id'];
- $minutes = "";
-
- $current_time = $gmtime;
- $webinar_time = strtotime($timetable["time"])-(4*3600);
-
- $minutes = floor(($webinar_time - $current_time)/60);
- $minutes = $minutes." ".smarty_modifier_tail1($minutes, 'minutes');
-
- //$sms_text = "Вебинар - {$webinar_name}({$webinar_link}), состоится через {$minutes} минут.";
- $sms_text = "Через {$minutes} состоится мероприятие: {$webinar_name}, на которое вы подавали заявку. ".__SITE_NAME;
-
- //если текст смс больше 134 символов, то обрезаем имя мероприятия и добавлем многоточие
- if(mb_strlen($sms_text, 'UTF-8') > 134){
- $webinar_name = mb_substr($webinar_name, 0, (134-mb_strlen($sms_text, 'UTF-8')-3), 'UTF-8').'...';
- //формируем новый текст смс
- //$sms_text = "Вебинар - {$webinar_name}({$webinar_link}), состоится через {$minutes} минут.";
- $sms_text = "Через {$minutes} состоится мероприятие: {$webinar_name}, на которое вы подавали заявку. ".__SITE_NAME;
- }
- new_sms($phone, $sms_text);
- $count++;
-
- }
-
- }
-
- }
-
- echo "Отправлено смс с напоминанием о вебинарах: {$count}</br>\n";
- }
-
- }
-
- //напоминание о заявке на мероприятие за 3 часа до его начала
- /*public function timetable_order_remind_sms_before_3h(){
-
- include_once(__ENGINE_PATH.'/functions/classes/class_sms.php');
- $sms = new Sms();
- $sms->sms_before_3h();
-
- }*/
-
- public function happybday_send(){
- $func_report = array('send_sms'=>0, 'send_email'=>0);
-
- $sms_tpl = array(
- "Созерцай в тишине\nКак в тебе расцветает Истина –\nС Днем Рождения.\n(Самопознание.ру)",
- "Живи настоящим,\nОсознанно вдыхая аромат Мира –\nС Днем Рождения.\n(Самопознание.ру)",
- "Пусть в Вашем сердце\nЛюбовь и гармония\nВечно живут.\nС днём рождения!\n(Самопознание.ру)",
- "Пусть ручеёк, добежавший рекой до моря,\nНе забывает родник в горах,\nОт которого начинался его путь.\nС днём рождения! (Самопознание.ру)"
- );
- $email_tpl = array("email_user_happybday_1.php","email_user_happybday_2.php","email_user_happybday_3.php","email_user_happybday_4.php");
-
- include_once(__ENGINE_PATH.'/functions/subfunctions/common.timezones.php');
- global $timezones;
-
- include_once(__ENGINE_PATH.'/functions/classes/class_mailer.php');
- $mailer = new Mailer();
- include_once(__ENGINE_PATH.'/functions/classes/class_sms.php');
- $sms = new Sms();
-
- $where = array();
- //Хак, т.к. крон почему то выполняется по Москве, а не по нулевой зоне
- if(gmdate('G')>=4){
- $time = mktime(1, 30, 0, gmdate('n'), gmdate('j')+1, gmdate('Y'));
- }
- else
- $time = time();
- $start_year = gmdate("Y", $time)-90;//максимальный возраст пользователя
- $stop_year = gmdate("Y", $time)-5;//минимальный возраст пользователя
- $current_year = gmdate("Y", $time);
- $current_month = gmdate("m", $time);
- $current_day = gmdate("d", $time);
- $current_hour = gmdate("G", $time);
- for($y=$start_year; $y<$stop_year; $y++){
- $where[] = "u.`birth` = '{$y}-{$current_month}-{$current_day}'";
- }
-
- $sql = "
- SELECT
- u.`name`, u.`login`, u.`email`, u.`phone`, u.`timezone`
-
- FROM `users` u
-
- WHERE
- u.`block` = 0
- AND (".join(" OR ", $where).")
- AND u.`birth` != '1970-01-01'
-
- ";
- $this->db->query($sql);
- $result=$this->db->get_result();
- foreach($result as $user){
- //отправляем в 10 часов по местному времени
- $hour = 11-$timezones[$user["timezone"]]["correction"]/3600;
- //время отправки (серверное)
- $send_time = $current_year."-".$current_month."-".$current_day." ".($hour < 10 ? "0" : "").$hour.":00:00";
- if(strlen($user["email"])){
-
- $msg = "";
- $subject = "";
- $user_name = $user["name"];
- include(__ENGINE_PATH."/templates/".$email_tpl[array_rand($email_tpl)]);
- if($current_hour >= $hour){
- @$mailer->mail($user["email"], $subject, $msg, __PORTAL_EMAIL_2);
- }
- else{
- $mailer->save($user["email"], $subject, $msg, $send_time);
- }
- $func_report['send_email'] += 1;
- }
-
- if(strlen($user["phone"])){
-
- $phone = preg_replace('/[^0-9]/ui','',$user["phone"]);
-
- if(!in_array(intval($phone[0]), array(7,8)))
- continue;
-
- $text = $sms_tpl[array_rand($sms_tpl)];
-
- if($current_hour >= $hour){
- new_sms($phone, $text);
- }
- else{
- $sms->save($phone, $text, $send_time);
- }
- $func_report['send_sms'] += 1;
- }
-
- }
- return 'писем отправлено - '.$func_report['send_email'].', смс отправлено - '.$func_report['send_sms'];
- }
-
- //обновляет флаг is_actual в таблице платных опций
- public function update_payment_actual(){
- $sql = "UPDATE `objects_payment_options` SET `is_actual`=0 WHERE `public_date_end`<NOW()";
- $func_report1 = $this->db->query($sql);
- $sql = "UPDATE `objects_payment_options` SET `is_actual`=1 WHERE `public_date_start`>=NOW()";
- $func_report2 = $this->db->query($sql);
- $sql = "UPDATE `objects_payment_options` SET `is_actual`=1 WHERE `public_date_start`<=NOW() AND `public_date_end`>=NOW()";
- $func_report3 = $this->db->query($sql);
- if($func_report1 && $func_report2 && $func_report3) return true;
- else return false;
- }
- //обновляет флаг is_actual в таблице мероприятий
- public function update_timetable_actual(){
- $sql = "UPDATE `timetable` SET `is_actual`=0 WHERE `date`<NOW() AND `date`!='0000-00-00 00:00:00'";
- $func_report1 = $this->db->query($sql);
- $sql = "UPDATE `timetable` SET `is_actual`=1 WHERE `date`>=NOW() AND `date`!='0000-00-00 00:00:00'";
- $func_report2 = $this->db->query($sql);
- $sql = "UPDATE `timetable_update` SET `is_actual`=0 WHERE `date`<NOW() AND `date`!='0000-00-00 00:00:00'";
- $func_report3 = $this->db->query($sql);
- $sql = "UPDATE `timetable_update` SET `is_actual`=1 WHERE `date`>=NOW() AND `date`!='0000-00-00 00:00:00'";
- $func_report4 = $this->db->query($sql);
- if($func_report1 && $func_report2 && $func_report3 && $func_report4) return true;
- else return false;
- }
- //обновляет счетчик кол-ва тренингов во вкладках
- public function update_timetable_count(){
- include_once(__ENGINE_PATH.'/functions/classes/class_timetable.php');
- $class_timetable=new Timetable();
- _save_cache("timetable.count", $class_timetable->timetable_count());
- }
- /**
- * send email notifiers about users events
- */
- public function users_events_email_notifier($hours=3){
- set_time_limit(300);
- global $object_types;
- $time1=gmdate("Y-m-d H:00:00",gmmktime(gmdate('H')-$hours,gmdate('i'),gmdate('s'),gmdate('m'),gmdate('d'),gmdate('Y')));
- //$time1='2011-11-01 00:00:00';
- $time2=gmdate("Y-m-d H:00:00");
- //$time2='2012-05-31 10:00:00';
- $count=0;
- $adresats=array();
- //получаем новые личные сообшщения
- $sql="
- SELECT COUNT(m.`id`) as `count`,m.`to`,u.`login` as `adresat_login`,u2.`id`,u2.`gender`,u2.`name`,u2.`surname`,u2.`private_name`,u2.`login`,u.`email`
- FROM `user_messages` m
- INNER JOIN `users` u ON u.`id`=m.`to` AND u.`email_delivery`=1
- INNER JOIN `users` u2 ON u2.`id`=m.`user_id`
- WHERE m.`to_readed`=0 AND m.`status`=1 AND m.`created`>='{$time1}' AND m.`created`<'{$time2}'
- GROUP BY m.`to`,m.`user_id`
- ";
- $this->db->query($sql);
- $result=$this->db->get_result();
- //группируем события по получателю
- foreach($result as $value){
- $adresats[$value['email']]['user_messages'][$value['id']]['user_id']=$value['id'];
- $adresats[$value['email']]['user_messages'][$value['id']]['name']=$value['name'];
- $adresats[$value['email']]['user_messages'][$value['id']]['gender']=$value['gender'];
- $adresats[$value['email']]['user_messages'][$value['id']]['surname']=$value['surname'];
- $adresats[$value['email']]['user_messages'][$value['id']]['private_name']=$value['private_name'];
- $adresats[$value['email']]['user_messages'][$value['id']]['private_name']=$value['private_name'];
- $adresats[$value['email']]['user_messages'][$value['id']]['login']=$value['login'];
- $adresats[$value['email']]['user_messages'][$value['id']]['count']=$value['count'];
- $adresats[$value['email']]['user_messages'][$value['id']]['adresat_login']=$value['adresat_login'];
- }
- //получени предложений подружиться
- include_once(__ENGINE_PATH.'/functions/classes/class_eventer.php');
- $eventer=new Eventer($this->db);
- $events=$eventer->get_events("e.`type`=10 AND e.`subtype`=1 AND e.`to_readed`=0 AND e.`created`>='{$time1}' AND e.`created`<'{$time2}'",false,true);
- foreach($events as $value){
- if($value['email_delivery']==1)
- $adresats[$value['email']]['friendship'][]=$value;
- }
- //получение приглашений на мероприятия
- /*$events=$eventer->get_events("e.`type`=10 AND e.`subtype`=12 AND e.`to_readed`=0 AND e.`created`>='{$time1}' AND e.`created`<'{$time2}'",true,true);
- foreach($events as $value){
- if($value['email_delivery']==1)
- $adresats[$value['email']]['invites'][]=$value;
- }*/
- //формируем письмо
- include_once(__ENGINE_PATH.'/functions/classes/class_mailer.php');
- $mailer=new Mailer();
- foreach($adresats as $email=>$events){
- $subject='';
- $msg='';
- $adresat_email = $email;
- include(__ENGINE_PATH.'/templates/email.new_user_events.php');
- if(!@$mailer->mail($email, $subject,$msg)) {
- trigger_error('Не удалось отправить оповещения о мероприятии',E_USER_WARNING);
- }else
- $count++;
- }
- return "отправлено писем - {$count}";
- }
- /**
- * send email notifiers about users events
- */
- public function users_events_email_notifier2($days=5){
- set_time_limit(300);
- global $object_types;
- $time1=gmdate("Y-m-d H:00:00",gmmktime(gmdate('H'),gmdate('i'),gmdate('s'),gmdate('m'),gmdate('j')-$days,gmdate('Y')));
- //$time1='2012-05-20 03:00:00';
- $time2=gmdate("Y-m-d H:00:00");
- //$time2='2012-05-25 03:00:00';
- $count=0;
- $adresats=array();
- //получаем новые мерпориятия по направлениям
- $timetables = array();
- $timetable_objects = array();
- //SET group_concat_max_len =4096;
- $sql="
- SELECT
- t.`id` as `timetable_id`,a.`name` as `action_name`,t.`name_extension`,t.`date_text`,a.`type`,a.`owner_id`,t.`action_id`,
- UNIX_TIMESTAMP(t.`date`) as `date`,adr.`city`,a.`alias` as `action_alias`, t.`date` as `action_date`,t.`gender_type`,
- 2 as `object_type`,GROUP_CONCAT(DISTINCT ol.`object2_id`) as `objects`,GROUP_CONCAT(DISTINCT ro.`region`) as `regions`
- FROM
- `timetable` t
- LEFT JOIN `adresses` adr ON adr.`object_type`=6 AND adr.`object_id`=t.`id`
- LEFT JOIN `actions` a ON a.`id`=t.`action_id`
- LEFT JOIN `object_regions` ro ON ro.`object_type`=6 AND ro.`object_id`=t.`id` AND ro.`main_link`=0
- LEFT JOIN `object_links` ol ON ol.`object1_type`=3 AND ol.`object2_type`=2 AND ol.`object1_id`=a.`id`
- WHERE
- t.`active`=1 AND t.`moderated`=1 AND t.`block`=0
- AND t.`created`>='{$time1}' AND t.`created`<'{$time2}'
- /*AND (t.`date` >= NOW() OR a.`type` IN (2,3))*/
- GROUP BY
- t.`id`
- UNION
- SELECT
- t.`id` as `timetable_id`,a.`name` as `action_name`,t.`name_extension`,t.`date_text`,a.`type`,a.`owner_id`,t.`action_id`,
- UNIX_TIMESTAMP(t.`date`) as `date`,adr.`city`,a.`alias` as `action_alias`, t.`date` as `action_date`,t.`gender_type`,
- 4 as `object_type`,GROUP_CONCAT(DISTINCT ol.`object2_id`) as `objects`,GROUP_CONCAT(DISTINCT ro.`region`) as `regions`
- FROM
- `timetable` t
- LEFT JOIN `adresses` adr ON adr.`object_type`=6 AND adr.`object_id`=t.`id`
- LEFT JOIN `actions` a ON a.`id`=t.`action_id`
- LEFT JOIN `object_regions` ro ON ro.`object_type`=6 AND ro.`object_id`=t.`id` AND ro.`main_link`=0
- LEFT JOIN `object_links` ol ON ol.`object1_type`=6 AND ol.`object2_type`=4 AND ol.`object1_id`=t.`id`
- WHERE
- t.`active`=1 AND t.`moderated`=1 AND t.`block`=0
- AND t.`created`>='{$time1}' AND t.`created`<'{$time2}'
- /*AND (t.`date` >= NOW() OR a.`type` IN (2,3))*/
- GROUP BY
- t.`id`
- UNION
- SELECT
- t.`id` as `timetable_id`,a.`name` as `action_name`,t.`name_extension`,t.`date_text`,a.`type`,a.`owner_id`,t.`action_id`,
- UNIX_TIMESTAMP(t.`date`) as `date`,adr.`city`,a.`alias` as `action_alias`, t.`date` as `action_date`,t.`gender_type`,
- 1 as `object_type`,GROUP_CONCAT(DISTINCT ol.`object2_id`) as `objects`,GROUP_CONCAT(DISTINCT ro.`region`) as `regions`
- FROM
- `timetable` t
- LEFT JOIN `adresses` adr ON adr.`object_type`=6 AND adr.`object_id`=t.`id`
- LEFT JOIN `actions` a ON a.`id`=t.`action_id`
- LEFT JOIN `object_regions` ro ON ro.`object_type`=6 AND ro.`object_id`=t.`id` AND ro.`main_link`=0
- LEFT JOIN `object_links` ol ON ol.`object1_type`=6 AND ol.`object2_type` IN (1,5) AND ol.`object1_id`=t.`id`
- WHERE
- t.`active`=1 AND t.`moderated`=1 AND t.`block`=0
- AND t.`created`>='{$time1}' AND t.`created`<'{$time2}'
- /*AND (t.`date` >= NOW() OR a.`type` IN (2,3))*/
- GROUP BY
- t.`id`
- UNION
- /* таблица objects_history */
- SELECT
- t.`id` as `timetable_id`,a.`name` as `action_name`,t.`name_extension`,t.`date_text`,a.`type`,a.`owner_id`,t.`action_id`,
- UNIX_TIMESTAMP(t.`date`) as `date`,adr.`city`,a.`alias` as `action_alias`, t.`date` as `action_date`,t.`gender_type`,
- 2 as `object_type`,GROUP_CONCAT(DISTINCT ol.`object2_id`) as `objects`,GROUP_CONCAT(DISTINCT ro.`region`) as `regions`
- FROM
- `objects_history` h
- LEFT JOIN `timetable` t ON h.`object_id`=t.`id` AND t.`active`=1 AND t.`moderated`=1 AND t.`block`=0
- LEFT JOIN `adresses` adr ON adr.`object_type`=6 AND adr.`object_id`=t.`id`
- LEFT JOIN `actions` a ON a.`id`=t.`action_id`
- LEFT JOIN `object_regions` ro ON ro.`object_type`=6 AND ro.`object_id`=t.`id` AND ro.`main_link`=0
- LEFT JOIN `object_links` ol ON ol.`object1_type`=3 AND ol.`object2_type`=2 AND ol.`object1_id`=a.`id`
- WHERE
- h.`object_type`=6 AND h.`action_type`=2
- AND h.`date`>='{$time1}' AND h.`date`<'{$time2}'
- /*AND (t.`date` >= NOW() OR a.`type` IN (2,3))*/
- GROUP BY
- t.`id`
- UNION
- SELECT
- t.`id` as `timetable_id`,a.`name` as `action_name`,t.`name_extension`,t.`date_text`,a.`type`,a.`owner_id`,t.`action_id`,
- UNIX_TIMESTAMP(t.`date`) as `date`,adr.`city`,a.`alias` as `action_alias`, t.`date` as `action_date`,t.`gender_type`,
- 4 as `object_type`,GROUP_CONCAT(DISTINCT ol.`object2_id`) as `objects`,GROUP_CONCAT(DISTINCT ro.`region`) as `regions`
- FROM
- `objects_history` h
- LEFT JOIN `timetable` t ON h.`object_id`=t.`id` AND t.`active`=1 AND t.`moderated`=1 AND t.`block`=0
- LEFT JOIN `adresses` adr ON adr.`object_type`=6 AND adr.`object_id`=t.`id`
- LEFT JOIN `actions` a ON a.`id`=t.`action_id`
- LEFT JOIN `object_regions` ro ON ro.`object_type`=6 AND ro.`object_id`=t.`id` AND ro.`main_link`=0
- LEFT JOIN `object_links` ol ON ol.`object1_type`=6 AND ol.`object2_type`=4 AND ol.`object1_id`=t.`id`
- WHERE
- h.`object_type`=6 AND h.`action_type`=2
- AND h.`date`>='{$time1}' AND h.`date`<'{$time2}'
- /*AND (t.`date` >= NOW() OR a.`type` IN (2,3))*/
- GROUP BY
- t.`id`
- UNION
- SELECT
- t.`id` as `timetable_id`,a.`name` as `action_name`,t.`name_extension`,t.`date_text`,a.`type`,a.`owner_id`,t.`action_id`,
- UNIX_TIMESTAMP(t.`date`) as `date`,adr.`city`,a.`alias` as `action_alias`, t.`date` as `action_date`,t.`gender_type`,
- 1 as `object_type`,GROUP_CONCAT(DISTINCT ol.`object2_id`) as `objects`,GROUP_CONCAT(DISTINCT ro.`region`) as `regions`
- FROM
- `objects_history` h
- LEFT JOIN `timetable` t ON h.`object_id`=t.`id` AND t.`active`=1 AND t.`moderated`=1 AND t.`block`=0
- LEFT JOIN `adresses` adr ON adr.`object_type`=6 AND adr.`object_id`=t.`id`
- LEFT JOIN `actions` a ON a.`id`=t.`action_id`
- LEFT JOIN `object_regions` ro ON ro.`object_type`=6 AND ro.`object_id`=t.`id` AND ro.`main_link`=0
- LEFT JOIN `object_links` ol ON ol.`object1_type`=6 AND ol.`object2_type` IN (1,5) AND ol.`object1_id`=t.`id`
- WHERE
- h.`object_type`=6 AND h.`action_type`=2
- AND h.`date`>='{$time1}' AND h.`date`<'{$time2}'
- /*AND (t.`date` >= NOW() OR a.`type` IN (2,3))*/
- GROUP BY
- t.`id`
- ORDER BY `object_type`
- ";
- $this->db->query($sql);
- $result=$this->db->get_result();
- foreach($result as $value){
- //складируем информацию по мероприятию
- $timetables[$value["timetable_id"]] = $value;
- //складируем объекты, которые фигурируют в мероприятие
- if(strlen($value["objects"])){
- $objects = explode(",", $value["objects"]);
- foreach($objects as $objects_id){
- if(!isset($timetable_objects[$value["object_type"]][$objects_id]) || !in_array($value["timetable_id"], $timetable_objects[$value["object_type"]][$objects_id]))
- $timetable_objects[$value["object_type"]][$objects_id][] = $value["timetable_id"];
- }
- }
- if(!isset($timetable_objects[3][$value["action_id"]]) || !in_array($value["timetable_id"], $timetable_objects[3][$value["action_id"]]))
- $timetable_objects[3][$value["action_id"]][] = $value["timetable_id"];
- }
- //теперь у нас есть набор всех объектов связанных с мероприятиями найдем всех юзеров которые интересуются ими
- $sql = array();
- if(isset($timetable_objects[1])){
- $sql[] = "
- SELECT
- COALESCE(u.`email`, ui.`email`) as `email`,IF(u.`id` IS NULL, 1, 0) as `is_guest`,
- COALESCE(u.`id`, 0) as `user_id`,COALESCE(u.`gender`, 0) as `gender`,ui.`object_type` as `object_type`,0 as `object_region`,
- COALESCE(ur.`region`, ui.`region`) as `region`,t.`id` as `object_id`,t.`name` as `object_name`,t.`alias` as `object_alias`
- FROM `user_interesting` ui
- LEFT JOIN `users` u ON u.`id` = ui.`user_id` AND u.`email_delivery`=1 AND u.`block`=0
- LEFT JOIN `users_regions` ur ON ur.`user_id` = u.`id`
- JOIN `treiners` t ON t.`id`=ui.`object_id` AND t.`moderated`=1 AND t.`block`=0
- WHERE
- ui.`object_id` IN (".join(", ", array_keys($timetable_objects[1])).")
- AND ui.`object_type` IN (1,5)
- AND ui.`practing`=0
- AND COALESCE(u.`email`, ui.`email`) != ''
- AND COALESCE(u.`email`, ui.`email`) IS NOT NULL
- GROUP BY `email`,`object_type`,`object_id`,`region`
- ";
- }
- if(isset($timetable_objects[2])){
- $sql[] = "
- SELECT
- COALESCE(u.`email`, ui.`email`) as `email`,IF(u.`id` IS NULL, 1, 0) as `is_guest`,
- COALESCE(u.`id`, 0) as `user_id`,COALESCE(u.`gender`, 0) as `gender`,2 as `object_type`,0 as `object_region`,
- COALESCE(ur.`region`, ui.`region`) as `region`,g.`id` as `object_id`,g.`name` as `object_name`,g.`alias` as `object_alias`
- FROM `user_interesting` ui
- LEFT JOIN `users` u ON u.`id` = ui.`user_id` AND u.`email_delivery`=1 AND u.`block`=0
- LEFT JOIN `users_regions` ur ON ur.`user_id` = u.`id`
- JOIN `guidelines` g ON g.`id`=ui.`object_id` AND g.`moderated`=1 AND g.`block`=0
- WHERE
- ui.`object_id` IN (".join(", ", array_keys($timetable_objects[2])).")
- AND ui.`object_type`=2
- AND ui.`practing`=0
- AND COALESCE(u.`email`, ui.`email`) != ''
- AND COALESCE(u.`email`, ui.`email`) IS NOT NULL
- GROUP BY `email`,`object_type`,`object_id`,`region`
- ";
- }
- if(isset($timetable_objects[4])){
- $sql[] = "
- SELECT
- COALESCE(u.`email`, ui.`email`) as `email`,IF(u.`id` IS NULL, 1, 0) as `is_guest`,
- COALESCE(u.`id`, 0) as `user_id`,COALESCE(u.`gender`, 0) as `gender`,4 as `object_type`,obr.`region` as `object_region`,
- COALESCE(ur.`region`, ui.`region`) as `region`,o.`id` as `object_id`,o.`fullname` as `object_name`,o.`alias` as `object_alias`
- FROM `user_interesting` ui
- LEFT JOIN `users` u ON u.`id` = ui.`user_id` AND u.`email_delivery`=1 AND u.`block`=0
- LEFT JOIN `users_regions` ur ON ur.`user_id` = u.`id`
- JOIN `organizators` o ON o.`id`=ui.`object_id` AND o.`moderated`=1 AND o.`block`=0
- JOIN `object_regions` obr ON o.`id`=obr.`object_id` AND obr.`object_type`=4 AND obr.`main_link`=1
- WHERE
- ui.`object_id` IN (".join(", ", array_keys($timetable_objects[4])).")
- AND ui.`object_type`=4
- AND ui.`practing`=0
- AND COALESCE(u.`email`, ui.`email`) != ''
- AND COALESCE(u.`email`, ui.`email`) IS NOT NULL
- GROUP BY `email`,`object_type`,`object_id`,`region`
- ";
- }
- if(isset($timetable_objects[3])){
- $sql[] = "
- SELECT
- COALESCE(u.`email`, ui.`email`) as `email`,IF(u.`id` IS NULL, 1, 0) as `is_guest`,
- COALESCE(u.`id`, 0) as `user_id`,COALESCE(u.`gender`, 0) as `gender`,3 as `object_type`,0 as `object_region`,
- COALESCE(ur.`region`, ui.`region`) as `region`,ui.`object_id` as `object_id`,0 as `object_name`,0 as `object_alias`
- FROM `user_interesting` ui
- LEFT JOIN `users` u ON u.`id` = ui.`user_id` AND u.`email_delivery`=1 AND u.`block`=0
- LEFT JOIN `users_regions` ur ON ur.`user_id` = u.`id`
- WHERE
- ui.`object_id` IN (".join(", ", array_keys($timetable_objects[3])).")
- AND ui.`object_type`=3
- AND ui.`practing`=0
- AND COALESCE(u.`email`, ui.`email`) != ''
- AND COALESCE(u.`email`, ui.`email`) IS NOT NULL
- GROUP BY `email`,`object_type`,`object_id`,`region`
- ";
- }
- $sql = join(" UNION ", $sql);
- if(strlen($sql)){
- $this->db->query($sql);
- $result=$this->db->get_result();
- $emails=array();
- foreach($result as $value){
- if(!strlen(trim($value['email'])))
- continue;
- $object_id = $value["object_id"];
- $object_type = $value["object_type"];
- if(isset($timetable_objects[$object_type][$object_id])){
- foreach($timetable_objects[$object_type][$object_id] as $timetable_id){
- $regions = explode(",", $timetables[$timetable_id]['regions']);
- if((in_array($value["region"], $regions) || $value["region"] == 0 || $timetables[$timetable_id]['type'] == 4)
- && $value["user_id"] != $timetables[$timetable_id]["owner_id"]
- && (in_array($timetables[$timetable_id]['gender_type'], array(0, $value['gender'])) || $value['gender'] == 0) ){
- if(!isset($adresats[$value['email']][6][$timetable_id])){
- $adresats[$value['email']][6][$timetable_id]['timetable_id']=$timetable_id;
- $adresats[$value['email']][6][$timetable_id]['action_name']=$timetables[$timetable_id]['action_name'];
- $adresats[$value['email']][6][$timetable_id]['action_alias']=$timetables[$timetable_id]['action_alias'];
- $adresats[$value['email']][6][$timetable_id]['name_extension']=$timetables[$timetable_id]['name_extension'];
- $adresats[$value['email']][6][$timetable_id]['date_text']=$timetables[$timetable_id]['date_text'];
- $adresats[$value['email']][6][$timetable_id]['date']=$timetables[$timetable_id]['date'];
- $adresats[$value['email']][6][$timetable_id]['type']=$timetables[$timetable_id]['type'];
- $adresats[$value['email']][6][$timetable_id]['city']=$timetables[$timetable_id]['city'];
- $adresats[$value['email']][6][$timetable_id]['regions']=$timetables[$timetable_id]['regions'];
- }
- $adresats[$value['email']][6][$timetable_id]['objects'][$object_type][$object_id]=array(
- "alias"=>$value['object_alias'],
- "name"=>$value['object_name'],
- "region"=>$value['object_region']
- );
- }
- }
- }
- }
- }
- //получение новостей
- $sql="
- SELECT o.`id`,obj.`name` as `object_name`,obj.`alias` as `object_alias`,2 as `object_type`,obj.`id` as `object_id`,
- 0 as `object_region`,COALESCE(u.`email`,ui.`email`,'') as `email`,o.`name` as `news_name`,o.`alias` as `news_alias`
- FROM `news` o
- LEFT JOIN `object_regions` ro ON ro.`object_type`=7 AND ro.`object_id`=o.`id`
- LEFT JOIN `object_links` ol ON ol.`object1_type`=7 AND ol.`object1_id`=o.`id` AND ol.`object2_type`=2
- LEFT JOIN `object_links` ol2 ON ol2.`object2_type`=7 AND ol2.`object2_id`=o.`id` AND ol2.`object1_type`=2
- LEFT JOIN `guidelines` obj ON obj.`id`=COALESCE(ol.`object2_id`,ol2.`object1_id`) AND obj.`moderated`=1 AND obj.`block`=0
- INNER JOIN `user_interesting` ui ON ui.`user_id`!=o.`owner_id` AND ui.`object_type`=2 AND ui.`object_id`=COALESCE(ol.`object2_id`,ol2.`object1_id`) AND ui.`practing`=0
- LEFT JOIN `users` u ON u.`id`=ui.`user_id`
- LEFT JOIN `users_regions` ur ON ur.`user_id`=u.`id`
- WHERE
- o.`moderated`=1 AND o.`block`=0
- AND (u.`email_delivery`=1 OR u.`email_delivery` IS NULL)
- AND (ro.`region` IS NULL OR ur.`region` IS NULL OR ur.`region`=ro.`region`)
- AND o.`visible_start_date`>='{$time1}' AND o.`visible_start_date`<'{$time2}'
- GROUP BY o.`id`,`object_type`,obj.`id`,`email`
- UNION
- SELECT o.`id`,obj.`name` as `object_name`,obj.`alias` as `object_alias`,3 as `object_type`,obj.`id` as `object_id`,
- 0 as `object_region`,COALESCE(u.`email`,ui.`email`,'') as `email`,o.`name` as `news_name`,o.`alias` as `news_alias`
- FROM `news` o
- LEFT JOIN `object_regions` ro ON ro.`object_type`=7 AND ro.`object_id`=o.`id`
- LEFT JOIN `object_links` ol ON ol.`object1_type`=7 AND ol.`object1_id`=o.`id` AND ol.`object2_type`=3
- LEFT JOIN `object_links` ol2 ON ol2.`object2_type`=7 AND ol2.`object2_id`=o.`id` AND ol2.`object1_type`=3
- LEFT JOIN `actions` obj ON obj.`id`=COALESCE(ol.`object2_id`,ol2.`object1_id`)
- INNER JOIN `user_interesting` ui ON ui.`user_id`!=o.`owner_id` AND ui.`object_type`=3 AND ui.`object_id`=COALESCE(ol.`object2_id`,ol2.`object1_id`) AND ui.`practing`=0
- LEFT JOIN `users` u ON u.`id`=ui.`user_id`
- LEFT JOIN `users_regions` ur ON ur.`user_id`=u.`id`
- WHERE
- o.`moderated`=1 AND o.`block`=0
- AND (u.`email_delivery`=1 OR u.`email_delivery` IS NULL)
- AND (ro.`region` IS NULL OR ur.`region` IS NULL OR ur.`region`=ro.`region`)
- AND o.`visible_start_date`>='{$time1}' AND o.`visible_start_date`<'{$time2}'
- GROUP BY o.`id`,`object_type`,obj.`id`,`email`
- UNION
- SELECT o.`id`, obj.`fullname` as `object_name`,obj.`alias` as `object_alias`,4 as `object_type`,obj.`id` as `object_id`,obr.`region` as `object_region`,
- COALESCE(u.`email`,ui.`email`,'') as `email`,o.`name` as `news_name`,o.`alias` as `news_alias`
- FROM `news` o
- LEFT JOIN `object_regions` ro ON ro.`object_type`=7 AND ro.`object_id`=o.`id`
- LEFT JOIN `object_links` ol ON ol.`object1_type`=7 AND ol.`object1_id`=o.`id` AND ol.`object2_type`=4
- LEFT JOIN `object_links` ol2 ON ol2.`object2_type`=7 AND ol2.`object2_id`=o.`id` AND ol2.`object1_type`=4
- LEFT JOIN `organizators` obj ON obj.`id`=COALESCE(ol.`object2_id`,ol2.`object1_id`) AND obj.`moderated`=1 AND obj.`block`=0
- LEFT JOIN `object_regions` obr ON obj.`id`=obr.`object_id` AND obr.`object_type`=4 AND obr.`main_link`=1
- INNER JOIN `user_interesting` ui ON ui.`user_id`!=o.`owner_id` AND ui.`object_type`=4 AND ui.`object_id`=COALESCE(ol.`object2_id`,ol2.`object1_id`) AND ui.`practing`=0
- LEFT JOIN `users` u ON u.`id`=ui.`user_id`
- LEFT JOIN `users_regions` ur ON ur.`user_id`=u.`id`
- WHERE
- o.`moderated`=1 AND o.`block`=0
- AND (u.`email_delivery`=1 OR u.`email_delivery` IS NULL)
- AND (ro.`region` IS NULL OR ur.`region` IS NULL OR ur.`region`=ro.`region`)
- AND o.`visible_start_date`>='{$time1}' AND o.`visible_start_date`<'{$time2}'
- GROUP BY o.`id`,`object_type`,obj.`id`,`email`
- UNION
- SELECT o.`id`, obj.`name` as `object_name`,obj.`alias` as `object_alias`,
- COALESCE(ol.`object2_type`,ol2.`object1_type`) as `object_type`,obj.`id` as `object_id`,0 as `object_region`,
- COALESCE(u.`email`,ui.`email`,'') as `email`,o.`name` as `news_name`,o.`alias` as `news_alias`
- FROM `news` o
- LEFT JOIN `object_regions` ro ON ro.`object_type`=7 AND ro.`object_id`=o.`id`
- LEFT JOIN `object_links` ol ON ol.`object1_type`=7 AND ol.`object1_id`=o.`id` AND ol.`object2_type` IN (1,5)
- LEFT JOIN `object_links` ol2 ON ol2.`object2_type`=7 AND ol2.`object2_id`=o.`id` AND ol2.`object1_type` IN (1,5)
- LEFT JOIN `treiners` obj ON obj.`id`=COALESCE(ol.`object2_id`,ol2.`object1_id`) AND obj.`moderated`=1 AND obj.`block`=0
- INNER JOIN `user_interesting` ui ON ui.`user_id`!=o.`owner_id` AND ui.`object_type` IN (1,5) AND ui.`object_id`=COALESCE(ol.`object2_id`,ol2.`object1_id`) AND ui.`practing`=0
- LEFT JOIN `users` u ON u.`id`=ui.`user_id`
- LEFT JOIN `users_regions` ur ON ur.`user_id`=u.`id`
- WHERE
- o.`moderated`=1 AND o.`block`=0
- AND (u.`email_delivery`=1 OR u.`email_delivery` IS NULL)
- AND (ro.`region` IS NULL OR ur.`region` IS NULL OR ur.`region`=ro.`region`)
- AND o.`visible_start_date`>='{$time1}' AND o.`visible_start_date`<'{$time2}'
- GROUP BY o.`id`,`object_type`,obj.`id`,`email`
- /* таблица objects_history */
- UNION
- SELECT o.`id`,obj.`name` as `object_name`,obj.`alias` as `object_alias`,2 as `object_type`,obj.`id` as `object_id`,0 as `object_region`,
- COALESCE(u.`email`,ui.`email`,'') as `email`,o.`name` as `news_name`,o.`alias` as `news_alias`
- FROM `objects_history` h
- LEFT JOIN `news` o ON h.`object_id`=o.`id` AND o.`moderated`=1 AND o.`block`=0
- LEFT JOIN `object_regions` ro ON ro.`object_type`=7 AND ro.`object_id`=o.`id`
- LEFT JOIN `object_links` ol ON ol.`object1_type`=7 AND ol.`object1_id`=o.`id` AND ol.`object2_type`=2
- LEFT JOIN `object_links` ol2 ON ol2.`object2_type`=7 AND ol2.`object2_id`=o.`id` AND ol2.`object1_type`=2
- LEFT JOIN `guidelines` obj ON obj.`id`=COALESCE(ol.`object2_id`,ol2.`object1_id`) AND obj.`moderated`=1 AND obj.`block`=0
- INNER JOIN `user_interesting` ui ON ui.`user_id`!=o.`owner_id` AND ui.`object_type`=2 AND ui.`object_id`=COALESCE(ol.`object2_id`,ol2.`object1_id`) AND ui.`practing`=0
- LEFT JOIN `users` u ON u.`id`=ui.`user_id`
- LEFT JOIN `users_regions` ur ON ur.`user_id`=u.`id`
- WHERE
- h.`object_type`=7 AND h.`action_type`=2
- AND (u.`email_delivery`=1 OR u.`email_delivery` IS NULL)
- AND (ro.`region` IS NULL OR ur.`region` IS NULL OR ur.`region`=ro.`region`)
- AND h.`date`>='{$time1}' AND h.`date`<'{$time2}'
- GROUP BY o.`id`,`object_type`,obj.`id`,`email`
- UNION
- SELECT o.`id`,obj.`name` as `object_name`,obj.`alias` as `object_alias`,3 as `object_type`,obj.`id` as `object_id`,0 as `object_region`,
- COALESCE(u.`email`,ui.`email`,'') as `email`,o.`name` as `news_name`,o.`alias` as `news_alias`
- FROM `objects_history` h
- LEFT JOIN `news` o ON h.`object_id`=o.`id` AND o.`moderated`=1 AND o.`block`=0
- LEFT JOIN `object_regions` ro ON ro.`object_type`=7 AND ro.`object_id`=o.`id`
- LEFT JOIN `object_links` ol ON ol.`object1_type`=7 AND ol.`object1_id`=o.`id` AND ol.`object2_type`=3
- LEFT JOIN `object_links` ol2 ON ol2.`object2_type`=7 AND ol2.`object2_id`=o.`id` AND ol2.`object1_type`=3
- LEFT JOIN `actions` obj ON obj.`id`=COALESCE(ol.`object2_id`,ol2.`object1_id`)
- INNER JOIN `user_interesting` ui ON ui.`user_id`!=o.`owner_id` AND ui.`object_type`=3 AND ui.`object_id`=COALESCE(ol.`object2_id`,ol2.`object1_id`) AND ui.`practing`=0
- LEFT JOIN `users` u ON u.`id`=ui.`user_id`
- LEFT JOIN `users_regions` ur ON ur.`user_id`=u.`id`
- WHERE
- h.`object_type`=7 AND h.`action_type`=2
- AND (u.`email_delivery`=1 OR u.`email_delivery` IS NULL)
- AND (ro.`region` IS NULL OR ur.`region` IS NULL OR ur.`region`=ro.`region`)
- AND h.`date`>='{$time1}' AND h.`date`<'{$time2}'
- GROUP BY o.`id`,`object_type`,obj.`id`,`email`
- UNION
- SELECT o.`id`,obj.`name` as `object_name`,obj.`alias` as `object_alias`,
- COALESCE(ol.`object2_type`,ol2.`object1_type`) as `object_type`,obj.`id` as `object_id`,0 as `object_region`,
- COALESCE(u.`email`,ui.`email`,'') as `email`,o.`name` as `news_name`,o.`alias` as `news_alias`
- FROM `objects_history` h
- LEFT JOIN `news` o ON h.`object_id`=o.`id` AND o.`moderated`=1 AND o.`block`=0
- LEFT JOIN `object_regions` ro ON ro.`object_type`=7 AND ro.`object_id`=o.`id`
- LEFT JOIN `object_links` ol ON ol.`object1_type`=7 AND ol.`object1_id`=o.`id` AND ol.`object2_type` IN (1,5)
- LEFT JOIN `object_links` ol2 ON ol2.`object2_type`=7 AND ol2.`object2_id`=o.`id` AND ol2.`object1_type` IN (1,5)
- LEFT JOIN `treiners` obj ON obj.`id`=COALESCE(ol.`object2_id`,ol2.`object1_id`) AND obj.`moderated`=1 AND obj.`block`=0
- INNER JOIN `user_interesting` ui ON ui.`user_id`!=o.`owner_id` AND ui.`object_type` IN (1,5) AND ui.`object_id`=COALESCE(ol.`object2_id`,ol2.`object1_id`) AND ui.`practing`=0
- LEFT JOIN `users` u ON u.`id`=ui.`user_id`
- LEFT JOIN `users_regions` ur ON ur.`user_id`=u.`id`
- WHERE
- h.`object_type`=7 AND h.`action_type`=2
- AND (u.`email_delivery`=1 OR u.`email_delivery` IS NULL)
- AND (ro.`region` IS NULL OR ur.`region` IS NULL OR ur.`region`=ro.`region`)
- AND h.`date`>='{$time1}' AND h.`date`<'{$time2}'
- GROUP BY o.`id`,`object_type`,obj.`id`,`email`
- UNION
- SELECT o.`id`,obj.`fullname` as `object_name`,obj.`alias` as `object_alias`,4 as `object_type`,obj.`id` as `object_id`,obr.`region` as `object_region`,
- COALESCE(u.`email`,ui.`email`,'') as `email`,o.`name` as `news_name`,o.`alias` as `news_alias`
- FROM `objects_history` h
- LEFT JOIN `news` o ON h.`object_id`=o.`id` AND o.`moderated`=1 AND o.`block`=0
- LEFT JOIN `object_regions` ro ON ro.`object_type`=7 AND ro.`object_id`=o.`id`
- LEFT JOIN `object_links` ol ON ol.`object1_type`=7 AND ol.`object1_id`=o.`id` AND ol.`object2_type`=4
- LEFT JOIN `object_links` ol2 ON ol2.`object2_type`=7 AND ol2.`object2_id`=o.`id` AND ol2.`object1_type`=4
- LEFT JOIN `organizators` obj ON obj.`id`=COALESCE(ol.`object2_id`,ol2.`object1_id`) AND obj.`moderated`=1 AND obj.`block`=0
- LEFT JOIN `object_regions` obr ON obj.`id`=obr.`object_id` AND obr.`object_type`=4 AND obr.`main_link`=1
- INNER JOIN `user_interesting` ui ON ui.`user_id`!=o.`owner_id` AND ui.`object_type`=4 AND ui.`object_id`=COALESCE(ol.`object2_id`,ol2.`object1_id`) AND ui.`practing`=0
- LEFT JOIN `users` u ON u.`id`=ui.`user_id`
- LEFT JOIN `users_regions` ur ON ur.`user_id`=u.`id`
- WHERE
- h.`object_type`=7 AND h.`action_type`=2
- AND (u.`email_delivery`=1 OR u.`email_delivery` IS NULL)
- AND (ro.`region` IS NULL OR ur.`region` IS NULL OR ur.`region`=ro.`region`)
- AND h.`date`>='{$time1}' AND h.`date`<'{$time2}'
- GROUP BY o.`id`,`object_type`,obj.`id`,`email`
- ";
- $this->db->query($sql);
- $result=$this->db->get_result();
- foreach($result as $value){
- if(!strlen(trim($value['email'])))
- continue;
- if(!isset($adresats[$value['email']][7][$value['id']])){
- $adresats[$value['email']][7][$value['id']]['id']=$value['id'];
- $adresats[$value['email']][7][$value['id']]['news_name']=$value['news_name'];
- $adresats[$value['email']][7][$value['id']]['news_alias']=$value['news_alias'];
- //$adresats[$value['email']][7][$value['id']]['news_region']=$value['region'];
- }
- $adresats[$value['email']][7][$value['id']]['objects'][$value["object_type"]][$value['object_id']]=array(
- "alias"=>$value['object_alias'],
- "name"=>$value['object_name'],
- "region"=>$value['object_region']
- );
- }
- //получение статей
- $sql="
- SELECT o.`id`,obj.`name` as `object_name`,obj.`alias` as `object_alias`,2 as `object_type`,obj.`id` as `object_id`,0 as `object_region`,
- COALESCE(u.`email`,ui.`email`,'') as `email`,o.`name` as `article_name`,o.`alias` as `article_alias`
- FROM `articles` o
- LEFT JOIN `object_regions` ro ON ro.`object_type`=8 AND ro.`object_id`=o.`id`
- LEFT JOIN `object_links` ol ON ol.`object1_type`=8 AND ol.`object1_id`=o.`id` AND ol.`object2_type`=2
- LEFT JOIN `object_links` ol2 ON ol2.`object2_type`=8 AND ol2.`object2_id`=o.`id` AND ol2.`object1_type`=2
- LEFT JOIN `guidelines` obj ON obj.`id`=COALESCE(ol.`object2_id`,ol2.`object1_id`)
- INNER JOIN `user_interesting` ui ON ui.`user_id`!=o.`owner_id` AND ui.`object_type`=2 AND ui.`object_id`=COALESCE(ol.`object2_id`,ol2.`object1_id`) AND ui.`practing`=0
- LEFT JOIN `users` u ON u.`id`=ui.`user_id`
- LEFT JOIN `users_regions` ur ON ur.`user_id`=u.`id`
- WHERE
- o.`moderated`=1 AND o.`block`=0
- AND (u.`email_delivery`=1 OR u.`email_delivery` IS NULL)
- AND (ro.`region` IS NULL OR ur.`region` IS NULL OR ur.`region`=ro.`region`)
- AND o.`created`>='{$time1}' AND o.`created`<'{$time2}'
- GROUP BY o.`id`,`object_type`,obj.`id`,`email`
- UNION
- SELECT o.`id`,obj.`name` as `object_name`,obj.`alias` as `object_alias`,3 as `object_type`,obj.`id` as `object_id`,0 as `object_region`,
- COALESCE(u.`email`,ui.`email`,'') as `email`,o.`name` as `article_name`,o.`alias` as `article_alias`
- FROM `articles` o
- LEFT JOIN `object_regions` ro ON ro.`object_type`=8 AND ro.`object_id`=o.`id`
- LEFT JOIN `object_links` ol ON ol.`object1_type`=8 AND ol.`object1_id`=o.`id` AND ol.`object2_type`=3
- LEFT JOIN `object_links` ol2 ON ol2.`object2_type`=8 AND ol2.`object2_id`=o.`id` AND ol2.`object1_type`=3
- LEFT JOIN `actions` obj ON obj.`id`=COALESCE(ol.`object2_id`,ol2.`object1_id`)
- INNER JOIN `user_interesting` ui ON ui.`user_id`!=o.`owner_id` AND ui.`object_type`=3 AND ui.`object_id`=COALESCE(ol.`object2_id`,ol2.`object1_id`) AND ui.`practing`=0
- LEFT JOIN `users` u ON u.`id`=ui.`user_id`
- LEFT JOIN `users_regions` ur ON ur.`user_id`=u.`id`
- WHERE
- o.`moderated`=1 AND o.`block`=0
- AND (u.`email_delivery`=1 OR u.`email_delivery` IS NULL)
- AND (ro.`region` IS NULL OR ur.`region` IS NULL OR ur.`region`=ro.`region`)
- AND o.`created`>='{$time1}' AND o.`created`<'{$time2}'
- GROUP BY o.`id`,`object_type`,obj.`id`,`email`
- UNION
- SELECT o.`id`,obj.`fullname` as `object_name`,obj.`alias` as `object_alias`,4 as `object_type`,obj.`id` as `object_id`,obr.`region` as `object_region`,
- COALESCE(u.`email`,ui.`email`,'') as `email`,o.`name` as `article_name`,o.`alias` as `article_alias`
- FROM `articles` o
- LEFT JOIN `object_regions` ro ON ro.`object_type`=8 AND ro.`object_id`=o.`id`
- LEFT JOIN `object_links` ol ON ol.`object1_type`=8 AND ol.`object1_id`=o.`id` AND ol.`object2_type`=4
- LEFT JOIN `object_links` ol2 ON ol2.`object2_type`=8 AND ol2.`object2_id`=o.`id` AND ol2.`object1_type`=4
- LEFT JOIN `organizators` obj ON obj.`id`=COALESCE(ol.`object2_id`,ol2.`object1_id`) AND obj.`moderated`=1 AND obj.`block`=0
- LEFT JOIN `object_regions` obr ON obj.`id`=obr.`object_id` AND obr.`object_type`=4 AND obr.`main_link`=1
- INNER JOIN `user_interesting` ui ON ui.`user_id`!=o.`owner_id` AND ui.`object_type`=4 AND ui.`object_id`=COALESCE(ol.`object2_id`,ol2.`object1_id`) AND ui.`practing`=0
- LEFT JOIN `users` u ON u.`id`=ui.`user_id`
- LEFT JOIN `users_regions` ur ON ur.`user_id`=u.`id`
- WHERE
- o.`moderated`=1 AND o.`block`=0
- AND (u.`email_delivery`=1 OR u.`email_delivery` IS NULL)
- AND (ro.`region` IS NULL OR ur.`region` IS NULL OR ur.`region`=ro.`region`)
- AND o.`created`>='{$time1}' AND o.`created`<'{$time2}'
- GROUP BY o.`id`,`object_type`,obj.`id`,`email`
- UNION
- SELECT o.`id`,obj.`name` as `object_name`,obj.`alias` as `object_alias`,
- COALESCE(ol.`object2_type`,ol2.`object1_type`) as `object_type`,obj.`id` as `object_id`,0 as `object_region`,
- COALESCE(u.`email`,ui.`email`,'') as `email`,o.`name` as `article_name`,o.`alias` as `article_alias`
- FROM `articles` o
- LEFT JOIN `object_regions` ro ON ro.`object_type`=8 AND ro.`object_id`=o.`id`
- LEFT JOIN `object_links` ol ON ol.`object1_type`=8 AND ol.`object1_id`=o.`id` AND ol.`object2_type` IN (1,5)
- LEFT JOIN `object_links` ol2 ON ol2.`object2_type`=8 AND ol2.`object2_id`=o.`id` AND ol2.`object1_type` IN (1,5)
- LEFT JOIN `treiners` obj ON obj.`id`=COALESCE(ol.`object2_id`,ol2.`object1_id`) AND obj.`moderated`=1 AND obj.`block`=0
- INNER JOIN `user_interesting` ui ON ui.`user_id`!=o.`owner_id` AND ui.`object_type` IN (1,5) AND ui.`object_id`=COALESCE(ol.`object2_id`,ol2.`object1_id`) AND ui.`practing`=0
- LEFT JOIN `users` u ON u.`id`=ui.`user_id`
- LEFT JOIN `users_regions` ur ON ur.`user_id`=u.`id`
- WHERE
- o.`moderated`=1 AND o.`block`=0
- AND (u.`email_delivery`=1 OR u.`email_delivery` IS NULL)
- AND (ro.`region` IS NULL OR ur.`region` IS NULL OR ur.`region`=ro.`region`)
- AND o.`created`>='{$time1}' AND o.`created`<'{$time2}'
- GROUP BY o.`id`,`object_type`,obj.`id`,`email`
- UNION
- /* таблица objects_history */
- SELECT o.`id`,obj.`name` as `object_name`,obj.`alias` as `object_alias`,2 as `object_type`,obj.`id` as `object_id`,0 as `object_region`,
- COALESCE(u.`email`,ui.`email`,'') as `email`,o.`name` as `article_name`,o.`alias` as `article_alias`
- FROM `objects_history` h
- LEFT JOIN `articles` o ON h.`object_id`=o.`id` AND o.`moderated`=1 AND o.`block`=0
- LEFT JOIN `object_regions` ro ON ro.`object_type`=8 AND ro.`object_id`=o.`id`
- LEFT JOIN `object_links` ol ON ol.`object1_type`=8 AND ol.`object1_id`=o.`id` AND ol.`object2_type`=2
- LEFT JOIN `object_links` ol2 ON ol2.`object2_type`=8 AND ol2.`object2_id`=o.`id` AND ol2.`object1_type`=2
- LEFT JOIN `guidelines` obj ON obj.`id`=COALESCE(ol.`object2_id`,ol2.`object1_id`) AND obj.`moderated`=1 AND obj.`block`=0
- INNER JOIN `user_interesting` ui ON ui.`user_id`!=o.`owner_id` AND ui.`object_type`=2 AND ui.`object_id`=COALESCE(ol.`object2_id`,ol2.`object1_id`) AND ui.`practing`=0
- LEFT JOIN `users` u ON u.`id`=ui.`user_id`
- LEFT JOIN `users_regions` ur ON ur.`user_id`=u.`id`
- WHERE
- h.`object_type`=8 AND h.`action_type`=2
- AND (u.`email_delivery`=1 OR u.`email_delivery` IS NULL)
- AND (ro.`region` IS NULL OR ur.`region` IS NULL OR ur.`region`=ro.`region`)
- AND h.`date`>='{$time1}' AND h.`date`<'{$time2}'
- GROUP BY o.`id`,`object_type`,obj.`id`,`email`
- UNION
- SELECT o.`id`,obj.`name` as `object_name`,obj.`alias` as `object_alias`,3 as `object_type`,obj.`id` as `object_id`,0 as `object_region`,
- COALESCE(u.`email`,ui.`email`,'') as `email`,o.`name` as `article_name`,o.`alias` as `article_alias`
- FROM `objects_history` h
- LEFT JOIN `articles` o ON h.`object_id`=o.`id` AND o.`moderated`=1 AND o.`block`=0
- LEFT JOIN `object_regions` ro ON ro.`object_type`=8 AND ro.`object_id`=o.`id`
- LEFT JOIN `object_links` ol ON ol.`object1_type`=8 AND ol.`object1_id`=o.`id` AND ol.`object2_type`=3
- LEFT JOIN `object_links` ol2 ON ol2.`object2_type`=8 AND ol2.`object2_id`=o.`id` AND ol2.`object1_type`=3
- LEFT JOIN `actions` obj ON obj.`id`=COALESCE(ol.`object2_id`,ol2.`object1_id`)
- INNER JOIN `user_interesting` ui ON ui.`user_id`!=o.`owner_id` AND ui.`object_type`=3 AND ui.`object_id`=COALESCE(ol.`object2_id`,ol2.`object1_id`) AND ui.`practing`=0
- LEFT JOIN `users` u ON u.`id`=ui.`user_id`
- LEFT JOIN `users_regions` ur ON ur.`user_id`=u.`id`
- WHERE
- h.`object_type`=8 AND h.`action_type`=2
- AND (u.`email_delivery`=1 OR u.`email_delivery` IS NULL)
- AND (ro.`region` IS NULL OR ur.`region` IS NULL OR ur.`region`=ro.`region`)
- AND h.`date`>='{$time1}' AND h.`date`<'{$time2}'
- GROUP BY o.`id`,`object_type`,obj.`id`,`email`
- UNION
- SELECT o.`id`,obj.`fullname` as `object_name`,obj.`alias` as `object_alias`,4 as `object_type`,obj.`id` as `object_id`,obr.`region` as `object_region`,
- COALESCE(u.`email`,ui.`email`,'') as `email`,o.`name` as `article_name`,o.`alias` as `article_alias`
- FROM `objects_history` h
- LEFT JOIN `articles` o ON h.`object_id`=o.`id` AND o.`moderated`=1 AND o.`block`=0
- LEFT JOIN `object_regions` ro ON ro.`object_type`=8 AND ro.`object_id`=o.`id`
- LEFT JOIN `object_links` ol ON ol.`object1_type`=8 AND ol.`object1_id`=o.`id` AND ol.`object2_type`=4
- LEFT JOIN `object_links` ol2 ON ol2.`object2_type`=8 AND ol2.`object2_id`=o.`id` AND ol2.`object1_type`=4
- LEFT JOIN `organizators` obj ON obj.`id`=COALESCE(ol.`object2_id`,ol2.`object1_id`) AND obj.`moderated`=1 AND obj.`block`=0
- LEFT JOIN `object_regions` obr ON obj.`id`=obr.`object_id` AND obr.`object_type`=4 AND obr.`main_link`=1
- INNER JOIN `user_interesting` ui ON ui.`user_id`!=o.`owner_id` AND ui.`object_type`=4 AND ui.`object_id`=COALESCE(ol.`object2_id`,ol2.`object1_id`) AND ui.`practing`=0
- LEFT JOIN `users` u ON u.`id`=ui.`user_id`
- LEFT JOIN `users_regions` ur ON ur.`user_id`=u.`id`
- WHERE
- h.`object_type`=8 AND h.`action_type`=2
- AND (u.`email_delivery`=1 OR u.`email_delivery` IS NULL)
- AND (ro.`region` IS NULL OR ur.`region` IS NULL OR ur.`region`=ro.`region`)
- AND h.`date`>='{$time1}' AND h.`date`<'{$time2}'
- GROUP BY o.`id`,`object_type`,obj.`id`,`email`
- UNION
- SELECT o.`id`,obj.`name` as `object_name`,obj.`alias` as `object_alias`,
- COALESCE(ol.`object2_type`,ol2.`object1_type`) as `object_type`,obj.`id` as `object_id`,0 as `object_region`,
- COALESCE(u.`email`,ui.`email`,'') as `email`,o.`name` as `article_name`,o.`alias` as `article_alias`
- FROM `objects_history` h
- LEFT JOIN `articles` o ON h.`object_id`=o.`id` AND o.`moderated`=1 AND o.`block`=0
- LEFT JOIN `object_regions` ro ON ro.`object_type`=8 AND ro.`object_id`=o.`id`
- LEFT JOIN `object_links` ol ON ol.`object1_type`=8 AND ol.`object1_id`=o.`id` AND ol.`object2_type` IN (1,5)
- LEFT JOIN `object_links` ol2 ON ol2.`object2_type`=8 AND ol2.`object2_id`=o.`id` AND ol2.`object1_type` IN (1,5)
- LEFT JOIN `treiners` obj ON obj.`id`=COALESCE(ol.`object2_id`,ol2.`object1_id`) AND obj.`moderated`=1 AND obj.`block`=0
- INNER JOIN `user_interesting` ui ON ui.`user_id`!=o.`owner_id` AND ui.`object_type` IN (1,5) AND ui.`object_id`=COALESCE(ol.`object2_id`,ol2.`object1_id`) AND ui.`practing`=0
- LEFT JOIN `users` u ON u.`id`=ui.`user_id`
- LEFT JOIN `users_regions` ur ON ur.`user_id`=u.`id`
- WHERE
- h.`object_type`=8 AND h.`action_type`=2
- AND (u.`email_delivery`=1 OR u.`email_delivery` IS NULL)
- AND (ro.`region` IS NULL OR ur.`region` IS NULL OR ur.`region`=ro.`region`)
- AND h.`date`>='{$time1}' AND h.`date`<'{$time2}'
- GROUP BY o.`id`,`object_type`,obj.`id`,`email`
- ";
- $this->db->query($sql);
- $result=$this->db->get_result();
- foreach($result as $value){
- if(!strlen(trim($value['email'])))
- continue;
- if(!isset($adresats[$value['email']][8][$value['id']])){
- $adresats[$value['email']][8][$value['id']]['id']=$value['id'];
- $adresats[$value['email']][8][$value['id']]['article_name']=$value['article_name'];
- $adresats[$value['email']][8][$value['id']]['article_alias']=$value['article_alias'];
- }
- $adresats[$value['email']][8][$value['id']]['objects'][$value["object_type"]][$value['object_id']]=array(
- "alias"=>$value['object_alias'],
- "name"=>$value['object_name'],
- "region"=>$value['object_region']
- );
- }
- //Видео - пока без связанных объектов
- //Находим видео, добавленные в объекте
- $sql = "
- SELECT v.`id`, v.`name` as `video_name`, v.`object_id`, v.`object_type`, COALESCE(u.`email`,ui.`email`,'') as `email`,
- COALESCE(o1.`name`, o2.`name`, o3.`name`, o4.`name`) as `object_name`, COALESCE(o1.`alias`, o2.`alias`, o3.`alias`, o4.`alias`) as `object_alias`,
- COALESCE(obr.`region`, 0) as `object_region`
- FROM `video` v
- JOIN `user_interesting` ui ON ui.`object_id`=v.`object_id` AND ui.`object_type`=v.`object_type` AND ui.`practing`=0
- LEFT JOIN `users` u ON u.`id`=ui.`user_id`
- LEFT JOIN `treiners` o1 ON o1.id=v.object_id AND v.object_type IN (1,5)
- LEFT JOIN `organizators` o2 ON o2.id=v.object_id AND v.object_type=4
- LEFT JOIN `guidelines` o3 ON o3.id=v.object_id AND v.object_type=2
- LEFT JOIN `actions` o4 ON o4.id=v.object_id AND v.object_type=3
- LEFT JOIN `object_regions` obr ON obr.`object_type`=4 AND v.`object_type`=4 AND obr.`object_id`=v.`object_id` AND obr.`main_link`=1
- WHERE v.`date`>='{$time1}' AND v.`date`<'{$time2}' AND v.`user_id`=0 AND (u.`email_delivery`=1 OR u.`email_delivery` IS NULL)
- GROUP BY ui.`user_interesting`
- ";
- $this->db->query($sql);
- $result=$this->db->get_result();
- foreach($result as $value){
- if(!strlen(trim($value['email'])))
- continue;
- if(!isset($adresats[$value['email']]['video'][$value['id']])){
- $adresats[$value['email']]['video'][$value['id']]['id']=$value['id'];
- $adresats[$value['email']]['video'][$value['id']]['video_name']=$value['video_name'];
- }
- $adresats[$value['email']]['video'][$value['id']]['objects'][$value["object_type"]][$value['object_id']]=array(
- "alias"=>$value['object_alias'],
- "name"=>$value['object_name'],
- "region"=>$value['object_region'],
- );
- }
- //Находим видео, добавленные пользователем
- $sql = "
- SELECT v.`id`, v.`name` as `video_name`, u2.`login` as `user_alias`, IF(u2.`private_name`=1,u2.`login`,CONCAT(u2.`name`, ' ', u2.`surname`)) as `user_name`, u.`email`,
- IF(f.`user1`=v.`user_id`,f.`user2`,f.`user1`) as `friend_id`
- FROM `video` v
- JOIN `friends` f ON (f.`user1`=v.`user_id` OR f.`user1`=v.`user_id`) AND f.`confirmed`=1
- JOIN `users` u ON u.`id`=IF(f.`user1`=v.`user_id`,f.`user2`,f.`user1`) AND u.`email_delivery`=1
- JOIN `users` u2 ON u2.`id`=v.`user_id`
- WHERE v.`date`>='{$time1}' AND v.`date`<'{$time2}' AND v.`user_id`!=0
- ";
- $this->db->query($sql);
- $result=$this->db->get_result();
- foreach($result as $value){
- if(!strlen(trim($value['email'])))
- continue;
- if(!isset($adresats[$value['email']]['video2'][$value['id']])){
- $adresats[$value['email']]['video2'][$value['id']]['id']=$value['id'];
- $adresats[$value['email']]['video2'][$value['id']]['video_name']=$value['video_name'];
- }
- $adresats[$value['email']]['video2'][$value['id']]['friends'][$value["friend_id"]]=array(
- "alias"=>$value['user_alias'],
- "name"=>$value['user_name']
- );
- }
- //Фотоальбомы - пока без связанных объектов
- //Находим фотоальбомы, добавленные в объекте
- $sql = "
- SELECT p.`id`, p.`name` as `photo_name`, p.`object_id`, p.`object_type`, COALESCE(u.`email`,ui.`email`,'') as `email`,
- COALESCE(o1.`name`, o2.`name`, o3.`name`, o4.`name`) as `object_name`, COALESCE(o1.`alias`, o2.`alias`, o3.`alias`, o4.`alias`) as `object_alias`,
- COALESCE(obr.`region`, 0) as `object_region`
- FROM `photoalbums` p
- JOIN `user_interesting` ui ON ui.`object_id`=p.`object_id` AND ui.`object_type`=p.`object_type` AND ui.`practing`=0
- LEFT JOIN `users` u ON u.`id`=ui.`user_id`
- LEFT JOIN `treiners` o1 ON o1.id=p.object_id AND p.object_type IN (1,5)
- LEFT JOIN `organizators` o2 ON o2.id=p.object_id AND p.object_type=4
- LEFT JOIN `guidelines` o3 ON o3.id=p.object_id AND p.object_type=2
- LEFT JOIN `actions` o4 ON o4.id=p.object_id AND p.object_type=3
- LEFT JOIN `object_regions` obr ON obr.`object_type`=4 AND p.`object_type`=4 AND obr.`object_id`=p.`object_id` AND obr.`main_link`=1
- WHERE p.`date`>='{$time1}' AND p.`date`<'{$time2}' AND p.`user_id`=0 AND (u.`email_delivery`=1 OR u.`email_delivery` IS NULL)
- GROUP BY ui.`user_interesting`
- ";
- $this->db->query($sql);
- $result=$this->db->get_result();
- foreach($result as $value){
- if(!strlen(trim($value['email'])))
- continue;
- if(!isset($adresats[$value['email']]['photo'][$value['id']])){
- $adresats[$value['email']]['photo'][$value['id']]['id']=$value['id'];
- $adresats[$value['email']]['photo'][$value['id']]['photo_name']=$value['photo_name'];
- }
- $adresats[$value['email']]['photo'][$value['id']]['objects'][$value["object_type"]][$value['object_id']]=array(
- "alias"=>$value['object_alias'],
- "name"=>$value['object_name'],
- "region"=>$value['object_region'],
- );
- }
- //Находим фотоальбомы, добавленные пользователем
- $sql = "
- SELECT p.`id`, p.`name` as `photo_name`, u2.`login` as `user_alias`, IF(u2.`private_name`=1,u2.`login`,CONCAT(u2.`name`, ' ', u2.`surname`)) as `user_name`, u.`email`,
- IF(f.`user1`=p.`user_id`,f.`user2`,f.`user1`) as `friend_id`
- FROM `photoalbums` p
- JOIN `friends` f ON (f.`user1`=p.`user_id` OR f.`user1`=p.`user_id`) AND f.`confirmed`=1
- JOIN `users` u ON u.`id`=IF(f.`user1`=p.`user_id`,f.`user2`,f.`user1`) AND u.`email_delivery`=1
- JOIN `users` u2 ON u2.`id`=p.`user_id`
- WHERE p.`date`>='{$time1}' AND p.`date`<'{$time2}' AND p.`user_id`!=0
- ";
- $this->db->query($sql);
- $result=$this->db->get_result();
- foreach($result as $value){
- if(!strlen(trim($value['email'])))
- continue;
- if(!isset($adresats[$value['email']]['photo2'][$value['id']])){
- $adresats[$value['email']]['photo2'][$value['id']]['id']=$value['id'];
- $adresats[$value['email']]['photo2'][$value['id']]['photo_name']=$value['photo_name'];
- }
- $adresats[$value['email']]['photo2'][$value['id']]['friends'][$value["friend_id"]]=array(
- "alias"=>$value['user_alias'],
- "name"=>$value['user_name']
- );
- }
- global $new_region_codes;
- //формируем письмо
- include_once(__ENGINE_PATH.'/functions/classes/class_mailer.php');
- $mailer=new Mailer();
- foreach($adresats as $email=>$events){
- $subject='';
- $msg='';
- $adresat_email = $email;
- include(__ENGINE_PATH.'/templates/email.new_user_events2.php');
- if(!@$mailer->mail($email, $subject, $msg)) {
- trigger_error('Не удалось отправить оповещения о мероприятии',E_USER_WARNING);
- }else
- $count++;
- }
- return "отправлено писем - {$count}";
- }
- /**
- * send email notifiers about users events
- */
- public function users_events_email_notifier3($days=15){
- set_time_limit(300);
- global $object_types;
- $time1=gmdate("Y-m-d H:00:00",gmmktime(gmdate('H'),gmdate('i'),gmdate('s'),gmdate('m'),gmdate('j')-$days,gmdate('Y')));
- //$time1='2011-11-01 00:00:00';
- $time2=gmdate("Y-m-d H:00:00");
- //$time2='2012-11-01 00:00:00';
- $count=0;
- $adresats=array();
- //получаем новые-платные мерпориятия за период от time1 до time2
- $timetable_rubrics = array();
- $timetable_regions = array();
- $timetables = array();
- $sql="
- SELECT
- t.`id` as `timetable_id`,a.`name` as `action_name`,t.`name_extension`,t.`date_text`,a.`type`,t.action_id, GROUP_CONCAT(DISTINCT opo.`region`) as `regions`,adr.`city`,
- UNIX_TIMESTAMP(t.`date`) as `date`,a.`alias` as `action_alias`, t.`date` as `action_date`, GROUP_CONCAT(DISTINCT r.`rubric_id`) as `rubrics`,
- UNIX_TIMESTAMP(COALESCE (h.`date`, t.`created`)) as `date_moderated`
- FROM
- `objects_payment_options` opo
- JOIN `timetable` t ON opo.object_id = t.id AND t.`active`=1 AND t.`moderated`=1 AND t.`block`=0
- JOIN `actions` a ON a.`id`=t.`action_id`
- LEFT JOIN `objects_history` h ON h.`object_id`=t.`id` AND h.`object_type`=6 AND h.`action_type`=2
- JOIN `rubrics` r ON r.`object_type`=3 AND r.`object_id`=a.`id`
- LEFT JOIN `adresses` adr ON adr.`object_type`=6 AND adr.`object_id`=t.`id`
- WHERE
- opo.`object_type`=6 AND opo.po1 != 0 AND opo.is_actual = 1
- AND (t.`date` >= NOW() OR a.`type` IN (2,3))
- AND (
- (t.`created`>='{$time1}' AND t.`created`<'{$time2}')
- OR (h.`date`>='{$time1}' AND h.`date`<'{$time2}')
- )
- GROUP BY
- t.`id`
- ";
- $this->db->query($sql);
- $result=$this->db->get_result();
- foreach($result as $value){
- //складируем информацию по мероприятию
- $timetables[$value["timetable_id"]] = $value;
- //складируем регионы, которые фигурируют в платных опциях мероприятия
- $regions = explode(",", $value["regions"]);
- foreach($regions as $region)
- $timetable_regions[$region][] = $value["timetable_id"];
- //складируем рубрики, которые фигурируют в мероприятие
- $rubrics = explode(",", $value["rubrics"]);
- foreach($rubrics as $rubric_id)
- $timetable_rubrics[$rubric_id][] = $value["timetable_id"];
- }
- //теперь у нас есть набор рубрик и регионов - найдем всех юзеров
- $sql = "
- SELECT
- COALESCE(u.`email`, s.`email`) as `email`,IF(u.`id` IS NULL, 1, 0) as `is_guest`,COALESCE(ur.`region`, s.`region`) as `region`,GROUP_CONCAT(DISTINCT r.`rubric_id`) as `rubrics`
- FROM `rubrics` r
- LEFT JOIN `users` u
- ON u.`id` = r.`object_id`
- AND u.`email_delivery`=1
- AND u.`block`=0
- LEFT JOIN `users_regions` ur
- ON ur.`user_id` = u.`id`
- LEFT JOIN `subscribe` s
- ON s.`guest_id` = r.`guest_id`
- AND s.`user_id` = 0
- WHERE
- r.`rubric_id` IN (".join(", ", array_keys($timetable_rubrics)).")
- AND r.`object_type` = 1
- AND (
- ur.`region` IN (".join(", ", array_keys($timetable_regions)).")
- OR s.`region` IN (".join(", ", array_keys($timetable_regions)).")
- )
- GROUP BY
- `email`, ur.`region`
- ";
- $this->db->query($sql);
- $result=$this->db->get_result();
- foreach($result as $value){
- if(!strlen(trim($value['email'])))
- continue;
- $rubrics = explode(",", $value["rubrics"]);
- foreach($rubrics as $rubric_id){
- if(isset($timetable_rubrics[$rubric_id])){
- foreach($timetable_rubrics[$rubric_id] as $timetable_id){
- $regions = explode(",", $timetables[$timetable_id]['regions']);
- if(!isset($adresats[$value['email']][6][$timetable_id]) && in_array($value["region"], $regions)){
- $adresats[$value['email']][6][$timetable_id]['timetable_id']=$timetable_id;
- $adresats[$value['email']][6][$timetable_id]['action_name']=$timetables[$timetable_id]['action_name'];
- $adresats[$value['email']][6][$timetable_id]['action_alias']=$timetables[$timetable_id]['action_alias'];
- $adresats[$value['email']][6][$timetable_id]['name_extension']=$timetables[$timetable_id]['name_extension'];
- $adresats[$value['email']][6][$timetable_id]['date_text']=$timetables[$timetable_id]['date_text'];
- $adresats[$value['email']][6][$timetable_id]['date']=$timetables[$timetable_id]['date'];
- $adresats[$value['email']][6][$timetable_id]['date_moderated']=$timetables[$timetable_id]['date_moderated'];
- $adresats[$value['email']][6][$timetable_id]['type']=$timetables[$timetable_id]['type'];
- $adresats[$value['email']][6][$timetable_id]['city']=$timetables[$timetable_id]['city'];
- $adresats[$value['email']][6][$timetable_id]['regions']=$timetables[$timetable_id]['regions'];
- $adresats[$value['email']][6][$timetable_id]['rubrics']=$timetables[$timetable_id]['rubrics'];
- $adresats[$value['email']][6][$timetable_id]['rubric']=$rubric_id;
- }
- }
- }
- }
- }
- //получение новостей за период от time1 до time2
- $news_rubrics = array();
- $news_regions = array();
- $news = array();
- $sql="
- SELECT o.`id`,o.`name`,o.`alias`,UNIX_TIMESTAMP(o.`created`) as `date_moderated`,
- GROUP_CONCAT(DISTINCT IF(obr.`region` IS NULL, 0, obr.`region`)) as `regions`,GROUP_CONCAT(DISTINCT r.`rubric_id`) as `rubrics`,
- IF(opo.`option_id` IS NULL, 0, 1) as `is_payment`
- FROM `news` o
- LEFT JOIN `object_regions` obr ON obr.`object_id`=o.`id` AND obr.`object_type`=7
- LEFT JOIN `objects_payment_options` opo ON opo.`object_id`=o.`id` AND opo.`object_type`=7 AND (opo.`po1`=1 OR opo.`po7`=1)
- JOIN `rubrics` r ON r.`object_type`=7 AND r.`object_id`=o.`id`
- WHERE
- o.`moderated`=1
- AND o.`block`=0
- AND o.`visible_start_date`>='{$time1}' AND o.`visible_start_date`<'{$time2}'
- GROUP BY o.`id`
- UNION ALL
- SELECT o.`id`,o.`name`,o.`alias`,UNIX_TIMESTAMP(COALESCE (h.`date`, o.`created`)) as `date_moderated`,
- GROUP_CONCAT(DISTINCT IF(obr.`region` IS NULL, 0, obr.`region`)) as `regions`,GROUP_CONCAT(DISTINCT r.`rubric_id`) as `rubrics`,
- IF(opo.`option_id` IS NULL, 0, 1) as `is_payment`
- FROM `objects_history` h
- LEFT JOIN `news` o ON h.`object_id`=o.`id` AND o.`moderated`=1 AND o.`block`=0
- LEFT JOIN `object_regions` obr ON obr.`object_id`=o.`id` AND obr.`object_type`=7
- LEFT JOIN `objects_payment_options` opo ON opo.`object_id`=o.`id` AND opo.`object_type`=7 AND (opo.`po1`=1 OR opo.`po7`=1)
- JOIN `rubrics` r ON r.`object_type`=7 AND r.`object_id`=o.`id`
- WHERE
- h.`object_type`=7 AND h.`action_type`=2
- AND h.`date`>='{$time1}' AND h.`date`<'{$time2}'
- GROUP BY o.`id`
- ";
- $this->db->query($sql);
- $result=$this->db->get_result();
- foreach($result as $value){
- //складируем информацию по новости
- $news[$value["id"]] = $value;
- //складируем регионы, которые фигурируют в новости
- $regions = explode(",", $value["regions"]);
- foreach($regions as $region)
- $news_regions[$region][] = $value["id"];
- //складируем рубрики, которые фигурируют в новости
- $rubrics = explode(",", $value["rubrics"]);
- foreach($rubrics as $rubric_id)
- $news_rubrics[$rubric_id][] = $value["id"];
- }
- //получение статей за период от time1 до time2
- $article_rubrics = array();
- $articles = array();
- $sql="
- SELECT o.`id`,o.`name`,o.`alias`,GROUP_CONCAT(DISTINCT r.`rubric_id`) as `rubrics`,
- IF(opo.`option_id` IS NULL, 0, 1) as `is_payment`,UNIX_TIMESTAMP(o.`created`) as `date_moderated`
- FROM `articles` o
- LEFT JOIN `objects_payment_options` opo ON opo.`object_id`=o.`id` AND opo.`object_type`=8 AND (opo.`po1`=1 OR opo.`po7`=1)
- JOIN `rubrics` r ON r.`object_type`=8 AND r.`object_id`=o.`id`
- WHERE
- o.`moderated`=1
- AND o.`block`=0
- AND o.`created`>='{$time1}' AND o.`created`<'{$time2}'
- GROUP BY o.`id`
- UNION ALL
- SELECT o.`id`,o.`name`,o.`alias`,GROUP_CONCAT(DISTINCT r.`rubric_id`) as `rubrics`,
- IF(opo.`option_id` IS NULL, 0, 1) as `is_payment`,UNIX_TIMESTAMP(h.`date`) as `date_moderated`
- FROM `objects_history` h
- LEFT JOIN `articles` o ON h.`object_id`=o.`id` AND o.`moderated`=1 AND o.`block`=0
- LEFT JOIN `objects_payment_options` opo ON opo.`object_id`=o.`id` AND opo.`object_type`=8 AND (opo.`po1`=1 OR opo.`po7`=1)
- JOIN `rubrics` r ON r.`object_type`=8 AND r.`object_id`=o.`id`
- WHERE
- h.`object_type`=8 AND h.`action_type`=2
- AND h.`date`>='{$time1}' AND h.`date`<'{$time2}'
- GROUP BY o.`id`
- ";
- $this->db->query($sql);
- $result=$this->db->get_result();
- foreach($result as $value){
- //складируем информацию по статье
- $articles[$value["id"]] = $value;
- //складируем рубрики, которые фигурируют в статье
- $rubrics = explode(",", $value["rubrics"]);
- foreach($rubrics as $rubric_id)
- $article_rubrics[$rubric_id][] = $value["id"];
- }
- //получение ссылок за период от time1 до time2
- $link_rubrics = array();
- $links = array();
- $sql="
- SELECT o.`id`,o.`name`,o.`alias`,o.`url`,GROUP_CONCAT(DISTINCT r.`rubric_id`) as `rubrics`,
- UNIX_TIMESTAMP(COALESCE (h.`date`, o.`created`)) as `date_moderated`
- FROM `links` o
- LEFT JOIN `objects_history` h ON h.`object_id`=o.`id` AND h.`object_type`=12 AND h.`action_type`=2
- JOIN `rubrics` r ON r.`object_type`=12 AND r.`object_id`=o.`id`
- WHERE
- o.`moderated`=1
- AND o.`block`=0
- AND o.`noindex`=0
- AND (
- (o.`created`>='{$time1}' AND o.`created`<'{$time2}')
- OR (h.`date`>='{$time1}' AND h.`date`<'{$time2}')
- )
- GROUP BY o.`id`
- ";
- $this->db->query($sql);
- $result=$this->db->get_result();
- foreach($result as $value){
- //складируем информацию по ссылке
- $links[$value["id"]] = $value;
- //складируем рубрики, которые фигурируют в ссылке
- $rubrics = explode(",", $value["rubrics"]);
- foreach($rubrics as $rubric_id)
- $link_rubrics[$rubric_id][] = $value["id"];
- }
- //теперь у нас есть набор рубрик и регионов - найдем всех юзеров
- $all_rubrics = array_unique(array_merge(array_keys($article_rubrics), array_keys($news_rubrics), array_keys($link_rubrics)));
- $sql = "
- SELECT
- COALESCE(u.`email`, s.`email`) as `email`,IF(u.`id` IS NULL, 1, 0) as `is_guest`,COALESCE(ur.`region`, s.`region`) as `region`,GROUP_CONCAT(DISTINCT r.`rubric_id`) as `rubrics`
- FROM `rubrics` r
- LEFT JOIN `users` u
- ON u.`id` = r.`object_id`
- AND u.`email_delivery`=1
- AND u.`block`=0
- LEFT JOIN `users_regions` ur
- ON ur.`user_id` = u.`id`
- LEFT JOIN `subscribe` s
- ON s.`guest_id` = r.`guest_id`
- AND s.`user_id` = 0
- WHERE
- r.`rubric_id` IN (".join(", ", $all_rubrics).")
- AND r.`object_type` = 1
- GROUP BY
- `email`, ur.`region`
- ";
- $this->db->query($sql);
- $result=$this->db->get_result();
- foreach($result as $value){
- if(!strlen(trim($value['email'])))
- continue;
- $rubrics = explode(",", $value["rubrics"]);
- foreach($rubrics as $rubric_id){
- if(isset($link_rubrics[$rubric_id])){
- foreach($link_rubrics[$rubric_id] as $link_id){
- if(!isset($adresats[$value['email']][12][$link_id])){
- $adresats[$value['email']][12][$link_id]['id']=$link_id;
- $adresats[$value['email']][12][$link_id]['name']=$links[$link_id]['name'];
- $adresats[$value['email']][12][$link_id]['alias']=$links[$link_id]['alias'];
- $adresats[$value['email']][12][$link_id]['url']=$links[$link_id]['url'];
- $adresats[$value['email']][12][$link_id]['date_moderated']=$links[$link_id]['date_moderated'];
- $adresats[$value['email']][12][$link_id]['rubrics']=$links[$link_id]['rubrics'];
- $adresats[$value['email']][12][$link_id]['rubric']=$rubric_id;
- }
- }
- }
- if(isset($article_rubrics[$rubric_id])){
- foreach($article_rubrics[$rubric_id] as $article_id){
- if(!isset($adresats[$value['email']][8][$article_id])){
- $adresats[$value['email']][8][$article_id]['id']=$article_id;
- $adresats[$value['email']][8][$article_id]['name']=$articles[$article_id]['name'];
- $adresats[$value['email']][8][$article_id]['alias']=$articles[$article_id]['alias'];
- $adresats[$value['email']][8][$article_id]['is_payment']=$articles[$article_id]['is_payment'];
- $adresats[$value['email']][8][$article_id]['date_moderated']=$articles[$article_id]['date_moderated'];
- $adresats[$value['email']][8][$article_id]['rubrics']=$articles[$article_id]['rubrics'];
- $adresats[$value['email']][8][$article_id]['rubric']=$rubric_id;
- }
- }
- }
- if(isset($news_rubrics[$rubric_id])){
- foreach($news_rubrics[$rubric_id] as $news_id){
- $regions = explode(",", $news[$news_id]['regions']);
- if(!isset($adresats[$value['email']][7][$news_id]) && (in_array($value["region"], $regions) || $news[$news_id]['regions'] == 0)){
- $adresats[$value['email']][7][$news_id]['id']=$news_id;
- $adresats[$value['email']][7][$news_id]['name']=$news[$news_id]['name'];
- $adresats[$value['email']][7][$news_id]['alias']=$news[$news_id]['alias'];
- $adresats[$value['email']][7][$news_id]['is_payment']=$news[$news_id]['is_payment'];
- $adresats[$value['email']][7][$news_id]['date_moderated']=$news[$news_id]['date_moderated'];
- $adresats[$value['email']][7][$news_id]['regions']=$news[$news_id]['regions'];
- $adresats[$value['email']][7][$news_id]['region']=$value["region"];
- $adresats[$value['email']][7][$news_id]['rubrics']=$news[$news_id]['rubrics'];
- $adresats[$value['email']][7][$news_id]['rubric']=$rubric_id;
- }
- }
- }
- }
- }
- //получение тренеров/консультантов за период от time1 до time2
- $treiners = array();
- $treiner_regions = array();
- $sql="
- SELECT o.`id`,o.`name`,o.`alias`,UNIX_TIMESTAMP(o.`created`) as `date_moderated`,
- o.`is_treiner`,o.`is_consultant`,GROUP_CONCAT(DISTINCT obr.`region`) as `regions`
- FROM `treiners` o
- LEFT JOIN `object_regions` obr ON obr.`object_id`=o.`id` AND obr.`object_type` IN (1,5)
- WHERE
- o.`moderated`=1
- AND o.`block`=0
- AND o.`created`>='{$time1}' AND o.`created`<'{$time2}'
- GROUP BY o.`id`
- UNION ALL
- SELECT o.`id`,o.`name`,o.`alias`,UNIX_TIMESTAMP(h.`date`) as `date_moderated`,
- o.`is_treiner`,o.`is_consultant`,GROUP_CONCAT(DISTINCT obr.`region`) as `regions`
- FROM `objects_history` h
- LEFT JOIN `treiners` o ON h.`object_id`=o.`id` AND o.`moderated`=1 AND o.`block`=0
- LEFT JOIN `object_regions` obr ON obr.`object_id`=o.`id` AND obr.`object_type` IN (1,5)
- WHERE
- h.`object_type` IN (1,5)
- AND h.`action_type`=2
- AND h.`date`>='{$time1}' AND h.`date`<'{$time2}'
- GROUP BY o.`id`
- ";
- $this->db->query($sql);
- $result=$this->db->get_result();
- foreach($result as $value){
- //складируем информацию по тренерам
- $treiners[$value["id"]] = $value;
- //складируем регионы, которые фигурируют в тренерах
- $regions = explode(",", $value["regions"]);
- foreach($regions as $region)
- $treiner_regions[$region][] = $value["id"];
- }
- //получение организаторов за период от time1 до time2
- $organizators = array();
- $organizator_regions = array();
- $sql="
- SELECT o.`id`,o.`fullname` as `name`,o.`alias`,UNIX_TIMESTAMP(o.`created`) as `date_moderated`,GROUP_CONCAT(DISTINCT obr.`region`) as `regions`
- FROM `organizators` o
- LEFT JOIN `object_regions` obr ON obr.`object_id`=o.`id` AND obr.`object_type`=4
- WHERE
- o.`moderated`=1
- AND o.`block`=0
- AND o.`created`>='{$time1}' AND o.`created`<'{$time2}'
- GROUP BY o.`id`
- UNION ALL
- SELECT o.`id`,o.`fullname` as `name`,o.`alias`,UNIX_TIMESTAMP(h.`date`) as `date_moderated`,GROUP_CONCAT(DISTINCT obr.`region`) as `regions`
- FROM `objects_history` h
- LEFT JOIN `organizators` o ON h.`object_id`=o.`id` AND o.`moderated`=1 AND o.`block`=0
- LEFT JOIN `object_regions` obr ON obr.`object_id`=o.`id` AND obr.`object_type`=4
- WHERE
- h.`object_type`=4
- AND h.`action_type`=2
- AND h.`date`>='{$time1}' AND h.`date`<'{$time2}'
- GROUP BY o.`id`
- ";
- $this->db->query($sql);
- $result=$this->db->get_result();
- foreach($result as $value){
- //складируем информацию по организатору
- $organizators[$value["id"]] = $value;
- //складируем регионы, которые фигурируют в организаторах
- $regions = explode(",", $value["regions"]);
- foreach($regions as $region)
- $organizator_regions[$region][] = $value["id"];
- }
- //получение кафе/магазинов за период от time1 до time2
- $esoterics = array();
- $esoteric_regions = array();
- $sql="
- SELECT o.`id`,o.`name` as `name`,o.`alias`,UNIX_TIMESTAMP(o.`created`) as `date_moderated`,
- GROUP_CONCAT(DISTINCT obr.`region`) as `regions`,o.`type`
- FROM `esoterics` o
- LEFT JOIN `object_regions` obr ON obr.`object_id`=o.`id` AND obr.`object_type`=9
- WHERE
- o.`moderated`=1
- AND o.`block`=0
- AND o.`created`>='{$time1}' AND o.`created`<'{$time2}'
- GROUP BY o.`id`
- UNION ALL
- SELECT o.`id`,o.`name` as `name`,o.`alias`,UNIX_TIMESTAMP(h.`date`) as `date_moderated`,
- GROUP_CONCAT(DISTINCT obr.`region`) as `regions`,o.`type`
- FROM `objects_history` h
- LEFT JOIN `esoterics` o ON h.`object_id`=o.`id` AND o.`moderated`=1 AND o.`block`=0
- LEFT JOIN `object_regions` obr ON obr.`object_id`=o.`id` AND obr.`object_type`=9
- WHERE
- h.`object_type`=9
- AND h.`action_type`=2
- AND h.`date`>='{$time1}' AND h.`date`<'{$time2}'
- GROUP BY o.`id`
- ";
- $this->db->query($sql);
- $result=$this->db->get_result();
- foreach($result as $value){
- //складируем информацию по кафе/магазину
- $esoterics[$value["id"]] = $value;
- //складируем регионы, которые фигурируют в кафе/магазинах
- $regions = explode(",", $value["regions"]);
- foreach($regions as $region)
- $esoteric_regions[$region][] = $value["id"];
- }
- //теперь у нас есть набор рубрик и регионов - найдем всех юзеров
- $all_regions = array_unique(array_merge(array_keys($organizator_regions), array_keys($treiner_regions), array_keys($esoteric_regions)));
- $sql = "
- SELECT
- u.`email`,IF(u.`id` IS NULL, 1, 0) as `is_guest`,ur.`region`
- FROM `users_regions` ur
- LEFT JOIN `users` u
- ON u.`id` = ur.`user_id`
- AND u.`email_delivery`=1
- AND u.`block`=0
- WHERE
- ur.`region` IN (".join(", ", $all_regions).")
- GROUP BY
- `email`, ur.`region`
- ";
- $this->db->query($sql);
- $result=$this->db->get_result();
- foreach($result as $value){
- if(!strlen(trim($value['email'])))
- continue;
- $region = $value["region"];
- if(isset($treiner_regions[$region])){
- foreach($treiner_regions[$region] as $treiner_id){
- $regions = explode(",", $treiners[$treiner_id]['regions']);
- if(!isset($adresats[$value['email']][1][$treiner_id]) && in_array($region, $regions)){
- $adresats[$value['email']][1][$treiner_id]['id']=$treiner_id;
- $adresats[$value['email']][1][$treiner_id]['name']=$treiners[$treiner_id]['name'];
- $adresats[$value['email']][1][$treiner_id]['alias']=$treiners[$treiner_id]['alias'];
- $adresats[$value['email']][1][$treiner_id]['is_treiner']=$treiners[$treiner_id]['is_treiner'];
- $adresats[$value['email']][1][$treiner_id]['is_consultant']=$treiners[$treiner_id]['is_consultant'];
- $adresats[$value['email']][1][$treiner_id]['date_moderated']=$treiners[$treiner_id]['date_moderated'];
- $adresats[$value['email']][1][$treiner_id]['regions']=$treiners[$treiner_id]['regions'];
- }
- }
- }
- if(isset($organizator_regions[$region])){
- foreach($organizator_regions[$region] as $org_id){
- $regions = explode(",", $organizators[$org_id]['regions']);
- if(!isset($adresats[$value['email']][4][$org_id]) && in_array($region, $regions)){
- $adresats[$value['email']][4][$org_id]['id']=$org_id;
- $adresats[$value['email']][4][$org_id]['name']=$organizators[$org_id]['name'];
- $adresats[$value['email']][4][$org_id]['alias']=$organizators[$org_id]['alias'];
- $adresats[$value['email']][4][$org_id]['date_moderated']=$organizators[$org_id]['date_moderated'];
- $adresats[$value['email']][4][$org_id]['regions']=$organizators[$org_id]['regions'];
- }
- }
- }
- if(isset($esoteric_regions[$region])){
- foreach($esoteric_regions[$region] as $eso_id){
- $regions = explode(",", $esoterics[$eso_id]['regions']);
- if(!isset($adresats[$value['email']][9][$eso_id]) && in_array($region, $regions)){
- $adresats[$value['email']][9][$eso_id]['id']=$eso_id;
- $adresats[$value['email']][9][$eso_id]['name']=$esoterics[$eso_id]['name'];
- $adresats[$value['email']][9][$eso_id]['alias']=$esoterics[$eso_id]['alias'];
- $adresats[$value['email']][9][$eso_id]['type']=$esoterics[$eso_id]['type'];
- $adresats[$value['email']][9][$eso_id]['date_moderated']=$esoterics[$eso_id]['date_moderated'];
- $adresats[$value['email']][9][$eso_id]['regions']=$esoterics[$eso_id]['regions'];
- }
- }
- }
- }
- echo count($adresats);
- $adresats2 = $adresats["dmitriy141@gmail.com"];
- unset($adresats);
- $adresats["dmitriy141@gmail.com"] = $adresats2;
- //подключаем рубрики
- include_once (__ENGINE_PATH.'/functions/subfunctions/common.rubric_arrays.php');
- global $rubrics;
- global $new_region_codes;
- //формируем письмо
- include_once(__ENGINE_PATH.'/functions/classes/class_mailer.php');
- $mailer=new Mailer();
- foreach($adresats as $email=>$events){
- $subject='';
- $msg='';
- $adresat_email = $email;
- include(__ENGINE_PATH.'/templates/email.new_user_events3.php');
- if(!@$mailer->mail($email, $subject,$msg)) {
- trigger_error('Не удалось отправить оповещения о мероприятии',E_USER_WARNING);
- }else
- $count++;
- }
- echo "Отправлено писем: {$count}</br>\n";
- }
- /**
- * Напоминаем пользователю о мероприятии за 7 дней и 2 дня (если он интересуется именно этим мероприятием или подал заявку на него)
- */
- public function timetable_interesting_order_remind(){
- $time1=gmdate("Y-m-d",gmmktime(gmdate('H'),gmdate('i'),gmdate('s'),gmdate('m'),gmdate('j')+7,gmdate('Y')));
- $time2=gmdate("Y-m-d",gmmktime(gmdate('H'),gmdate('i'),gmdate('s'),gmdate('m'),gmdate('j')+2,gmdate('Y')));
- set_time_limit(300);
- include_once(__ENGINE_PATH.'/functions/subfunctions/common.timezones.php');
- global $timezones;
- global $object_types;
- $adresats = array();
- //получаем все мероприятия, которые проходят через 7 дней или 2 дня
- $sql = "
- SELECT
- t.`id` as `timetable_id`, t.`date`, t.`time`,
- a.`id` as `action_id`, a.`alias` as `action_alias`, a.`type` as `action_type`,
- CONCAT(a.name, ' ', t.name_extension) as `timetable_header`,
- obr.`region` as `timetable_region`,
- IF(u.`id` IS NULL, tor.`email`, u.`email`) as `email`,
- 7 as `day`, 'tor' as `send_type`
- FROM
- `timetable` as t
- JOIN `actions` as a
- ON t.`action_id` = a.`id`
- LEFT JOIN `object_regions` as obr
- ON obr.`object_id` = t.`id`
- AND obr.`object_type` = 6
- AND obr.`main_link` = 1
- JOIN `timetable_orders` as tor
- ON tor.`timetable_id`=t.`id`
- AND tor.`type` IN (1,2,11,12)
- LEFT JOIN `users` as u
- ON tor.`user_id`=u.`id`
- WHERE
- t.`date` >= '{$time1} 00:00:00' AND t.`date` <= '{$time1} 23:59:00'
- AND a.`type` IN (1,4,5)
- AND t.`block` = 0
- AND t.`moderated` = 1
- AND t.`active` = 1
- GROUP BY
- t.`id`,`email`
- UNION
- SELECT
- t.`id` as `timetable_id`, t.`date`, t.`time`,
- a.`id` as `action_id`, a.`alias` as `action_alias`, a.`type` as `action_type`,
- CONCAT(a.name, ' ', t.name_extension) as `timetable_header`,
- obr.`region` as `timetable_region`,
- IF(u.`id` IS NULL, ui.`email`, u.`email`) as `email`,
- 7 as `day`, 'ui' as `send_type`
- FROM
- `timetable` as t
- JOIN `actions` as a
- ON t.`action_id` = a.`id`
- LEFT JOIN `object_regions` as obr
- ON obr.`object_id` = t.`id`
- AND obr.`object_type` = 6
- AND obr.`main_link` = 1
- JOIN `user_interesting` as ui
- ON ui.`object_id`=a.`id`
- AND ui.`object_type`=3
- AND ui.`practing`=0
- LEFT JOIN `users` as u
- ON ui.`user_id`=u.`id`
- WHERE
- t.`date` >= '{$time1} 00:00:00' AND t.`date` <= '{$time1} 23:59:00'
- AND a.`type` IN (1,4,5)
- AND t.`block` = 0
- AND t.`moderated` = 1
- AND t.`active` = 1
- GROUP BY
- t.`id`,`email`
- UNION
- SELECT
- t.`id` as `timetable_id`, t.`date`, t.`time`,
- a.`id` as `action_id`, a.`alias` as `action_alias`, a.`type` as `action_type`,
- CONCAT(a.name, ' ', t.name_extension) as `timetable_header`,
- obr.`region` as `timetable_region`,
- IF(u.`id` IS NULL, tor.`email`, u.`email`) as `email`,
- 2 as `day`, 'tor' as `send_type`
- FROM
- `timetable` as t
- JOIN `actions` as a
- ON t.`action_id` = a.`id`
- LEFT JOIN `object_regions` as obr
- ON obr.`object_id` = t.`id`
- AND obr.`object_type` = 6
- AND obr.`main_link` = 1
- JOIN `timetable_orders` as tor
- ON tor.`timetable_id`=t.`id`
- AND tor.`type` IN (1,2,11,12)
- LEFT JOIN `users` as u
- ON tor.`user_id`=u.`id`
- WHERE
- t.`date` >= '{$time2} 00:00:00' AND t.`date` <= '{$time2} 23:59:00'
- AND a.`type` IN (1,4,5)
- AND t.`block` = 0
- AND t.`moderated` = 1
- AND t.`active` = 1
- GROUP BY
- t.`id`,`email`
- UNION
- SELECT
- t.`id` as `timetable_id`, t.`date`, t.`time`,
- a.`id` as `action_id`, a.`alias` as `action_alias`, a.`type` as `action_type`,
- CONCAT(a.name, ' ', t.name_extension) as `timetable_header`,
- obr.`region` as `timetable_region`,
- IF(u.`id` IS NULL, ui.`email`, u.`email`) as `email`,
- 2 as `day`, 'ui' as `send_type`
- FROM
- `timetable` as t
- JOIN `actions` as a
- ON t.`action_id` = a.`id`
- LEFT JOIN `object_regions` as obr
- ON obr.`object_id` = t.`id`
- AND obr.`object_type` = 6
- AND obr.`main_link` = 1
- JOIN `user_interesting` as ui
- ON ui.`object_id`=a.`id`
- AND ui.`object_type`=3
- AND ui.`practing`=0
- LEFT JOIN `users` as u
- ON ui.`user_id`=u.`id`
- WHERE
- t.`date` >= '{$time2} 00:00:00' AND t.`date` <= '{$time2} 23:59:00'
- AND a.`type` IN (1,4,5)
- AND t.`block` = 0
- AND t.`moderated` = 1
- AND t.`active` = 1
- GROUP BY
- t.`id`,`email`
- ";
- $this->db->query($sql);
- $result = $this->db->get_result();
- if(count($result)){
- foreach($result as $value){
- if(!strlen(trim($value["email"])) || !$value["timetable_id"])
- continue;
- $adresats[$value["email"]][$value["timetable_id"]] = array(
- "id"=>$value["timetable_id"],
- "date"=>smarty_modifier_special_date_format(strtotime($value["date"]),false,true),
- "time"=>$value["time"],
- "alias"=>$value["action_alias"],
- "header"=>$value["timetable_header"],
- "region"=>$value["timetable_region"],
- "send_type"=>$value["send_type"],
- "day"=>$value["day"]
- );
- }
- }
- $count = 0;
- //формируем письмо
- if(!empty($adresats)){
- include_once(__ENGINE_PATH.'/functions/classes/class_mailer.php');
- $mailer=new Mailer();
- foreach($adresats as $email=>$timetables){
- $subject = '';
- $msg = '';
- include(__ENGINE_PATH.'/templates/email.timetable_interesting_order_remind.php');
- if(!@$mailer->mail($email, $subject, $msg)) {
- trigger_error('Не удалось отправить оповещения о мероприятии', E_USER_WARNING);
- }
- else
- $count++;
- }
- }
- return "отправлено писем - {$count}";
- }
- /**
- * Очистка RSS-лент
- */
- public function delete_rss(){
- foreach(glob(__APP_PATH.'/rss/*.xml') as $file)
- {
- file_remove($file);
- }
- }
- /**
- * Автоматическое удаление объект
- */
- public function delete_objects($days, $limit)
- {
- $count = 0;
- $date = gmdate("Y-m-d", gmmktime(0,0,0,gmdate('m'),gmdate('j')-$days,gmdate('Y')));
- $date2 = gmdate("Y-m-d", gmmktime(0,0,0,gmdate('m'),gmdate('j')-($days*2),gmdate('Y')));
- $sql = 'SELECT o.`user_id`, o.`object_type`, o.`object_id`
- FROM `objects_remove_mark` o
- WHERE o.`object_type`!=2 AND ((o.`remove_mark`=2 AND o.`date`<"'.$date.'") OR (o.`remove_mark`=1 AND o.`date`<"'.$date2.'"))
- ORDER BY o.`date`
- ';
- if($limit > 0) $sql .= 'LIMIT '.$limit;
- $this->db->query($sql);
- $result = $this->db->get_result();
- if(count($result)) {
- global $object_types;
- foreach($result as $value) {
- if(!isset($object_types[$value['object_type']])) continue;
- if($value['object_type'] == 3) $value['object_type'] = 6;
- $class = $object_types[$value['object_type']]['class'];
- include_once(__ENGINE_PATH.'/functions/classes/class_'.$class.'.php');
- $class = ucwords($class);
- $object = new $class ($value['object_type']);
- if($value['object_type'] == 4) {
- if(!isset($users)){
- include_once(__ENGINE_PATH.'/functions/classes/class_session.php');
- $session = new Session();
- include_once(__ENGINE_PATH.'/functions/classes/class_validate.php');
- $validator = new Validate();
- include_once(__ENGINE_PATH.'/functions/classes/class_user.php');
- $users = new Users($this->db, $session, $validator, $object_types);
- }
- $organizator = $object->get_object(" o.`id`={$value['object_id']}", array('name'));
- $users->update_users("`organizator_id`={$value['object_id']}", array('organizator_id'=>0, 'organizator'=>$organizator['name']));
- }
- if($object->remove($value['object_id'], $value['user_id']))
- $count++;
- }
- }
- return "удалено объектов - {$count}";
- }
-
- function check_similar_treiners(){
- $sql=" SELECT t.`id`,t.`nam1`,t.`fam1`,t.`otch1`,f.`filial`,o.`region`,t.`alias`,'****' as `_SEP_`,t2.`id` as `id2`, t2.`nam1` as `nam2`,t2.`fam1` as `fam2` ,t2.`otch1` as `otch2`,f2.`filial` as `filial2`,o2.`region` as `region2`,t2.`alias` as `alias2`
- FROM `treiners` t
- inner JOIN `treiners` t2 ON t2.`nam1` LIKE t.`nam1` AND t2.`fam1` LIKE t.`fam1` AND t.`id`!=t2.`id` AND t.`otch1` = t2.`otch1`
- INNER JOIN `filial_objects` f ON f.`object_type` IN(1,5) AND f.`object_id` = t.`id`
- INNER JOIN `filial_objects` f2 ON f2.`object_type` IN(1,5) AND f2.`object_id` = t2.`id`
- INNER JOIN `object_regions` o ON o.`object_type` IN(1,5) AND o.`object_id` = t.`id` AND o.`main_link`=1
- INNER JOIN `object_regions` o2 ON o2.`object_type` IN(1,5) AND o2.`object_id` = t2.`id` AND o.`main_link`=1
- ORDER BY t.`fam1` ASC";
- $this->db->query($sql);
- $result = $this->db->get_result();
- $data = array();
- global $object_types;
- global $new_region_codes;
- $i = 1;
-
- foreach($result as $item){
- $data[$item['nam1'].$item['fam1'].$item['otch1'].'_'.($item['region']*$item['region2'])]=$item;
- }
-
- foreach($data as $item){
- $item['region']=$new_region_codes[$item['region']]['city'];
- $item['filial']=$new_region_codes[$item['filial']]['city'];
- $item['region2']=$new_region_codes[$item['region2']]['city'];
- $item['filial2']=$new_region_codes[$item['filial2']]['city'];
- $item['link']=$object_types[1]['url'].'/'.$item['alias'];
- $item['link2']=$object_types[1]['url'].'/'.$item['alias2'];
- echo $i++."\t<a href='http://".__SITE_URL."/".$item['link']."/'>".$item['fam1'].' '.$item['nam1'].' '.$item['otch1'].' * '.$item['region']."</a> &&& <a href='http://".__SITE_URL."/".$item['link2']."/'>".$item['fam2'].' '.$item['nam2'].' '.$item['otch2'].' * '.$item['region2']."</a><br/>";
- }
-
- }
- /* напоминает руководителям филиалов
- * о том что есть клиенты,
- * которые хотят платно разместиться */
- public function payment_reminder()
- {
- $count = 0;
- $sql="
- SELECT t.`id`, a.`name`, a.`alias`, f.`filial`
- FROM `timetable` t
- JOIN `actions` a ON a.`id`=t.`action_id`
- JOIN `filial_objects` f ON f.`object_type`=3 AND f.`object_id`=a.`id`
- LEFT JOIN `objects_remove_mark` orm ON orm.`object_type`=6 AND orm.`object_id`=t.`id`
- WHERE t.`need_payment_options` != 0 AND t.`created`<(NOW() - INTERVAL 3 DAY) AND orm.`remove_mark` IS NULL
- GROUP BY t.`id`";
-
- global $filial_region_info;
- global $object_types;
- if ($this->db->query($sql)) {
- $actions = $this->db->get_result();
- $data = array();
- if (count($actions)) {
- foreach ($actions as $item) {
- $data[$item['filial']][] = $item;
- }
- }
- //отправляем уведомление
- if (count($data)) {
- include_once(__ENGINE_PATH.'/functions/classes/class_mailer.php');
- $mailer = new Mailer();
- foreach ($data as $filial => $item) {
- $count = count($item);
- $email = isset($filial_region_info[$filial]['email']) ? (strlen($filial_region_info[$filial]['email']) ? ($filial != 54 ? $filial_region_info[$filial]['email'] : __PORTAL_EMAIL_2) : __PORTAL_EMAIL_2) : __PORTAL_EMAIL_2;
- if (strlen($email)) {
- $subject = '';
- $msg = '';
- include(__ENGINE_PATH.'/templates/email.admin_payment_reminder.php');
- if (!@$mailer->mail($email, $subject, $msg)) {
- trigger_error('Не удалось отправить информацию об объектах желающих платное размещение', E_USER_WARNING);
- }
- else
- $count++;
- }
- }
- }
- }
- return "отправлено напоминаний - {$count}";
- }
-
- //1160 больше не нужно, написано было по ошибке
- /*function remind_users_ordered_action_by_email(){
- //для оптимизации запроса
- $date1=date("Y-m-d",gmmktime(gmdate('H'),gmdate('i'),gmdate('s'),gmdate('m'),gmdate('d')+4,gmdate('Y')));
- $date2=date("Y-m-d",gmmktime(gmdate('H'),gmdate('i'),gmdate('s'),gmdate('m'),gmdate('d')+5,gmdate('Y')));
-
- $sql=" SELECT a.`name`,
- t.`name_extension`,
- a.`alias`,
- UNIX_TIMESTAMP(t.`date`) as `date`,
- t.`time`,
- t.`id` as `timetable_id`,
- u.`id` as `user_id`,
- o.`name` as `user_name`,
- u.`surname`,
- o.`email`
- FROM `timetable` t
- INNER JOIN `timetable_orders` o ON o.`timetable_id`=t.`id` AND o.`type` IN(1,2,11,12)
- INNER JOIN `actions` a ON a.`id`=t.`action_id`
- LEFT JOIN `users` u ON u.`id`=o.`user_id`
- WHERE t.`date`>='".$date1."' AND t.`date`<'".$date2."' AND t.`moderated`=1 AND t.`block`=0
- GROUP BY `email`
- HAVING `email`!=''";
- $this->db->query($sql);
- $data = $this->db->get_result();
-
- $count=0;
- if(count($data)){
- include_once(__ENGINE_PATH.'/functions/classes/class_mailer.php');
- $mailer=new Mailer();
- global $object_types;
-
- foreach($data as $item){
-
- $subject='';
- $msg='';
- include(__ENGINE_PATH.'/templates/email.user_action_reminder.php');
-
- if(@$mailer->mail($item['email'], $subject,$msg))
- $count++;
- //echo $msg;
- }
- echo "Отправлено E-mail-напоминаний о предстоящем мероприятии: ".$count.'<br/>';
- }
- return $count;
- }*/
- //1160
- function remind_users_ordered_action_by_sms(){
- //для оптимизации запроса
- $date1=date("Y-m-d",gmmktime(gmdate('H'),gmdate('i'),gmdate('s'),gmdate('m'),gmdate('d')+1,gmdate('Y')));
- $date2=date("Y-m-d",gmmktime(gmdate('H'),gmdate('i'),gmdate('s'),gmdate('m'),gmdate('d')+2,gmdate('Y')));
-
- $sql=" SELECT a.`name`,
- t.`name_extension`,
- a.`alias`,
- UNIX_TIMESTAMP(t.`date`) as `date`,
- o.`name` as `user_name`,
- o.`phone`,
- COALESCE(u.`timezone`,-1) as `timezone`
- FROM `timetable` t
- INNER JOIN `timetable_orders` o ON o.`timetable_id`=t.`id` AND o.`type` IN(1,2,11,12)
- INNER JOIN `actions` a ON a.`id`=t.`action_id`
- LEFT JOIN `users` u ON u.`id`=o.`user_id`
- WHERE t.`date`>='".$date1."' AND t.`date`<'".$date2."' AND t.`moderated`=1 AND t.`block`=0
- GROUP BY `phone`
- HAVING `phone`!=''";
- $this->db->query($sql);
- $data = $this->db->get_result();
- $count=0;
- if(count($data)){
-
- include_once(__ENGINE_PATH.'/functions/classes/class_sms.php');
- $sms = new Sms();
-
- global $object_types;
-
- include_once(__ENGINE_PATH.'/functions/subfunctions/common.timezones.php');
- global $timezones;
-
-
- foreach($data as $item){
-
- $sms_text = '';
-
- $action_name = html_entity_decode($item['name_extension']?$item['name'].'. '.$item['name_extension']:$item['name']);
-
- $sms_text = "Завтра состоится мероприятие: {$action_name}, на которое вы подавали заявку. ".__SITE_NAME;
-
- //если текст смс больше 134 символов, то обрезаем имя мероприятия и добавлем многоточие
- if(mb_strlen($sms_text, 'UTF-8') > 134){
- $action_name = mb_substr($action_name, 0, (134-mb_strlen($sms_text, 'UTF-8')-3), 'UTF-8').'...';
- //формируем новый текст смс
- $sms_text = "Завтра состоится мероприятие: {$action_name}, на которое вы подавали заявку. ".__SITE_NAME;
- }
-
- //отправляем в 17 часов по местному времени
- if($item["timezone"] != '-1')$hour = 17 - $timezones[$item["timezone"]]["correction"]/3600;
- else $hour = 17;
-
- $year = gmdate("Y",gmmktime($hour,0,0,gmdate('m'),gmdate('d'),gmdate('Y')));
- $month = gmdate("m",gmmktime($hour,0,0,gmdate('m'),gmdate('d'),gmdate('Y')));
- $day = gmdate("d",gmmktime($hour,0,0,gmdate('m'),gmdate('d'),gmdate('Y')));
-
- //время отправки (серверное)
- $send_time = $year."-".$month."-".$day." ".($hour < 10 ? "0" : "").$hour.":00:00";
-
- $phone = preg_replace('/\D/ui','', $item['phone']);
- $sms->save($phone, $sms_text, $send_time);
- $count++;
- //echo $sms_text.'**'.$send_time;
- }
- echo "Отправлено SMS-напоминаний о предстоящем мероприятии: ".$count.'<br/>';
-
- }
- return $count;
- }
-
- }
- ?>