| Current Path : /var/www/v3.cesa.co.za/src/UserBundle/Repository/ |
| Current File : /var/www/v3.cesa.co.za/src/UserBundle/Repository/UserListRepository.php |
<?php
namespace App\UserBundle\Repository;
use Doctrine\ORM\EntityRepository;
use App\SessionsBundle\Entity\Sites;
use App\UserBundle\Entity\UserList;
/**
* UserListRepository
*
* This class was generated by the Doctrine ORM. Add your own custom
* repository methods below.
*/
class UserListRepository extends EntityRepository {
/**
* Check if another user with the same user name exists
*
* @param string $userListId
* @param string $username
* @return boolean
*/
public function checkOtherUserExists($userListId, $username) {
$qb = $this->createQueryBuilder('ul')
->where('ul.username = :username')
->setParameter('username', $username);
if ((strlen($userListId) > 0) || ($userListId > 0))
$qb->andWhere('ul.id != :id')
->setParameter('id', $userListId);
$query = $qb->getQuery();
$userList = $query->execute();
if (count($userList) > 0)
return true;
else
return false;
}
/**
* Get all Users who have access levels
*
* @return array
*/
public function findByAccessLevels($accessLevels, $conf = array()) {
$qb = $this->createQueryBuilder('ul')
->join('ul.access_level', 'al')
->where('al.id IN (:accessLevels)')->setParameter('accessLevels', $accessLevels);
if (isset($conf['company']) && is_object($conf['company'])) {
$qb->andWhere('ul.companies = :company')->setParameter('company', $conf['company']);
}
// var_dump($accessLevels);
// echo $qb->getQuery()->getSQL();
// exit;
return $qb->getQuery()->execute();
}
/**
* Check if another user with the same user name exists
*
* @param array $fields
* @return UserList
*/
public function findOneByEMailAddress($fields) {
$qb = $this->createQueryBuilder('ul')
->where('ul.e_mail_address_string = :e_mail_address')
->setParameter('e_mail_address', $fields['e_mail_address']);
$qb->addGroupBy('ul.id');
$qb->setMaxResults(1);
$query = $qb->getQuery();
return $query->getOneOrNullResult();
}
/**
* Get all Users by search text and/ or company name
*
* @param string $searchText
* @param string $companyId
* @param array $conf
* @return array
*/
public function findBySearchCompany($searchText, $companyId, $conf = array()) {
$qb = $this->createQueryBuilder('ul')
->where('1 = 1');
if ($searchText != '') {
$qb->where('ul.first_name_string LIKE :searchText OR ul.last_name_string LIKE :searchText OR ul.username LIKE :searchText OR ul.id_number LIKE :searchText')
->setParameter('searchText', '%' . $searchText . '%');
}
if (strlen($companyId) > 0 && $companyId != '0') {
$qb->join('ul.companies', 'co')
->andWhere('co.id = :companyId')
->setParameter('companyId', $companyId);
}
if (isset($conf['mobile']) && $conf['mobile']) {
$qb->join('ul.user_tel_no_mobile', 'ulm')
->andWhere('ulm.tel_fax_number <> :telNum')->setParameter('telNum', '');
} elseif (isset($conf['e_mail']) && $conf['e_mail']) {
$qb->join('ul.user_e_mail_address', 'uem')
->andWhere('uem.e_mail_address <> :eMail')->setParameter('eMail', '')
->andWhere('uem.e_mail_address LIKE :atSign')->setParameter('atSign', '%@%');
}
if (isset($conf['user_type_id']) && strlen($conf['user_type_id']) > 0) {
$qb->join('ul.user_types', 'ut')
->andWhere('ut.id = :userTypeId')->setParameter('userTypeId', $conf['user_type_id']);
}
$query = $qb->getQuery();
// echo $query->getSQL() . ' - ' . $companyId . '<br /><br />';
return $query->execute();
}
/**
* Get all Users who receive admin notifications
*
* @return array
*/
public function findAdminNotificationRecipients($adminUserTypeId) {
$qb = $this->createQueryBuilder('ul')
->join('ul.user_types', 'ut')
->join('ul.user_e_mail_address', 'uem')
->where('uem.e_mail_address IS NOT NULL')
->andWhere('uem.subscribed = 1')
->andWhere('ut.id = :userTypeId')->setParameter('userTypeId', $adminUserTypeId);
return $qb->getQuery()->execute();
}
/**
* Get all Users by search text and/ or company name
*
* @param array $params
* @return array
*/
public function getListQuery($params) {
$qb = $this->createQueryBuilder('ul')
->where('1 = 1');
if (isset($params['contacts']) && $params['contacts']) {
$params['contacts'] = false;
$params['return_ids'] = true;
$params['userTypeId'] = null;
$params['userTypeIds'] = null;
$oldSearchText = $params['searchText'];
$params['searchText'] = null;
$userListIDs = $this->getListQuery($params)->execute();
$createdByIds = array();
foreach ($userListIDs as $userListID) {
// echo $userListID['id'] . " ID found<br>\r\n";
$createdByIds[] = $userListID['id'];
}
// echo $params['refer'];
// var_dump(array_keys($params));
// exit;
$qb->join('ul.user_contact', 'uc')
->andWhere('uc.created_by IN (:createdBy)')->setParameter('createdBy', $createdByIds);
$params['companyId'] = null;
$params['return_ids'] = false;
$params['searchText'] = $oldSearchText;
} elseif ((isset($params['companyId']) && strlen($params['companyId']) > 0 && $params['companyId'] != '0') && (isset($params['userList']) && is_object($params['userList']))) {
$qb->join('ul.companies', 'co')
->join('co.company_agents', 'ca');
} elseif (isset($params['companyId']) && strlen($params['companyId']) > 0 && $params['companyId'] != '0') {
$qb->join('ul.companies', 'co');
}
// echo $params['companyId'];
// exit;
if (isset($params['companyId']) && strlen($params['companyId']) > 0 && $params['companyId'] != '0' && $params['companyId'] != '-') {
$qb->andWhere('co.id = :companyId OR co.parent_id = :companyId')
->setParameter('companyId', $params['companyId']);
}
if (isset($params['userList']) && is_object($params['userList'])) {
if ($params['userList']->getGranted('ROLE_COMPANY_ADMINISTRATOR')) {
$companies = $params['userList']->getCompanies();
$sendParams = $params;
unset($sendParams['userList']);
$params['limit_user_ids'][] = array($params['userList']->getId());
$sendParams['return_ids'] = true;
foreach ($companies as $company) {
$sendParams['companyId'] = $company->getId();
$userIds = array();
foreach ($this->getListQuery($sendParams)->execute() as $oneUser) {
$userIds[] = $oneUser['id'];
}
// echo count($params['limit_user_ids']) . ' - ' . count($userIds) . ' - ' . count(array_merge($params['limit_user_ids'], $userIds)) . '<br />';
$params['limit_user_ids'] = array_merge($params['limit_user_ids'], $userIds);
} //foreach
} else {
$qb->andWhere('ul.id = :userListId')
->setParameter('userListId', $params['userList']->getId());
}
}
if (isset($params['userTypeIds']) && is_array($params['userTypeIds']) > 0 && count($params['userTypeIds']) > 0) {
$qb->join('ul.user_types', 'ut')
->andWhere('ut.id IN (:userTypeIds)')
->setParameter('userTypeIds', $params['userTypeIds']);
} elseif (isset($params['userTypeId']) && strlen($params['userTypeId']) > 0 && $params['userTypeId'] != '0') {
$qb->join('ul.user_types', 'ut')
->andWhere('ut.id = :userTypeId')
->setParameter('userTypeId', $params['userTypeId']);
}
if (isset($params['group_ids']) && count($params['group_ids']) > 0) {
$qb->join('ul.user_group', 'ug')
->andWhere('ug.id IN (:userGroupIds)')
->setParameter('userGroupIds', $params['group_ids']);
}
if (isset($params['limit_user_ids']) && count($params['limit_user_ids'])) {
$qb->andWhere('ul.id IN (:limitUserIds)')
->setParameter('limitUserIds', $params['limit_user_ids']);
}
if (isset($params['referredByUser']) && is_object($params['referredByUser'])) {
$qb->andWhere('ul.referred_by = :referredByUser')
->setParameter('referredByUser', $params['referredByUser']->getId());
}
if (isset($params['e_mail_only']) && $params['e_mail_only']) {
$qb->join('ul.user_e_mail_address', 'uema');
}
if (isset($params['e_mail_subscribed_only']) && $params['e_mail_subscribed_only']) {
$qb->andWhere('uema.subscribed = :subscribed')
->setParameter('subscribed', true);
}
if (isset($params['sms_only']) && $params['sms_only']) {
$qb->join('ul.user_tel_no_mobile', 'utnm');
}
if (isset($params['sms_subscribed_only']) && $params['sms_subscribed_only']) {
$qb->andWhere('utnm.opted_in = :subscribed')
->setParameter('subscribed', true);
}
if (isset($params['searchText']) && strlen($params['searchText']) > 0) {
$qb->andWhere('ul.first_name_string LIKE :searchText OR ul.last_name_string LIKE :searchText OR ul.username LIKE :searchText')
->setParameter('searchText', '%' . $params['searchText'] . '%');
}
if (isset($params['accessLevel']) && is_object($params['accessLevel'])) {
$qb->join('ul.access_level', 'al')
->andWhere('al.id = :accessLevel')
->setParameter('accessLevel', $params['accessLevel']->getId());
}
// echo $qb->getQuery()->getSQL() . "\r\n <br /><br />";
// echo 'referredByUser: ' . $params['referredByUser'] . "\r\n";
// echo 'group_ids: ' . $params['group_ids'] . "\r\n";
// echo 'userTypeId: ' . $params['userTypeId'] . "\r\n";
// echo 'companyId: ' . $params['companyId'] . "\r\n<br />";
// exit;
if (isset($params['return_ids']) && $params['return_ids']) {
return $qb->select('ul.id')->getQuery();
}
$qb->orderBy('ul.last_name_string', 'ASC')
->addOrderBy('ul.first_name_string', 'ASC');
return $qb->getQuery();
}
/**
* Get the users for a given site
*
* @param Sites $site
* @param integer $limit
*/
public function getArray(Sites $site, $limit = 0) {
$qb = $this->createQueryBuilder('ul')
->select('ul.id')
->where('ul.site = :site')->setParameter('site', $site);
if ($limit > 0) {
$qb->setMaxResults($limit);
}
return $qb->getQuery()
->getArrayResult()
;
}
/**
* Find newly referred users
*
* @return array
*/
public function findNewReferredUsers() {
$nots = $this->createQueryBuilder('ul')
->select('un.user_referred_id')
->innerJoin('UserBundle:UserNetwork', 'un')
->where('ul.id = un.user_referred_id')
->andWhere('un.credits_allocated = 1')
->getQuery()
->getArrayResult();
$qb = $this->createQueryBuilder('ul')
->where('ul.referred_by IS NOT NULL');
if (count($nots) > 0) {
$qb = $qb->andWhere('ul.id NOT IN (:referredIds)')->setParameter('referredIds', array_values($nots));
}
return $qb->getQuery()->getResult();
}
/**
* Get user linked company IDs
*
* @return array()
*/
public function getCompanyIds(UserList $userList) {
$qb = $this->createQueryBuilder('ul')
->join('ul.companies', 'co')
->where('ul.id = :userListId')->setParameter('userListId', $userList->getId());
return $qb->select('co.id')->getQuery()->setHydrationMode(\Doctrine\ORM\Query::HYDRATE_ARRAY)->getArrayResult();
}
/**
* Get all Users linked to a travel establishment
*
* @return array
*/
public function findAllEstablishmentOwners() {
$qb = $this->createQueryBuilder('ul')
->join('ul.companies', 'co')
->join('co.establishments', 'est');
$query = $qb->getQuery();
// echo $query->getSQL() . ' - ' . $companyId . '<br /><br />';
return $query->execute();
}
}