/** * Рассылка о новых проектах лицам, отсутствовавшим на сайте более суток и менее года. Вызывается раз в день из hourly.php. * * @param array &$uids - массив идентификаторов пользователей, подписанных на новые проекты но которым отправлено это уведомление * необходимо передать в smail::NewProj * * @return int количество получивших рассылку */ public function NewProjForMissingMoreThan24h(&$uids) { $projects = projects::GetNewProjectsWithBudjet($error); //сортировка по стоимости foreach ($projects as $key => $prj) { $prj['sort_cost'] = $prj['cost']; if ($prj['currency'] == 0) { $prj['sort_cost'] *= 30; //в данном случае точный курс не важен, важно отсортировать } if ($prj['currency'] == 1) { $prj['sort_cost'] *= 40; //в данном случае точный курс не важен, важно отсортировать } $projects[$key] = $prj; } $all_mirrored_specs = professions::GetAllMirroredProfsId(); $professions = professions::GetProfessionsAndGroup(); $professionsTree = array(); foreach ($professions as $k => $i) { if ($professionsTree[$i['gid']] === null) { $professionsTree[$i['gid']] = array('gid' => $i['gname']); if ($i['id'] !== null) { $professionsTree[$i['gid']][$i['id']] = $i['name']; } else { $professionsTree[$i['gid']] = $i['gname']; } } elseif (is_array($professionsTree[$i['gid']])) { $professionsTree[$i['gid']][$i['id']] = $i['name']; } } $page = 0; $count = 0; // total $countBs = 0; // БС $countCar = 0; // карусель $countPro = 0; // ПРО $countPayed = 0; // платные места $countVerify = 0; // верификация $this->subject = 'Новые проекты и конкурсы на FL.ru'; $pHost = $GLOBALS['host']; ob_start(); include $_SERVER['DOCUMENT_ROOT'] . '/masssending/tpl.missing_more_than_24h.php'; $this->message = ob_get_clean(); $this->recipient = ''; $massId = $this->masssend(); $dbStat = new DB('master'); while ($users = freelancer::GetMissingMoreThan24h($error, ++$page, 100)) { $this->recipient = array(); foreach ($users as $user) { if (!$user['unsubscribe_key']) { $user['unsubscribe_key'] = users::GetUnsubscribeKey($user['login']); } $unsubscribe_link = "{$pHost}/unsubscribe?ukey=" . $user['unsubscribe_key']; $advert_template = $this->getAdvertTemplate($user, $n); //номер рекламного блока 0 - БС, 1 - карусель, 2 - ПРО, 3 - платные места, 4 - верификация switch ($n) { case 0: $countBs++; break; case 1: $countCar++; break; case 2: $countPro++; break; case 3: $countPayed++; break; case 4: $countVerify++; break; } $pList = $this->getProjectsForUser($projects, $user, $all_mirrored_specs, $professionsTree); $length = count($pList); if ($length == 0) { continue; } for ($i = 0; $i < count($pList); ++$i) { for ($j = $i; $j < count($pList); ++$j) { $a = $pList[$i]; $b = $pList[$j]; if ($b['sort_cost'] > $a['sort_cost']) { $buf = $pList[$i]; $pList[$i] = $pList[$j]; $pList[$j] = $buf; } } } $pListHtml = ''; foreach ($pList as $p) { ob_start(); include $_SERVER['DOCUMENT_ROOT'] . '/masssending/tpl.missing_more_than_24h_list_item.php'; $pListHtml .= ob_get_clean(); } $str = 'Посмотрите пять самых свежих — они могут вам понравиться.'; switch ($length) { case 1: $str = 'Посмотрите самый свежий — он может вам понравиться.'; break; case 2: $str = 'Посмотрите два самых свежих — они могут вам понравиться.'; break; case 3: $str = 'Посмотрите три самых свежих — они могут вам понравиться.'; break; case 4: $str = 'Посмотрите четыре самых свежих — они могут вам понравиться.'; break; } ob_start(); include $_SERVER['DOCUMENT_ROOT'] . "/masssending/{$advert_template}"; $advHtml = ob_get_clean(); if ($user['subscr_new_prj'] == 't') { $uids[] = $user['uid']; } $recipient[] = array('email' => $user['uname'] . ' ' . $user['usurname'] . ' [' . $user['login'] . '] ' . ' <' . $user['email'] . '>', 'extra' => array('NAME' => (string) $user['uname'], 'EMAIL' => (string) $user['email'], 'LIST' => (string) $pListHtml, 'ADV' => (string) $advHtml, 'STR' => (string) $str, 'UNSUBSCRIBE_LINK' => (string) $unsubscribe_link)); ++$count; } $this->recipient = $recipient; $this->bind($massId); $recipient = array(); } $query = 'INSERT INTO subscribe_missing_24h_stat (date_subscribe, bs, carusel, pro, payed_places, verify) VALUES (?, ?i, ?i, ?i, ?i, ?i)'; $dbStat->query($query, date('Y-m-d'), $countBs, $countCar, $countPro, $countPayed, $countVerify); return $count; }