Файл: base-sys/base/controllers/user_search.php
Строк: 331
<?php
class BASE_CTRL_UserSearch extends PEEP_ActionController
{
public function __construct()
{
parent::__construct();
PEEP::getNavigation()->activateMenuItem(PEEP_Navigation::MAIN, 'base', 'users_main_menu_item');
$this->setPageHeading(PEEP::getLanguage()->text('base', 'user_search_page_heading'));
$this->setPageTitle(PEEP::getLanguage()->text('base', 'user_search_page_heading'));
$this->setPageHeadingIconClass('peep_ic_user');
}
public function index()
{
PEEP::getDocument()->setDescription(PEEP::getLanguage()->text('base', 'users_list_user_search_meta_description'));
$this->addComponent('menu', BASE_CTRL_UserList::getMenu('search'));
if ( !PEEP::getUser()->isAuthorized('base', 'search_users') )
{
$status = BOL_AuthorizationService::getInstance()->getActionStatus('base', 'search_users');
$this->assign('authMessage', $status['msg']);
return;
}
$mainSearchForm = PEEP::getClassInstance('MainSearchForm', $this);
$mainSearchForm->process($_POST);
$this->addForm($mainSearchForm);
$displayNameSearchForm = new DisplayNameSearchForm($this);
$displayNameSearchForm->process($_POST);
$this->addForm($displayNameSearchForm);
}
public function result()
{
if ( !PEEP::getUser()->isAuthorized('base', 'search_users') )
{
$status = BOL_AuthorizationService::getInstance()->getActionStatus('base', 'search_users');
throw new AuthorizationException($status['msg']);
}
PEEP::getDocument()->setDescription(PEEP::getLanguage()->text('base', 'users_list_user_search_meta_description'));
$this->addComponent('menu', BASE_CTRL_UserList::getMenu('search'));
$language = PEEP::getLanguage();
$page = (!empty($_GET['page']) && intval($_GET['page']) > 0 ) ? $_GET['page'] : 1;
$rpp = PEEP::getConfig()->getValue('base', 'users_count_on_page');
$first = ($page - 1) * $rpp;
$count = $rpp;
$listId = PEEP::getSession()->get(BOL_SearchService::SEARCH_RESULT_ID_VARIABLE);
$list = BOL_UserService::getInstance()->findSearchResultList($listId, $first, $count);
$itemCount = BOL_SearchService::getInstance()->countSearchResultItem($listId);
$cmp = new BASE_CLASS_SearchResultList($list, $itemCount, $rpp, true);
$this->addComponent('cmp', $cmp);
$this->assign('listType', 'search');
$searchUrl = PEEP::getRouter()->urlForRoute('users-search');
$this->assign('searchUrl', $searchUrl);
}
}
class MainSearchForm extends BASE_CLASS_UserQuestionForm
{
const SUBMIT_NAME = 'MainSearchFormSubmit';
const FORM_SESSEION_VAR = 'MAIN_SEARCH_FORM_DATA';
public $controller;
public $accountType;
public $displayAccountType = false;
public $displayMainSearch = true;
/*
* @var PEEP_ActionController $controller
*
*/
public function __construct( $controller )
{
parent::__construct('MainSearchForm');
$this->controller = $controller;
$questionService = BOL_QuestionService::getInstance();
$language = PEEP::getLanguage();
$this->setId('MainSearchForm');
$submit = new Submit(self::SUBMIT_NAME);
$submit->setValue(PEEP::getLanguage()->text('base', 'user_search_submit_button_label'));
$this->addElement($submit);
$questionData = PEEP::getSession()->get(self::FORM_SESSEION_VAR);
if ( $questionData === null )
{
$questionData = array();
}
$accounts = $this->getAccountTypes();
$accountList = array();
$accountList[BOL_QuestionService::ALL_ACCOUNT_TYPES] = PEEP::getLanguage()->text('base', 'questions_account_type_' . BOL_QuestionService::ALL_ACCOUNT_TYPES);
foreach ( $accounts as $key => $account )
{
$accountList[$key] = $account;
}
$keys = array_keys($accountList);
$this->accountType = $keys[0];
if ( isset($questionData['accountType']) && in_array($questionData['accountType'], $keys) )
{
$this->accountType = $questionData['accountType'];
}
if ( count($accounts) > 1 )
{
$this->displayAccountType = true;
$accountType = new Selectbox('accountType');
$accountType->setLabel(PEEP::getLanguage()->text('base', 'questions_question_account_type_label'));
$accountType->setRequired();
$accountType->setOptions($accountList);
$accountType->setValue($this->accountType);
$accountType->setHasInvitation(false);
$this->addElement($accountType);
}
$questions = $questionService->findSearchQuestionsForAccountType($this->accountType);
$mainSearchQuestion = array();
$questionNameList = array();
foreach ( $questions as $key => $question )
{
$sectionName = $question['sectionName'];
$mainSearchQuestion[$sectionName][] = $question;
$questionNameList[] = $question['name'];
$questions[$key]['required'] = '0';
}
$questionValueList = $questionService->findQuestionsValuesByQuestionNameList($questionNameList);
$this->addQuestions($questions, $questionValueList, $questionData);
$controller->assign('questionList', $mainSearchQuestion);
$controller->assign('displayAccountType', $this->displayAccountType);
}
public function process( $data )
{
if ( PEEP::getRequest()->isPost() && !$this->isAjax() && isset($data['form_name']) && $data['form_name'] === $this->getName() )
{
PEEP::getSession()->set(self::FORM_SESSEION_VAR, $data);
if ( isset($data[self::SUBMIT_NAME]) && $this->isValid($data) && !$this->isAjax() )
{
if ( !PEEP::getUser()->isAuthorized('base', 'search_users') )
{
$status = BOL_AuthorizationService::getInstance()->getActionStatus('base', 'search_users');;
PEEP::getFeedback()->warning($status['msg']);
$this->controller->redirect();
}
if ( isset($data['accountType']) && $data['accountType'] === BOL_QuestionService::ALL_ACCOUNT_TYPES )
{
unset($data['accountType']);
}
$userIdList = BOL_UserService::getInstance()->findUserIdListByQuestionValues($data, 0, BOL_SearchService::USER_LIST_SIZE);
$listId = 0;
if ( count($userIdList) > 0 )
{
$listId = BOL_SearchService::getInstance()->saveSearchResult($userIdList);
}
PEEP::getSession()->set(BOL_SearchService::SEARCH_RESULT_ID_VARIABLE, $listId);
BOL_AuthorizationService::getInstance()->trackAction('base', 'search_users');
$this->controller->redirect(PEEP::getRouter()->urlForRoute("users-search-result", array()));
}
$this->controller->redirect(PEEP::getRouter()->urlForRoute("users-search"));
}
}
protected function getPresentationClass( $presentation, $questionName, $configs = null )
{
return BOL_QuestionService::getInstance()->getSearchPresentationClass($presentation, $questionName, $configs);
}
protected function setFieldValue( $formField, $presentation, $value )
{
}
}
class DisplayNameSearchForm extends BASE_CLASS_UserQuestionForm
{
const SUBMIT_NAME = 'DisplayNameSearchFormSubmit';
public $controller;
public $accountType;
public $displayAccountType = false;
public $displayMainSearch = true;
/*
* @var PEEP_ActionController $controller
*
*/
public function __construct( $controller )
{
parent::__construct('DisplayNameSearchForm');
$this->controller = $controller;
$questionService = BOL_QuestionService::getInstance();
$language = PEEP::getLanguage();
$this->setId('DisplayNameSearchForm');
$submit = new Submit(self::SUBMIT_NAME);
$submit->setValue(PEEP::getLanguage()->text('base', 'user_search_submit_button_label'));
$this->addElement($submit);
$questionName = PEEP::getConfig()->getValue('base', 'display_name_question');
$question = $questionService->findQuestionByName($questionName);
$questionPropertyList = array();
foreach ( $question as $property => $value )
{
$questionPropertyList[$property] = $value;
}
$this->addQuestions(array($questionName => $questionPropertyList), array(), array());
$controller->assign('displayNameQuestion', $questionPropertyList);
}
public function process( $data )
{
if ( PEEP::getRequest()->isPost() && isset($data[self::SUBMIT_NAME]) && $this->isValid($data) && !$this->isAjax() )
{
if ( !PEEP::getUser()->isAuthorized('base', 'search_users') )
{
$status = BOL_AuthorizationService::getInstance()->getActionStatus('base', 'search_users');
PEEP::getFeedback()->warning($status['msg']);
$this->controller->redirect();
}
$userIdList = BOL_UserService::getInstance()->findUserIdListByQuestionValues($data, 0, BOL_SearchService::USER_LIST_SIZE);
$listId = 0;
if ( count($userIdList) > 0 )
{
$listId = BOL_SearchService::getInstance()->saveSearchResult($userIdList);
}
PEEP::getSession()->set(BOL_SearchService::SEARCH_RESULT_ID_VARIABLE, $listId);
BOL_AuthorizationService::getInstance()->trackAction('base', 'search_users');
$this->controller->redirect(PEEP::getRouter()->urlForRoute("users-search-result", array()));
}
}
}