src/webkul/uvdesk/support-center-bundle/Controller/Customer.php line 82

Open in your IDE?
  1. <?php
  2. namespace Webkul\UVDesk\SupportCenterBundle\Controller;
  3. use Symfony\Component\HttpFoundation\Request;
  4. use Symfony\Component\Security\Core\Security;
  5. use Webkul\UVDesk\SupportCenterBundle\Entity as SupportEntites;
  6. use Webkul\UVDesk\CoreFrameworkBundle\Entity as CoreEntites;
  7. use Symfony\Component\EventDispatcher\GenericEvent;
  8. use Webkul\UVDesk\CoreFrameworkBundle\Form\UserProfile;
  9. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  10. use Webkul\UVDesk\CoreFrameworkBundle\Utils\TokenGenerator;
  11. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  12. use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
  13. use Webkul\UVDesk\CoreFrameworkBundle\FileSystem\FileSystem;
  14. use Symfony\Contracts\Translation\TranslatorInterface;
  15. use Webkul\UVDesk\CoreFrameworkBundle\Services\FileUploadService;
  16. use Symfony\Component\Filesystem\Filesystem as Fileservice;
  17. Class Customer extends AbstractController
  18. {
  19. private $translator;
  20. private $fileSystem;
  21. private $passwordEncoder;
  22. private $fileUploadService;
  23. public function __construct(TranslatorInterface $translator, UserPasswordEncoderInterface $passwordEncoder, FileSystem $fileSystem, FileUploadService $fileUploadService)
  24. {
  25. $this->translator = $translator;
  26. $this->fileSystem = $fileSystem;
  27. $this->passwordEncoder = $passwordEncoder;
  28. $this->fileUploadService = $fileUploadService;
  29. }
  30. protected function redirectUserToLogin()
  31. {
  32. $authChecker = $this->container->get('security.authorization_checker');
  33. if($authChecker->isGranted('ROLE_CUSTOMER'))
  34. return true;
  35. }
  36. protected function isWebsiteActive()
  37. {
  38. $entityManager = $this->getDoctrine()->getManager();
  39. $website = $entityManager->getRepository(CoreEntites\Website::class)->findOneByCode('knowledgebase');
  40. if (!empty($website)) {
  41. $knowledgebaseWebsite = $entityManager->getRepository(SupportEntites\KnowledgebaseWebsite::class)->findOneBy(['website' => $website->getId(), 'status' => 1]);
  42. if (!empty($knowledgebaseWebsite) && true == $knowledgebaseWebsite->getIsActive()) {
  43. return true;
  44. }
  45. }
  46. $this->noResultFound();
  47. }
  48. protected function noResultFound()
  49. {
  50. throw new NotFoundHttpException('Permission Denied !');
  51. }
  52. protected function isLoginDisabled()
  53. {
  54. $entityManager = $this->getDoctrine()->getManager();
  55. $website = $entityManager->getRepository(CoreEntites\Website::class)->findOneByCode('knowledgebase');
  56. if (!empty($website)) {
  57. $configuration = $entityManager->getRepository(SupportEntites\KnowledgebaseWebsite::class)->findOneBy([
  58. 'website' => $website->getId(),
  59. 'isActive' => 1,
  60. ]);
  61. if (!empty($configuration) && $configuration->getDisableCustomerLogin()) {
  62. return true;
  63. }
  64. }
  65. return false;
  66. }
  67. public function login(Request $request)
  68. {
  69. // dd('sadsad');
  70. $this->isWebsiteActive();
  71. if ($this->redirectUserToLogin()) {
  72. return $this->redirect($this->generateUrl('helpdesk_customer_ticket_collection')); // Replace with Dashboard route
  73. }
  74. /** check disabled customer login **/
  75. if($this->isLoginDisabled()) {
  76. $this->addFlash('warning', $this->translator->trans('Warning ! Customer Login disabled by admin.') );
  77. return $this->redirect($this->generateUrl('helpdesk_knowledgebase'));
  78. }
  79. $session = $request->getSession();
  80. $error = $session->get(Security::AUTHENTICATION_ERROR);
  81. $session->remove(Security::AUTHENTICATION_ERROR);
  82. return $this->render('@UVDeskSupportCenter/Knowledgebase/login.html.twig', [
  83. 'searchDisable' => true,
  84. 'last_username' => $session->get(Security::LAST_USERNAME),
  85. 'error' => $error,
  86. 'breadcrumbs' => [
  87. [
  88. 'label' => $this->translator->trans('Support Center'),
  89. 'url' => $this->generateUrl('helpdesk_knowledgebase')
  90. ], [
  91. 'label' => $this->translator->trans('Sign In'),
  92. 'url' => '#'
  93. ]
  94. ]
  95. ]);
  96. }
  97. public function Account(Request $request)
  98. {
  99. $this->isWebsiteActive();
  100. $em = $this->getDoctrine()->getManager();
  101. $user = $this->getUser();
  102. $errors = [];
  103. if ($request->getMethod() == 'POST') {
  104. $data = $request->request->all();
  105. $dataFiles = $request->files->get('user_form');
  106. $data = $data['user_form'];
  107. // Profile upload validation
  108. $validMimeType = ['image/jpeg', 'image/png', 'image/jpg'];
  109. if (isset($dataFiles['profileImage'])) {
  110. if (!in_array($dataFiles['profileImage']->getMimeType(), $validMimeType)) {
  111. $this->addFlash('warning', $this->translator->trans('Error ! Profile image is not valid, please upload a valid format'));
  112. return $this->redirect($this->generateUrl('helpdesk_customer_account'));
  113. }
  114. }
  115. $checkUser = $em->getRepository(CoreEntites\User::class)->findOneBy(array('email'=>$data['email']));
  116. $errorFlag = 0;
  117. if ($checkUser) {
  118. if($checkUser->getId() != $user->getId())
  119. $errorFlag = 1;
  120. }
  121. if (!$errorFlag) {
  122. $password = $user->getPassword();
  123. $form = $this->createForm(UserProfile::class, $user);
  124. $form->handleRequest($request);
  125. $form->submit($data);
  126. if ($form->isValid()) {
  127. if ($data != null && (!empty($data['password']['first']))) {
  128. $encodedPassword = $this->passwordEncoder->encodePassword($user, $data['password']['first']);
  129. if (!empty($encodedPassword) ) {
  130. $user->setPassword($encodedPassword);
  131. }
  132. } else {
  133. $user->setPassword($password);
  134. }
  135. $user->setFirstName($data['firstName']);
  136. $user->setLastName($data['lastName']);
  137. $user->setEmail($data['email']);
  138. $user->setTimeZone($data['timezone']);
  139. $user->setTimeFormat($data['timeformat']);
  140. $em->persist($user);
  141. $em->flush();
  142. $userInstance = $em->getRepository(CoreEntites\UserInstance::class)->findOneBy(array('user' => $user->getId()));
  143. if (isset($dataFiles['profileImage'])) {
  144. $previousImage = $userInstance->getProfileImagePath();
  145. if($previousImage != null){
  146. $image = str_replace("\\","/",$this->getParameter('kernel.project_dir').'/public'.$previousImage);
  147. $check = $this->fileUploadService->fileRemoveFromFolder($image);
  148. }
  149. $assetDetails = $this->fileSystem->getUploadManager()->uploadFile($dataFiles['profileImage'], 'profile');
  150. $userInstance->setProfileImagePath($assetDetails['path']);
  151. }
  152. // Removed profile image from database and path
  153. $fileService = new Fileservice;
  154. if ($request->get('removeImage') == 'on') {
  155. if ($userInstance->getProfileImagePath()) {
  156. $fileService->remove($this->getParameter('kernel.project_dir').'/public'.$userInstance->getProfileImagePath());
  157. }
  158. $userInstance = $userInstance->setProfileImagePath(null);
  159. }
  160. $userInstance = $userInstance->setContactNumber($data['contactNumber']);
  161. $em->persist($userInstance);
  162. $em->flush();
  163. $this->addFlash('success', $this->translator->trans('Success ! Profile updated successfully.'));
  164. return $this->redirect($this->generateUrl('helpdesk_customer_account'));
  165. } else {
  166. $errors = $form->getErrors();
  167. dump($errors);
  168. die;
  169. $errors = $this->getFormErrors($form);
  170. }
  171. } else {
  172. $this->addFlash('warning', $this->translator->trans('Error ! User with same email is already exist.'));
  173. return $this->redirect($this->generateUrl('helpdesk_customer_account'));
  174. }
  175. }
  176. return $this->render('@UVDeskSupportCenter/Knowledgebase/customerAccount.html.twig', [
  177. 'searchDisable' => true,
  178. 'user' => $user,
  179. ]);
  180. }
  181. public function searchArticle(Request $request)
  182. {
  183. $this->isWebsiteActive();
  184. $searchQuery = $request->query->get('s');
  185. if (empty($searchQuery)) {
  186. return $this->redirect($this->generateUrl('helpdesk_customer_ticket_collection'));
  187. }
  188. $articleCollection = $this->getDoctrine()->getRepository(SupportEntites\Article::class)->getArticleBySearch($request);
  189. return $this->render('@UVDeskSupportCenter/Knowledgebase/search.html.twig', [
  190. 'search' => $searchQuery,
  191. 'articles' => $articleCollection,
  192. 'breadcrumbs' => [
  193. ['label' => $this->translator->trans('Support Center'), 'url' => $this->generateUrl('helpdesk_knowledgebase')],
  194. ['label' => $searchQuery, 'url' => '#'],
  195. ],
  196. ]);
  197. }
  198. }