/** * Вернуть контактные данные фрилансера если есть доступ их смотреть * * @param type $login * @param type $hash * @return \xajaxResponse */ function getContactsInfo($login, $hash) { $objResponse = new xajaxResponse(); if ($hash === paramsHash(array($login))) { $freelancer = new freelancer(); $freelancer->GetUser($login); if ($freelancer->uid > 0 && !is_emp($freelancer->role) && is_view_contacts($freelancer->uid) && is_contacts_not_empty($freelancer)) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/template.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/country.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/city.php'; require_once ABS_PATH . '/classes/statistic/StatisticFactory.php'; require_once ABS_PATH . '/classes/users.php'; $html = Template::render($_SERVER['DOCUMENT_ROOT'] . '/user/contacts_info.php', array('user' => $freelancer)); $ga = StatisticFactory::getInstance('GA'); $ga->queue('event', array('uid' => isset($_SESSION['uid']) ? $_SESSION['uid'] : 0, 'cid' => users::getCid(), 'category' => 'Freelancer', 'action' => 'show_contacts', 'label' => "{'login': '******'}")); $objResponse->assign('contacts_info_block', 'innerHTML', $html); } } return $objResponse; }
function stats() { jincimport('statistics.statisticfactory'); jincimport('core.newsletterfactory'); $session = JFactory::getSession(); $config = JFactory::getConfig(); $tzoffset = $config->getValue('config.offset'); $id = JRequest::getInt('id', 0); $stat_type = JRequest::getInt('stat_type', 0); $time_type = JRequest::getInt('time_type', 0); $start_date = JRequest::getString('start_date'); $end_date = JRequest::getString('end_date'); $sdate = JFactory::getDate($start_date, $tzoffset); $edate = JFactory::getDate($end_date, $tzoffset); $stat = StatisticFactory::getStatistic($stat_type, $time_type, $sdate->toUNIX(), $edate->toUNIX(), $id); $values = $stat->getValues(); $legend = $stat->getTimeValues(); $session->set('stats.values', $values); $session->set('stats.legend', $legend); $timeline = $stat->getTimeLine(); JRequest::setVar('start_date', $timeline->getStartTime()); JRequest::setVar('end_date', $timeline->getEndTime()); $stattypes = StatisticFactory::getTypeList(); $timetypes = StatisticFactory::getTimeList(); $time_format = $timeline->getJFormat(); JRequest::setVar('view', 'stats'); $view = $this->getView('stats', 'html'); $ninstance = NewsletterFactory::getInstance(); if ($newsletters = $ninstance->loadNames()) { $empty_filter = array("id" => "0", "name" => JText::_('COM_JINC_SELECT_NEWSLETTER')); array_unshift($newsletters, $empty_filter); } else { $newsletters = array(array("id" => "0", "name" => JText::_('COM_JINC_SELECT_NEWSLETTER'))); } $view->assignRef('time_format', $time_format); $view->assignRef('stattypes', $stattypes); $view->assignRef('timetypes', $timetypes); $view->assignRef('newsletters', $newsletters); parent::display(); }
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/stdf.php"; require_once ABS_PATH . '/classes/statistic/StatisticFactory.php'; /* $ga = StatisticFactory::getInstance('GA'); $ga->queue('event', array( 'uid' => rand(1,100), 'cid' => md5('solt-uid-' . rand(1,100)), 'category' => 'Freelancer', 'action' => 'registration' )); */ $cid = md5('test'); $data = array('category' => 'Freelancer', 'action' => 'registration'); try { $ga = StatisticFactory::getInstance('GA', array('cid' => $cid, 'sc' => 'start', 'cd5' => 888)); $res = $ga->call('event', $data); $url = $ga->getLastRequest()->getBaseUrlWithQuery(); print_r($url); exit; print_r($res->getCoreResponse()->getHeaders()); print_r($res->getCoreResponse()->getContent()); exit; } catch (Exception $e) { print_r($e->getMessage()); } exit;
/** * Метод вызывается после успешной регистации */ protected function afterSuccessRegistation($newuser) { if (!$newuser || $newuser->uid <= 0) { return false; } $_SESSION['reg_role'] = is_emp($newuser->role) ? 'customer' : 'freelancer'; //Отправить в очередь события регистрации для GA require_once ABS_PATH . '/classes/statistic/StatisticFactory.php'; require_once ABS_PATH . '/classes/users.php'; $ga = StatisticFactory::getInstance('GA'); $ga->queue('event', array('uid' => $newuser->uid, 'cid' => users::getCid(), 'category' => $_SESSION['reg_role'], 'action' => 'registration_finished')); return true; }
public function process_event(&$event) { $message = false; $cid = (string) @$event->data['cid']; try { $options = array('cid' => $cid, 'sc' => 'start', 'cd1' => $cid); if (isset($event->data['uid']) && $event->data['uid'] > 0) { $options['cd5'] = $event->data['uid']; } unset($event->data['uid']); $ga = StatisticFactory::getInstance('GA', $options); switch ($event->type) { case 'service_payed': $is_emp = (bool) @$event->data['is_emp']; $label = (string) @$event->data['label']; $ammount = floatval(@$event->data['ammount']); $ga->serviceWasPayed($is_emp, $label, $ammount, $cid); break; case 'project_answer': $project_kind_ident = (string) @$event->data['project_kind_ident']; $offer_count = (int) @$event->data['offer_count']; $is_pro = (bool) @$event->data['is_pro']; $offer_id = @$event->data['offer_id']; $ga->projectAnwer($cid, $project_kind_ident, $offer_count, $is_pro); break; case 'newsletter_projects_open_hit': $type = (int) @$event->data['type']; $label = (string) @$event->data['label']; $timestamp = (int) @$event->data['timestamp']; if ($type == 1) { $ga->newsletterNewProjectsOpenHitEmp($label, $timestamp); } else { $ga->newsletterNewProjectsOpenHitFrl($label, $timestamp); } break; //Обрабатываем методы которые поддерживает $ga инстанс //Обычно это типовые методы типа GA::event //Обрабатываем методы которые поддерживает $ga инстанс //Обычно это типовые методы типа GA::event default: unset($event->data['cid']); $ga->call($event->type, $event->data); break; } //Запись событий в лог if (is_object($ga) && method_exists($ga, 'getLastRequest')) { require_once ABS_PATH . '/classes/log.php'; $log = new log('statistic/' . SERVER . '-%d%m%Y.log'); $suffix = ''; if (isset($offer_id) && !empty($offer_id)) { $suffix = " offer_id={$offer_id}"; } $log->writeln(date('d.m.Y H:i:s') . ' - ' . $ga->getLastRequest()->getBaseUrlWithQuery() . $suffix); } } catch (Exception $e) { $message = 'Ошибка: ' . $e->getMessage(); } if ($message) { $data = ''; foreach ($event->data as $key => $value) { $data .= $key . '=' . $value . '; '; } $log_message = sprintf(self::LOG_FORMAT, $event->type, $data, $message); $this->log->notice(iconv('CP1251', 'UTF-8', $log_message)); //Повторить через 60 сек //$event->retry_delay = 60; //return PGQ_EVENT_RETRY; } return PGQ_EVENT_OK; }
$back_url = !empty($customRedirect) ? $customRedirect : (isset($_SESSION['ref_uri']) ? urldecode($_SESSION['ref_uri']) : null); if ($id == users::AUTH_STATUS_2FA) { if (!empty($customRedirect)) { $_SESSION['2fa_redirect'] = array('redirectUri' => $customRedirect); } //Редирект на 2ой атап авторизации $back_url = '/auth/second/'; } elseif (!$back_url) { $back_url = is_emp() ? '/' : '/projects/'; } //Успешная авторизация if ($id > 0) { //Отправляем в очередь событие об успешной авторизации if ($type = $opauthModel->getShortType()) { require_once ABS_PATH . '/classes/statistic/StatisticFactory.php'; $ga = StatisticFactory::getInstance('GA'); $ga->queue('event', array('uid' => $id, 'cid' => users::getCid(), 'category' => is_emp() ? 'customer' : 'freelancer', 'action' => 'authorization_passed', 'label' => $type)); } } } else { $_SESSION['opauth_error'] = 'Данный аккаунт социальной сети уже привязан к другому пользователю'; } header("Location: {$back_url}"); exit; } else { if ($type == OpauthHelper::ACTION_REGISTER) { $registrationData = OpauthHelper::getRegistrationData($response); $postedRole = $emp_redirect ? registration::ROLE_EMPLOYER : __paramInit('int', null, 'role_db_id'); $postedEmail = __paramInit('string', null, 'email'); $postedLogin = __paramInit('string', null, 'login'); if ($postedRole && $postedEmail && $postedLogin) {
/** * Проверка авторизации и установка ошибки или URL для перехода * * @param type $data * @return boolean */ public function isValid($data) { if ($valid = parent::isValid($data)) { $data = $this->getValues(); $autologin = isset($data['autologin']) && $data['autologin'] == 1; $pwd = users::hashPasswd($data['passwd']); $uid = login($data['login'], $pwd, $autologin); switch ($uid) { case self::UID_FAIL: $valid = false; $this->getElement('login')->addError(self::FAIL_LOGIN_MSG); break; case self::UID_BANNED: $_SESSION['rand'] = csrf_token(); $this->redirect_to = sprintf(self::REDIRECT_URL_BANNED, $data['login'], $_SESSION['rand']); break; case self::UID_INNACTIVE: $this->redirect_to = self::REDIRECT_URL_INACTIVE; break; case self::UID_DENYIP: $this->redirect_to = sprintf(self::REDIRECT_URL_DENYIP, $data['login']); break; case users::AUTH_STATUS_2FA: $this->redirect_to = self::REDIRECT_URL_2FA; break; default: //Успешная авторизация if ($uid > 0) { $default_location = is_emp() ? '/tu/' : '/projects/'; $ref_uri = isset($_SESSION['ref_uri']) ? urldecode($_SESSION['ref_uri']) : null; $ref_uri = !$ref_uri ? $default_location : $ref_uri; $location = HTTP_PFX . $_SERVER['HTTP_HOST'] . $ref_uri; // #0012501 $location = preg_replace("/\\/router\\.php\\?pg=/", "", $location); // #0011589 if (strpos($location, '/remind/') || strpos($location, 'inactive.php') || strpos($location, 'checkpass.php') || strpos($location, '/registration/') || strpos($location, 'fbd.php')) { $location = $default_location; } session_write_close(); //Отправляем в очередь событие об успешной авторизации require_once ABS_PATH . '/classes/statistic/StatisticFactory.php'; require_once ABS_PATH . '/classes/users.php'; $ga = StatisticFactory::getInstance('GA'); $ga->queue('event', array('uid' => $uid, 'cid' => users::getCid(), 'category' => is_emp() ? 'customer' : 'freelancer', 'action' => 'authorization_passed', 'label' => 'email')); $this->redirect_to = $location; } } } return $valid; }
/** * @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; }