Вход Регистрация
Файл: base-sys/base/bol/user_service.php
Строк: 1790
<?php

final class BOL_UserService
{
    const 
CREATE_USER_INVALID_USERNAME = -1;
    const 
CREATE_USER_INVALID_EMAIL = -2;
    const 
CREATE_USER_INVALID_PASSWORD = -3;
    const 
CREATE_USER_DUPLICATE_USERNAME = -4;
    const 
CREATE_USER_DUPLICATE_EMAIL = -5;
    const 
PERMISSIONS_ANYONE_CAN_JOIN 1;
    const 
PERMISSIONS_JOIN_BY_INVITATIONS 2;
    const 
PERMISSIONS_MEMBERS_CAN_INVITE 1;
    const 
PERMISSIONS_ADMIN_CAN_INVITE 2;
    const 
PERMISSIONS_GUESTS_CAN_VIEW 1;
    const 
PERMISSIONS_GUESTS_CANT_VIEW 2;
    const 
PERMISSIONS_GUESTS_PASSWORD_VIEW 3;
    const 
CONFIG_JOIN_DISPLAY_PHOTO_UPLOAD 'display';
    const 
CONFIG_JOIN_DISPLAY_AND_SET_REQUIRED_PHOTO_UPLOAD 'display_and_required';
    const 
CONFIG_JOIN_NOT_DISPLAY_PHOTO_UPLOAD 'not_display';
    const 
USER_CONTEXT_DESKTOP BOL_UserOnlineDao::CONTEXT_VAL_DESKTOP;
    const 
USER_CONTEXT_MOBILE BOL_UserOnlineDao::CONTEXT_VAL_MOBILE;
    const 
USER_CONTEXT_API BOL_UserOnlineDao::CONTEXT_VAL_API;
    const 
PASSWORD_RESET_CODE_EXPIRATION_TIME 3600;
    const 
PASSWORD_RESET_CODE_UPDATE_TIME 600;

    
/**
     * @var BOL_UserDao
     */
    
private $userDao;

    
/**
     * @var BOL_LoginCookieDao
     */
    
private $loginCookieDao;

    
/**
     *
     * @var BOL_UserFeaturedDao
     */
    
private $userFeaturedDao;

    
/**
     * @var BOL_UserOnlineDao
     */
    
private $userOnlineDao;

    
/**
     * @var BOL_UserSuspendDao
     */
    
private $userSuspendDao;

    
/**
     * @var BOL_UserApproveDao
     */
    
private $userApproveDao;

    
/**
     * @var BOL_RestrictedUsernamesDao
     */
    
private $restrictedUsernamesDao;

    
/**
     * @var BOL_InviteCodeDao
     */
    
private $inviteCodeDao;

    
/**
     * @var BOL_UserApproveDao
     */
    
private $approveDao;

    
/**
     * @var BOL_UserResetPasswordDao
     */
    
private $resetPasswordDao;

    
/**
     * @var BOL_UserBlockDao
     */
    
private $userBlockDao;

    
/**
     * @var BOL_AuthTokenDao
     */
    
private $tokenDao;

    
/**
     * @var BOL_UserService
     */
    
private static $classInstance;

    
/**
     * Returns an instance of class (singleton pattern implementation).
     *
     * @return BOL_UserService
     */
    
public static function getInstance()
    {
        if ( 
self::$classInstance === null )
        {
            
self::$classInstance = new self();
        }

        return 
self::$classInstance;
    }

    
/**
     * Constructor.
     */
    
private function __construct()
    {
        
$this->userDao BOL_UserDao::getInstance();
        
$this->loginCookieDao BOL_LoginCookieDao::getInstance();
        
$this->userFeaturedDao BOL_UserFeaturedDao::getInstance();
        
$this->userOnlineDao BOL_UserOnlineDao::getInstance();
        
$this->userSuspendDao BOL_UserSuspendDao::getInstance();
        
$this->userApproveDao BOL_UserApproveDao::getInstance();
        
$this->restrictedUsernamesDao BOL_RestrictedUsernamesDao::getInstance();
        
$this->inviteCodeDao BOL_InviteCodeDao::getInstance();
        
$this->approveDao BOL_UserApproveDao::getInstance();
        
$this->resetPasswordDao BOL_UserResetPasswordDao::getInstance();
        
$this->userBlockDao BOL_UserBlockDao::getInstance();
        
$this->tokenDao BOL_AuthTokenDao::getInstance();
    }

    
/**
     * @param string $var
     * @param string $password
     * @return BOL_User
     */
    
public function findUserForStandardAuth$var )
    {
        return 
$this->userDao->findUserByUsernameOrEmail($var);
    }

    
/**
     * Finds user by id.
     *
     * @param integer $id
     * @return BOL_User
     */
    
public function findUserById$id )
    {
        return 
$this->userDao->findById((int) $id);
    }

    
/**
     * Finds user by id.
     *
     * @param integer $id
     * @return BOL_User
     */
    
public function findByIdWithoutCache$id )
    {
        return 
$this->userDao->findByIdWithoutCache((int) $id);
    }

    
/**
     * Returns display name for provided user id.
     *
     * @param integer $userId
     * @return string
     */
    
public function getDisplayName$userId )
    {
        
$questionName PEEP::getConfig()->getValue('base''display_name_question');

        
$questionValue BOL_QuestionService::getInstance()->getQuestionData(array($userId), array($questionName));

        
$displayName = isset($questionValue[$userId]) ? ( isset($questionValue[$userId][$questionName]) ? $questionValue[$userId][$questionName] : '' ) : PEEP::getLanguage()->text('base''deleted_user');

        return 
strip_tags($displayName);
    }

    
/**
     * Returns display names for provided list of user ids.
     *
     * @param array $userIdList
     * @return array
     */
    
public function getDisplayNamesForList( array $userIdList )
    {
        
$userIdList array_unique($userIdList);

        
$questionName PEEP::getConfig()->getValue('base''display_name_question');

        
$questionValues BOL_QuestionService::getInstance()->getQuestionData($userIdList, array($questionName));

        
$resultArray = array();

        foreach ( 
$userIdList as $value )
        {
            
$resultArray[$value] = PEEP::getLanguage()->text('base''deleted_user');

            if ( isset(
$questionValues[$value]) )
            {
                
$resultArray[$value] = isset($questionValues[$value][$questionName]) ? htmlspecialchars($questionValues[$value][$questionName]) : '';
            }
        }

        return 
$resultArray;
    }

    public function 
getUserName$userId )
    {
        
$user $this->findUserById($userId);

        return ( 
$user === null null $user->getUsername() );
    }

    public function 
getUserNamesForList( array $userIdList )
    {
        
$userIdList array_unique($userIdList);

        
$userList $this->userDao->findByIdList($userIdList);

        
$resultArray = array();

        
/* @var $user BOL_User */
        
foreach ( $userList as $user )
        {
            
$resultArray[$user->getId()] = $user->getUsername();
        }

        
$returnArray = array();

        foreach ( 
$userIdList as $id )
        {
            
$returnArray[$id] = isset($resultArray[$id]) ? $resultArray[$id] : null//todo check and replace with lang value
        
}

        return 
$returnArray;
    }

    public function 
getUserUrl$id )
    {
        
$user $this->findUserById($id);

        return 
$this->getUserUrlForUsername(($user === null 'deleted-user' $user->getUsername()));
    }

    public function 
getUserUrlForUsername$username )
    {
        if ( empty(
$username) )
        {
            
$username 'deleted-user';
        }

        return 
PEEP::getRouter()->urlForRoute('base_user_profile', array('username' => $username));
    }

    public function 
getUserUrlsForList( array $userIdList )
    {
        
$userIdList array_unique($userIdList);

        
$userList $this->userDao->findByIdList($userIdList);

        
$resultArray = array();

        
/* @var $user BOL_User */
        
foreach ( $userList as $user )
        {
            
$resultArray[$user->getId()] = $this->getUserUrlForUsername($user->getUsername());
        }

        
$returnArray = array();

        foreach ( 
$userIdList as $id )
        {
            
$returnArray[$id] = isset($resultArray[$id]) ? $resultArray[$id] : $this->getUserUrlForUsername('deleted-user');
        }

        return 
$returnArray;
    }

    public function 
getUserUrlsListForUsernames( array $usernamesList )
    {
        
$usernamesList array_unique($usernamesList);

        
$returnArray = array();

        foreach ( 
$usernamesList as $key => $value )
        {
            
$returnArray[$key] = $this->getUserUrlForUsername($value);
        }

        return 
$returnArray;
    }

    public function 
findByUsername$username )
    {
        return 
$this->userDao->findByUsername($username);
    }

    public function 
findRestrictedUsername$username )
    {
        return 
$this->restrictedUsernamesDao->findRestrictedUsername($username);
    }

    
/**
     *
     * @param string $email
     * @return BOL_User
     */
    
public function findByEmail$email )
    {
        return 
$this->userDao->findByUseEmail($email);
    }

    
/**
     * Creates and saves login cookie.
     *
     * @param integer $userId
     * @return BOL_LoginCookie
     */
    
public function saveLoginCookie$userId )
    {
        
$loginCookie $this->loginCookieDao->findByUserId($userId);

        if ( 
$loginCookie === null )
        {
            
$loginCookie = new BOL_LoginCookie();
        }

        
$loginCookie->setUserId($userId);
        
$loginCookie->setCookie(hash_hmac('md5'time(), $userId));

        
$this->loginCookieDao->save($loginCookie);

        return 
$loginCookie;
    }

    public function 
findUserIdByCookie$cookie )
    {
        
$obj $this->loginCookieDao->findByCookie($cookie);

        return ( 
$obj === null null $obj->getUserId() );
    }

    
/**
     *
     * @param integer $userId
     * @return BOL_LoginCookie
     */
    
public function findLoginCookieByUserId$userId )
    {
        return 
$this->loginCookieDao->findByUserId($userId);
    }

    public function 
findList$first$count$isAdmin false )
    {
        return 
$this->userDao->findList($first$count$isAdmin);
    }

    public function 
findRecentlyActiveList$first$count$isAdmin false )
    {
        return 
$this->userDao->findRecentlyActiveList($first$count$isAdmin);
    }

    public function 
getRecentlyActiveOrderedIdList$userIdList )
    {
        return 
$this->userDao->getRecentlyActiveOrderedIdList($userIdList);
    }

    public function 
findOnlineList$first$count )
    {
        
$onlineList $this->userDao->findOnlineList($first$count);
        
$list = array();

        
$userIdList = array();

        foreach ( 
$onlineList as $id => $user )
        {
            
$userIdList[] = $user->id;
        }
        
// Check privacy permissions
        
$eventParams = array(
            
'action' => 'base_view_my_presence_on_site',
            
'ownerIdList' => $userIdList,
            
'viewerId' => PEEP::getUser()->getId()
        );

        
$permission PEEP::getEventManager()->getInstance()->call('privacy_check_permission_for_user_list'$eventParams);

        foreach ( 
$onlineList as $user )
        {
            
$show true;
            if ( isset(
$permission[$user->id]['blocked']) && $permission[$user->id]['blocked'] == true )
            {
                
$show false;
                continue;
            }

            if ( 
$show )
            {
                
$list[] = $user;
            }
        }
        return 
$list;
    }

    public function 
findOnlineUserById$userId )
    {
        
// Check privacy permissions
        
$eventParams = array(
            
'action' => 'base_view_my_presence_on_site',
            
'ownerId' => $userId,
            
'viewerId' => PEEP::getUser()->getId()
        );
        try
        {
            
PEEP::getEventManager()->getInstance()->call('privacy_check_permission'$eventParams);
        }
        catch ( 
RedirectException $e )
        {
            return 
null;
        }
        return 
$this->userOnlineDao->findByUserId($userId);
    }

    public function 
countOnline()
    {
        return (int) 
$this->userDao->countOnline();
    }

    public function 
count$isAdmin false )
    {
        return (int) 
$this->userDao->count($isAdmin);
    }

    public function 
findSuspendedList$first$count )
    {
        return 
$this->userDao->findSuspendedList($first$count);
    }

    public function 
countSuspended()
    {
        return 
$this->userDao->countSuspended();
    }

    public function 
findUnverifiedList$first$count )
    {
        return 
$this->userDao->findUnverifiedList($first$count);
    }

    public function 
countUnverified()
    {
        return 
$this->userDao->countUnverified();
    }

    public function 
findUnapprovedList$first$count )
    {
        return 
$this->userDao->findUnapprovedList($first$count);
    }

    public function 
countUnapproved()
    {
        return 
$this->userDao->countUnapproved();
    }

    public function 
saveOrUpdateBOL_User $user )
    {
        
$event = new PEEP_Event('base.before_save_user', array('dto' => $user));
        
PEEP::getEventManager()->trigger($event);

        
$this->userDao->save($user);

        if ( !empty(
$this->cachedUsers[$user->getId()]) )
        {
            unset(
$this->cachedUsers[$user->getId()]);
        }
    }

    public function 
isExistUserName$value )
    {
        if ( 
$value === null )
        {
            return 
false;
        }

        
$user $this->findByUsername(trim($value));

        if ( isset(
$user) )
        {
            return 
true;
        }

        return 
false;
    }

    public function 
isRestrictedUsername$value )
    {
        if ( 
$value === null )
        {
            return 
false;
        }

        
$user $this->findRestrictedUsername(trim($value));

        if ( isset(
$user) )
        {
            return 
true;
        }

        return 
false;
    }

    public function 
isExistEmail$value )
    {
        if ( 
$value === null )
        {
            return 
false;
        }

        
$email $this->findByEmail(trim($value));

        if ( isset(
$email) )
        {
            return 
true;
        }

        return 
false;
    }

    public function 
isValidPassword$userId$value )
    {
        
$user $this->findUserById($userId);

        if ( 
$value === null || $user === null )
        {
            return 
false;
        }

        
$password $this->hashPassword($value);

        if ( 
$user->password === $password )
        {
            return 
true;
        }

        return 
false;
    }

    public function 
markAsFeatured$userId )
    {
        
$dto = new BOL_UserFeatured();
        
$dto->setUserId($userId);

        
$result $this->userFeaturedDao->save($dto);

        
$event = new PEEP_Event(PEEP_EventManager::ON_USER_MARK_FEATURED, array('userId' => $userId));
        
PEEP::getEventManager()->trigger($event);

        return 
$result;
    }

    public function 
cancelFeatured$userId )
    {
        
$this->userFeaturedDao->deleteByUserId($userId);

        
$event = new PEEP_Event(PEEP_EventManager::ON_USER_UNMARK_FEATURED, array('userId' => $userId));
        
PEEP::getEventManager()->trigger($event);
    }

    public function 
isUserFeatured$id )
    {
        
$dto $this->userFeaturedDao->findByUserId($id);

        return !empty(
$dto);
    }

    public function 
isBlocked$id$byUserId null )
    {
        if ( 
$byUserId === null )
        {
            
$byUserId PEEP::getUser()->getId();
        }
        
$dto $this->userBlockDao->findBlockedUser($byUserId$id);

        return !empty(
$dto);
    }

    public function 
findBlockedListByUserIdList$userId, array $userIdList )
    {
        if ( !
$userId )
        {
            return 
null;
        }

        
$list $this->userBlockDao->findBlockedList($userId$userIdList);

        
$users = array();
        if ( 
$list )
        {
            foreach ( 
$list as $user )
            {
                
$users[$user->blockedUserId] = $user;
            }
        }

        
$blockList = array();
        foreach ( 
$userIdList as $blockedUserId )
        {
            
$blockList[$blockedUserId] = array_key_exists($blockedUserId$users);
        }

        return 
$blockList;
    }

    public function 
findFeaturedList$first$count )
    {
        return 
$this->userDao->findFeaturedList($first$count);
    }

    public function 
countFeatured()
    {
        return 
$this->userDao->countFeatured();
    }

    public function 
onLogin$userId$context )
    {
        
$this->updateActivityStamp($userId$context);
    }

    public function 
onLogout$userId )
    {
        if ( (int) 
$userId )
        {
            return;
        }

        
$user $this->userDao->findById($userId);
        
$userOnline $this->userOnlineDao->findByUserId($userId);

        if ( 
$user === null || $userOnline === null )
        {
            return;
        }

        
$user->setActivityStamp($userOnline->getActivityStamp());

        
$this->userDao->save($user);

        
$this->userOnlineDao->deleteById($userOnline->getId());
    }

    public function 
updateActivityStamp$userId$context )
    {
        if ( !
$userId )
        {
            return;
        }

        
$user $this->userDao->findById((int) $userId);

        if ( 
$user === null )
        {
            return;
        }

        
$activityStamp time();
        
$userOnline $this->userOnlineDao->findByUserId($userId);

        if ( 
$userOnline === null )
        {
            
$userOnline = new BOL_UserOnline();
            
$userOnline->setUserId($userId);
        }

        
$userOnline->setActivityStamp($activityStamp);
        
$userOnline->setContext($context);
        
$this->userOnlineDao->saveDelayed($userOnline);

        
/* @var $user BOL_User */
        
$user->setActivityStamp($activityStamp);
        
$this->userDao->saveDelayed($user);
    }

    public function 
findUserListByIdList( array $idList )
    {
        
$idList array_unique($idList);

        return 
$this->userDao->findByIdList($idList);
    }

    public function 
findUserIdListByIdList( array $idList )
    {
        
$idList array_unique($idList);

        return 
$this->userDao->findIdListByIdList($idList);
    }

    public function 
findOnlineStatusForUserList$idList )
    {
        
$onlineUsers $this->userOnlineDao->findOnlineUserIdListFromIdList($idList);

        
$onlineUsersArr = array();

        foreach ( 
$onlineUsers as $item )
        {
            
$onlineUsersArr[$item['userId']] = $item['context'];
        }

        
$resultArray = array();

        foreach ( 
$idList as $userId )
        {
            
$resultArray[$userId] = array_key_exists($userId$onlineUsersArr) ? $onlineUsersArr[$userId] : false;
        }

        return 
$resultArray;
    }

    public function 
deleteUser$userId$deleteContent true )
    {
        
$event = new PEEP_Event(PEEP_EventManager::ON_USER_UNREGISTER, array('userId' => $userId'deleteContent' => $deleteContent));
        
PEEP::getEventManager()->trigger($event);

        
BOL_QuestionService::getInstance()->deleteQuestionDataByUserId((int) $userId);
        
BOL_AvatarService::getInstance()->deleteUserAvatar($userId);
        
        
$this->userSuspendDao->deleteById($userId);
        
$this->userBlockDao->deleteByUserId($userId);
        
        
$this->userDao->deleteById($userId);

        return 
true;
    }

    public function 
addRestrictedUsername$username )
    {
        
$this->restrictedUsernamesDao->addRestrictedUsername($username);
    }

    public function 
getRestrictedUsername$username )
    {
        return 
$this->restrictedUsernamesDao->getRestrictedUsername($username);
    }

    public function 
getRestrictedUsernameList()
    {
        return 
$this->restrictedUsernamesDao->getRestrictedUsernameList();
    }

    public function 
replaceAccountTypeForUsers$oldType$newType )
    {
        
$this->userDao->replaceAccountTypeForUsers($oldType$newType);
    }

    public function 
findMassMailingUsers$start$count$ignoreUnsubscribe false$roles = array() )
    {
        return 
$this->userDao->findMassMailingUsers($start$count$ignoreUnsubscribe$roles);
    }

    public function 
findMassMailingUserCount$ignoreUnsubscribe false$roles = array() )
    {
        return 
$this->userDao->findMassMailingUserCount($ignoreUnsubscribe$roles);
    }

    public function 
updateEmail$userId$email )
    {
        if ( 
UTIL_Validator::isEmailValid($email) )
        {
            
$this->userDao->updateEmail((int) $userId$email);
        }
        else
        {
            throw new 
InvalidArgumentException('Invalid email!');
        }
    }

    public function 
updatePassword$userId$password )
    {
        if ( !empty(
$password) )
        {
            
$this->userDao->updatePassword((int) $userId$this->hashPassword($password));
        }
        else
        {
            throw new 
InvalidArgumentException('Invalid password!');
        }
    }

    public function 
suspend$userId$message )
    {
        if ( 
$this->isSuspended($userId) )
        {
            return;
        }

        
$dto = new BOL_UserSuspend();

        
$dto->setUserId($userId)
            ->
setTimestamp(time())->setMessage($message);

        
$this->userSuspendDao->save($dto);

        
$event = new PEEP_Event(PEEP_EventManager::ON_USER_SUSPEND, array('userId' => $userId'message' => $message));
        
PEEP::getEventManager()->trigger($event);
    }

    public function 
unsuspend$userId )
    {
        if ( !
$this->isSuspended($userId) )
        {
            return;
        }

        
$dto $this->userSuspendDao->findByUserId($userId);

        
$this->userSuspendDao->delete($dto);

        
$event = new PEEP_Event(PEEP_EventManager::ON_USER_UNSUSPEND, array('userId' => $userId));
        
PEEP::getEventManager()->trigger($event);
    }

    public function 
block$userId )
    {
        if ( 
$this->isBlocked($userId) )
        {
            return;
        }

        
$dto = new BOL_UserBlock();

        
$dto->setUserId(PEEP::getUser()->getId());
        
$dto->setBlockedUserId($userId);

        
$this->userBlockDao->save($dto);

        
$event = new PEEP_Event(PEEP_EventManager::ON_USER_BLOCK, array('userId' => PEEP::getUser()->getId(), 'blockedUserId' => $userId));
        
PEEP::getEventManager()->trigger($event);
    }

    public function 
unblock$userId )
    {
        if ( !
$this->isBlocked($userId) )
        {
            return;
        }

        
$dto $this->userBlockDao->findBlockedUser(PEEP::getUser()->getId(), $userId);

        
$this->userBlockDao->delete($dto);

        
$event = new PEEP_Event(PEEP_EventManager::ON_USER_UNBLOCK, array('userId' => PEEP::getUser()->getId(), 'blockedUserId' => $userId));
        
PEEP::getEventManager()->trigger($event);
    }

    public function 
isSuspended$userId )
    {
        return 
$this->userSuspendDao->findByUserId($userId) !== null;
    }

    public function 
hashPassword$password )
    {
        return 
hash('sha256'PEEP_PASSWORD_SALT $password);
    }

    public function 
findListByRoleId$roleId$first$count )
    {
        return 
$this->userDao->findListByRoleId($roleId$first$count);
    }

    public function 
countByRoleId$roleId )
    {
        return 
$this->userDao->countByRoleId($roleId);
    }

    public function 
deleteExpiredOnlineUsers()
    {
        
$timestamp PEEP::getConfig()->configExists('base''user_expired_time') ? time() - PEEP::getConfig()->getValue('base''user_expired_time') * 60 time() - 30 60;
        
$this->userOnlineDao->deleteExpired($timestamp);
    }

    public function 
findListByEmailList$emailList )
    {
        return 
$this->userDao->findListByEmailList($emailList);
    }

    public function 
createUser$username$password$email$accountType null$emailVerify false )
    {
        if ( !
UTIL_Validator::isEmailValid($email) )
        {
            throw new 
InvalidArgumentException('Invalid email!'self::CREATE_USER_INVALID_EMAIL);
        }

        if ( !
UTIL_Validator::isUserNameValid($username) )
        {
            throw new 
InvalidArgumentException('Invalid username!'self::CREATE_USER_INVALID_USERNAME);
        }

        if ( !isset(
$password) || strlen($password) === )
        {
            throw new 
InvalidArgumentException('Invalid password!'self::CREATE_USER_INVALID_PASSWORD);
        }

        if ( 
$this->isExistUserName($username) )
        {
            throw new 
LogicException('Duplicate username!'self::CREATE_USER_DUPLICATE_USERNAME);
        }

        if ( 
$this->isExistEmail($email) )
        {
            throw new 
LogicException('Duplicate email!'self::CREATE_USER_DUPLICATE_EMAIL);
        }

        
$userAccountType $accountType;

        if ( 
$userAccountType === null )
        {
            
$userAccountType '';
            
$accountTypes BOL_QuestionService::getInstance()->findAllAccountTypes();

            if ( 
count($accountTypes) === )
            {
                
$userAccountType $accountTypes[0]->name;
            }
        }

        
$user = new BOL_User();

        
$user->username trim($username);
        
$user->password BOL_UserService::getInstance()->hashPassword($password);
        
$user->email trim($email);
        
$user->joinStamp time();
        
$user->activityStamp time();
        
$user->accountType $userAccountType;
        
$user->joinIp ip2long(PEEP::getRequest()->getRemoteAddress());

        if ( 
$emailVerify === true )
        {
            
$user->emailVerify true;
        }

        
$this->saveOrUpdate($user);

        
BOL_AuthorizationService::getInstance()->assignDefaultRoleToUser($user->id);

        return 
$user;
    }

    
/**
     *
     * @param string $code
     * @return BOL_InviteCode
     */
    
public function findInvitationInfo$code )
    {
        return 
$this->inviteCodeDao->findByCode($code);
    }
    
    public function 
deleteInvitationCode$code )
    {
        return 
$this->inviteCodeDao->deleteByCode($code);
    }

    public function 
sendAdminInvitation$email )
    {
        
$inviteCodeDto = new BOL_InviteCode();
        
$inviteCodeDto->setCode(UTIL_String::getRandomString(20));
        
$inviteCodeDto->setUserId(0);
        
$inviteCodeDto->setExpiration_stamp(time() + 3600 24 30);
        
$this->inviteCodeDao->save($inviteCodeDto);

        
$inviteUrl PEEP::getRequest()->buildUrlQueryString(PEEP::getRouter()->urlForRoute('base_join'), array('code' => $inviteCodeDto->getCode()));

        
$mail PEEP::getMailer()->createMail();
        
$mail->addRecipientEmail($email);
        
$mail->setSubject(PEEP::getLanguage()->text('base''mail_template_admin_invite_user_subject'));
        
$mail->setHtmlContent(PEEP::getLanguage()->text('base''mail_template_admin_invite_user_content_html', array('url' => $inviteUrl)));
        
$mail->setTextContent(PEEP::getLanguage()->text('base''mail_template_admin_invite_user_content_text', array('url' => $inviteUrl)));

        
PEEP::getMailer()->addToQueue($mail);
    }

    public function 
saveUserInvitation$userId$code )
    {
        
$dto = new BOL_InviteCode();
        
$dto->setCode($code);
        
$dto->setUserId($userId);
        
$dto->setExpiration_stamp(time() + 3600 24 30);
        
$this->inviteCodeDao->save($dto);
    }

    
/**
     *
     * @param int $userId
     */
    
public function disapprove$userId )
    {
        if ( empty(
$userId) )
        {
            throw new 
InvalidArgumentException('invalid $userId param');
        }

        
$dto $this->approveDao->findByUserId($userId);
        if ( !empty(
$dto) )
        {
            return;
        }

        
$dto = new BOL_UserDisapprove();
        
$dto->setUserId($userId);

        
$this->approveDao->save($dto);

        
$event = new PEEP_Event(PEEP_EventManager::ON_USER_DISAPPROVE, array('userId' => $userId));
        
PEEP::getEventManager()->trigger($event);
    }

    
/**
     *
     * @param int $userId
     */
    
public function approve$userId )
    {
        if ( empty(
$userId) )
        {
            throw new 
InvalidArgumentException('invalid $userId param');
        }

        
$dto $this->approveDao->findByUserId($userId);

        if ( empty(
$dto) )
        {
            throw new 
Exception('User already approved');
        }

        
$this->approveDao->delete($dto);

        
$event = new PEEP_Event(PEEP_EventManager::ON_USER_APPROVE, array('userId' => $userId));
        
PEEP::getEventManager()->trigger($event);
    }

    public function 
sendApprovalNotification$userId )
    {
        if ( !
$userId )
        {
            return 
false;
        }

        
$user $this->findUserById($userId);
        if ( !
$user )
        {
            return 
false;
        }

        
$language PEEP::getLanguage();

        
$mail PEEP::getMailer()->createMail();
        
$vars = array('user_name' => $this->getDisplayName($userId));
        
$mail->addRecipientEmail($user->getEmail());
        
$mail->setSubject($language->text('base''user_approved_mail_subject'$vars));
        
$mail->setTextContent($language->text('base''user_approved_mail_txt'$vars));
        
$mail->setHtmlContent($language->text('base''user_approved_mail_html'$vars));
        
PEEP::getMailer()->send($mail);

        return 
true;
    }

    public function 
isApproved$userId null )
    {
        if ( 
$userId == null )
        {
            
$userId PEEP::getUser()->getId();
        }

        return 
null === $this->approveDao->findByUserId($userId);
    }

    public function 
findDisapprovedList$first$count )
    {
        return 
$this->userDao->findDisapprovedList($first$count);
    }

    public function 
countDisapproved()
    {
        return 
$this->userDao->countDisapproved();
    }

    public function 
deleteDisaproveByUserId$userId )
    {
        if ( empty(
$userId) )
        {
            return;
        }

        
$this->approveDao->deleteByUserId($userId);
    }

    public function 
findSupsendStatusForUserList$idList )
    {
        
$onlineUsers $this->userSuspendDao->findSupsendStatusForUserList($idList);

        
$resultArray = array();

        foreach ( 
$idList as $userId )
        {
            
$resultArray[$userId] = in_array($userId$onlineUsers) ? true false;
        }

        return 
$resultArray;
    }

    
/**
     *
     * @param int $userId
     * return array<BOL_User>
     *
     */
    
public function findUserListByQuestionValues$questionValues$first$count$isAdmin false )
    {
        return 
$this->userDao->findUserListByQuestionValues($questionValues$first$count$isAdmin);
    }

    public function 
countUsersByQuestionValues$questionValues$isAdmin false )
    {
        return 
$this->userDao->countUsersByQuestionValues($questionValues$isAdmin);
    }

    public function 
findUnverifiedStatusForUserList$idList )
    {
        
$unverifiedUsers $this->userDao->findUnverifyStatusForUserList($idList);

        
$resultArray = array();

        foreach ( 
$idList as $userId )
        {
            
$resultArray[$userId] = in_array($userId$unverifiedUsers) ? true false;
        }

        return 
$resultArray;
    }

    public function 
findUserIdListByQuestionValues$questionValues$first$count$isAdmin false$aditionalParams = array() )
    {
        
$first = (int) $first;
        
$count = (int) $count;

        
$data = array(
            
'data' => $questionValues,
            
'first' => $first,
            
'count' => $count,
            
'isAdmin' => $isAdmin,
            
'aditionalParams' => $aditionalParams
        
);

        
$event = new PEEP_Event("base.question.before_user_search"$data$data);

        
PEEP_EventManager::getInstance()->trigger($event);

        
$data $event->getData();

        return 
$this->userDao->findUserIdListByQuestionValues($data['data'], $data['first'], $data['count'], $data['isAdmin'], $data['aditionalParams']);
    }

    public function 
findSearchResultList$listId$first$count )
    {
        return 
$this->userDao->findSearchResultList($listId$first$count);
    }

    public function 
findUnapprovedStatusForUserList$idList )
    {
        
$unapprovedUsers $this->userApproveDao->findUnapproveStatusForUserList($idList);
        
$resultArray = array();

        foreach ( 
$idList as $userId )
        {
            
$resultArray[$userId] = in_array($userId$unapprovedUsers) ? true false;
        }

        return 
$resultArray;
    }

    
/**
     * @deprecated
     */
    
public function findListByBirthdayPeriod$start$end$first$count )
    {
        return array();
    }

    
/**
     * @deprecated
     */
    
public function countByBirthdayPeriod$start$end )
    {
        return 
0;
    }

    
/**
     * @deprecated
     */
    
public function findListByBirthdayPeriodAndUserIdList$start$end$first$count$idList )
    {
        return array();
    }

    
/**
     * @deprecated
     */
    
public function countByBirthdayPeriodAndUserIdList$start$end$idList )
    {
        return 
0;
    }

    
/**
     * @param integer $userId
     * @return BOL_UserResetPassword
     */
    
public function findResetPasswordByUserId$userId )
    {
        return 
$this->resetPasswordDao->findByUserId($userId);
    }

    
/**
     * @param integer $userId
     * @return BOL_UserResetPassword
     */
    
public function getNewResetPassword$userId )
    {
        
$resetPassword = new BOL_UserResetPassword();
        
$resetPassword->setUserId($userId);
        
$resetPassword->setExpirationTimeStamp(( time() + self::PASSWORD_RESET_CODE_EXPIRATION_TIME));
        
$resetPassword->setUpdateTimeStamp(time() + self::PASSWORD_RESET_CODE_UPDATE_TIME);
        
$resetPassword->setCode(md5(UTIL_String::getRandomString(85)));

        
$this->resetPasswordDao->save($resetPassword);

        return 
$resetPassword;
    }

    
/**
     * @param string $code
     * @return BOL_UserResetPassword
     */
    
public function findResetPasswordByCode$code )
    {
        return 
$this->resetPasswordDao->findByCode($code);
    }

    public function 
deleteExpiredResetPasswordCodes()
    {
        
$this->resetPasswordDao->deleteExpiredEntities();
    }

    public function 
deleteResetCode$resetCodeId )
    {
        
$this->resetPasswordDao->deleteById($resetCodeId);
    }

    public function 
sendWellcomeLetterBOL_User $user )
    {
        if ( 
$user === null )
        {
            return;
        }

        if ( 
PEEP::getConfig()->getValue('base''confirm_email') && $user->emailVerify != true )
        {
            return;
        }

        
$vars = array(
            
'username' => $this->getDisplayName($user->id),
        );

        
$language PEEP::getLanguage();

        
$subject = !($language->text('base''welcome_letter_subject'$vars)) ? 'base+welcome_letter_subject' $language->text('base''welcome_letter_subject'$vars);
        
$template_html = !($language->text('base''welcome_letter_template_html'$vars)) ? 'base+welcome_letter_template_html' $language->text('base''welcome_letter_template_html'$vars);
        
$template_text = !($language->text('base''welcome_letter_template_text'$vars)) ? 'base+welcome_letter_template_text' $language->text('base''welcome_letter_template_text'$vars);

        
$mail PEEP::getMailer()->createMail();
        
$mail->addRecipientEmail($user->email);
        
$mail->setSubject($subject);
        
$mail->setHtmlContent($template_html);
        
$mail->setTextContent($template_text);

        try
        {
            
PEEP::getMailer()->send($mail);
        }
        catch ( 
phpmailerException $e )
        {
            
$user->emailVerify false;
            
$this->saveOrUpdate($user);
        }


        
BOL_PreferenceService::getInstance()->savePreferenceValue('send_wellcome_letter'0$user->id);
    }

    public function 
cronSendWellcomeLetter()
    {
        
$preferenceValues = array('send_wellcome_letter' => 1);

        
$userIdList $this->userDao->findUserIdListByPreferenceValues($preferenceValues);

        if ( empty(
$userIdList) )
        {
            return;
        }

        
$users $this->findUserListByIdList($userIdList);

        foreach ( 
$users as $user )
        {
            
$this->sendWellcomeLetter($user);
        }
    }

    
/**
     * @param string $formName
     * @param string $submitDecorator
     * @return Form
     */
    
public function getSignInForm$formName 'sign-in'$submitDecorator 'button' )
    {
        
$form = new Form($formName);

        
$username = new TextField('identity');
        
$username->setRequired(true);
        
$username->setHasInvitation(true);
        
$username->setInvitation(PEEP::getLanguage()->text('base''component_sign_in_login_invitation'));
        
$form->addElement($username);

        
$password = new PasswordField('password');
        
$password->setHasInvitation(true);
        
$password->setInvitation('password');
        
$password->setRequired(true);
        
$form->addElement($password);

        
$remeberMe = new CheckboxField('remember');
        
$remeberMe->setLabel(PEEP::getLanguage()->text('base''sign_in_remember_me_label'));
        
$remeberMe->setValue(true);
        
$form->addElement($remeberMe);

        
$submit = new Submit('submit'$submitDecorator);
        
$submit->setValue(PEEP::getLanguage()->text('base''sign_in_submit_label'));
        
$form->addElement($submit);

        return 
$form;
    }

    
/**
     *
     * @param string $identity
     * @param string $password
     * @param bool $rememberMe
     * @return PEEP_AuthResult
     */
    
public function processSignIn$identity$password$rememberMe false )
    {
        if ( empty(
$identity) || empty($password) )
        {
            throw new 
LogicException("Invalid auth attrs");
        }

        
$result PEEP::getUser()->authenticate(new BASE_CLASS_StandardAuth($identity$password));

        if ( 
$result->isValid() )
        {
            if ( 
$rememberMe )
            {
                
$loginCookie $this->saveLoginCookie(PEEP::getUser()->getId());

                
setcookie('peep_login'$loginCookie->getCookie(), (time() + 86400 7), '/'nullnulltrue);
            }
        }

        return 
$result;
    }

    public function 
getResetForm$formName 'forgot-password' )
    {
        
$language PEEP::getLanguage();
        
$form = new Form($formName);

        
$email = new TextField('email');
        
$email->setRequired(true);
        
$email->addValidator(new EmailValidator());
        
$email->setHasInvitation(true);
        
$email->setInvitation($language->text('base''forgot_password_email_invitation_message'));
        
$form->addElement($email);

        
$submit = new Submit('submit');
        
$submit->setValue($language->text('base''forgot_password_submit_label'));
        
$form->addElement($submit);

        return 
$form;
    }

    public function 
processResetForm$data )
    {
        
$language PEEP::getLanguage();
        
$email trim($data['email']);
        
$user $this->findByEmail($email);

        if ( 
$user === null )
        {
            throw new 
LogicException($language->text('base''forgot_password_no_user_error_message'));
        }

        
$resetPassword $this->findResetPasswordByUserId($user->getId());

        if ( 
$resetPassword !== null )
        {
            if ( 
$resetPassword->getUpdateTimeStamp() > time() )
            {
                throw new 
LogicException($language->text('base''forgot_password_request_exists_error_message'));
            }
            else
            {
                
$resetPassword->setUpdateTimeStamp($resetPassword->getUpdateTimeStamp() + self::PASSWORD_RESET_CODE_UPDATE_TIME);
                
$this->resetPasswordDao->save($resetPassword);
            }
        }
        else
        {
            
$resetPassword $this->getNewResetPassword($user->getId());
        }


        
$vars = array('code' => $resetPassword->getCode(), 'username' => $user->getUsername(), 'requestUrl' => PEEP::getRouter()->urlForRoute('base.reset_user_password_request'),
            
'resetUrl' => PEEP::getRouter()->urlForRoute('base.reset_user_password', array('code' => $resetPassword->getCode())));

        
$mail PEEP::getMailer()->createMail();
        
$mail->addRecipientEmail($email);
        
$mail->setSubject($language->text('base''reset_password_mail_template_subject'));
        
$mail->setTextContent($language->text('base''reset_password_mail_template_content_txt'$vars));
        
$mail->setHtmlContent($language->text('base''reset_password_mail_template_content_html'$vars));
        
PEEP::getMailer()->send($mail);
    }

    public function 
getResetPasswordRequestFrom$formName 'reset-password-request' )
    {
        
$language PEEP::getLanguage();

        
$form = new Form($formName);
        
$code = new TextField('code');
        
$code->setLabel($language->text('base''reset_password_request_code_field_label'));
        
$code->setRequired();
        
$form->addElement($code);
        
$submit = new Submit('submit');
        
$submit->setValue($language->text('base''reset_password_request_submit_label'));
        
$form->addElement($submit);

        return 
$form;
    }

    public function 
getResetPasswordForm$formName 'reset-password' )
    {
        
$language PEEP::getLanguage();

        
$form = new Form($formName);
        
$pass = new PasswordField('password');
        
$pass->setRequired();
        
$pass->setLabel($language->text('base''reset_password_field_label'));
        
$form->addElement($pass);
        
$repeatPass = new PasswordField('repeatPassword');
        
$repeatPass->setRequired();
        
$repeatPass->setLabel($language->text('base''reset_password_repeat_field_label'));
        
$form->addElement($repeatPass);
        
$submit = new Submit('submit');
        
$submit->setValue($language->text('base''reset_password_submit_label'));
        
$form->addElement($submit);

        return 
$form;
    }

    public function 
processResetPasswordForm$dataBOL_User $user$resetCode )
    {
        
$language PEEP::getLanguage();

        if ( 
trim($data['password']) !== trim($data['repeatPassword']) )
        {
            throw new 
LogicException($language->text('base''reset_password_not_equal_error_message'));
        }

        if ( 
strlen(trim($data['password'])) > UTIL_Validator::PASSWORD_MAX_LENGTH || strlen(trim($data['password'])) < UTIL_Validator::PASSWORD_MIN_LENGTH )
        {
            throw new 
LogicException(PEEP::getLanguage()->text('base''reset_password_length_error_message', array('min' => UTIL_Validator::PASSWORD_MIN_LENGTH'max' => UTIL_Validator::PASSWORD_MAX_LENGTH)));
        }

        
$user->setPassword($this->hashPassword($data['password']));
        
$this->saveOrUpdate($user);
        
$this->deleteResetCode($resetCode->getId());
    }

    public function 
getDataForUsersList$listKey$first$count )
    {
        switch ( 
$listKey )
        {
            case 
'latest':
                return array(
                    
$this->findList($first$count),
                    
$this->count()
                );

            case 
'online':
                return array(
                    
$this->findOnlineList($first$count),
                    
$this->countOnline()
                );

            case 
'featured':

                return array(
                    
$this->findFeaturedList($first$count),
                    
$this->countFeatured()
                );

            case 
'waiting-for-approval':
                return array(
                    
$this->findDisapprovedList($first$count),
                    
$this->countDisapproved()
                );

            default:
                
$event = new BASE_CLASS_EventCollector('base.add_user_list');
                
PEEP::getEventManager()->trigger($event);
                
$data $event->getData();

                foreach ( 
$data as $value )
                {
                    if ( 
$value['key'] == $listKey )
                    {
                        return 
call_user_func_array($value['dataProvider'], array($first$count));
                    }
                }

                return array(array(), 
0);
        }
    }

    
/**
     * @param string $token
     * @return int
     */
    
public function findUserIdByAuthToken$token )
    {
        return (int) 
$this->tokenDao->findUserIdByToken($token);
    }

    
/**
     * @param integer $userId
     * @return string
     */
    
public function addTokenForUser$userId )
    {
        
$token = new BOL_AuthToken();
        
$token->setUserId($userId);
        
$token->setTimeStamp(time());
        
$token->setToken(uniqid($userId));

        
$this->tokenDao->deleteByUserId($userId);
        
$this->tokenDao->save($token);

        return 
$token->getToken();
    }

    
/**
     * @param integer $userId
     */
    
public function deleteTokenForUser$userId )
    {
        
$this->tokenDao->deleteByUserId($userId);
    }

    public function 
getUserViewQuestions$userId$adminMode false$questionNames = array(), $sectionNames null )
    {
        
$questionService BOL_QuestionService::getInstance();
        
$user BOL_UserService::getInstance()->findUserById($userId);
        
$accountType $user->accountType;
        
$language PEEP::getLanguage();


        if ( empty(
$questionNames) )
        {
            if ( 
$adminMode )
            {
                
$questions $questionService->findAllQuestionsForAccountType($accountType);
            }
            else
            {
                
$questions $questionService->findViewQuestionsForAccountType($accountType);
            }
        }
        else
        {
            
$questions $questionService->findQuestionByNameList($questionNames);
            foreach ( 
$questions as &$q )
            {
                
$q = (array) $q;
            }
        }

        
$section null;
        
$questionArray = array();
        
$questionNameList = array();

        foreach ( 
$questions as $sort => $question )
        {
            if ( !empty(
$sectionNames) && !in_array($question['sectionName'], $sectionNames) )
            {
                continue;
            }

            if ( 
$section !== $question['sectionName'] )
            {
                
$section $question['sectionName'];
            }

            
$questions[$sort]['hidden'] = false;

            if ( !
$questions[$sort]['onView'] )
            {
                
$questions[$sort]['hidden'] = true;
            }

            
$questionArray[$section][$sort] = $questions[$sort];
            
$questionNameList[] = $questions[$sort]['name'];
        }

        
$questionData $questionService->getQuestionData(array($userId), $questionNameList);
        
$questionLabelList = array();

        
// add form fields
        
foreach ( $questionArray as $sectionKey => $section )
        {
            foreach ( 
$section as $questionKey => $question )
            {
                
$event = new PEEP_Event('base.questions_field_get_label', array(
                    
'presentation' => $question['presentation'],
                    
'fieldName' => $question['name'],
                    
'configs' => $question['custom'],
                    
'type' => 'view'
                
));

                
PEEP::getEventManager()->trigger($event);

                
$label $event->getData();

                
$questionLabelList[$question['name']] = !empty($label) ? $label BOL_QuestionService::getInstance()->getQuestionLang($question['name']);

                
$event = new PEEP_Event('base.questions_field_get_value', array(
                    
'presentation' => $question['presentation'],
                    
'fieldName' => $question['name'],
                    
'value' => empty($questionData[$userId][$question['name']]) ? null $questionData[$userId][$question['name']],
                    
'questionInfo' => $question,
                    
'userId' => $userId
                
));

                
PEEP::getEventManager()->trigger($event);

                
$eventValue $event->getData();

                if ( !empty(
$eventValue) )
                {
                    
$questionData[$userId][$question['name']] = $eventValue;

                    continue;
                }


                if ( !empty(
$questionData[$userId][$question['name']]) )
                {
                    switch ( 
$question['presentation'] )
                    {
                        case 
BOL_QuestionService::QUESTION_PRESENTATION_CHECKBOX:

                            if ( (int) 
$questionData[$userId][$question['name']] === )
                            {
                                
$questionData[$userId][$question['name']] = PEEP::getLanguage()->text('base''yes');
                            }
                            else
                            {
                                unset(
$questionArray[$sectionKey][$questionKey]);
                            }

                            break;

                        case 
BOL_QuestionService::QUESTION_PRESENTATION_DATE:

                            
$format PEEP::getConfig()->getValue('base''date_field_format');

                            
$value 0;

                            switch ( 
$question['type'] )
                            {
                                case 
BOL_QuestionService::QUESTION_VALUE_TYPE_DATETIME:

                                    
$date UTIL_DateTime::parseDate($questionData[$userId][$question['name']], UTIL_DateTime::MYSQL_DATETIME_DATE_FORMAT);

                                    if ( isset(
$date) )
                                    {
                                        
$format PEEP::getConfig()->getValue('base''date_field_format');
                                        
$value mktime(000$date['month'], $date['day'], $date['year']);
                                    }

                                    break;

                                case 
BOL_QuestionService::QUESTION_VALUE_TYPE_SELECT:

                                    
$value = (int) $questionData[$userId][$question['name']];

                                    break;
                            }
 if ( isset(
$criteria['birthdate']) )
        {
            
$range explode('-'$criteria['birthdate']);
            if ( !empty(
$range[0]) && !empty($range[1]) )
            {
                
$criteria['birthdate'] = array('from' => $range[0], 'to' => $range[1]);
            }
            else
            {
                unset(
$criteria['birthdate']);
            }
        }


                            if ( 
$format === 'dmy' )
                            {
                                
$questionData[$userId][$question['name']] = date("d/m/Y"$value);
                            }
                            else
                            {
                                
$questionData[$userId][$question['name']] = date("m/d/Y"$value);
                            }

                            break;

                        case 
BOL_QuestionService::QUESTION_PRESENTATION_BIRTHDATE:

                            
$date UTIL_DateTime::parseDate($questionData[$userId][$question['name']], UTIL_DateTime::MYSQL_DATETIME_DATE_FORMAT);
                            
$questionData[$userId][$question['name']] = UTIL_DateTime::formatBirthdate($date['year'], $date['month'], $date['day']);

                            break;

                        case 
BOL_QuestionService::QUESTION_PRESENTATION_AGE:

                            
$date UTIL_DateTime::parseDate($questionData[$userId][$question['name']], UTIL_DateTime::MYSQL_DATETIME_DATE_FORMAT);
                            
$questionData[$userId][$question['name']] = UTIL_DateTime::getAge($date['year'], $date['month'], $date['day']) . " " $language->text('base''questions_age_year_old');

                            break;

                        case 
BOL_QuestionService::QUESTION_PRESENTATION_RANGE:

                            
$range explode('-'$questionData[$userId][$question['name']]);
                            
$questionData[$userId][$question['name']] = $language->text('base''form_element_from') . " " $range[0] . " " $language->text('base''form_element_to') . " " $range[1];

                            break;

                        case 
BOL_QuestionService::QUESTION_PRESENTATION_SELECT:
                        case 
BOL_QuestionService::QUESTION_PRESENTATION_RADIO:
                        case 
BOL_QuestionService::QUESTION_PRESENTATION_MULTICHECKBOX:

                            
$value "";
                            
$multicheckboxValue = (int) $questionData[$userId][$question['name']];

                            
$parentName $question['name'];

                            if ( !empty(
$question['parent']) )
                            {
                                
$parent BOL_QuestionService::getInstance()->findQuestionByName($question['parent']);

                                if ( !empty(
$parent) )
                                {
                                    
$parentName $parent->name;
                                }
                            }

                            
$questionValues BOL_QuestionService::getInstance()->findQuestionValues($parentName);
                            
$value = array();

                            foreach ( 
$questionValues as $val )
                            {
                                
/* @var $val BOL_QuestionValue */
                                
if ( ( (int) $val->value ) & $multicheckboxValue )
                                {
                                    
/* if ( strlen($value) > 0 )
                                      {
                                      $value .= ', ';
                                      }

                                      $value .= $language->text('base', 'questions_question_' . $parentName . '_value_' . ($val->value)); */

                                    
$value[$val->value] = BOL_QuestionService::getInstance()->getQuestionValueLang($val->questionName$val->value);
                                }
                            }

                            if ( !empty(
$value) )
                            {
                                
$questionData[$userId][$question['name']] = $value;
                            }
                            else
                            {
                                unset(
$questionArray[$sectionKey][$questionKey]);
                            }

                            break;

                        case 
BOL_QuestionService::QUESTION_PRESENTATION_URL:
                        case 
BOL_QuestionService::QUESTION_PRESENTATION_TEXT:
                        case 
BOL_QuestionService::QUESTION_PRESENTATION_TEXTAREA:
                            if ( !
is_string($questionData[$userId][$question['name']]) )
                            {
                                break;
                            }

                            
$value trim($questionData[$userId][$question['name']]);

                            if ( 
strlen($value) > )
                            {
                                
$questionData[$userId][$question['name']] = UTIL_HtmlTag::autoLink(nl2br($value));
                            }
                            else
                            {
                                unset(
$questionArray[$sectionKey]);
                            }

                            break;

                        default:
                            unset(
$questionArray[$sectionKey][$questionKey]);
                    }
                }
                else
                {
                    unset(
$questionArray[$sectionKey][$questionKey]);
                }
            }

            if ( isset(
$questionArray[$sectionKey]) && count($questionArray[$sectionKey]) === )
            {
                unset(
$questionArray[$sectionKey]);
            }
        }

        return array(
'questions' => $questionArray'data' => $questionData'labels' => $questionLabelList);
    }
}
Онлайн: 0
Реклама