MOON
Server: Apache
System: Linux nserver.cafsindia.com 4.18.0-553.123.2.lve.el8.x86_64 #1 SMP Thu May 7 23:17:13 UTC 2026 x86_64
User: cafsindia (1002)
PHP: 8.2.30
Disabled: NONE
Upload Files
File: /home/cafsindia/help.cafsindia.com/vendor/uvdesk/core-framework/Controller/Team.php
<?php

namespace Webkul\UVDesk\CoreFrameworkBundle\Controller;

use Webkul\UVDesk\CoreFrameworkBundle\Form;
use Webkul\UVDesk\CoreFrameworkBundle\Entity\User;
use Webkul\UVDesk\CoreFrameworkBundle\Entity\SupportTeam;
use Webkul\UVDesk\CoreFrameworkBundle\Entity\SupportGroup;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Webkul\UVDesk\CoreFrameworkBundle\Services\UserService;
use Symfony\Contracts\Translation\TranslatorInterface;

class Team extends AbstractController
{
    private $userService;
    private $translator;
    
    public function __construct(UserService $userService, TranslatorInterface $translator)
    {
        $this->userService = $userService;
        $this->translator = $translator;
    }

    public function listTeams(Request $request)
    {
        if (!$this->userService->isAccessAuthorized('ROLE_AGENT_MANAGE_SUB_GROUP')){
            return $this->redirect($this->generateUrl('helpdesk_member_dashboard'));
        }

        return $this->render('@UVDeskCoreFramework/Teams/listSupportTeams.html.twig');
    }

    public function createTeam(Request $request)
    {
        if (!$this->userService->isAccessAuthorized('ROLE_AGENT_MANAGE_SUB_GROUP')){
            return $this->redirect($this->generateUrl('helpdesk_member_dashboard'));
        }

        $supportTeam = new SupportTeam();

        $errors = [];

        if($request->getMethod() == "POST") {

            $request->request->set('users', explode(',', $request->request->get('tempUsers')));
            $request->request->set('groups', explode(',', $request->request->get('tempGroups')));
            $oldUsers = ($usersList = $supportTeam->getUsers()) ? $usersList->toArray() : $usersList;
            $oldGroups = ($grpList =  $supportTeam->getSupportGroups()) ? $grpList->toArray() : $grpList;

            $allDetails = $request->request->all();

            $em = $this->getDoctrine()->getManager();
            $supportTeam->setName($allDetails['name']);
            $supportTeam->setDescription($allDetails['description']);
            $supportTeam->setIsActive((bool) isset($allDetails['isActive']));
            $em->persist($supportTeam);

            $usersList = (!empty($allDetails['users']))? $allDetails['users'] : [];
            $usersGroup  = (!empty($allDetails['groups']))? $allDetails['groups'] : [];

            if (!empty($usersList)) {
                $usersList = array_map(function ($user) { return 'user.id = ' . $user; }, $usersList);

                $userList = $em->createQueryBuilder()->select('user')
                    ->from(User::class, 'user')
                    ->where(implode(' OR ', $usersList))
                    ->getQuery()->getResult();
            }

            if (!empty($usersGroup)) {
                $usersGroup = array_map(function ($group) { return 'p.id = ' . $group; }, $usersGroup);

                $userGroup = $em->createQueryBuilder('p')->select('p')
                    ->from(SupportGroup::class, 'p')
                    ->where(implode(' OR ', $usersGroup))
                    ->getQuery()->getResult();
            }

            foreach ($userList as $user) {
                $userInstance = $user->getAgentInstance();
                $userInstance->addSupportTeam($supportTeam);
                $em->persist($userInstance);
            }

            // Add Teams to Group
            foreach ($userGroup as $supportGroup) {
                $supportGroup->addSupportTeam($supportTeam);
                $em->persist($supportGroup);
            }

            $em->persist($supportTeam);
            $em->flush();

            $this->addFlash('success', $this->translator->trans('Success ! Team information saved successfully.'));

            return $this->redirect($this->generateUrl('helpdesk_member_support_team_collection'));
        }

        return $this->render('@UVDeskCoreFramework/Teams/createSupportTeam.html.twig', [
            'team' => $supportTeam,
            'errors' => json_encode($errors)
        ]);
    }

    public function editTeam(Request $request)
    {
        if (!$this->userService->isAccessAuthorized('ROLE_AGENT_MANAGE_SUB_GROUP')){
            return $this->redirect($this->generateUrl('helpdesk_member_dashboard'));
        }

        if($request->attributes->get('supportTeamId')){
            $supportTeam = $this->getDoctrine()->getRepository(SupportTeam::class)
                ->findSubGroupById(['id' => $request->attributes->get('supportTeamId')]);

            if(!$supportTeam)
                $this->noResultFound();
        }

        $errors = [];
        if($request->getMethod() == "POST") {
            $request->request->set('users', explode(',', $request->request->get('tempUsers')));
            $request->request->set('groups', explode(',', $request->request->get('tempGroups')));
            $oldUsers = ($usersList = $supportTeam->getUsers()) ? $usersList->toArray() : $usersList;
            $oldGroups = ($grpList = $supportTeam->getSupportGroups()) ? $grpList->toArray() : $grpList;

            $allDetails = $request->request->all();

            $em = $this->getDoctrine()->getManager();
            $supportTeam->setName($allDetails['name']);
            $supportTeam->setDescription($allDetails['description']);
            $supportTeam->setIsActive((bool) isset($allDetails['isActive']));

            $usersList = (!empty($allDetails['users']))? $allDetails['users'] : [];
            $usersGroup  = (!empty($allDetails['groups']))? $allDetails['groups'] : [];

            if (!empty($usersList)) {
                $usersList = array_map(function ($user) { return 'p.id = ' . $user; }, $usersList);
                $userList = $em->createQueryBuilder('p')->select('p')
                    ->from(User::class, 'p')
                    ->where(implode(' OR ', $usersList))
                    ->getQuery()->getResult();
            }

            if (!empty($usersGroup)) {
                $usersGroup = array_map(function ($group) { return 'p.id = ' . $group; }, $usersGroup);

                $userGroup = $em->createQueryBuilder('p')->select('p')
                    ->from(SupportGroup::class, 'p')
                    ->where(implode(' OR ', $usersGroup))
                    ->getQuery()->getResult();
            }

            foreach ($userList as $user) {
                $userInstance = $user->getAgentInstance();
                if(!$oldUsers || !in_array($userInstance, $oldUsers)){
                    $userInstance->addSupportTeam($supportTeam);
                    $em->persist($userInstance);
                }elseif($oldUsers && ($key = array_search($userInstance, $oldUsers)) !== false)
                    unset($oldUsers[$key]);
            }
            foreach ($oldUsers as $removeUser) {
                $removeUser->removeSupportTeam($supportTeam);
                $em->persist($removeUser);
            }

            // Add Group to team
            foreach ($userGroup as $supportGroup) {
                if(!$oldGroups || !in_array($supportGroup, $oldGroups)){
                    $supportGroup->addSupportTeam($supportTeam);
                    $em->persist($supportGroup);

                }elseif($oldGroups && ($key = array_search($supportGroup, $oldGroups)) !== false)
                    unset($oldGroups[$key]);
            }

            foreach ($oldGroups as $removeGroup) {
                $removeGroup->removeSupportTeam($supportTeam);
                $em->persist($removeGroup);
            }

            $em->persist($supportTeam);
            $em->flush();

            $this->addFlash('success', $this->translator->trans('Success ! Team information updated successfully.'));
            return $this->redirect($this->generateUrl('helpdesk_member_support_team_collection'));
        }
        return $this->render('@UVDeskCoreFramework/Teams/updateSupportTeam.html.twig', [
            'team' => $supportTeam,
            'errors' => json_encode($errors)
        ]);
    }
}