Пример #1
0
 /**
  * @todo: замена NewProj
  * 
  * Рассылка о новых проектах за предыдущий день. Вызывается раз в день из hourly.php
  * 
  * @param array $uids - массив идентификаторов пользователей, которых нужно исключить
  *
  * @return int количество получивших рассылку
  */
 public function NewProj2($uids = array())
 {
     $show_pro_limit = 25;
     $show_limit = 25;
     $projects = projects::GetNewProjectsPreviousDay($error, true);
     $groups = professions::GetAllGroupsLite(true);
     $page = 0;
     $count = 0;
     $projects_count = count($projects);
     if (!$projects_count) {
         return false;
     }
     //Получаем баннеры
     $settings = new settings();
     $banner_file = $settings->GetVariable('newsletter', 'banner_file');
     $banner_link = $settings->GetVariable('newsletter', 'banner_link');
     $this->subject = 'Новые проекты на FL.ru';
     $this->message = Template::render($_SERVER['DOCUMENT_ROOT'] . '/templates/mail/new_projects/project_layout.tpl.php', array('projects' => '%MESSAGE%', 'host' => $GLOBALS['host'], 'title' => '%TITLE%', 'unsubscribe_url' => '%UNSUBSCRIBE_URL%', 'date' => strtotime('- 1 day'), 'track_url' => '%TRACK_URL%'));
     $this->recipient = '';
     $massId = $this->send('text/html');
     $project_ids = array();
     foreach ($projects as $i => $prj) {
         $descr = $prj['descr'];
         $descr = htmlspecialchars($descr, ENT_QUOTES, 'CP1251', false);
         $descr = reformat(LenghtFormatEx($descr, 180), 50, 0, 1);
         $price = $prj['cost'] ? CurToChar($prj['cost'], $prj['currency']) . getPricebyProject($prj['priceby']) : null;
         $projects[$i]['html'] = Template::render($_SERVER['DOCUMENT_ROOT'] . '/templates/mail/new_projects/project.tpl.php', array('url' => $GLOBALS['host'] . getFriendlyURL('project', array('id' => $prj['id'], 'name' => $prj['name'])), 'name' => $prj['name'] ? reformat(htmlspecialchars($prj['name'], ENT_QUOTES, 'CP1251', false), 50, 0, 1) : '', 'descr' => $descr, 'host' => $GLOBALS['host'], 'project_kind' => $prj['kind'], 'project_pro_only' => $prj['pro_only'] == 't', 'project_verify_only' => $prj['verify_only'] == 't', 'project_urgent' => $prj['urgent'] == 't', 'price' => $price, 'end_date' => $prj['end_date'], 'create_date' => $prj['create_date'], 'utm_param' => '%UTM_PARAM%'));
         $project_ids[] = $prj['id'];
     }
     //Собираем юзеров у которых есть ответы на новые проекты
     $offers_exist = array();
     $offers = projects_offers::AllFrlOffersByProjectIDs($project_ids);
     if (count($offers)) {
         foreach ($offers as $offer) {
             if (!isset($offers_exist[$offer['project_id']])) {
                 $offers_exist[$offer['project_id']] = array();
             }
             $offers_exist[$offer['project_id']][$offer['user_id']] = true;
         }
     }
     $strtotime_3y_ago = strtotime('- 3 year');
     $strtotime_1y_ago = strtotime('- 1 year');
     $strtotime_1w_ago = strtotime('- 1 week');
     $current_date = time();
     $current_date_sufix = '_' . date('dmy', $current_date);
     //format:_270314
     $statistics = array();
     while ($users = freelancer::GetPrjRecps($error, ++$page, 200, $uids)) {
         $this->recipient = array();
         foreach ($users as $user) {
             //Если ли у фрилансера уточнение по категориям
             $is_mailer_str = strlen($user['mailer_str']) > 0;
             $subj = array();
             if ($is_mailer_str) {
                 foreach ($groups as $group) {
                     if (freelancer::isSubmited($user['mailer_str'], array(array('category_id' => $group['id'])))) {
                         $subj[$group['id']] = $group['name'];
                     }
                 }
             }
             $message_pro = '';
             $cnt_pro = 0;
             $message = '';
             $cnt = 0;
             $cnt_submited = 0;
             $cnt_user_submited = 0;
             foreach ($projects as $prj) {
                 //Подписан ли фрилансер на специализацию к которой относится проект
                 if ($is_mailer_str && !freelancer::isSubmited($user['mailer_str'], $prj['specs'])) {
                     continue;
                 }
                 //Считаем все проекты по выбранным специализациям
                 ++$cnt_submited;
                 //Условия не попадания в письмо
                 if ($prj['is_blocked'] == 't' || $prj['closed'] == 't' || $prj['state'] == projects::STATE_MOVED_TO_VACANCY || $prj['kind'] == projects::KIND_PERSONAL) {
                     continue;
                 }
                 //Если у фрилансера ответ на проект то не добавляем его в рассылку
                 if (isset($offers_exist[$prj['id']][$user['uid']])) {
                     continue;
                 }
                 if ($prj['pro_only'] == 't') {
                     if ($cnt_pro < $show_pro_limit) {
                         $message_pro .= $prj['html'];
                         ++$cnt_pro;
                     }
                 } else {
                     if ($cnt < $show_limit) {
                         $message .= $prj['html'];
                         ++$cnt;
                     }
                 }
                 ++$cnt_user_submited;
             }
             $message = $message_pro . $message;
             if (empty($message)) {
                 continue;
             }
             if ($cnt_user_submited <= $show_pro_limit + $show_limit) {
                 $cnt_submited = $cnt_user_submited;
             }
             //Формирует UTM метки аналитики
             $reg_date = strtotime($user['reg_date']);
             $reg_year = date('Y', $reg_date);
             $utm_content = $reg_date >= $strtotime_1w_ago ? '_new' : $reg_year;
             //$utm_content = ($user['reg_days_ago'] > 7)?$user['reg_date_year']:'_new';
             $utm_param = $this->_addUtmUrlParams('email', 'free' . $utm_content, 'day_projects' . $current_date_sufix);
             $message = str_replace('%UTM_PARAM%', $utm_param, $message);
             //Собираем шаблон
             $message = Template::render($_SERVER['DOCUMENT_ROOT'] . '/templates/mail/new_projects/project_list.tpl.php', array('projects' => $message, 'spec_list' => implode(' / ', $subj), 'setup_url' => $GLOBALS['host'] . "/users/{$user['login']}/setup/mailer/", 'other_count' => $cnt_submited - $cnt_pro - $cnt, 'more_url' => $GLOBALS['host'] . $utm_param, 'banner_file' => $banner_file, 'banner_link' => $banner_link));
             if (!$user['unsubscribe_key']) {
                 $user['unsubscribe_key'] = users::GetUnsubscribeKey($user['login']);
             }
             /*
             $date = strtotime($projects[0]['post_date']);
             $date = date( 'j', $date ) . ' ' . monthtostr(date('n', $date),true);
             */
             $projects_count_txt = $cnt_submited . ' ' . plural_form($cnt_submited, array('новый', 'новых', 'новых')) . ' ' . plural_form($cnt_submited, array('проект', 'проекта', 'проектов'));
             //$title = "{$projects_count_txt} за {$date}";
             $last_time = strtotime($user['last_time']);
             if ($last_time < $strtotime_3y_ago) {
                 $utm_content = '_3y';
             } elseif ($last_time >= $strtotime_3y_ago && $last_time <= $strtotime_1y_ago) {
                 $utm_content = '_1-3y';
             } elseif ($reg_date < $strtotime_1w_ago) {
                 $utm_content = '_1y';
             }
             /*
              * @todo: EXTRACT медленней
              
             if($user['last_years_ago'] > 0){
                $utm_content = ($user['last_years_ago'] > 3)?'_3y':'_1-3y';
             }else{
                $utm_content = ($user['reg_days_ago'] > 7)?'_1y':'_new';
             }
             */
             //Накапливаем статистику
             $stat_idx = $reg_date >= $strtotime_1w_ago ? 'new' : $reg_year;
             ++$statistics[$stat_idx];
             $this->recipient[] = array('email' => $user['uname'] . ' ' . $user['usurname'] . ' [' . $user['login'] . '] <' . $user['email'] . '>', 'extra' => array('USER_NAME' => $user['uname'], 'USER_SURNAME' => $user['usurname'], 'USER_LOGIN' => $user['login'], 'MESSAGE' => $message, 'UNSUBSCRIBE_URL' => "/unsubscribe/?type=new_projects&ukey={$user['unsubscribe_key']}" . $this->_addUtmUrlParams('email', 'free' . $utm_content, 'unsubscr_day_projects' . $current_date_sufix), 'TITLE' => $projects_count_txt, 'TRACK_URL' => $GLOBALS['host'] . StatisticHelper::track_url(0, $stat_idx, $current_date, $user['login'] . $user['uid'])));
             ++$count;
         }
         $this->bind($massId, true);
     }
     //Собранную статистику отправляем в GA
     $statistics['total'] = $count;
     $ga = StatisticFactory::getInstance('GA');
     $ga->newsletterNewProjectsFrl($statistics, $current_date);
     return $count;
 }
Пример #2
0
<?php

ini_set('max_execution_time', 0);
ini_set('memory_limit', '512M');
if (!isset($_SERVER['DOCUMENT_ROOT']) || !strlen($_SERVER['DOCUMENT_ROOT'])) {
    $_SERVER['DOCUMENT_ROOT'] = rtrim(realpath(pathinfo(__FILE__, PATHINFO_DIRNAME) . '/../../'), '/');
}
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/config.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/classes/statistic/StatisticFactory.php";
///s.php?t=0&y=2014&l=b5abed10c9930d169f498b1e483baa79&h=0b10162959f17150cec25696a634ad62
print_r(StatisticHelper::track_url(0, 2014, 'kazakov1'));
exit;
/*
$ga = StatisticFactory::getInstance('GA', array(
    'v' => 1,
    'tid' => 'UA-49048745-1',
    'cid' => md5('UA-49048745-1'),
));
*/
$ga = StatisticFactory::getInstance('GA');
//var_dump($ga->getOptions());
//exit;
$data = array('2006' => 3459, '2009' => 6876, '2008' => 7099, '2011' => 7012, '2010' => 6981, '2012' => 6951, '2007' => 6789, '2013' => 3499, 'total' => 48666);
var_dump($ga->newsletterNewProjectsFrl($data));
var_dump($ga->newsletterNewProjectsEmp($data));
/*
require_once($_SERVER['DOCUMENT_ROOT'] . "/classes/vendors/UniversalAnalytics/vendor/autoload.php");


$ua = new \UniversalAnalytics\UA(array(
   'v' => 1,
Пример #3
0
 public static function tick()
 {
     self::$timeStart = StatisticClient::tick();
 }