| Current Path : /var/www/v3.cesa.co.za/src/UserBundle/Services/ |
| Current File : /var/www/v3.cesa.co.za/src/UserBundle/Services/UserListManager.php |
<?php
namespace App\UserBundle\Services;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\PasswordHasher\Hasher\PasswordHasherFactory;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasher;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\UsageTrackingTokenStorage;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
use Monolog\Logger;
use App\ContactBundle\Entity\ContactMethod;
use App\ContactBundle\Entity\ContactReason;
use App\ContactBundle\Entity\MessageType;
use App\CoreBundle\Services\Openssl_EncryptDecrypt;
use App\CoreBundle\Services\Utils;
use App\SessionsBundle\Entity\Sites;
use App\UserBundle\Entity\UserBankDetail;
use App\UserBundle\Entity\UserList;
use App\UserBundle\Entity\UserTelNo;
use App\UserBundle\Entity\UserAddress;
use App\UserBundle\Entity\UserEMailAddress;
/**
* User List manager
*
* @author Otto Saayman <otto@igotafrica.com>
* @package UserBundle
* @subpackage UserList
* @version 0.0.1
*/
final class UserListManager
{
/**
* Service Container
* @var object
*/
private $container = null;
/**
* Entity manager
* @var object
*/
private $em;
/**
* Security Context
* @var \Symfony\Component\Security\Core\SecurityContextInterface
*/
protected $securityContext;
/**
* Class construct
*
* @param ContainerInterface $container
* @param Logger $logger
* @return void
*/
public function __construct(
ContainerInterface $container
) {
$this->setContainer($container);
$this->setEm($container->get('doctrine')->getManager('default'));
return;
}
/**
* Get Container
*
* @return ContainerInterface $container
*/
public function getContainer()
{
return $this->container;
}
/**
* Set Container
*
* @param ContainerInterface $container
* @return void
*/
public function setContainer($container)
{
$this->container = $container;
}
public function setSecurityContext(UsageTrackingTokenStorage $securityContext)
{
$this->securityContext = $securityContext;
}
/**
* Get Entity Manager
*
* @return string
*/
public function getEm()
{
return $this->em;
}
/**
* Set Container
*
* @param string $em
* @return void
*/
public function setEm($em)
{
$this->em = $em;
}
/**
* Get a User
*
* @return UserList
*/
public function find($id)
{
if (strlen($id) <= 0) {
return null;
}
return $this->em->getRepository(UserList::class)->find($id);
}
/**
* Get a User by parameters
*
* @param array $params
* @return UserList
*/
public function findOneBy($params)
{
return $this->em->getRepository(UserList::class)->findOneBy($params);
}
/**
* Get a User by parameters
*
* @param array $params
* @return array
*/
public function findBy($params)
{
return $this->em->getRepository(UserList::class)->findBy($params);
}
/**
* Get all Users
*
* @return array
*/
public function findAll()
{
return $this->em->getRepository(UserList::class)->findAll();
}
/**
* Save a User
*
* @params UserList $userList
* @return UserList
*/
public function save(UserList &$userList)
{
$this->em->persist($userList);
$this->em->flush();
return $userList;
}
/**
* Remove a User List
*
* @param string $userListId
* @param UserList $owner
*/
public function removeById($userListId, UserList $owner, Companies $company = null)
{
$userList = $this->find($userListId);
if (!is_object($userList)) {
return;
}
if ($this->canEdit($userList, $owner)) {
$this->getEm()->remove($userList);
$this->getEm()->flush();
} else {
$this->getContainer()->get('user_contact.manager')->unLinkUser($userList, $owner, $company);
}
}
/**
* Get all Users by company
*
* @param string $companyId
* @return array
*/
public function getAllQuery($params = array())
{
if (!isset($params['referredByUser'])) {
$params['referredByUser'] = null;
}
if (!isset($params['return_ids'])) {
$params['return_ids'] = false;
}
if (!isset($params['userList'])) {
$params['userList'] = null;
}
if (!isset($params['refer'])) {
$params['refer'] = true;
}
if (!isset($params['contacts'])) {
$params['contacts'] = false;
}
if (!is_object($params['referredByUser']) && !$params['return_ids'] && $params['refer']) {
$params['userList'] = $this->getLoggedInUser();
}
if (!is_object($params['referredByUser']) && is_object($params['userList']) && $params['userList']->getGranted('ROLE_SUPER_ADMINISTRATOR')) {
$params['userList'] = null;
}
if (isset($params['userTypeId']) && strpos($params['userTypeId'], ',') > 0) {
$params['userTypeIds'] = explode(',', $params['userTypeId']);
}
return $this->em->getRepository(UserList::class)->getListQuery($params);
}
/**
* Get a User by access levels
*
* @param array $accessLevels
* @return array
*/
public function findByAccessLevels($accessLevels, $conf = array())
{
return $this->em->getRepository(UserList::class)->findByAccessLevels($accessLevels, $conf);
}
/**
* Get all Users by search text and/ or company name
*
* @param string $eMailAddress
* @return UserList
*/
public function findOneByEMailAddress($eMailAddress)
{
return $this->em->getRepository(UserList::class)->findOneByEMailAddress(array('e_mail_address' => $eMailAddress));
}
/**
* Get all Users by search text and/ or company name
*
* @param string $searchText
* @param string $companyId
* @return array
*/
public function findBySearchCompany($searchText, $companyId)
{
$userLists = $this->em->getRepository(UserList::class)->findBySearchCompany($searchText, $companyId);
$return = array();
foreach ($userLists as $userList) {
$return[] = array('id' => $userList->getId(), 'text' => $userList->getFullNameString() . ' (' . $userList->getUsername() . ')');
}
return $return;
}
/**
* Get all Users by search text and/ or company name
*
* @param string $searchText
* @param string $companyId
* @param array $conf
* @return array
*/
public function findBySearchCompanyForSelect($searchText, $companyId, $conf = array())
{
$userLists = $this->em->getRepository(UserList::class)->findBySearchCompany($searchText, $companyId, $conf);
$return = array();
foreach ($userLists as $userList) {
$userName = $userList->getUsername();
if (isset($conf['mobile']) && $conf['mobile']) {
$userName = $userList->getUserTelNoMobileString();
}
$return[$userList->getFullNameString() . ' (' . $userName . ')'] = $userList->getId();
}
return $return;
}
/**
* Move user to a company
*
* @param UserList $userList
* @param string $companyId
* @return void
*/
public function moveCompany(UserList $userList, $companyId, Companies $oldCompany = null)
{
$companyManager = $this->getContainer()->get('companies.manager');
$company = $companyManager->find($companyId);
if (!is_object($company)) {
return;
}
$companyManager->moveUser($company, $userList, $oldCompany);
}
/**
* Move user to a company
*
* @param UserList $userList
* @param string $companyIds
* @return void
*/
public function linkCompanies(UserList $userList, $companyIds)
{
if (!is_array($companyIds)) {
$companyIds = explode(',', $companyIds);
}
$companyManager = $this->getContainer()->get('companies.manager');
$companies = $userList->getCompanies();
$linkedCompanyIds = array();
foreach ($companies as $linkedCompany) {
if (!in_array($linkedCompany->getId(), $companyIds)) {
// echo 'unlinking ' . $linkedCompany->getName();
// exit;
$companyManager->unlinkUser($linkedCompany, $userList);
} else {
$linkedCompanyIds[] = $linkedCompany->getId();
}
} //foreach linked company
foreach ($companyIds as $companyId) {
if (!in_array($companyId, $linkedCompanyIds)) {
$company = $companyManager->find($companyId);
// echo 'linking ' . $company->getName();
// exit;
if (is_object($company)) {
$companyManager->linkUser($company, $userList);
}
}
}
}
/**
* Get all Users who receive admin notifications
*
* @return array
*/
public function findAdminNotificationRecipients()
{
return $this->em->getRepository(UserList::class)
->findAdminNotificationRecipients($this->getContainer()->get('system_setting.manager')->getSetting('admin_user_type'));
}
/**
* Get a UserList object as an array
*
* @param string $userListId
* @return array
*/
public function getUserListObjectArray($userListId)
{
$return = array('user_list' => array(), 'error_message' => '');
if (strlen($userListId) <= 0) {
$userListId = '0';
}
$userList = $this->find($userListId);
if (!is_object($userList)) {
$return['error_message'] = 'That user does not exist';
return $return;
}
$return['user_list'] = array(
'id' => $userList->getId(),
'first_name_string' => trim($userList->getFirstNameString()),
'last_name_string' => trim($userList->getLastNameString()),
'e_mail_address' => trim($userList->getEMailAddressString()),
'mobile_number' => trim($userList->getUserTelNoMobileString()),
'id_number' => trim($userList->getIdNUmber()),
);
return $return;
}
/**
* Get a UserList object as an array
*
* @param string $userListId
* @return array
*/
public function getSelectArray($accessLevelId = '-', $params = array())
{
$return = array();
foreach ($this->getAllQuery($params)->execute() as $user) {
$return[$user->getFullNameString() . ' (' . $user->getUsername() . ')'] = $user->getId();
}
return $return;
}
/**
* Update password
*
* @param UserList $userList
* @return void
*/
public function updatePassword(UserList $userList)
{
//Check and encrypt the password
if (strlen($userList->getPassword()) <= 0 && strlen($userList->getPlainPassword()) <= 0) {
$userList->setPlainPassword(microtime());
}
if (strlen($userList->getPlainPassword()) > 0) {
$passwordHasherFactory = new PasswordHasherFactory([
// auto hasher with default options for the User class (and children)
User::class => ['algorithm' => 'auto'],
// auto hasher with custom options for all PasswordAuthenticatedUserInterface instances
PasswordAuthenticatedUserInterface::class => [
'algorithm' => 'auto',
'cost' => 15,
],
]);
$passwordHasher = new UserPasswordHasher($passwordHasherFactory);
// hash the password (based on the password hasher factory config for the $user class)
$hashedPassword = $passwordHasher->hashPassword(
$userList,
$userList->getPlainPassword()
);
$userList->setPassword($hashedPassword);
// $factory = $this->getContainer()->get('security.encoder_factory');
// $encoder = $factory->getEncoder($userList);
// $userList->setSalt(microtime());
// $encodedPassword = $encoder->encodePassword($userList->getPlainPassword(), $userList->getSalt());
//
// $userList->setPassword($encodedPassword);
$this->checkRequestValues($userList);
$this->save($userList);
}
}
/**
* Set user type to admin
*
* @param UserList $userList
* @return void
*/
public function setAdminUserTypeId(UserList &$userList)
{
$userTypesManager = $this->getContainer()->get('user_types.manager');
$adminUserType = $userTypesManager->getAdminUserTypeId();
$userList->setUserTypes($adminUserType);
}
/**
* Set user type to frontend
*
* @param UserList $userList
* @return void
*/
public function setFrontendUserTypeId(UserList &$userList)
{
$userTypesManager = $this->getContainer()->get('user_types.manager');
$frontendUserType = $userTypesManager->getFrontendUserTypeId();
$userList->setUserTypes($frontendUserType);
}
/**
* Get logged in user
*
* @return UserBundle:UserList
*/
public function getLoggedInUser($session = null)
{
$user = null;
// echo $this->securityContext->getToken();
if (!is_object($this->securityContext)) {
return null;
}
if (is_object($this->securityContext->getToken()) && is_object($this->securityContext->getToken()->getUser())) {
// echo 'got user from context <br /> ';
// exit;
$user = $this->securityContext->getToken()->getUser();
}
if (is_object($this->securityContext->getToken()) && !is_object($user)) {
// echo 'got user from db by username <br /> ';
// exit;
$user = $this->findOneBy(array('username' => $this->securityContext->getToken()->getUser()));
}
if (!is_object($user) && !is_object($session)) {
$session = $this->container->get('sessions.manager')->getSession();
}
if (
!is_object($user) && is_object($session) && is_object($this->getContainer()->get('sessions.manager')->getSfSession()) &&
!$this->getContainer()->get('sessions.manager')->getSfSession()->get('logout') &&
$this->getContainer()->get('session_values.manager')->getValue(array('value_name' => 'logged_on_user_id', 'session' => $session)) != '-'
) {
// echo $this->getContainer()->get('session_values.manager')->getValue(array('value_name' => 'logged_on_user_id', 'session' => $session))
// . ' - ' . $session->getId() . ' got user from session stored id <br /> ';
// exit;
$user = $this->find($this->getContainer()->get('session_values.manager')->getValue(array('value_name' => 'logged_on_user_id', 'session' => $session)));
}
// if (!is_object($this->securityContext->getToken()) && is_object($user) && is_object($this->container->get('sessions.manager')->getRequest())) {
// echo 'Must do login!';
// exit;
// $request = $this->container->get('sessions.manager')->getRequest();
// $this->doLogin($request, $user, true);
// }
// echo 'Logged in';
// echo $this->securityContext->getToken();
// exit;
if (is_object($this->securityContext->getToken()) && !is_object($this->securityContext->getToken()->getUser()) && is_object($user)) {
// echo 'Setting user ';
// exit;
$this->securityContext->getToken()->setUser($user);
}
if (is_object($user) && is_object($session)) {
$this->getContainer()->get('session_values.manager')->setValue(array('value_name' => 'logged_on_user_id', 'value' => $user->getId(), 'session' => $session));
}
// exit;
return $user;
}
/**
* Set E-Mail address
*
* @param UserList $userList
* @param array $userEMailAddressValues
* @return void
*/
public function setUserEMailAddress(UserList &$userList, $userEMailAddressValues)
{
$userEMailAddressManager = $this->getContainer()->get('user_e_mail_address.manager');
$userEMailAddress = $userList->getUserEMailAddress();
if (is_null($userEMailAddress)) {
$userEMailAddress = new UserEMailAddress();
}
$userEMailAddressManager->populateUserEMailAddressObject($userEMailAddress, $userEMailAddressValues);
$userList->setUserEMailAddress($userEMailAddress);
}
/**
* Set Mobile phone number
*
* @param UserList $userList
* @param array $userTelNoMobileValues
* @return void
*/
public function setUserTelNoMobileId(UserList &$userList, $userTelNoMobileValues)
{
$userTelNoManager = $this->getContainer()->get('user_tel_no.manager');
$userTelNoMobile = $userList->getUserTelNoMobile();
if (is_null($userTelNoMobile)) {
$userTelNoMobile = new UserTelNo();
}
$userTelNoManager->populateUserTelNoObject($userTelNoMobile, $userTelNoMobileValues);
$userList->setUserTelNoMobile($userTelNoMobile);
}
/**
* Set Work phone number
*
* @param UserList $userList
* @param array $userTelNoWorkValues
* @return void
*/
public function setUserTelNoWorkId(UserList $userList, $userTelNoWorkValues)
{
$userTelNoManager = $this->getContainer()->get('user_tel_no.manager');
$userTelNoWork = $userList->getUserTelNoWork();
if (is_null($userTelNoWork)) {
$userTelNoWork = new UserTelNo();
}
$userTelNoManager->populateUserTelNoObject($userTelNoWork, $userTelNoWorkValues);
$userList->setUserTelNoWork($userTelNoWork);
}
/**
* Set Home phone number
*
* @param UserList $userList
* @param array $userTelNoHomeValues
* @return void
*/
public function setUserTelNoHomeId(UserList $userList, $userTelNoHomeValues)
{
$userTelNoManager = $this->getContainer()->get('user_tel_no.manager');
$userTelNoHome = $userList->getUserTelNoHome();
if (is_null($userTelNoHome)) {
$userTelNoHome = new UserTelNo();
}
$userTelNoManager->populateUserTelNoObject($userTelNoHome, $userTelNoHomeValues);
$userList->setUserTelNoHome($userTelNoHome);
}
/**
* Set Fax phone number
*
* @param UserList $userList
* @param array $userTelNoFaxValues
* @return void
*/
public function setUserTelNoFaxId(UserList $userList, $userTelNoFaxValues)
{
$userTelNoManager = $this->getContainer()->get('user_tel_no.manager');
$userTelNoFax = $userList->getUserTelNoFax();
if (is_null($userTelNoFax)) {
$userTelNoFax = new UserTelNo();
}
$userTelNoManager->populateUserTelNoObject($userTelNoFax, $userTelNoFaxValues);
$userList->setUserTelNoFax($userTelNoFax);
}
/**
* Set Physical Address
*
* @param UserList $userList
* @param array $userAddressPhysicalValues
* @return void
*/
public function setUserAddressPhysicalId(UserList $userList, $userAddressPhysicalValues)
{
$userAddressManager = $this->getContainer()->get('user_address.manager');
$userAddressPhysical = $userList->getUserAddressPhysical();
if (is_null($userAddressPhysical)) {
$userAddressPhysical = new UserAddress();
}
$userAddressManager->populateUserAddressObject($userAddressPhysical, $userAddressPhysicalValues);
$userList->setUserAddressPhysical($userAddressPhysical);
}
/**
* Set Postal Address
*
* @param UserList $userList
* @param array $userAddressPostalValues
* @return void
*/
public function setUserAddressPostalId(UserList $userList, $userAddressPostalValues)
{
$userAddressManager = $this->getContainer()->get('user_address.manager');
$userAddressPostal = $userList->getUserAddressPostal();
if (is_null($userAddressPostal)) {
$userAddressPostal = new UserAddress();
}
$userAddressManager->populateUserAddressObject($userAddressPostal, $userAddressPostalValues);
$userList->setUserAddressPostal($userAddressPostal);
}
/**
* Save user list from request form values array
*
* @param array $requestValues
* @param UserList $userList
* @return string
*/
public function saveFromRequest($requestValues, UserList &$userList = null, UserList $owner = null, $create = true)
{
$return = '';
$isNew = false;
if (isset($requestValues['mobile_number'])) {
$requestValues['user_tel_no_mobile'] = array('countries' => '', 'area_code' => '', 'extension' => '', 'tel_fax_number' => $requestValues['mobile_number']);
}
if (!isset($requestValues['user_type_id'])) {
$requestValues['user_type_id'] = $requestValues['user_types'];
}
if (!isset($requestValues['id'])) {
$requestValues['id'] = '';
}
if (isset($requestValues['first_name_string']) && isset($requestValues['last_name_string']) && strlen($requestValues['first_name_string']) > 0 && strlen($requestValues['last_name_string']) > 0 && $requestValues['first_name_string'] == $requestValues['last_name_string']) {
return 'First and last name can not be the same';
}
// var_dump(array_keys($requestValues));
// exit;
if (isset($requestValues['e_mail_address_string']) && (!isset($requestValues['username']) || strlen($requestValues['username']) <= 0)) {
$requestValues['username'] = $requestValues['e_mail_address_string'];
}
if ((!isset($requestValues['set_username_as_e_mail']) || $requestValues['set_username_as_e_mail']) && (!isset($requestValues['e_mail_address_string']) || strlen($requestValues['e_mail_address_string']) <= 0)) {
$requestValues['e_mail_address_string'] = $requestValues['username'];
}
// if ($this->getContainer()->get('banned_word.manager')->checkText($requestValues['e_mail_address_string']) || $this->getContainer()->get('banned_word.manager')->checkText($requestValues['username'])) {
// return 'Your profile contains text that is not allowed on this site';
// }
$testUserName = $this->getEm()->getRepository(UserList::class)->checkOtherUserExists($requestValues['id'], $requestValues['username']);
$userListTest = $this->findOneBy(array('username' => $requestValues['username']));
$eMailAddress = '';
if (isset($requestValues['e_mail_address_string'])) {
$eMailAddress = $requestValues['e_mail_address_string'];
}
if (strlen($eMailAddress) <= 0) {
$eMailAddress = microtime() . '-cesa@igotafrica.com.co.za';
}
if (!is_object($userListTest)) {
$userListTest = $this->findOneByEMailAddress($eMailAddress);
}
$foundByIDNumber = false;
if (is_object($userListTest) && isset($requestValues['id_number']) && strlen($requestValues['id_number']) > 0 && $userListTest->getIdNumber() != $requestValues['id_number']) {
$userListTest = $this->findOneBy(array('id_number' => $requestValues['id_number']));
$userList = $userListTest;
$requestValues['username'] = $requestValues['id_number'];
$foundByIDNumber = true;
}
if (!$create && is_object($userListTest)) {
return;
}
if ($testUserName && is_object($owner) && is_object($userListTest)) {
//Link as a contact
$this->getContainer()->get('user_contact.manager')->linkUser($owner, $userListTest);
$userList = $userListTest;
return 'That user was linked as a contact';
} elseif ($testUserName && !is_object($owner) && is_object($userListTest) && $userListTest->getCreatedBy() != $owner->getId()) {
$userList = $userListTest;
return 'That user name or e-mail address is already in use';
}
if ($testUserName && is_object($owner) && is_object($userListTest) && $userListTest->getCreatedBy() == $owner->getId()) {
$userList = $userListTest;
}
if ((strlen($requestValues['id']) > 0) || ($requestValues['id'] > 0)) {
$userList = $this->find($requestValues['id']);
}
$userListTestEMail = $this->findOneByEMailAddress($eMailAddress);
if (!$create && !$foundByIDNumber && is_object($userListTestEMail)) {
return;
}
if ((!$foundByIDNumber && is_object($userListTestEMail) && is_object($userList) && $userListTestEMail->getId() != $userList->getId()) || (!$foundByIDNumber && is_object($userListTestEMail) && !is_object($userList))) {
$userList = $userListTestEMail;
return 'That e-mail address is already in use by ' . $userListTestEMail->getUsername();
}
if (!is_object($userList)) {
$userList = new UserList();
$isNew = true;
}
$userList->setUsername($requestValues['username']);
$requestValues['update_password'] = true;
if (!isset($requestValues['password'])) {
$requestValues['password'] = array('password' => '');
}
if (!is_array($requestValues['password'])) {
$requestValues['password'] = array('password' => $requestValues['password']);
}
if (!isset($requestValues['ignore_empty_pwd'])) {
$requestValues['ignore_empty_pwd'] = false;
}
if ((isset($requestValues['password']['password'])) && (strlen($requestValues['password']['password']) > 0)) {
$userList->setPlainPassword($requestValues['password']['password']);
} elseif (!$requestValues['ignore_empty_pwd']) {
$userList->setPlainPassword(microtime());
}
if (!isset($requestValues['is_active'])) {
$requestValues['is_active'] = true;
}
if (!isset($requestValues['is_super_admin'])) {
$requestValues['is_super_admin'] = false;
}
if (!isset($requestValues['deleted'])) {
$requestValues['deleted'] = false;
}
if (!isset($requestValues['e_mail_address_subscribed'])) {
$requestValues['e_mail_address_subscribed'] = false;
}
$userList->setIsActive($requestValues['is_active']);
$userList->setDeleted($requestValues['deleted']);
if ($userList->getGranted('ROLE_SUPER_ADMINISTRATOR')) {
$userList->setIsSuperAdmin(true);
} else {
$userList->setIsSuperAdmin($requestValues['is_super_admin']);
}
if (isset($requestValues['e_mail_address_string'])) {
$userList->setEMailAddressString($requestValues['e_mail_address_string']);
}
if (isset($requestValues['user_tel_no_mobile'])) {
$userList->setMobileNumber($requestValues['user_tel_no_mobile']);
}
if (isset($requestValues['first_name_string'])) {
$userList->setFirstNameString($requestValues['first_name_string']);
}
if (isset($requestValues['last_name_string'])) {
$userList->setLastNameString($requestValues['last_name_string']);
}
if (isset($requestValues['id_number'])) {
$userList->setIdNumber($requestValues['id_number']);
}
if (isset($requestValues['short_code'])) {
$userList->setReferredBy($requestValues['short_code']);
}
if (is_object($owner) && (strlen($userList->getCreatedBy()) <= 0 || $userList->getCreatedBy() == '-')) {
$userList->setCreatedBy($owner->getId());
}
if ($requestValues['update_password']) {
$this->updatePassword($userList);
}
$this->checkRequestValues($userList);
$this->save($userList);
$this->getEm()->refresh($userList);
if (isset($requestValues['bank_id']) && strlen($requestValues['bank_id']) > 0) {
$bankDetail = $userList->getUserBankDetail();
if (!is_object($bankDetail)) {
$bankDetail = new UserBankDetail();
}
$bank = $this->getContainer()->get('banks.manager')->find($requestValues['bank_id']);
if (is_object($bank)) {
$bankDetail->setBank($bank);
$bankDetail->setAccountName($requestValues['account_name']);
$bankDetail->setAccountNumber($requestValues['account_number']);
$bankDetail->setUserList($userList);
$this->getContainer()->get('user_bank_detail.manager')->save($bankDetail);
$userList->setUserBankDetail($bankDetail);
$this->save($userList);
$this->getEm()->refresh($userList);
} else {
return 'User created, but invalid bank details';
}
}
if ($this->getContainer()->get('system_setting.manager')->getSetting('user_register_verify_e_mail', 0) > 0 && $isNew) {
$userList->setIsActive(false);
$this->save($userList);
// $this->sendAccountVerifyMail($userList);
} elseif ($isNew) {
// $this->sendWelcomeMail($userList);
}
$userRoleOnRegister = json_decode($this->getContainer()->get('system_setting.manager')->getSetting('user_register_roles', '[]', true), true);
if (is_array($userRoleOnRegister) && count($userRoleOnRegister) > 0) {
$this->linkAccessLevel($userList, $userRoleOnRegister);
}
// $userFieldUserManager = $this->getContainer()->get('user_field_user.manager');
// $fields = $this->getContainer()->get('user_field.manager')->getSiteListQuery(array('user_list' => $this->getLoggedInUser()))->execute();
// foreach ($fields as $field) {
// $valueIndex = strtolower(Utils::getIdString($field->getFieldName()));
// if (isset($requestValues['user_field_' . $valueIndex]) && strlen($requestValues['user_field_' . $valueIndex]) > 0) {
// $userFieldUserManager->saveOne($field, $userList, $requestValues['user_field_' . $valueIndex]);
// }
// }
return $return;
}
/**
* Check for default values in the values array
*
* @param array $requestValues
* @return array
*/
public function checkRequestValues(UserList &$userList)
{
if (is_null($userList->getFirstNameString())) {
$userList->setFirstNameString('');
}
if (is_null($userList->getLastNameString())) {
$userList->setLastNameString('');
}
if (is_null($userList->isIsSuperAdmin())) {
$userList->setIsSuperAdmin(false);
}
if (is_null($userList->isIsActive())) {
$userList->setIsActive(false);
}
if (is_null($userList->isDeleted())) {
$userList->setDeleted(false);
}
if (is_null($userList->getAlgorithm())) {
$userList->setAlgorithm('sha1');
}
if (is_null($userList->getSalt())) {
$userList->setSalt(uniqid());
}
if (is_null($userList->isEMailAddressSubscribed())) {
$userList->setEMailAddressSubscribed(true);
}
return $userList;
}
/**
* Send a reset password link
*
* @param string $email
* @return array
*/
public function sendResetLink($email)
{
$return = array('success' => false, 'message' => '');
$settingManager = $this->getContainer()->get('system_setting.manager');
$messageManager = $this->getContainer()->get('contact_message.manager');
$recipient = $this->em->getRepository(UserList::class)->findOneByEMailAddress(
array(
'e_mail_address' => $email,
// 'user_type_id' => array(
// $settingManager->getSetting('crm_user_type'),
// $settingManager->getSetting('fe_user_type'),
// )
)
);
if (!is_object($recipient)) {
$return['message'] = 'That email address does not exist. Please try again.';
return $return;
}
if ($recipient->getCreatedAt()->getTimestamp() >= (time() - (60 * 60 * 24))) {
$return['message'] = 'Too soon to reset your password. Please try again later.';
return $return;
}
$sender = $this->em->getRepository(UserList::class)->findOneByEMailAddress(
array(
'e_mail_address' => $messageManager->getSystemEMail(),
'user_type_id' => array(
$settingManager->getSetting('admin_user_type'),
$settingManager->getSetting('crm_user_type'),
$settingManager->getSetting('fe_user_type'),
)
)
);
if (!is_object($sender)) {
$userValues['user_type_id'] = $settingManager->getSetting('crm_user_type');
$userValues['username'] = $messageManager->getSystemEMail();
$userValues['password'] = microtime();
$userValues['first_name_string'] = $settingManager->getSetting('contact_from_name');
$userValues['e_mail_address'] = $messageManager->getSystemEMail();
$error = $this->saveFromRequest($userValues);
if (strlen($error) > 0) {
$return['message'] = $error;
return $return;
}
$sender = $this->em->getRepository(UserList::class)->findOneByEMailAddress(array('e_mail_address' => $messageManager->getSystemEMail()));
if (!is_object($sender)) {
$return['message'] = 'Unable to generate sender. Please try again.';
return $return;
}
}
$messageType = $this->em->getRepository(MessageType::class)->find($settingManager->getSetting('contact_message_type_sys_notif'));
$contactMethod = $this->em->getRepository(ContactMethod::class)->find($settingManager->getSetting('contact_method_e_mail'));
$contactReason = $this->em->getRepository(ContactReason::class)->find($settingManager->getSetting('contact_reason_reset_password'));
$twig = $this->getContainer()->get('service_getter.manager')->getTwig();
$router = $this->getContainer()->get('router');
// $resetPasswordToken = Utils::encryptString('time=' . time() . '&user_list_id=' . $recipient->getId());
// $resetPasswordUrl = 'http://' . $_SERVER['HTTP_HOST'] . $router->generate(
// 'iga_user_reset_pw', array('token' => $resetPasswordToken)
// );
$resetPasswordUrl = 'http://' . $_SERVER['HTTP_HOST'] . $router->generate('iga_user_reset_pw');
$resetCode = random_int(135630, 987342);
$this->getContainer()->get('temp_value.manager')->setTempValue('reset_pwd_' . $resetCode, 'time=' . time() . '&user_list_id=' . $recipient->getId());
$subject = 'Reset password request';
$messageHtml = '<p>Dear ' . $recipient->getFullNameString() . '</p>'
. '<p><a href="' . $resetPasswordUrl . '"><font color="#e51521">Click here to reset your password.</font></a></p>'
. '<p>Enter this code to confirm your password reset: ' . $resetCode . '</p>'
. '<p>If you did not initiate this password reset procedure, please report this event to us immediately.</p>';
$messageText = 'Dear ' . $recipient->getFullNameString() . '' . "\r\n\r\n"
. 'Follow this link to reset your password: '
. $resetPasswordUrl . "\r\n\r\n"
. 'Enter this code to confirm your password reset: ' . $resetCode . "\r\n\r\n"
. 'If you did not initiate this password reset procedure, please report this event to us immediately.' . "\r\n\r\n";
//Send Contact us form data
$messageHTML = $twig->render(
'@ContactBundle/Email/notification.html.twig',
array(
'sender' => $sender,
'contactFromName' => $sender->getFullNameString(),
'contactFromEMail' => $sender->getEMailAddressString(),
'messageText' => $messageHtml,
'hostName' => $_SERVER["HTTP_HOST"],
'sitePath' => 'http://' . $_SERVER['HTTP_HOST']
)
);
$messageText = $twig->render(
'@ContactBundle/Email/notification.txt.twig',
array(
'sender' => $sender,
'contactFromName' => $sender->getFullNameString(),
'contactFromEMail' => $sender->getEMailAddressString(),
'messageText' => $messageText,
'hostName' => $_SERVER["HTTP_HOST"],
'sitePath' => 'http://' . $_SERVER['HTTP_HOST']
)
);
$messageValues = array(
'subject' => $subject,
'messageHTML' => $messageHTML,
'messageText' => $messageText,
'contactMethod' => $contactMethod,
'contactReason' => $contactReason,
'messageType' => $messageType,
);
$msg = $messageManager->saveMessage($sender, array($recipient), $messageValues);
// echo $msg;
// exit;
$return['success'] = true;
return $return;
}
/**
* Check a reset password token
*
* @param string $token
* @return UserList
*/
public function getTokenValues($token)
{
// $OpensslEncryption = new Openssl_EncryptDecrypt();
// $valueString = $OpensslEncryption->decrypt($token);
// $valueString = Utils::decryptString($token);
// var_dump($valueString);
// exit;
$valuesCheck = explode('&', $token);
$values = array();
foreach ($valuesCheck as $valueCheck) {
$oneValue = explode('=', $valueCheck);
$values[$oneValue[0]] = $oneValue[1];
}
if ($values['time'] + (60 * 60 * 24) <= time()) {
//token has expired
$values['user_list'] = null;
return $values;
}
$values['user_list'] = $this->find($values['user_list_id']);
if (!isset($values['allow'])) {
$values['allow'] = 0;
}
return $values;
}
/**
* Check a reset password token
*
* @param string $token
* @return UserList
*/
public function checkToken($token)
{
$values = $this->getTokenValues($token);
return $values['user_list'];
}
/**
* Check a reset password token
*
* @param string $token
* @return UserList
*/
public function checkResetCode($resetCode)
{
$token = $this->getContainer()->get('temp_value.manager')->getTempValue('reset_pwd_' . $resetCode);
$values = $this->getTokenValues($token);
return $values['user_list'];
}
/**
* Get array of users
*
* @param Sites $site
* @param integer $limit
* @return array
*/
public function getArray(Sites $site, $limit = 0)
{
return $this->em->getRepository(UserList::class)->getArray($site, $limit);
}
/**
* Check for a user by e-mail address and return it or create it
*
* @param array $requestValues
* @return array
*/
public function findOrCreate($emailAddress, $firstName, $lastName, UserList $referredBy = null)
{
$userList = $this->findOneBy(array('username' => $emailAddress));
if (!is_object($userList)) {
$userList = $this->findOneByEMailAddress($emailAddress);
}
if (!is_object($userList)) {
$userList = new UserList();
$userList->setPassword(microtime());
if (is_object($referredBy)) {
$userList->setReferredBy($referredBy->getId());
}
}
$userList->setUsername($emailAddress);
$userList->setFirstNameString($firstName);
$userList->setLastNameString($lastName);
$this->setUserEMailAddress($userList, array('e_mail_address' => $emailAddress));
$this->checkRequestValues($userList);
$this->save($userList);
return $userList;
}
/**
* Log a user in automatically
*
* @param UserList $userList
* @return void
*/
public function doLogin(Request &$request, UserList &$userList, $forceLogin = false)
{
if (!$forceLogin) {
if (!in_array($userList->getUserTypes()->getId(), array(
$this->getContainer()->get('user_types.manager')->getFrontendUserTypeId()->getId(),
$this->getContainer()->get('user_types.manager')->getAdminUserTypeId()->getId(),
))) {
$userList->setUserTypes($this->getContainer()->get('user_types.manager')->getFrontendUserType());
}
if ($userList->getIsActive()) {
throw new \Exception('You are already registered on the site. Please log in.');
}
$userList->setIsActive(true);
$userList->setDeleted(false);
$this->save($userList);
}
$token = new UsernamePasswordToken($userList, 'secured_area', $userList->getRoles());
$this->securityContext->setToken($token);
$this->getContainer()->get('session')->set('_security_secured_area', serialize($token));
$event = new InteractiveLoginEvent($request, $token);
$this->getContainer()->get("event_dispatcher")->dispatch($event, "security.interactive_login");
// $testUser = $this->getLoggedInUser();
// echo $testUser->getUsername() . ' - ' . $testUser->getId() . '<br />';
// var_dump($testUser->getRoles());
// exit;
}
/**
* Import users from a spreadsheet
*
* @param array $conf
* @return void
*/
public function importUsers($conf = array())
{
$this->getEm()->getConnection()->getConfiguration()->setSQLLogger(null);
try {
if (!isset($conf['fieldsToColumns']) || !isset($conf['fileId']) || !isset($conf['ownerId']) || !isset($conf['companyId']) || !isset($conf['userTypeId'])) {
throw new \Exception('Not all parameters specified: ' . json_encode($conf));
}
$file = $this->getContainer()->get('files.manager')->find($conf['fileId']);
if (!is_object($file)) {
throw new \Exception('Invalid file: ' . $conf['fileId']);
}
$owner = $this->find($conf['ownerId']);
if (!is_object($owner)) {
throw new \Exception('Invalid owner: ' . $conf['ownerId']);
}
$company = $this->getContainer()->get('companies.manager')->find($conf['companyId']);
if (!is_object($company)) {
// throw new \Exception('Invalid company: ' . $conf['companyId']);
}
$userType = $this->getContainer()->get('user_types.manager')->find($conf['userTypeId']);
if (!is_object($userType)) {
throw new \Exception('Invalid user type: ' . $conf['userTypeId']);
}
$fields = $this->getContainer()->get('user_field.manager')->getSiteListQuery(array('user_list' => $this->getLoggedInUser()))->execute();
$userFieldUserManager = $this->getContainer()->get('user_field_user.manager');
$filePath = "/tmp/";
$fileContent = $file->getFileDataString();
$this->getContainer()->get('files.manager')->saveFromStringToPath($fileContent, $file->getOriginalFileName(), $filePath);
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($filePath . $file->getOriginalFileName());
$rows = $spreadsheet->getActiveSheet()->getRowIterator(2, 1E6);
$rowFeedback = array();
$rowCnt = 2;
$emptyCnt = 0;
foreach ($rows as $row) {
$rowData = array();
$cellNo = 0;
foreach ($row->getCellIterator() as $cell) {
if (strlen($cell) > 0) {
$rowData[$cellNo] = $cell->getValue();
}
$cellNo++;
} //foreach cell
// echo count($rowData) . "\r\n";
if (count($rowData) > 0) {
$emptyCnt = 0;
$rowFeedback[$rowCnt] = 'Success';
$userValues = array('user_type_id' => $userType, 'username' => '', 'first_name_string' => '', 'last_name_string' => '');
if (isset($rowData[$conf['fieldsToColumns']['first_name']]) && strlen($rowData[$conf['fieldsToColumns']['first_name']]) > 0) {
$userValues['first_name_string'] = $rowData[$conf['fieldsToColumns']['first_name']];
}
if (isset($rowData[$conf['fieldsToColumns']['last_name']]) && strlen($rowData[$conf['fieldsToColumns']['last_name']]) > 0) {
$userValues['last_name_string'] = $rowData[$conf['fieldsToColumns']['last_name']];
}
if (isset($rowData[$conf['fieldsToColumns']['username']]) && strlen($rowData[$conf['fieldsToColumns']['username']]) > 0) {
$userValues['username'] = $rowData[$conf['fieldsToColumns']['username']];
}
if (isset($rowData[$conf['fieldsToColumns']['e_mail']]) && strlen($rowData[$conf['fieldsToColumns']['e_mail']]) > 0) {
$userValues['e_mail_address_string'] = $rowData[$conf['fieldsToColumns']['e_mail']];
$userValues['e_mail_address_subscribed'] = true;
}
if (isset($rowData[$conf['fieldsToColumns']['mobile_number']]) && strlen($rowData[$conf['fieldsToColumns']['mobile_number']]) > 0) {
$userValues['user_tel_no_mobile'] = array(
'tel_fax_number' => $rowData[$conf['fieldsToColumns']['mobile_number']],
'countries' => null,
'area_code' => '',
'extension' => '',
'opted_in' => true
);
}
if (!isset($userValues['username']) || strlen($userValues['username']) <= 0) {
if (isset($userValues['user_tel_no_mobile'])) {
$userValues['username'] = $userValues['user_tel_no_mobile'];
}
if (isset($userValues['e_mail_address_string'])) {
$userValues['username'] = $userValues['e_mail_address_string'];
} elseif (isset($userValues['user_tel_no_mobile'])) {
$userValues['username'] = $userValues['user_tel_no_mobile']['tel_fax_number'];
} elseif (isset($userValues['first_name_string'])) {
$userValues['username'] = str_replace(' ', '', strtolower($userValues['first_name_string']));
}
}
$userList = null;
$errorMsg = $this->saveFromRequest($userValues, $userList, $owner);
if (!empty($errorMsg) && strpos($errorMsg, 'already in use') <= 0) {
$rowFeedback[$rowCnt] = 'Failure: ' . $errorMsg;
echo 'Failure: ' . $errorMsg . "\r\n";
} elseif (is_object($company) && is_object($userList)) {
$this->getContainer()->get('companies.manager')->linkUser($company, $userList);
$this->getContainer()->get('user_contact.manager')->linkUser($owner, $userList, $company);
}
// $this->getContainer()->get('error_log.manager')->info('Import row data: ' . print_r($rowData, true) . ' - ' . is_object($userList));
if (isset($rowData[$conf['fieldsToColumns']['group']]) && !empty($rowData[$conf['fieldsToColumns']['group']]) && is_object($userList)) {
$userGroup = null;
// $this->getContainer()->get('error_log.manager')->info('Link user to group: ' . $rowData[$conf['fieldsToColumns']['group']]);
// echo $rowData[$conf['fieldsToColumns']['group']] . "\r\n";
$this->getContainer()->get('user_group.manager')->saveFromRequest(array('group_name' => $rowData[$conf['fieldsToColumns']['group']]), $userGroup, $owner);
$this->getContainer()->get('user_group.manager')->linkUser($userGroup, $userList, $owner);
}
// unset($userValues['user_type_id']);
// var_dump($userValues);
// var_dump($rowData);
// echo $userValues['username'] . ' - ' . $userValues['first_name_string'] . ' ' . $userValues['last_name_string'] . "\r\n";
// exit;
if (is_object($userList)) {
foreach ($fields as $field) {
$valueIndex = strtolower(Utils::getIdString($field->getFieldName()));
if (isset($conf['fieldsToColumns']['user_field_' . $valueIndex]) && isset($rowData[$conf['fieldsToColumns']['user_field_' . $valueIndex]]) && strlen($rowData[$conf['fieldsToColumns']['user_field_' . $valueIndex]]) > 0) {
$userFieldUserManager->saveOne($field, $userList, $rowData[$conf['fieldsToColumns']['user_field_' . $valueIndex]]);
}
} //foreach field
}
}
$emptyCnt++;
$rowCnt++;
if ($emptyCnt > 100) {
// echo "Too many empty rows \r\n";
break;
}
} //foreach
// echo "Import done \r\n";
$subject = 'Your import is complete';
$message = '<p>Dear ' . $owner->getFullNameString() . '</p>'
. '<p>This is the result of the import:</p>'
. '<p>';
foreach ($rowFeedback as $rowNum => $messageString) {
$message .= 'Row ' . $rowNum . ': ' . $messageString . '<br />';
}
$message .= '</p>';
$this->getContainer()->get('contact_message.manager')->sendNotificationMail($owner, $subject, $message);
} catch (\Exception $ex) {
$message = $ex->getMessage() . ' - ' . $ex->getTraceAsString();
// echo $message . "\r\n";
$this->getContainer()->get('error_log.manager')->error('Error on user import - ' . $message);
}
}
/**
* Load user list data
*
* @param UserList $userList
* @return void
*/
public function loadUser(UserList &$userList)
{
if (count($userList->getCompanyIds()) <= 0) {
$companyIds = array();
$userListIDs = $this->getEm()->getRepository(UserList::class)->getCompanyIds($userList);
foreach ($userListIDs as $userListID) {
$companyIds[] = $userListID['id'];
}
// var_dump($companyIds);
// echo '<br />';
$userList->setCompanyIds($companyIds);
}
}
/**
* Check if owner can edit user
*
* @param UserList $userList
* @param UserList $owner
* @return boolean
*/
public function canEdit(UserList $userList, UserList $owner)
{
if ($owner->getGranted('ROLE_SUPER_ADMINISTRATOR')) {
return true;
}
if ($userList->getId() == $owner->getId()) {
return true;
}
if ($userList->getCreatedBy() == $owner->getId() || strlen($userList->getId()) <= 0) {
return true;
}
$agentIds = array();
// echo $owner;
foreach ($owner->getCompanies() as $company) {
$users = $this->findBySearchCompanyForSelect('', $company->getId());
// echo count($users) . '<br />';
foreach ($users as $userName => $userId) {
// echo 'checking ' . $userName . '<br />';
if ($userId == $userList->getId()) {
return true;
}
}
}
// exit;
return false;
}
/**
* Check if a user is linked to an access level.
*
* @param Companies $company
* @param UserList $userList
*/
public function isLinked(UserList &$userList, AccessLevel $accessLevel)
{
if (!is_iterable($userList->getAccessLevel())) {
return false;
}
foreach ($userList->getAccessLevel() as $testAccessLevel) {
if ($testAccessLevel->getId() == $accessLevel->getId()) {
return true;
}
}
return false;
}
/**
* Link a user to access level(s)
*
* @param UserList $userList
* @param array $accessLevelIds
*/
public function linkAccessLevel(UserList &$userList, $accessLevelIds)
{
$accessLevelManager = $this->getContainer()->get('access_level.manager');
foreach ($accessLevelIds as $accessLevelId) {
$accessLevel = $accessLevelManager->find($accessLevelId);
if (!$this->isLinked($userList, $accessLevel)) {
$userList->addAccessLevel($accessLevel);
$this->save($userList);
}
}
}
/**
* Get user's company
*
* @param UserList $userList
* @return Companies|null
*/
public function getCompany(UserList $userList)
{
foreach ($userList->getCompanies() as $company) {
return $company;
}
return null;
}
/**
* Get user's company
*
* @param UserList $userList
* @return Companies|null
*/
public function getSiteAdmins()
{
$adminUserType = $this->getContainer()->get('user_types.manager')->find($this->getContainer()->get('system_setting.manager')->getSetting('admin_user_type'));
$admins = $this->findBy(array('user_types' => $adminUserType));
$return = array();
foreach ($admins as $admin) {
if (is_object($admin->getUserEMailAddress()) && $admin->getUserEMailAddress()->getSubscribed()) {
$return[] = $admin;
}
} //foreach
return $return;
}
/**
* Get user's company
*
* @param UserList $userList
* @return Companies|null
*/
public function getAllFrontendUsers(Companies $company = null)
{
$admins = $this->findByAccessLevels(array($this->getContainer()->get('access_level.manager')->getWebSiteAccessLevel()), array('company' => $company));
$return = array();
foreach ($admins as $admin) {
$return[] = $admin;
} //foreach
return $return;
}
/**
* Get user's company
*
* @param UserList $userList
* @return Companies|null
*/
public function getAdmins()
{
$admins = $this->findByAccessLevels(array($this->getContainer()->get('access_level.manager')->getAdminAccessLevelId()));
$return = array();
foreach ($admins as $admin) {
if (is_object($admin->getUserEMailAddress()) && $admin->getUserEMailAddress()->getSubscribed()) {
$return[] = $admin;
}
} //foreach
return $return;
}
/**
* Send a reset password link
*
* @param string $email
* @return array
*/
public function notifyAdmins(UserList $userList, $registered = true)
{
$return = array('success' => false, 'message' => '');
$settingManager = $this->getContainer()->get('system_setting.manager');
$messageManager = $this->getContainer()->get('contact_message.manager');
$recipients = $this->getSiteAdmins();
if (count($recipients) <= 0) {
return;
}
$messageType = $this->em->getRepository(MessageType::class)->find($settingManager->getSetting('contact_message_type_sys_notif'));
$contactMethod = $this->em->getRepository(ContactMethod::class)->find($settingManager->getSetting('contact_method_e_mail'));
$contactReason = $this->em->getRepository(ContactReason::class)->find($settingManager->getSetting('contact_reason_type_sys_notif'));
$twig = $this->getContainer()->get('twig');
$router = $this->getContainer()->get('router');
$bidderRegister = $settingManager->getSetting('auction_bidder_register', 0);
$subject = $messageManager->getSystemName() . ' - User registered notification';
$messageHtml = '<p>To whom it may concern</p>'
. '<p>User ' . $userList->getUsername() . ' has registered</p>';
$messageText = 'To whom it may concern' . "\r\n\r\n"
. 'User ' . $userList->getUsername() . ' has registered' . "\r\n\r\n";
if (!$registered) {
$subject = $messageManager->getSystemName() . ' - User updated notification';
$messageHtml = '<p>To whom it may concern</p>'
. '<p>User ' . $userList->getUsername() . ' has updated details</p>';
$messageText = 'To whom it may concern' . "\r\n\r\n"
. 'User ' . $userList->getUsername() . ' has updated details' . "\r\n\r\n";
}
if ($bidderRegister > 0 && strlen($userList->getIdNumber()) > 0) {
$messageHtml .= '<p>The user has requested to be registered as a bidder</p>';
$messageText .= 'The user has requested to be registered as a bidder' . "\r\n\r\n";
}
$messageHtml .= '<p><a href = "' . $router->generate('users_edit', array('id' => $userList->getId(), 'user_type_id' => $settingManager->getSetting('fe_user_type')), UrlGeneratorInterface::ABSOLUTE_URL) . '">Click here to edit the user\'s profile</a></p>';
$messageText .= 'Follow this URL to the user\'s profile: ' . $router->generate('users_edit', array('id' => $userList->getId(), 'user_type_id' => $settingManager->getSetting('fe_user_type')), UrlGeneratorInterface::ABSOLUTE_URL) . "\r\n\r\n";
//Send Contact us form data
$messageHTML = $twig->render(
'@ContactBundle/Email/notification.html.twig',
array(
'sender' => $userList,
'contactFromName' => $userList->getFullNameString(),
'contactFromEMail' => $userList->getEMailAddressString(),
'messageText' => $messageHtml,
'hostName' => $_SERVER["HTTP_HOST"],
'sitePath' => 'http://' . $_SERVER['HTTP_HOST'],
)
);
$messageText = $twig->render(
'@ContactBundle/Email/notification.txt.twig',
array(
'sender' => $userList,
'contactFromName' => $userList->getFullNameString(),
'contactFromEMail' => $userList->getEMailAddressString(),
'messageText' => $messageText,
'hostName' => $_SERVER["HTTP_HOST"],
'sitePath' => 'http://' . $_SERVER['HTTP_HOST'],
)
);
$messageValues = array(
'subject' => $subject,
'messageHTML' => $messageHTML,
'messageText' => $messageText,
'contactMethod' => $contactMethod,
'contactReason' => $contactReason,
'messageType' => $messageType,
);
$messageManager->saveMessage($userList, $recipients, $messageValues);
$return['success'] = true;
return $return;
}
/**
* Send a reset password link
*
* @param string $email
* @return array
*/
public function sendAccessLevelNotify(UserList $userList, $message = '')
{
$return = array('success' => false, 'message' => '');
$settingManager = $this->getContainer()->get('system_setting.manager');
$messageManager = $this->getContainer()->get('contact_message.manager');
$messageType = $this->em->getRepository(MessageType::class)->find($settingManager->getSetting('contact_message_type_sys_notif'));
$contactMethod = $this->em->getRepository(ContactMethod::class)->find($settingManager->getSetting('contact_method_e_mail'));
$contactReason = $this->em->getRepository(ContactReason::class)->find($settingManager->getSetting('contact_reason_type_sys_notif'));
$twig = $this->getContainer()->get('twig');
$sender = $messageManager->getSystemUser();
$subject = 'Your access details have been updated on ' . $messageManager->getSystemName();
$messageHtml = '<p>Dear ' . $userList->getFirstNameString() . '</p>'
. '<p>Your access details for user ' . $userList->getUsername() . ' using this e-mail address have been updated by the web site administrators. Please log out and log back in for the changes to take effect.</p>';
$messageText = 'Dear ' . $userList->getFirstNameString() . "\r\n\r\n"
. 'Your access details for user ' . $userList->getUsername() . ' using this e-mail address have been updated by the web site administrators. Please log out and log back in for the changes to take effect.' . "\r\n\r\n";
if (strlen($message) > 0) {
$messageHtml .= '<p>The following message accompanied the update:</p>'
. '<p>' . $message . '</p>';
$messageText .= 'The following message accompanied the update:' . "\r\n\r\n"
. $message . "\r\n\r\n";
}
//Send Contact us form data
$messageHTML = $twig->render(
'@ContactBundle/Email/notification.html.twig',
array(
'sender' => $sender,
'contactFromName' => $sender->getFullNameString(),
'contactFromEMail' => $sender->getEMailAddressString(),
'messageText' => $messageHtml,
'hostName' => $_SERVER["HTTP_HOST"],
'sitePath' => 'http://' . $_SERVER['HTTP_HOST']
)
);
$messageText = $twig->render(
'@ContactBundle/Email/notification.txt.twig',
array(
'sender' => $sender,
'contactFromName' => $sender->getFullNameString(),
'contactFromEMail' => $sender->getEMailAddressString(),
'messageText' => $messageText,
'hostName' => $_SERVER["HTTP_HOST"],
'sitePath' => 'http://' . $_SERVER['HTTP_HOST']
)
);
$messageValues = array(
'subject' => $subject,
'messageHTML' => $messageHTML,
'messageText' => $messageText,
'contactMethod' => $contactMethod,
'contactReason' => $contactReason,
'messageType' => $messageType,
);
$messageManager->saveMessage($sender, array($userList), $messageValues);
$return['success'] = true;
return $return;
}
/**
* Send a reset password link
*
* @param string $email
* @return array
*/
public function sendRejectDocNotify(UserList $userList)
{
if (strlen($userList->getIdDocFileId()) > 0) {
$this->getContainer()->get('files.manager')->removeById($userList->getIdDocFileId());
$userList->setIdDocFileId('');
}
$return = array('success' => false, 'message' => '');
$settingManager = $this->getContainer()->get('system_setting.manager');
$messageManager = $this->getContainer()->get('contact_message.manager');
$messageType = $this->em->getRepository(MessageType::class)->find($settingManager->getSetting('contact_message_type_sys_notif'));
$contactMethod = $this->em->getRepository(ContactMethod::class)->find($settingManager->getSetting('contact_method_e_mail'));
$contactReason = $this->em->getRepository(ContactReason::class)->find($settingManager->getSetting('contact_reason_type_sys_notif'));
$twig = $this->getContainer()->get('twig');
$sender = $messageManager->getSystemUser();
$subject = 'Your ID document has been rejected by ' . $messageManager->getSystemName();
$messageHtml = '<p>Dear ' . $userList->getFirstNameString() . '</p>'
. '<p>The ID document you uploaded has been rejected by the web site administrators. Please log in and upload the correct documents on the My Details screen.</p>';
$messageText = 'Dear ' . $userList->getFirstNameString() . "\r\n\r\n"
. 'The ID document you uploaded has been rejected by the web site administrators. Please log in and upload the correct documents on the My Details screen.' . "\r\n\r\n";
//Send Contact us form data
$messageHTML = $twig->render(
'@ContactBundle/Email/notification.html.twig',
array(
'sender' => $sender,
'contactFromName' => $sender->getFullNameString(),
'contactFromEMail' => $sender->getEMailAddressString(),
'messageText' => $messageHtml,
'hostName' => $_SERVER["HTTP_HOST"],
'sitePath' => 'http://' . $_SERVER['HTTP_HOST']
)
);
$messageText = $twig->render(
'@ContactBundle/Email/notification.txt.twig',
array(
'sender' => $sender,
'contactFromName' => $sender->getFullNameString(),
'contactFromEMail' => $sender->getEMailAddressString(),
'messageText' => $messageText,
'hostName' => $_SERVER["HTTP_HOST"],
'sitePath' => 'http://' . $_SERVER['HTTP_HOST']
)
);
$messageValues = array(
'subject' => $subject,
'messageHTML' => $messageHTML,
'messageText' => $messageText,
'contactMethod' => $contactMethod,
'contactReason' => $contactReason,
'messageType' => $messageType,
);
$messageManager->saveMessage($sender, array($userList), $messageValues);
$return['success'] = true;
return $return;
}
/**
* Unsubsribe user from newsletter
*
* @param string $unsub
* @return string
*/
public function unsubscribe($unsub)
{
$OpensslEncryption = new Openssl_EncryptDecrypt();
$userListId = $OpensslEncryption->decrypt($unsub);
$userList = $this->find($userListId);
if (!is_object($userList)) {
return 'Ths user does not exist in our database';
}
$eMailAddress = $userList->getUserEMailAddress();
$eMailAddress->setSubscribed(false);
$this->getContainer()->get('user_e_mail_address.manager')->save($eMailAddress);
$mobile = $userList->getUserTelNoMobile();
$mobile->setOptedIn(false);
$this->getContainer()->get('user_tel_no.manager')->save($eMailAddress);
}
/**
* Send an account verify link
*
* @param UserList $userList
* @return null
*/
public function sendAccountVerifyMail(UserList $userList)
{
$settingManager = $this->getContainer()->get('system_setting.manager');
$messageManager = $this->getContainer()->get('contact_message.manager');
$messageType = $this->em->getRepository(MessageType::class)->find($settingManager->getSetting('contact_message_type_sys_notif'));
$contactMethod = $this->em->getRepository(ContactMethod::class)->find($settingManager->getSetting('contact_method_e_mail'));
$contactReason = $this->em->getRepository(ContactReason::class)->find($settingManager->getSetting('contact_reason_type_sys_notif'));
$twig = $this->getContainer()->get('twig');
$router = $this->getContainer()->get('router');
$sender = $messageManager->getSystemUser();
$verifyToken = Utils::encryptString('time=' . time() . '&user_list_id=' . $userList->getId());
$resetPasswordUrl = 'http://' . $_SERVER['HTTP_HOST'] . $router->generate(
'login',
array('token_verify_e_mail' => $verifyToken)
);
$subject = 'Please verify your e-mail address registered on ' . $messageManager->getSystemName();
$messageHtml = '<p>Dear ' . $userList->getFirstNameString() . '</p>'
. '<p>Please click here to verify your e-mail address: <a href="' . $resetPasswordUrl . '">' . $userList->getEMailAddressString() . '</a>.</p>';
$messageText = 'Dear ' . $userList->getFirstNameString() . "\r\n\r\n"
. 'Please click here to verify your e-mail address, ' . $userList->getEMailAddressString() . ': ' . $resetPasswordUrl . "\r\n\r\n";
//Send Contact us form data
$messageHTML = $twig->render(
'@ContactBundle/Email/notification.html.twig',
array(
'sender' => $sender,
'contactFromName' => $sender->getFullNameString(),
'contactFromEMail' => $sender->getEMailAddressString(),
'messageText' => $messageHtml,
'hostName' => $_SERVER["HTTP_HOST"],
'sitePath' => 'http://' . $_SERVER['HTTP_HOST'],
)
);
$messageText = $twig->render(
'@ContactBundle/Email/notification.txt.twig',
array(
'sender' => $sender,
'contactFromName' => $sender->getFullNameString(),
'contactFromEMail' => $sender->getEMailAddressString(),
'messageText' => $messageText,
'hostName' => $_SERVER["HTTP_HOST"],
'sitePath' => 'http://' . $_SERVER['HTTP_HOST'],
)
);
$messageValues = array(
'subject' => $subject,
'messageHTML' => $messageHTML,
'messageText' => $messageText,
'contactMethod' => $contactMethod,
'contactReason' => $contactReason,
'messageType' => $messageType,
);
$messageManager->saveMessage($sender, array($userList), $messageValues);
$return['success'] = true;
return $return;
}
/**
* Send an account verify link
*
* @param UserList $userList
* @return null
*/
public function sendWelcomeMail(UserList $userList)
{
$settingManager = $this->getContainer()->get('system_setting.manager');
$messageManager = $this->getContainer()->get('contact_message.manager');
$messageType = $this->em->getRepository(MessageType::class)->find($settingManager->getSetting('contact_message_type_sys_notif'));
$contactMethod = $this->em->getRepository(ContactMethod::class)->find($settingManager->getSetting('contact_method_e_mail'));
$contactReason = $this->em->getRepository(ContactReason::class)->find($settingManager->getSetting('contact_reason_type_sys_notif'));
$sender = $messageManager->getSystemUser();
$subject = 'Thank you for your registration on ' . $messageManager->getSystemName();
$messageHtml = '<p>Dear ' . $userList->getFirstNameString() . '</p>'
. '<p>Thank you for taking the time to register your profile on our web site.</p>'
. '<p>Your username is: ' . $userList->getUsername() . '</p>';
$messageText = 'Dear ' . $userList->getFirstNameString() . "\r\n\r\n"
. 'Thank you for taking the time to register your profile on our web site.' . "\r\n\r\n"
. 'Your username is: ' . $userList->getUsername() . "\r\n\r\n";
$twig = $this->getContainer()->get('twig');
//Send Contact us form data
$messageHTML = $twig->render(
'@ContactBundle/Email/notification.html.twig',
array(
'sender' => $sender,
'contactFromName' => $sender->getFullNameString(),
'contactFromEMail' => $sender->getEMailAddressString(),
'messageText' => $messageHtml,
'hostName' => $_SERVER["HTTP_HOST"],
'sitePath' => 'http://' . $_SERVER['HTTP_HOST'],
)
);
$messageText = $twig->render(
'@ContactBundle/Email/notification.txt.twig',
array(
'sender' => $sender,
'contactFromName' => $sender->getFullNameString(),
'contactFromEMail' => $sender->getEMailAddressString(),
'messageText' => $messageText,
'hostName' => $_SERVER["HTTP_HOST"],
'sitePath' => 'http://' . $_SERVER['HTTP_HOST'],
)
);
$messageValues = array(
'subject' => $subject,
'messageHTML' => $messageHTML,
'messageText' => $messageText,
'contactMethod' => $contactMethod,
'contactReason' => $contactReason,
'messageType' => $messageType,
);
$messageManager->saveMessage($sender, array($userList), $messageValues);
$return['success'] = true;
return $return;
}
/**
* Check a e-mail verification token
*
* @param string $token
* @return UserList
*/
public function verifyEMail($token)
{
$OpensslEncryption = new Openssl_EncryptDecrypt();
$valueString = $OpensslEncryption->decrypt($token);
$valuesCheck = explode('&', $valueString);
$values = array();
foreach ($valuesCheck as $valueCheck) {
$oneValue = explode('=', $valueCheck);
$values[$oneValue[0]] = $oneValue[1];
}
if ($values['time'] + (60 * 60 * 24) <= time()) {
//token has expired
return false;
}
$userList = $this->getContainer()->get('user_list.manager')->find($values['user_list_id']);
if (is_object($userList)) {
$userList->setIsActive(true);
$this->save($userList);
return true;
}
return false;
}
}