Skip to content

Commit 767c60c

Browse files
author
Akshay Kumar
committed
Entity references update & misc. code refactoring
1 parent cb149d6 commit 767c60c

File tree

5 files changed

+89
-73
lines changed

5 files changed

+89
-73
lines changed

Controller/AccountXHR.php

+56-46
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,20 @@
22

33
namespace Webkul\UVDesk\CoreFrameworkBundle\Controller;
44

5-
use Webkul\UVDesk\CoreFrameworkBundle\Entity\User;
65
use Symfony\Component\HttpFoundation\Request;
76
use Symfony\Component\HttpFoundation\Response;
8-
use Webkul\UVDesk\CoreFrameworkBundle\Entity\SavedFilters;
7+
use Symfony\Component\HttpFoundation\JsonResponse;
98
use Symfony\Component\EventDispatcher\GenericEvent;
109
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
11-
use Webkul\UVDesk\CoreFrameworkBundle\Workflow\Events as CoreWorkflowEvents;
1210
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
1311
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
14-
use Webkul\UVDesk\CoreFrameworkBundle\Services\UserService;
1512
use Symfony\Contracts\Translation\TranslatorInterface;
1613
use Symfony\Component\Filesystem\Filesystem as Fileservice;
1714
use Symfony\Component\DependencyInjection\ContainerInterface;
15+
use Webkul\UVDesk\CoreFrameworkBundle\Entity\User;
16+
use Webkul\UVDesk\CoreFrameworkBundle\Entity\SavedFilters;
17+
use Webkul\UVDesk\CoreFrameworkBundle\Workflow\Events as CoreWorkflowEvents;
18+
use Webkul\UVDesk\CoreFrameworkBundle\Services\UserService;
1819

1920
class AccountXHR extends AbstractController
2021
{
@@ -45,52 +46,61 @@ public function listAgentsXHR(Request $request, ContainerInterface $container)
4546

4647
public function deleteAgent(Request $request)
4748
{
48-
if($request->getMethod() == "DELETE") {
49-
$em = $this->getDoctrine()->getManager();
50-
$id = $request->query->get('id');
51-
/*
52-
Original Code: $user = $em->getRepository('WebkulUserBundle:User')->findUserByCompany($id,$company->getId());
53-
Using findUserByCompany() won't execute the UserListener, so user roles won't be set and user with ROLE_SUPER_ADMIN can be deleted as a result.
54-
To trigger UserListener to set roles, you need to only select 'u' instead of both 'u, dt' in query select clause.
55-
Doing this here instead of directly making changes to userRepository->findUserByCompany().
56-
*/
57-
$user = $em->createQuery('SELECT u FROM UVDeskCoreFrameworkBundle:User u JOIN u.userInstance userInstance WHERE u.id = :userId AND userInstance.supportRole != :roles')
58-
->setParameter('userId', $id)
59-
->setParameter('roles', 4)
60-
->getOneOrNullResult();
61-
62-
if ($user) {
63-
if($user->getAgentInstance()->getSupportRole() != "ROLE_SUPER_ADMIN") {
64-
65-
// Trigger agent delete event
66-
$event = new GenericEvent(CoreWorkflowEvents\Agent\Delete::getId(), [
67-
'entity' => $user,
68-
]);
69-
70-
$this->eventDispatcher->dispatch($event, 'uvdesk.automation.workflow.execute');
71-
72-
// Removing profile image from physical path
73-
$fileService = new Fileservice;
74-
if ($user->getAgentInstance()->getProfileImagePath()) {
75-
$fileService->remove($this->getParameter('kernel.project_dir').'/public'.$user->getAgentInstance()->getProfileImagePath());
76-
}
77-
78-
$this->userService->removeAgent($user);
79-
80-
$json['alertClass'] = 'success';
81-
$json['alertMessage'] = $this->translator->trans('Success ! Agent removed successfully.');
82-
} else {
83-
$json['alertClass'] = 'warning';
84-
$json['alertMessage'] = $this->translator->trans("Warning ! You are allowed to remove account owner's account.");
49+
if ($request->getMethod() != "DELETE") {
50+
return new JsonResponse([
51+
'alertClass' => 'warning',
52+
'alertMessage' => $this->translator->trans("How did you land here?"),
53+
], 404);
54+
}
55+
56+
$id = $request->query->get('id');
57+
$entityManager = $this->getDoctrine()->getManager();
58+
59+
/*
60+
Original Code: $user = $em->getRepository('WebkulUserBundle:User')->findUserByCompany($id,$company->getId());
61+
Using findUserByCompany() won't execute the UserListener, so user roles won't be set and user with ROLE_SUPER_ADMIN can be deleted as a result.
62+
To trigger UserListener to set roles, you need to only select 'u' instead of both 'u, dt' in query select clause.
63+
Doing this here instead of directly making changes to userRepository->findUserByCompany().
64+
*/
65+
$user = $entityManager->createQueryBuilder()
66+
->select('u')
67+
->from(User::class, 'u')
68+
->leftJoin('u.userInstance', 'userInstance')
69+
->where('u.id = :userId')->setParameter('userId', $id)
70+
->andWhere('userInstance.supportRole != :roles')->setParameter('roles', 4)
71+
->getOneOrNullResult(1)
72+
;
73+
74+
if ($user) {
75+
if ($user->getAgentInstance()->getSupportRole() != "ROLE_SUPER_ADMIN") {
76+
// Trigger agent delete event
77+
$event = new GenericEvent(CoreWorkflowEvents\Agent\Delete::getId(), [
78+
'entity' => $user,
79+
]);
80+
81+
$this->eventDispatcher->dispatch($event, 'uvdesk.automation.workflow.execute');
82+
83+
// Removing profile image from physical path
84+
$fileService = new Fileservice;
85+
86+
if ($user->getAgentInstance()->getProfileImagePath()) {
87+
$fileService->remove($this->getParameter('kernel.project_dir'). '/public' . $user->getAgentInstance()->getProfileImagePath());
8588
}
89+
90+
$this->userService->removeAgent($user);
91+
92+
$json['alertClass'] = 'success';
93+
$json['alertMessage'] = $this->translator->trans('Success ! Agent removed successfully.');
8694
} else {
87-
$json['alertClass'] = 'danger';
88-
$json['alertMessage'] = $this->translator->trans('Error ! Invalid user id.');
95+
$json['alertClass'] = 'warning';
96+
$json['alertMessage'] = $this->translator->trans("Warning ! You are allowed to remove account owner's account.");
8997
}
98+
} else {
99+
$json['alertClass'] = 'danger';
100+
$json['alertMessage'] = $this->translator->trans('Error ! Invalid user id.');
90101
}
91-
$response = new Response(json_encode($json));
92-
$response->headers->set('Content-Type', 'application/json');
93-
return $response;
102+
103+
return new JsonResponse($json);
94104
}
95105

96106
public function savedFiltersXHR(Request $request)

PreparedResponse/Actions/Ticket/UpdateType.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public static function getOptions(ContainerInterface $container)
2929
{
3030
$entityManager = $container->get('doctrine.orm.entity_manager');
3131

32-
$collection = $entityManager->getRepository('UVDeskCoreFrameworkBundle:TicketType')->findBy(['isActive' => true], ['code' => 'ASC']);
32+
$collection = $entityManager->getRepository(TicketType::class)->findBy(['isActive' => true], ['code' => 'ASC']);
3333

3434
return array_map(function ($ticketType) {
3535
return [

Repository/ThreadRepository.php

+22-14
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
use Webkul\UVDesk\CoreFrameworkBundle\Entity\Attachment;
1010
use Webkul\UVDesk\CoreFrameworkBundle\Entity\Thread;
1111

12-
1312
/**
1413
* ThreadRepository
1514
*
@@ -30,10 +29,16 @@ public function findTicketBySubject($email, $subject)
3029
$subject = str_ireplace("FWD: ","",$subject);
3130
}
3231

33-
$ticket = $this->getEntityManager()->createQuery("SELECT t FROM UVDeskCoreFrameworkBundle:Ticket t WHERE t.subject LIKE :referenceIds" )
34-
->setParameter('referenceIds', '%' . $subject . '%')
32+
$entityManager = $this->getEntityManager();
33+
34+
$queryBuilder = $entityManager->createQueryBuilder()
35+
->select('t')
36+
->from(Ticket::class, 't')
37+
->where('t.subject LIKE :referenceIds')->setParameter('referenceIds', "%$subject%")
3538
->setMaxResults(1)
36-
->getOneOrNullResult();
39+
;
40+
41+
$ticket = $queryBuilder->getQuery()->getOneOrNullResult();
3742

3843
return ($ticket && strtolower($ticket->getCustomer()->getEmail()) == strtolower($email)) ? $ticket : null;
3944
}
@@ -47,7 +52,8 @@ public function getTicketCurrentThread($ticket)
4752
->orderBy('thread.id', Criteria::DESC)
4853
->setMaxResults(1)
4954
->getQuery()
50-
->getOneOrNullResult();
55+
->getOneOrNullResult()
56+
;
5157
}
5258

5359
public function prepareBasePaginationRecentThreadsQuery($ticket, array $params, $enabledLockedThreads = true)
@@ -60,7 +66,8 @@ public function prepareBasePaginationRecentThreadsQuery($ticket, array $params,
6066
->leftJoin('thread.attachments', 'attachments')
6167
->where('thread.ticket = :ticket')->setParameter('ticket', $ticket)
6268
->andWhere('thread.threadType != :disabledThreadType')->setParameter('disabledThreadType', 'create')
63-
->orderBy('thread.id', Criteria::DESC);
69+
->orderBy('thread.id', Criteria::DESC)
70+
;
6471

6572
// Filter locked threads
6673
if (false === $enabledLockedThreads) {
@@ -165,14 +172,15 @@ public function getAllCustomerThreads($ticketId,\Symfony\Component\HttpFoundatio
165172

166173
public function findThreadByRefrenceId($referenceIds)
167174
{
168-
$query = $this->getEntityManager()
169-
->createQuery(
170-
"SELECT t FROM UVDeskCoreFrameworkBundle:Ticket t
171-
WHERE t.referenceIds LIKE :referenceIds
172-
ORDER BY t.id DESC"
173-
)->setParameter('referenceIds', '%'.$referenceIds.'%');
174-
175-
return $query->setMaxResults(1)->getOneOrNullResult();
175+
$queryBuilder = $this->getEntityManager()->createQueryBuilder()
176+
->select('t')
177+
->from(Ticket::class, 't')
178+
->where('t.referenceIds = :referenceIds')->setParameter('referenceIds', "%$referenceIds%")
179+
->orderBy('t.id', 'DESC')
180+
->setMaxResults(1)
181+
;
182+
183+
return $queryBuilder->getQuery()->getOneOrNullResult();
176184
}
177185

178186
}

Repository/UserRepository.php

+9-11
Original file line numberDiff line numberDiff line change
@@ -203,17 +203,15 @@ public function getCustomerTicketCount($customerId) {
203203

204204
public function getAgentByEmail($username)
205205
{
206-
$query = $this->getEntityManager()
207-
->createQuery(
208-
'SELECT u, dt FROM UVDeskCoreFrameworkBundle:User u
209-
JOIN u.userInstance dt
210-
WHERE u.email = :email
211-
AND dt.supportRole != :roles'
212-
)
213-
->setParameter('email', $username)
214-
->setParameter('roles', 4);
215-
216-
return $query->getOneOrNullResult();
206+
$queryBuilder = $this->getEntityManager()->createQueryBuilder()
207+
->select('u, dt')
208+
->from(User::class, 'u')
209+
->leftJoin('u.userInstance', 'dt')
210+
->where('u.email = :email')->setParameter('email', $username)
211+
->andWhere('dt.supportRole != :roles')->setParameter('roles', 4)
212+
;
213+
214+
return $queryBuilder->getQuery()->getOneOrNullResult();
217215
}
218216

219217
public function getSupportGroups(Request $request = null)

Workflow/Actions/Ticket/UpdateType.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public static function getOptions(ContainerInterface $container)
2929
{
3030
$entityManager = $container->get('doctrine.orm.entity_manager');
3131

32-
$collection = $entityManager->getRepository('UVDeskCoreFrameworkBundle:TicketType')->findBy(['isActive' => true], ['code' => 'ASC']);
32+
$collection = $entityManager->getRepository(TicketType::class)->findBy(['isActive' => true], ['code' => 'ASC']);
3333

3434
return array_map(function ($ticketType) {
3535
return [

0 commit comments

Comments
 (0)