public function indexAction(Request $request, SessionInterface $session)
 {
     Util::checkUserIsLoggedInAndRedirect();
     $menuSelectedCategory = 'home';
     $session->set('selected_product_id', SystemProduct::SYS_PRODUCT_HELP_DESK);
     $projectsForBrowsing = $this->getRepository(UbirimiClient::class)->getProjects($session->get('client/id'), null, null, true);
     if ($projectsForBrowsing) {
         $projectIdsAndNames = Util::getAsArray($projectsForBrowsing, array('id', 'name'));
         $projectsForBrowsing->data_seek(0);
         $projectIds = Util::getAsArray($projectsForBrowsing, array('id'));
     }
     return $this->render(__DIR__ . '/../../Resources/views/customer_portal/Dashboard.php', get_defined_vars());
 }
Example #2
0
 public function indexAction(Request $request, SessionInterface $session)
 {
     if (Util::checkUserIsLoggedIn()) {
         $issuesPerPage = $session->get('user/issues_per_page');
         $clientSettings = $session->get('client/settings');
     } else {
         $issuesPerPage = 25;
         $httpHOST = Util::getHttpHost();
         $clientId = $this->getRepository(UbirimiClient::class)->getByBaseURL($httpHOST, 'array', 'id');
         $loggedInUserId = null;
         $clientSettings = $this->getRepository(UbirimiClient::class)->getSettings($clientId);
     }
     $clientId = $session->get('client/id');
     $loggedInUserId = $session->get('user/id');
     $sectionPageTitle = $clientSettings['title_name'] . ' / ' . SystemProduct::SYS_PRODUCT_YONGO_NAME . ' / Search';
     $session->set('selected_product_id', SystemProduct::SYS_PRODUCT_YONGO);
     $selectedProductId = $session->get('selected_product_id');
     $cliMode = false;
     $projectsForBrowsing = $this->getRepository(UbirimiClient::class)->getProjectsByPermission($clientId, $loggedInUserId, Permission::PERM_BROWSE_PROJECTS);
     $searchParameters = array();
     $parseURLData = null;
     $projectIds = null;
     if ($projectsForBrowsing) {
         $projectIdsAndNames = Util::getAsArray($projectsForBrowsing, array('id', 'name'));
         $projectsForBrowsing->data_seek(0);
         $projectIds = Util::getAsArray($projectsForBrowsing, array('id'));
         $searchCriteria = $this->getRepository(Issue::class)->getSearchParameters($projectsForBrowsing, $clientId);
         $issuesResult = null;
         $SLAs = UbirimiContainer::get()['repository']->get(Sla::class)->getByProjectIds($projectIds);
     }
     if ($request->request->has('search')) {
         $searchParameters = $this->getRepository(Issue::class)->prepareDataForSearchFromPostGet($projectIds, $_POST, $_GET);
         $redirectLink = str_replace("%7C", "|", http_build_query($searchParameters));
         return new RedirectResponse('/yongo/issue/search?' . $redirectLink);
     } else {
         $getFilter = $request->get('filter');
         $currentSearchPage = $request->get('page');
         $currentSearchPage = isset($currentSearchPage) ? $currentSearchPage : 1;
         $getSearchParameters = $this->getRepository(Issue::class)->prepareDataForSearchFromURL($_GET, $issuesPerPage);
         // check to see if the project Ids are all belonging to the client
         $getProjectIds = isset($_GET['project']) ? explode('|', $_GET['project']) : null;
         if ($getProjectIds && !(count($getProjectIds) == 1 && $getProjectIds[0] == -1)) {
             if (!$this->getRepository(YongoProject::class)->checkProjectsBelongToClient($clientId, $getProjectIds)) {
                 return new RedirectResponse('/general-settings/bad-link-access-denied');
             }
         }
         $parseURLData = parse_url($_SERVER['REQUEST_URI']);
         if (isset($parseURLData['query']) && $projectsForBrowsing) {
             if (Util::searchQueryNotEmpty($getSearchParameters)) {
                 $issuesResult = $this->getRepository(Issue::class)->getByParameters($getSearchParameters, $loggedInUserId, null, $loggedInUserId);
                 $issues = $issuesResult[0];
                 $issuesCount = $issuesResult[1];
                 $countPages = ceil($issuesCount / $issuesPerPage);
                 $getSearchParameters['count_pages'] = $countPages;
                 $getSearchParameters['link_to_page'] = '/yongo/issue/search';
             }
         }
     }
     $columns = array('code', 'summary', 'priority', 'status', 'created', 'updated', 'reporter', 'assignee', 'settings_menu');
     if (Util::checkUserIsLoggedIn()) {
         $columns = explode('#', $session->get('user/issues_display_columns'));
         $columns[] = 'settings_menu';
         $columns[] = '';
     }
     $hasGlobalBulkPermission = $this->getRepository(UbirimiUser::class)->hasGlobalPermission($clientId, $loggedInUserId, GlobalPermission::GLOBAL_PERMISSION_YONGO_BULK_CHANGE);
     $customFilters = $this->getRepository(IssueFilter::class)->getAllByUser($loggedInUserId);
     if ($getFilter) {
         $menuSelectedCategory = 'filters';
     } else {
         $menuSelectedCategory = 'issue';
     }
     $extraParameters = array();
     if ($getFilter) {
         $extraParameters[] = 'filter=' . $getFilter;
     }
     $extraParametersURL = '';
     if (count($extraParameters)) {
         $extraParametersURL = implode('&', $extraParameters);
     }
     $urlIssuePrefix = '/yongo/issue/';
     $parseData = parse_url($_SERVER['REQUEST_URI']);
     $query = isset($parseData['query']) ? $parseData['query'] : '';
     if (isset($query) && $query != '') {
         $session->set('last_search_parameters', $parseData['query']);
     } else {
         $session->remove('last_search_parameters');
     }
     return $this->render(__DIR__ . '/../../Resources/views/issue/search/Search.php', get_defined_vars());
 }
Example #3
0
 public function getSearchParameters($projectsForBrowsing, $clientId, $helpDeskFlag = 0)
 {
     $projectsForBrowsing->data_seek(0);
     $projectIds = Util::getAsArray($projectsForBrowsing, array('id'));
     $allClientIssueTypes = UbirimiContainer::get()['repository']->get(IssueType::class)->getByProjects($projectIds);
     $criteria = array();
     $issueTypeArray = array();
     while ($allClientIssueTypes && ($issueType = $allClientIssueTypes->fetch_array(MYSQLI_ASSOC))) {
         $found = false;
         for ($i = 0; $i < count($issueTypeArray); $i++) {
             if ($issueTypeArray[$i]['name'] == $issueType['name']) {
                 $issueTypeArray[$i]['id'] .= '#' . $issueType['id'];
                 $found = true;
                 break;
             }
         }
         if (!$found) {
             $issueTypeArray[] = $issueType;
         }
     }
     $criteria['all_client_issue_type'] = $issueTypeArray;
     $allClientIssueStatuses = UbirimiContainer::get()['repository']->get(IssueSettings::class)->getAllIssueSettings('status', $clientId);
     $issueStatusArray = array();
     while ($issueStatus = $allClientIssueStatuses->fetch_array(MYSQLI_ASSOC)) {
         $found = false;
         for ($i = 0; $i < count($issueStatusArray); $i++) {
             if ($issueStatusArray[$i]['name'] == $issueStatus['name']) {
                 $issueStatusArray[$i]['id'] .= '#' . $issueStatus['id'];
                 $found = true;
                 break;
             }
         }
         if (!$found) {
             $issueStatusArray[] = $issueStatus;
         }
     }
     $criteria['all_client_issue_status'] = $issueStatusArray;
     $allClientIssuePriorities = UbirimiContainer::get()['repository']->get(IssueSettings::class)->getAllIssueSettings('priority', $clientId);
     $issuePriorityArray = array();
     while ($issuePriority = $allClientIssuePriorities->fetch_array(MYSQLI_ASSOC)) {
         $found = false;
         for ($i = 0; $i < count($issuePriorityArray); $i++) {
             if ($issuePriorityArray[$i]['name'] == $issuePriority['name']) {
                 $issuePriorityArray[$i]['id'] .= '#' . $issuePriority['id'];
                 $found = true;
                 break;
             }
         }
         if (!$found) {
             $issuePriorityArray[] = $issuePriority;
         }
     }
     $criteria['all_client_issue_priority'] = $issuePriorityArray;
     $allClientIssueResolutions = UbirimiContainer::get()['repository']->get(IssueSettings::class)->getAllIssueSettings('resolution', $clientId);
     $issueResolutionArray = array();
     while ($issueResolution = $allClientIssueResolutions->fetch_array(MYSQLI_ASSOC)) {
         $found = false;
         for ($i = 0; $i < count($issueResolutionArray); $i++) {
             if ($issueResolutionArray[$i]['name'] == $issueResolution['name']) {
                 $issueResolutionArray[$i]['id'] .= '#' . $issueResolution['id'];
                 $found = true;
                 break;
             }
         }
         if (!$found) {
             $issueResolutionArray[] = $issueResolution;
         }
     }
     $criteria['all_client_issue_resolution'] = $issueResolutionArray;
     $clientUsersArray = array();
     if ($helpDeskFlag) {
         $allClientUsers = UbirimiContainer::get()['repository']->get(UbirimiUser::class)->getByClientId($clientId);
         while ($allClientUsers && ($clientUser = $allClientUsers->fetch_array(MYSQLI_ASSOC))) {
             $found = false;
             for ($i = 0; $i < count($clientUsersArray); $i++) {
                 if ($clientUsersArray[$i]['first_name'] == $clientUser['first_name'] && $clientUsersArray[$i]['last_name'] == $clientUser['last_name']) {
                     $clientUsersArray[$i]['id'] .= '#' . $clientUser['id'];
                     $found = true;
                     break;
                 }
             }
             if (!$found) {
                 $clientUsersArray[] = $clientUser;
             }
         }
         $criteria['all_client_user_assignee'] = $clientUsersArray;
         $allClientUsers = UbirimiContainer::get()['repository']->get(UbirimiUser::class)->getByClientId($clientId, 1);
         $clientUsersArray = array();
         while ($allClientUsers && ($clientUser = $allClientUsers->fetch_array(MYSQLI_ASSOC))) {
             $found = false;
             for ($i = 0; $i < count($clientUsersArray); $i++) {
                 if ($clientUsersArray[$i]['first_name'] == $clientUser['first_name'] && $clientUsersArray[$i]['last_name'] == $clientUser['last_name']) {
                     $clientUsersArray[$i]['id'] .= '#' . $clientUser['id'];
                     $found = true;
                     break;
                 }
             }
             if (!$found) {
                 $clientUsersArray[] = $clientUser;
             }
         }
         $criteria['all_client_user_reporter'] = $clientUsersArray;
     } else {
         $allClientUsers = UbirimiContainer::get()['repository']->get(UbirimiUser::class)->getByClientId($clientId);
         while ($allClientUsers && ($clientUser = $allClientUsers->fetch_array(MYSQLI_ASSOC))) {
             $found = false;
             for ($i = 0; $i < count($clientUsersArray); $i++) {
                 if ($clientUsersArray[$i]['first_name'] == $clientUser['first_name'] && $clientUsersArray[$i]['last_name'] == $clientUser['last_name']) {
                     $clientUsersArray[$i]['id'] .= '#' . $clientUser['id'];
                     $found = true;
                     break;
                 }
             }
             if (!$found) {
                 $clientUsersArray[] = $clientUser;
             }
         }
         $criteria['all_client_user_assignee'] = $clientUsersArray;
         $criteria['all_client_user_reporter'] = $clientUsersArray;
     }
     // get the project components
     $allProjectsComponents = UbirimiContainer::get()['repository']->get(YongoProject::class)->getComponents($projectIds);
     $projectComponentsArray = array();
     while ($allProjectsComponents && ($component = $allProjectsComponents->fetch_array(MYSQLI_ASSOC))) {
         $found = false;
         for ($i = 0; $i < count($projectComponentsArray); $i++) {
             if ($projectComponentsArray[$i]['name'] == $component['name']) {
                 $projectComponentsArray[$i]['id'] .= '#' . $component['id'];
                 $found = true;
                 break;
             }
         }
         if (!$found) {
             $projectComponentsArray[] = $component;
         }
     }
     $criteria['all_client_issue_component'] = $projectComponentsArray;
     // get the project fix versions
     $allProjectsVersions = UbirimiContainer::get()['repository']->get(YongoProject::class)->getVersions($projectIds);
     $projectVersionsArray = array();
     while ($allProjectsVersions && ($version = $allProjectsVersions->fetch_array(MYSQLI_ASSOC))) {
         $found = false;
         for ($i = 0; $i < count($projectVersionsArray); $i++) {
             if ($projectVersionsArray[$i]['name'] == $version['name']) {
                 $projectVersionsArray[$i]['id'] .= '#' . $version['id'];
                 $found = true;
                 break;
             }
         }
         if (!$found) {
             $projectVersionsArray[] = $version;
         }
     }
     $criteria['all_client_issue_version'] = $projectVersionsArray;
     return $criteria;
 }
 public function indexAction(Request $request, SessionInterface $session)
 {
     Util::checkUserIsLoggedInAndRedirect();
     $menuSelectedCategory = 'home';
     $clientId = $session->get('client/id');
     $projectsForBrowsing = $this->getRepository(UbirimiClient::class)->getProjects($clientId, null, null, true);
     $clientSettings = $this->getRepository(UbirimiClient::class)->getSettings($clientId);
     $session->set('selected_product_id', SystemProduct::SYS_PRODUCT_HELP_DESK);
     $selectedProductId = $session->get('selected_product_id');
     $cliMode = false;
     if ($projectsForBrowsing) {
         $projectIdsAndNames = Util::getAsArray($projectsForBrowsing, array('id', 'name'));
         $projectsForBrowsing->data_seek(0);
         $projectIds = Util::getAsArray($projectsForBrowsing, array('id'));
         $searchCriteria = $this->getRepository(Issue::class)->getSearchParameters($projectsForBrowsing, $session->get('client/id'), 1);
         $issuesResult = null;
     }
     if ($request->request->has('search')) {
         $searchParameters = $this->getRepository(Issue::class)->prepareDataForSearchFromPostGet($projectIds, $request->request->all(), $request->query->all());
         $redirectLink = str_replace("%7C", "|", http_build_query($searchParameters));
         return new RedirectResponse('/helpdesk/customer-portal/tickets?' . $redirectLink);
     } else {
         $getSearchParameters = $this->getRepository(Issue::class)->prepareDataForSearchFromURL($request->query->all(), 30);
         $getSearchParameters['helpdesk_flag'] = 1;
         // check to see if the project Ids are all belonging to the client
         $getProjectIds = $request->request->has('project') ? explode('|', $request->query->get('project')) : null;
         if ($getProjectIds) {
             for ($pos = 0; $pos < count($getProjectIds); $pos++) {
                 $projectFilter = $this->getRepository(YongoProject::class)->getById($getProjectIds[$pos]);
                 if ($projectFilter['client_id'] != $session->get('client/id')) {
                     return new RedirectResponse('/general-settings/bad-link-access-denied');
                 }
             }
         }
         $parseURLData = parse_url($_SERVER['REQUEST_URI']);
         $projectsForBrowsing = array(229);
         if (isset($parseURLData['query']) && $projectsForBrowsing) {
             if (Util::searchQueryNotEmpty($getSearchParameters)) {
                 $issuesResult = $this->getRepository(Issue::class)->getByParameters($getSearchParameters, $session->get('user/id'));
                 $issues = $issuesResult[0];
                 $issuesCount = $issuesResult[1];
                 $issuesPerPage = $session->get('user/issues_per_page');
                 $currentSearchPage = isset($_GET['page']) ? $_GET['page'] : 1;
                 $countPages = ceil($issuesCount / 30);
                 $getSearchParameters['count_pages'] = $countPages;
                 $getSearchParameters['link_to_page'] = '/helpdesk/customer-portal/tickets';
             }
         }
     }
     $SLAs = $this->getRepository(Sla::class)->getByProjectIds(array(229));
     $columns = array('code', 'summary', 'priority', 'status', 'created', 'updated', 'reporter', 'assignee', 'settings_menu');
     if (Util::checkUserIsLoggedIn()) {
         $columns = explode('#', $session->get('user/issues_display_columns'));
         $columns[] = 'settings_menu';
         $columns[] = '';
     }
     $parseData = parse_url($_SERVER['REQUEST_URI']);
     $query = isset($parseData['query']) ? $parseData['query'] : '';
     if (isset($query)) {
         $session->set('last_search_parameters', $parseData['query']);
     } else {
         $session->remove('last_search_parameters');
     }
     return $this->render(__DIR__ . '/../../Resources/views/customer_portal/ListIssue.php', get_defined_vars());
 }
 public function indexAction(Request $request, SessionInterface $session)
 {
     $clientId = $session->get('client/id');
     $loggedInUserId = $session->get('user/id');
     Util::checkUserIsLoggedInAndRedirect();
     $projectIdArray = $request->request->get('project_id_arr');
     if (count($projectIdArray) == 1 && $projectIdArray[0] == -1) {
         $projectsForBrowsing = $this->getRepository(UbirimiClient::class)->getProjectsByPermission($clientId, $loggedInUserId, Permission::PERM_BROWSE_PROJECTS);
         $projectIdArray = Util::getAsArray($projectsForBrowsing, array('id'));
     }
     $allIssueTypes = $this->getRepository(YongoProject::class)->getAllIssueTypesForProjects($projectIdArray);
     $issueTypeArray = array();
     while ($issueType = $allIssueTypes->fetch_array(MYSQLI_ASSOC)) {
         $found = false;
         for ($i = 0; $i < count($issueTypeArray); $i++) {
             if ($issueTypeArray[$i]['name'] == $issueType['name']) {
                 if (!in_array($issueType['id'], explode("#", $issueTypeArray[$i]['id']))) {
                     $issueTypeArray[$i]['id'] .= '#' . $issueType['id'];
                 }
                 $found = true;
                 break;
             }
         }
         if (!$found) {
             $issueTypeArray[] = $issueType;
         }
     }
     $allIssueStatuses = $this->getRepository(UbirimiClient::class)->getAllIssueSettings('status', $clientId);
     $issueStatusArray = array();
     while ($issueStatus = $allIssueStatuses->fetch_array(MYSQLI_ASSOC)) {
         $found = false;
         for ($i = 0; $i < count($issueStatusArray); $i++) {
             if ($issueStatusArray[$i]['name'] == $issueStatus['name']) {
                 if (!in_array($issueStatus['id'], explode("#", $issueStatusArray[$i]['id']))) {
                     $issueStatusArray[$i]['id'] .= '#' . $issueStatus['id'];
                 }
                 $found = true;
                 break;
             }
         }
         if (!$found) {
             $issueStatusArray[] = $issueStatus;
         }
     }
     $allIssuePriorities = $this->getRepository(UbirimiClient::class)->getAllIssueSettings('priority', $clientId);
     $issuePriorityArray = array();
     while ($issuePriority = $allIssuePriorities->fetch_array(MYSQLI_ASSOC)) {
         $found = false;
         for ($i = 0; $i < count($issuePriorityArray); $i++) {
             if ($issuePriorityArray[$i]['name'] == $issuePriority['name']) {
                 if (!in_array($issuePriority['id'], explode("#", $issuePriorityArray[$i]['id']))) {
                     $issuePriorityArray[$i]['id'] .= '#' . $issuePriority['id'];
                 }
                 $found = true;
                 break;
             }
         }
         if (!$found) {
             $issuePriorityArray[] = $issuePriority;
         }
     }
     $allIssueResolutions = $this->getRepository(UbirimiClient::class)->getAllIssueSettings('resolution', $clientId);
     $issueResolutionArray = array();
     while ($issueResolution = $allIssueResolutions->fetch_array(MYSQLI_ASSOC)) {
         $found = false;
         for ($i = 0; $i < count($issueResolutionArray); $i++) {
             if ($issueResolutionArray[$i]['name'] == $issueResolution['name']) {
                 if (!in_array($issueResolution['id'], explode("#", $issueResolutionArray[$i]['id']))) {
                     $issueResolutionArray[$i]['id'] .= '#' . $issueResolution['id'];
                 }
                 $found = true;
                 break;
             }
         }
         if (!$found) {
             $issueResolutionArray[] = $issueResolution;
         }
     }
     $assignableUsers = $this->getRepository(YongoProject::class)->getUsersWithPermission($projectIdArray, Permission::PERM_ASSIGNABLE_USER);
     $allowUnassignedIssuesFlag = $this->getRepository(UbirimiClient::class)->getYongoSetting($clientId, 'allow_unassigned_issues_flag');
     $issueUsersAssignableArray = array();
     if ($allowUnassignedIssuesFlag) {
         $issueUsersAssignableArray[0]['user_id'] = -1;
         $issueUsersAssignableArray[0]['first_name'] = 'No one';
         $issueUsersAssignableArray[0]['last_name'] = '';
     }
     while ($assignableUsers && ($issueUser = $assignableUsers->fetch_array(MYSQLI_ASSOC))) {
         $found = false;
         for ($i = 0; $i < count($issueUsersAssignableArray); $i++) {
             if ($issueUsersAssignableArray[$i]['first_name'] == $issueUser['first_name'] && $issueUsersAssignableArray[$i]['last_name'] == $issueUser['last_name']) {
                 $issueUsersAssignableArray[$i]['user_id'] .= '#' . $issueUser['user_id'];
                 $found = true;
                 break;
             }
         }
         if (!$found) {
             $issueUsersAssignableArray[] = $issueUser;
         }
     }
     // components are releases
     $projectComponents = $this->getRepository(YongoProject::class)->getComponents($projectIdArray);
     $projectComponentsArray = array();
     while ($projectComponents && ($projectComponent = $projectComponents->fetch_array(MYSQLI_ASSOC))) {
         $found = false;
         for ($i = 0; $i < count($projectComponentsArray); $i++) {
             if ($projectComponentsArray[$i]['name'] == $projectComponent['name']) {
                 if (!in_array($projectComponent['id'], explode("#", $projectComponentsArray[$i]['id']))) {
                     $projectComponentsArray[$i]['id'] .= '#' . $projectComponent['id'];
                 }
                 $found = true;
                 break;
             }
         }
         if (!$found) {
             $projectComponentsArray[] = $projectComponent;
         }
     }
     $allProjectVersions = $this->getRepository(YongoProject::class)->getVersions($projectIdArray);
     $projectVersionsArray = array();
     while ($allProjectVersions && ($projectVersion = $allProjectVersions->fetch_array(MYSQLI_ASSOC))) {
         $found = false;
         for ($i = 0; $i < count($projectVersionsArray); $i++) {
             if ($projectVersionsArray[$i]['name'] == $projectVersion['name']) {
                 if (!in_array($projectVersion['id'], explode("#", $projectVersionsArray[$i]['id']))) {
                     $projectVersionsArray[$i]['id'] .= '#' . $projectVersion['id'];
                 }
                 $found = true;
                 break;
             }
         }
         if (!$found) {
             $projectVersionsArray[] = $projectVersion;
         }
     }
     $result = array('type_arr' => $issueTypeArray, 'status_arr' => $issueStatusArray, 'priority_arr' => $issuePriorityArray, 'resolution_arr' => $issueResolutionArray, 'user_arr_assignable' => $issueUsersAssignableArray, 'project_component_arr' => $projectComponentsArray, 'project_version_arr' => $projectVersionsArray);
     return new Response(json_encode($result));
 }