コード例 #1
0
ファイル: smail.php プロジェクト: kapai69/fl-ru-damp
 /**
  * Рассылка о новых проектах лицам, отсутствовавшим на сайте более суток и менее года. Вызывается раз в день из 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 = 'Посмотрите пять самых свежих &mdash; они могут вам понравиться.';
             switch ($length) {
                 case 1:
                     $str = 'Посмотрите самый свежий &mdash; он может вам понравиться.';
                     break;
                 case 2:
                     $str = 'Посмотрите два самых свежих &mdash; они могут вам понравиться.';
                     break;
                 case 3:
                     $str = 'Посмотрите три самых свежих &mdash; они могут вам понравиться.';
                     break;
                 case 4:
                     $str = 'Посмотрите четыре самых свежих &mdash; они могут вам понравиться.';
                     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;
 }