<?php
namespace App\Service;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use App\Entity\UserEntity;
Class AuthService {
private $em;
private $container;
public function __construct(EntityManagerInterface $em, ContainerInterface $container) {
$this->em = $em;
$this->container = $container;
}
// Original PHP code by Chirp Internet: www.chirp.com.au
public function better_crypt($input, $rounds = 7)
{
$salt = "";
$salt_chars = array_merge(range('A','Z'), range('a','z'), range(0,9));
for($i=0; $i < 22; $i++) {
$salt .= $salt_chars[array_rand($salt_chars)];
}
return crypt($input, sprintf('$2a$%02d$', $rounds) . $salt);
}
/**
* Checks if the user is logged in or not
*/
public function isLoggedIn($requestUri = true) {
$session = $this->container->get('session');
if($session->has('userData')) {
return true;
} else {
if($requestUri) {
$req_uri = $_SERVER['REQUEST_URI'];
if($req_uri !== $this->container->get('router')->generate('home_login') &&
$req_uri !== $this->container->get('router')->generate('home_logout') &&
$req_uri !== $this->container->get('router')->generate('home_forgot_password') &&
//$req_uri !== $this->container->get('router')->generate('auth_forgot_password_confirmation') &&
strpos($req_uri, 'ajax') === false) $session->set('req_uri', $req_uri);
}
return false;
}
}
/**
* Checks if the user has the ess
*/
public function isUserHasAccesses($accessDescriptions, $hasErrorMsg=true, $matchCtr=false) {
$session = $this->container->get('session');
//$session->save(); // This will automatically call session_write_close() to prevent session lock timeout error
$userData = $session->get('userData');
if($userData['type'] === 'Super Admin') {
return true;
} else {
if($matchCtr) {
$accessCtr = 0;
foreach($accessDescriptions as $accessDescription) if(in_array($accessDescription, $userData['accesses'])) $accessCtr++;
$hasAccess = count($accessDescriptions) === $accessCtr;
if(!$hasAccess) {
if($hasErrorMsg) {
$session->getFlashBag()->set('error_messages', "You don't have the right to access the page. Please contact the administrator.");
}
return false;
} else {
return true;
}
} else {
foreach($accessDescriptions as $accessDescription) if(in_array($accessDescription, $userData['accesses'])) return true;
if($hasErrorMsg) $session->getFlashBag()->set('error_messages', "You don't have the right to access the page. Please contact the administrator.");
return false;
}
}
}
/**
* Redirects to login page
*/
public function redirectToLogin() {
return new RedirectResponse($this->container->get('router')->generate('home_login'), 302);
}
/**
* Redirects to registration page
*/
public function redirectToRegistration() {
return new RedirectResponse($this->container->get('router')->generate('frontend_registration'), 302);
}
/**
* Redirects to home page
*/
public function redirectToHome() {
return new RedirectResponse($this->container->get('router')->generate('admin'), 302);
}
/**
* Get user
*/
public function getUser() {
$userData = $this->container->get('session')->get('userData');
return $this->em->getRepository(UserEntity::class)->find($userData['id']);
}
/**
* Get user types
*/
public function getUserTypes() {
return array(
'Admin',
'Staff',
'Agent',
'Public',
'Guest',
);
}
public function getAccesses() {
return array(
array('label' => 'Admin', 'description' => 'Admin', 'children' => array(
array('label' => 'Manage Users', 'description' => 'Admin Users', 'children' => array(
array('label' => 'User', 'description' => 'Admin User', 'children' => array(
array('label' => 'New', 'description' => 'Admin User New'),
array('label' => 'Update', 'description' => 'Admin User Update'),
array('label' => 'Delete', 'description' => 'Admin User Delete'),
)),
)),
array('label' => 'Manage Property Listing', 'description' => 'Admin Property Listing', 'children' => array(
array('label' => 'Export to Excel', 'description' => 'Admin Property Listing Export To Excel'),
array('label' => 'New', 'description' => 'Admin Property Listing New'),
array('label' => 'Update', 'description' => 'Admin Property Listing Update'),
array('label' => 'Delete', 'description' => 'Admin Property Listing Delete'),
array('label' => 'Remarks', 'description' => 'Admin Property Listing Remark'),
)),
array('label' => 'Manage Deleted Property Listing', 'description' => 'Admin Deleted Property Listing'),
array('label' => 'Manage Search', 'description' => 'Admin Search'),
array('label' => 'Manage Inquiry Record', 'description' => 'Admin Inquiry Record'),
array('label' => 'Inquiry', 'description' => 'Admin Inquiry'),
array('label' => 'Print', 'description' => 'Admin Print'),
array('label' => 'Manage CMS', 'description' => 'Admin Cms', 'children' => array(
array('label' => 'Manage Property Listing Type', 'description' => 'Admin Property Listing Type', 'children' => array(
array('label' => 'New', 'description' => 'Admin Property Listing Type New'),
array('label' => 'Update', 'description' => 'Admin Property Listing Type Update'),
array('label' => 'Delete', 'description' => 'Admin Property Listing Type Delete'),
)),
array('label' => 'Manage Property ID', 'description' => 'Admin Property ID', 'children' => array(
array('label' => 'New', 'description' => 'Admin Property ID New'),
array('label' => 'Update', 'description' => 'Admin Property ID Update'),
array('label' => 'Delete', 'description' => 'Admin Property ID Delete'),
)),
array('label' => 'Manage Building', 'description' => 'Admin Building', 'children' => array(
array('label' => 'New', 'description' => 'Admin Building New'),
array('label' => 'Update', 'description' => 'Admin Building Update'),
array('label' => 'Delete', 'description' => 'Admin Building Delete'),
)),
array('label' => 'Manage City', 'description' => 'Admin City', 'children' => array(
array('label' => 'New', 'description' => 'Admin City New'),
array('label' => 'Update', 'description' => 'Admin City Update'),
array('label' => 'Delete', 'description' => 'Admin City Delete'),
)),
array('label' => 'Manage Tower', 'description' => 'Admin Tower', 'children' => array(
array('label' => 'New', 'description' => 'Admin Tower New'),
array('label' => 'Update', 'description' => 'Admin Tower Update'),
array('label' => 'Delete', 'description' => 'Admin Tower Delete'),
)),
array('label' => 'Manage Parking Space', 'description' => 'Admin Parking Space', 'children' => array(
array('label' => 'New', 'description' => 'Admin Parking Space New'),
array('label' => 'Update', 'description' => 'Admin Parking Space Update'),
array('label' => 'Delete', 'description' => 'Admin Parking Space Delete'),
)),
array('label' => 'Manage Contact Type', 'description' => 'Admin Contact Type', 'children' => array(
array('label' => 'New', 'description' => 'Admin Contact Type New'),
array('label' => 'Update', 'description' => 'Admin Contact Type Update'),
array('label' => 'Delete', 'description' => 'Admin Contact Type Delete'),
)),
array('label' => 'Manage Remark', 'description' => 'Admin Remark', 'children' => array(
array('label' => 'New', 'description' => 'Admin Remark New'),
array('label' => 'Update', 'description' => 'Admin Remark Update'),
array('label' => 'Delete', 'description' => 'Admin Remark Delete'),
)),
array('label' => 'Manage Title', 'description' => 'Admin Title', 'children' => array(
array('label' => 'New', 'description' => 'Admin Title New'),
array('label' => 'Update', 'description' => 'Admin Title Update'),
array('label' => 'Delete', 'description' => 'Admin Title Delete'),
)),
array('label' => 'Manage Type', 'description' => 'Admin Type', 'children' => array(
array('label' => 'New', 'description' => 'Admin Type New'),
array('label' => 'Update', 'description' => 'Admin Type Update'),
array('label' => 'Delete', 'description' => 'Admin Type Delete'),
)),
array('label' => 'Manage Furnishing', 'description' => 'Admin Furnished', 'children' => array(
array('label' => 'New', 'description' => 'Admin Furnished New'),
array('label' => 'Update', 'description' => 'Admin Furnished Update'),
array('label' => 'Delete', 'description' => 'Admin Furnished Delete'),
)),
array('label' => 'Manage Status', 'description' => 'Admin Status', 'children' => array(
array('label' => 'New', 'description' => 'Admin Status New'),
array('label' => 'Update', 'description' => 'Admin Status Update'),
array('label' => 'Delete', 'description' => 'Admin Status Delete'),
)),
array('label' => 'Manage Ownership', 'description' => 'Admin Ownership', 'children' => array(
array('label' => 'New', 'description' => 'Admin Ownership New'),
array('label' => 'Update', 'description' => 'Admin Ownership Update'),
array('label' => 'Delete', 'description' => 'Admin Ownership Delete'),
)),
array('label' => 'Manage Barangay', 'description' => 'Admin Barangay', 'children' => array(
array('label' => 'New', 'description' => 'Admin Barangay New'),
array('label' => 'Update', 'description' => 'Admin Barangay Update'),
array('label' => 'Delete', 'description' => 'Admin Barangay Delete'),
))
)),
)),
);
}
/**
* Checks if the user is logged in or not
*/
public function accountIsLoggedIn($requestUri = true) {
$session = $this->container->get('session');
if($session->has('accountUserData')) {
return true;
} else {
if($requestUri) {
$req_uri = $_SERVER['REQUEST_URI'];
if($req_uri !== $this->container->get('router')->generate('home_login') &&
$req_uri !== $this->container->get('router')->generate('home_logout') &&
$req_uri !== $this->container->get('router')->generate('home_forgot_password') &&
//$req_uri !== $this->container->get('router')->generate('auth_forgot_password_confirmation') &&
strpos($req_uri, 'ajax') === false) $session->set('req_uri', $req_uri);
}
return false;
}
}
/**
* Redirects to login page of user
*/
public function account_redirectToLogin() {
return new RedirectResponse($this->container->get('router')->generate('admin'), 302);
}
public function calculateDaysEarned($amount, $startDate, $endDate){
$today = new \DateTime();
$daysPassed = $today->diff($startDate)->days;
$days = $endDate->diff($startDate)->days;
$earnedPerDays = round(($amount / $days), 2);
if($daysPassed > 0 && $endDate >= $today){
return $daysPassed * $earnedPerDays;
}
return 0;
}
}