Example #1
0
 public function getByParameters($parameters, $securitySchemeUserId = null, $queryWherePart = null, $loggedInUserId = null)
 {
     $parameterType = '';
     $parameterArray = array();
     $query = 'SELECT SQL_CALC_FOUND_ROWS issue_main_table.id, issue_main_table.nr, issue_main_table.summary, issue_main_table.description, issue_main_table.environment, ' . 'user_reported.id as reporter, user_reported.first_name as ur_first_name, user_reported.last_name as ur_last_name, user_reported.avatar_picture as reporter_avatar_picture, ' . 'user_assigned.first_name as ua_first_name, user_assigned.last_name as ua_last_name, user_assigned.id as assignee, user_assigned.avatar_picture as assignee_avatar_picture, ' . 'project.code as project_code, project.name as project_name, issue_main_table.project_id as issue_project_id, issue_type.id as issue_type_id, issue_type.icon_name as issue_type_icon_name, issue_type.description as issue_type_description, ' . 'issue_priority.id as priority, issue_priority.color as priority_color, issue_priority.icon_name as issue_priority_icon_name, issue_priority.description as issue_priority_description, issue_priority.name as priority_name, ' . 'issue_status.id as status, issue_status.name as status_name, ' . 'issue_type.id as type, issue_type.name as type_name, ' . 'issue_resolution.name as resolution_name, issue_main_table.resolution_id as resolution, issue_main_table.parent_id, issue_main_table.security_scheme_level_id as security_level, ' . 'issue_security_scheme_level.name as security_level_name, ' . 'issue_main_table.user_assigned_id as issue_assignee, ' . 'issue_main_table.original_estimate, issue_main_table.remaining_estimate, issue_main_table.user_reported_ip, ';
     if (isset($parameters['sprint'])) {
         $query .= 'issue_parent.status_id as parent_status_id, issue_parent.user_assigned_id as parent_assignee, ' . 'issue_parent.nr as parent_nr, issue_parent.summary as parent_summary, project_parent.code as parent_project_code, ' . 'CONCAT(coalesce(issue_parent.id, \'z\'), issue_main_table.id) as sort_sprint, ';
     }
     if ($securitySchemeUserId) {
         // deal with security scheme level
         // 1. user in security scheme level data
         $query .= '(SELECT max(issue_security_scheme_level_data.id)
                   from issue_security_scheme_level_data
                   left join general_user on general_user.id = issue_security_scheme_level_data.user_id
                   where issue_security_scheme_level_data.issue_security_scheme_level_id = issue_main_table.security_scheme_level_id
                   and general_user.id = ?) as security_check1, ';
         $parameterType .= 'i';
         $parameterArray[] = $securitySchemeUserId;
         // 2. user in group security scheme level data
         $query .= '(SELECT max(issue_security_scheme_level_data.id) ' . 'from issue_security_scheme_level_data ' . 'left join `general_group` on general_group.id = issue_security_scheme_level_data.group_id ' . 'left join `general_group_data` on general_group_data.group_id = `general_group`.id ' . 'left join general_user on general_user.id = general_group_data.user_id ' . 'where issue_security_scheme_level_data.issue_security_scheme_level_id = issue_main_table.security_scheme_level_id and ' . 'general_user.id = ?) as security_check2, ';
         $parameterType .= 'i';
         $parameterArray[] = $securitySchemeUserId;
         // 3. permission role in security scheme level data - user
         $query .= '(SELECT max(issue_security_scheme_level_data.id) ' . 'from issue_security_scheme_level_data ' . 'left join project_role_data on project_role_data.permission_role_id = issue_security_scheme_level_data.permission_role_id ' . 'left join general_user on general_user.id = project_role_data.user_id ' . 'where issue_security_scheme_level_data.issue_security_scheme_level_id = issue_main_table.security_scheme_level_id and ' . 'general_user.id = ?) as security_check3, ';
         $parameterType .= 'i';
         $parameterArray[] = $securitySchemeUserId;
         // 4. permission role in security scheme level data - group
         $query .= '(SELECT max(issue_security_scheme_level_data.id) ' . 'from issue_security_scheme_level_data ' . 'left join project_role_data on project_role_data.permission_role_id = issue_security_scheme_level_data.permission_role_id ' . 'left join `general_group` on general_group.id = project_role_data.group_id ' . 'left join `general_group_data` on general_group_data.group_id = `general_group`.id ' . 'left join general_user on general_user.id = general_group_data.user_id ' . 'where issue_security_scheme_level_data.issue_security_scheme_level_id = issue_main_table.security_scheme_level_id and ' . 'general_user.id = ?) as security_check4, ';
         $parameterType .= 'i';
         $parameterArray[] = $securitySchemeUserId;
         // 5. current_assignee in security scheme level data
         $query .= '(SELECT max(issue_security_scheme_level_data.id) ' . 'from issue_security_scheme_level_data, general_user ' . 'where issue_security_scheme_level_data.issue_security_scheme_level_id = issue_main_table.security_scheme_level_id and ' . 'issue_security_scheme_level_data.current_assignee is not null and ' . 'issue_main_table.user_assigned_id is not null and ' . 'issue_main_table.user_assigned_id = general_user.id and ' . 'general_user.id = ?) as security_check5, ';
         $parameterType .= 'i';
         $parameterArray[] = $securitySchemeUserId;
         // 6. reporter in security scheme level data
         $query .= '(SELECT max(issue_security_scheme_level_data.id) ' . 'from issue_security_scheme_level_data, general_user ' . 'where issue_security_scheme_level_data.issue_security_scheme_level_id = issue_main_table.security_scheme_level_id and ' . 'issue_security_scheme_level_data.reporter is not null and ' . 'issue_main_table.user_reported_id is not null and ' . 'issue_main_table.user_reported_id = general_user.id and ' . 'general_user.id = ?) as security_check6, ';
         $parameterType .= 'i';
         $parameterArray[] = $securitySchemeUserId;
         // 7. project_lead in security scheme level data
         $query .= '(SELECT max(issue_security_scheme_level_data.id) ' . 'from issue_security_scheme_level_data, project, general_user ' . 'where issue_security_scheme_level_data.issue_security_scheme_level_id = issue_main_table.security_scheme_level_id and ' . 'project.id = issue_main_table.project_id and ' . 'project.lead_id = general_user.id and ' . 'issue_security_scheme_level_data.project_lead is not null and ' . 'project.lead_id is not null and ' . 'general_user.id = ?) as security_check7, ';
         $parameterType .= 'i';
         $parameterArray[] = $securitySchemeUserId;
     }
     $query .= 'issue_main_table.date_created, issue_main_table.date_updated, issue_main_table.date_resolved, issue_main_table.date_due as due_date ' . 'from yongo_issue as issue_main_table ' . 'LEFT JOIN issue_priority ON issue_main_table.priority_id = issue_priority.id ' . 'LEFT JOIN issue_type ON issue_main_table.type_id = issue_type.id ' . 'LEFT JOIN issue_status ON issue_main_table.status_id = issue_status.id ' . 'LEFT JOIN issue_resolution ON issue_main_table.resolution_id = issue_resolution.id ' . 'LEFT JOIN issue_component ON issue_main_table.id = issue_component.issue_id ' . 'LEFT JOIN issue_version ON issue_main_table.id = issue_version.issue_id ' . 'LEFT JOIN project ON issue_main_table.project_id = project.id ' . 'left join permission_scheme_data on permission_scheme_data.permission_scheme_id = project.permission_scheme_id ' . 'LEFT join general_user AS user_reported ON issue_main_table.user_reported_id = user_reported.id ' . 'LEFT join general_user AS user_assigned ON issue_main_table.user_assigned_id = user_assigned.id ' . 'LEFT JOIN issue_security_scheme_level ON issue_security_scheme_level.id = issue_main_table.security_scheme_level_id ' . 'LEFT JOIN yongo_issue_sla ON yongo_issue_sla.yongo_issue_id = issue_main_table.id ';
     if (isset($parameters['backlog'])) {
         $query .= 'LEFT JOIN agile_board_sprint_issue ON agile_board_sprint_issue.issue_id = issue_main_table.id ';
         $query .= 'LEFT JOIN agile_board_sprint ON agile_board_sprint.id = agile_board_sprint_issue.agile_board_sprint_id ';
     }
     if (isset($parameters['sprint'])) {
         $query .= 'LEFT JOIN agile_board_sprint_issue ON agile_board_sprint_issue.issue_id = issue_main_table.id ';
         $query .= 'LEFT JOIN yongo_issue issue_parent on issue_parent.id = issue_main_table.parent_id ';
         $query .= 'LEFT JOIN project project_parent on project_parent.id = issue_parent.project_id ';
     }
     $queryWhere = '';
     if (isset($parameters['search_query']) && $parameters['search_query'] != '') {
         $query_where_part_arr = array();
         if (isset($parameters['summary_flag']) && $parameters['summary_flag'] == 1) {
             $query_where_part_arr[] = " issue_main_table.summary LIKE ? ";
             $parameterType .= 's';
             $parameterArray[] = "%" . $parameters['search_query'] . "%";
         }
         if (isset($parameters['description_flag']) && $parameters['description_flag'] == 1) {
             $query_where_part_arr[] = " issue_main_table.description LIKE ? ";
             $parameterType .= 's';
             $parameterArray[] = "%" . $parameters['search_query'] . "%";
         }
         // also search in assignee and reporter
         $query_where_part_arr[] = " CONCAT(user_assigned.first_name, user_assigned.last_name) LIKE ? ";
         $parameterType .= 's';
         $parameterArray[] = "%" . $parameters['search_query'] . "%";
         $query_where_part_arr[] = " CONCAT(user_reported.first_name, user_reported.last_name) LIKE ? ";
         $parameterType .= 's';
         $parameterArray[] = "%" . $parameters['search_query'] . "%";
         if ($query_where_part_arr) {
             $queryWhere .= '(' . implode(' OR ', $query_where_part_arr) . ') AND ';
         }
     }
     if (isset($parameters['project'])) {
         if (is_array($parameters['project'])) {
             $projectWithAssigneeReporterBrowsePermission = array();
             $queryProjectPartReporter = array();
             $queryProjectPartAssignee = array();
             for ($i = 0; $i < count($parameters['project']); $i++) {
                 $permissions = UbirimiContainer::get()['repository']->get(PermissionScheme::class)->getDataByProjectIdAndPermissionId($parameters['project'][$i], Permission::PERM_BROWSE_PROJECTS);
                 while ($permissions && ($permission = $permissions->fetch_array(MYSQLI_ASSOC))) {
                     if ($permission['reporter'] == 1) {
                         $queryProjectPartReporter[] = '(issue_main_table.user_reported_id = ' . $loggedInUserId . ' and issue_main_table.project_id = ' . $parameters['project'][$i] . ')';
                         $projectWithAssigneeReporterBrowsePermission[] = $parameters['project'][$i];
                     }
                     if ($permission['current_assignee'] == 1) {
                         $queryProjectPartAssignee[] = '(issue_main_table.user_assigned_id = ' . $loggedInUserId . ' and issue_main_table.project_id =  ' . $parameters['project'][$i] . ')';
                         $projectWithAssigneeReporterBrowsePermission[] = $parameters['project'][$i];
                     }
                 }
             }
             $projectWithAssigneeReporterBrowsePermission = array_unique($projectWithAssigneeReporterBrowsePermission);
             $queryWhereReporter = '';
             $queryWhereAssignee = '';
             if (count($queryProjectPartReporter)) {
                 $queryWhereReporter = '(' . implode(' OR ', $queryProjectPartReporter) . ')';
             }
             if (count($queryProjectPartAssignee)) {
                 $queryWhereAssignee = '(' . implode(' OR ', $queryProjectPartAssignee) . ')';
             }
             $queryPartReporterAssignee = array();
             if (!empty($queryWhereReporter)) {
                 $queryPartReporterAssignee[] = $queryWhereReporter;
             }
             if (!empty($queryWhereAssignee)) {
                 $queryPartReporterAssignee[] = $queryWhereAssignee;
             }
             if (count($projectWithAssigneeReporterBrowsePermission)) {
                 if (Util::array_equal($parameters['project'], $projectWithAssigneeReporterBrowsePermission)) {
                     $queryWhere .= ' (issue_main_table.project_id IN (' . implode(',', $parameters['project']) . ') OR ';
                 } else {
                     $queryWhere .= ' (issue_main_table.project_id IN (' . implode(',', array_diff($parameters['project'], $projectWithAssigneeReporterBrowsePermission)) . ') OR ';
                 }
                 $queryWhere .= '(' . implode(' OR ', $queryPartReporterAssignee) . ')) ';
                 $queryWhere .= ' AND ';
             } else {
                 $queryWhere .= ' issue_main_table.project_id IN (' . implode(',', $parameters['project']) . ') AND ';
             }
         } else {
             $queryWhere .= ' issue_main_table.project_id = ? AND ';
             $parameterType .= 'i';
             $parameterArray[] = $parameters['project'];
         }
     }
     if (isset($parameters['issue_id'])) {
         if (is_array($parameters['issue_id'])) {
             $queryWhere .= ' issue_main_table.id IN (' . implode(', ', $parameters['issue_id']) . ') AND ';
         } else {
             $queryWhere .= ' issue_main_table.id = ? AND ';
             $parameterType .= 'i';
             $parameterArray[] = $parameters['issue_id'];
         }
     }
     if (isset($parameters['nr'])) {
         $queryWhere .= ' issue_main_table.nr = ? AND ';
         $parameterType .= 'i';
         $parameterArray[] = $parameters['nr'];
     }
     if (isset($parameters['code_nr'])) {
         $queryWhere .= " CONCAT(project.code, '-', issue_main_table.nr) = ? AND ";
         $parameterType .= 's';
         $parameterArray[] = $parameters['code_nr'];
     }
     if (isset($parameters['security_scheme_level'])) {
         if ($parameters['security_scheme_level'] == -1) {
             $queryWhere .= ' issue_main_table.security_scheme_level_id IS NULL AND ';
         } else {
             $queryWhere .= ' issue_main_table.security_scheme_level_id = ? AND ';
             $parameterType .= 'i';
             $parameterArray[] = $parameters['security_scheme_level'];
         }
     }
     if (isset($parameters['sprint'])) {
         $queryWhere .= ' agile_board_sprint_issue.id is not null and agile_board_sprint_issue.agile_board_sprint_id = ? and ';
         $parameterType .= 'i';
         $parameterArray[] = $parameters['sprint'];
     }
     if (isset($parameters['board_id'])) {
         $queryWhere .= ' agile_board_sprint.agile_board_id = ? AND ';
         $parameterType .= 'i';
         $parameterArray[] = $parameters['board_id'];
     }
     if (isset($parameters['parent_id'])) {
         if (is_array($parameters['parent_id'])) {
             $queryWhere .= ' issue_main_table.parent_id IN (' . implode(', ', $parameters['parent_id']) . ') AND ';
         } else {
             $queryWhere .= ' issue_main_table.parent_id = ? AND ';
             $parameterType .= 'i';
             $parameterArray[] = $parameters['parent_id'];
         }
     }
     if (isset($parameters['backlog'])) {
         $queryWhere .= ' issue_main_table.parent_id is null and agile_board_sprint_issue.issue_id IS NULL and ';
     }
     if (isset($parameters['helpdesk_flag'])) {
         $queryWhere .= ' issue_main_table.helpdesk_flag = 1 and ';
     }
     if (isset($parameters['component'])) {
         if (is_array($parameters['component'])) {
             if (!in_array(-1, $parameters['component'])) {
                 $queryWhere .= ' issue_component.project_component_id IN (' . implode(',', $parameters['component']) . ') AND ';
             }
         } else {
             if ($parameters['component'] != -1) {
                 $queryWhere .= ' issue_component.project_component_id = ? AND ';
                 $parameterType .= 'i';
                 $parameterArray[] = $parameters['component'];
             } else {
                 $queryWhere .= ' issue_component.project_component_id is null and ';
             }
         }
     }
     if (isset($parameters['version'])) {
         if (is_array($parameters['version'])) {
             if (!in_array(-1, $parameters['version'])) {
                 $queryWhere .= ' issue_version.project_version_id IN (' . implode(',', $parameters['version']) . ') AND ';
             }
         } else {
             $queryWhere .= ' issue_version.project_version_id = ? AND ';
             $parameterType .= 'i';
             $parameterArray[] = $parameters['version'];
         }
     }
     if (isset($parameters['fix_version'])) {
         if (is_array($parameters['fix_version'])) {
             if (!in_array(-1, $parameters['fix_version'])) {
                 $queryWhere .= ' issue_version.project_version_id IN (' . implode(',', $parameters['fix_version']) . ') AND issue_version.affected_targeted_flag = ' . Issue::ISSUE_FIX_VERSION_FLAG . ' AND ';
             }
         } else {
             $queryWhere .= ' issue_version.project_version_id = ? AND issue_version.affected_targeted_flag = ' . Issue::ISSUE_FIX_VERSION_FLAG . ' AND ';
             $parameterType .= 'i';
             $parameterArray[] = $parameters['fix_version'];
         }
     }
     if (isset($parameters['affects_version'])) {
         if (is_array($parameters['affects_version'])) {
             if (!in_array(-1, $parameters['affects_version'])) {
                 $queryWhere .= ' issue_version.project_version_id IN (' . implode(',', $parameters['affects_version']) . ') AND issue_version.affected_targeted_flag = ' . Issue::ISSUE_AFFECTED_VERSION_FLAG . ' AND ';
             }
         } else {
             $queryWhere .= ' issue_version.project_version_id = ? AND issue_version.affected_targeted_flag = ' . Issue::ISSUE_FIX_VERSION_FLAG . ' AND ';
             $parameterType .= 'i';
             $parameterArray[] = $parameters['affects_version'];
         }
     }
     if (array_key_exists('assignee', $parameters)) {
         if (is_array($parameters['assignee'])) {
             for ($index = 0; $index < count($parameters['assignee']); $index++) {
                 if ($parameters['assignee'][$index] == 'current_user') {
                     $parameters['assignee'][$index] = $securitySchemeUserId;
                 }
             }
             if (!in_array(-1, $parameters['assignee'])) {
                 $queryWhere .= ' issue_main_table.user_assigned_id IN (' . implode(',', $parameters['assignee']) . ') AND ';
             }
         } else {
             if ($parameters['assignee']) {
                 if ($parameters['assignee'] == 'current_user') {
                     $parameters['assignee'] = $securitySchemeUserId;
                 }
                 $queryWhere .= ' issue_main_table.user_assigned_id = ? AND ';
                 $parameterType .= 'i';
                 $parameterArray[] = $parameters['assignee'];
             } else {
                 if ($parameters['assignee'] === 0) {
                     $queryWhere .= ' issue_main_table.user_assigned_id is null and ';
                 }
             }
         }
     }
     if (array_key_exists('not_assignee', $parameters)) {
         $queryWhere .= ' issue_main_table.user_assigned_id != ? AND ';
         $parameterType .= 'i';
         $parameterArray[] = $parameters['not_assignee'];
     }
     if (array_key_exists('date_due', $parameters)) {
         $queryWhere .= ' issue_main_table.date_due = ? AND ';
         $parameterType .= 's';
         $parameterArray[] = $parameters['date_due'];
     }
     if (array_key_exists('date_due_after', $parameters) && isset($parameters['date_due_after'])) {
         $queryWhere .= ' issue_main_table.date_due >= ? AND ';
         $parameterType .= 's';
         $parameterArray[] = $parameters['date_due_after'];
     }
     if (array_key_exists('date_due_before', $parameters) && isset($parameters['date_due_before'])) {
         $queryWhere .= ' issue_main_table.date_due <= ? AND ';
         $parameterType .= 's';
         $parameterArray[] = $parameters['date_due_before'];
     }
     if (array_key_exists('date_created_after', $parameters) && isset($parameters['date_created_after'])) {
         $queryWhere .= ' issue_main_table.date_created >= ? AND ';
         $parameterType .= 's';
         $parameterArray[] = $parameters['date_created_after'];
     }
     if (array_key_exists('date_updated_after', $parameters) && isset($parameters['date_updated_after'])) {
         $queryWhere .= ' issue_main_table.date_updated >= ? AND ';
         $parameterType .= 's';
         $parameterArray[] = $parameters['date_updated_after'];
     }
     if (array_key_exists('date_created_before', $parameters) && isset($parameters['date_created_before'])) {
         $queryWhere .= ' issue_main_table.date_created <= ? AND ';
         $parameterType .= 's';
         $parameterArray[] = $parameters['date_created_before'];
     }
     if (isset($parameters['reporter'])) {
         if (is_array($parameters['reporter'])) {
             if (!in_array(-1, $parameters['reporter'])) {
                 $queryWhere .= ' issue_main_table.user_reported_id IN (' . implode(',', $parameters['reporter']) . ') AND ';
             }
         } else {
             $queryWhere .= ' issue_main_table.user_reported_id = ? AND ';
             $parameterType .= 'i';
             $parameterArray[] = $parameters['reporter'];
         }
     }
     if (isset($parameters['client_id'])) {
         $queryWhere .= ' project.client_id = ? AND ';
         $parameterType .= 'i';
         $parameterArray[] = $parameters['client_id'];
     }
     if (isset($parameters['type'])) {
         if (is_array($parameters['type'])) {
             if (!in_array(-1, $parameters['type'])) {
                 $queryWhere .= ' issue_main_table.type_id IN (' . implode(',', $parameters['type']) . ') AND ';
             }
         } else {
             $queryWhere .= ' issue_main_table.type_id = ? AND ';
             $parameterType .= 'i';
             $parameterArray[] = $parameters['type'];
         }
     }
     if (isset($parameters['priority'])) {
         if (is_array($parameters['priority'])) {
             if (!in_array(-1, $parameters['priority'])) {
                 $queryWhere .= ' issue_main_table.priority_id IN (' . implode(',', $parameters['priority']) . ') AND ';
             }
         } else {
             $queryWhere .= ' issue_main_table.priority_id = ? AND ';
             $parameterType .= 'i';
             $parameterArray[] = $parameters['priority'];
         }
     }
     if (isset($parameters['status'])) {
         if (is_array($parameters['status'])) {
             if (!in_array(-1, $parameters['status'])) {
                 $queryWhere .= ' issue_main_table.status_id IN (' . implode(',', $parameters['status']) . ') AND ';
             }
         } else {
             $queryWhere .= ' issue_main_table.status_id = ? AND ';
             $parameterType .= 'i';
             $parameterArray[] = $parameters['status'];
         }
     }
     if (isset($parameters['not_status'])) {
         if (is_array($parameters['not_status'])) {
             $queryWhere .= ' issue_main_table.status_id NOT IN (' . implode(',', $parameters['not_status']) . ') AND ';
         } else {
             $queryWhere .= ' issue_main_table.status_id != ? AND ';
             $parameterType .= 'i';
             $parameterArray[] = $parameters['not_status'];
         }
     }
     if (isset($parameters['resolution'])) {
         $includeUnresolvedIssues = false;
         $includeAllResolutions = false;
         // any resolution
         $index = array_search(-1, $parameters['resolution']);
         if ($index !== false) {
             $includeAllResolutions = true;
             unset($parameters['resolution'][$index]);
         }
         // unresolved issues
         $index = array_search(-2, $parameters['resolution']);
         if ($index !== false) {
             $includeUnresolvedIssues = true;
             unset($parameters['resolution'][$index]);
         }
         $queryResolutionPart = array();
         if ($includeAllResolutions) {
             $queryResolutionPart[] = ' issue_main_table.resolution_id IS NOT NULL ';
         }
         if (count($parameters['resolution'])) {
             $queryResolutionPart[] = ' issue_main_table.resolution_id IN (' . implode(',', $parameters['resolution']) . ') ';
         }
         if ($includeUnresolvedIssues) {
             $queryResolutionPart[] = ' issue_main_table.resolution_id IS NULL ';
         }
         if (count($queryResolutionPart)) {
             $queryWhere .= '( ' . implode(' OR ', $queryResolutionPart) . ' ) ';
         }
     }
     if (strtoupper(substr($queryWhere, strlen($queryWhere) - 4, 4)) == 'AND ') {
         $queryWhere = substr($queryWhere, 0, strlen($queryWhere) - 4);
     }
     if (strtoupper(substr($queryWherePart, strlen($queryWherePart) - 4, 4)) == 'AND ') {
         $queryWherePart = substr($queryWherePart, 0, strlen($queryWherePart) - 4);
     }
     $sortColumns = array();
     if (isset($parameters['sort'])) {
         switch ($parameters['sort']) {
             case 'code':
                 $sortColumns[] = 'issue_main_table.id';
                 break;
             case 'type':
                 $sortColumns[] = 'type';
                 break;
             case 'priority':
                 $sortColumns[] = 'priority';
                 break;
             case 'status':
                 $sortColumns[] = 'status';
                 break;
             case 'reporter':
                 $sortColumns[] = 'ur_first_name';
                 $sortColumns[] = 'ur_last_name';
                 break;
             case 'summary':
                 $sortColumns[] = 'issue_main_table.summary';
                 break;
             case 'reported_by':
                 $sortColumns[] = 'user_reported.id';
                 break;
             case 'assignee':
                 $sortColumns[] = 'ua_first_name';
                 $sortColumns[] = 'ua_last_name';
                 break;
             case 'created':
                 $sortColumns[] = 'issue_main_table.date_created';
                 break;
             case 'updated':
                 $sortColumns[] = 'issue_main_table.date_updated';
                 break;
             case 'parent':
                 $sortColumns[] = 'issue_main_table.parent_id';
                 break;
             case 'sprint':
                 $sortColumns[] = 'sort_sprint';
                 break;
         }
     } else {
         $sortColumns[] = 'issue_main_table.date_created';
     }
     if ($queryWherePart) {
         $queryWhere .= $queryWherePart;
     }
     if ($queryWhere != '') {
         $query .= ' WHERE ' . $queryWhere;
     }
     $query .= ' GROUP BY issue_main_table.id ';
     if ($securitySchemeUserId) {
         $query .= ' HAVING ((security_check1 > 0 or security_check2 > 0 or security_check3 > 0 or security_check4 > 0 or security_check5 > 0 or security_check6 > 0 or security_check7 > 0) ' . ' OR (issue_main_table.security_scheme_level_id is null and security_check1 is null and security_check2 is null and security_check3 is null and security_check4 is null and security_check5 is null and security_check6 is null and security_check7 is null)) ';
     }
     if (isset($parameters['sort']) && isset($parameters['sort_order']) && $sortColumns) {
         for ($i = 0; $i < count($sortColumns); $i++) {
             $sortColumns[$i] = $sortColumns[$i] . ' ' . $parameters['sort_order'];
         }
     }
     if (count($sortColumns)) {
         $query .= 'ORDER BY ' . implode(', ', $sortColumns);
     }
     if (isset($parameters['page'])) {
         $query .= ' LIMIT ' . ($parameters['page'] - 1) * $parameters['issues_per_page'] . ', ' . $parameters['issues_per_page'];
     }
     //        $queryTest = $query;
     //        for ($p = 0; $p < count($parameterArray); $p++) {
     //            $queryTest = preg_replace('/\?/', $parameterArray[$p], $queryTest, 1);
     //        }
     //        echo $querytest;
     $stmt = UbirimiContainer::get()['db.connection']->prepare($query);
     if ($queryWhere != '') {
         $param_arr_ref = array();
         foreach ($parameterArray as $key => $value) {
             $param_arr_ref[$key] =& $parameterArray[$key];
         }
         if ($parameterType != '') {
             call_user_func_array(array($stmt, "bind_param"), array_merge(array($parameterType), $param_arr_ref));
         }
     }
     $stmt->execute();
     $result = $stmt->get_result();
     if (!$result->num_rows) {
         return null;
     }
     if (isset($parameters['page'])) {
         $q = "SELECT FOUND_ROWS() as count;";
         $stmt = UbirimiContainer::get()['db.connection']->prepare($q);
         $stmt->execute();
         $result_total = $stmt->get_result();
         $count = $result_total->fetch_array(MYSQLI_ASSOC);
         return array($result, $count['count']);
     } else {
         if (isset($parameters['issue_id']) && !is_array($parameters['issue_id']) || isset($parameters['nr'])) {
             $issueData = $result->fetch_array(MYSQLI_ASSOC);
             $issueData['component'] = array();
             $issueData['component_ids'] = array();
             $issueData['affects_version'] = array();
             $issueData['affects_version_ids'] = array();
             $issueData['fix_version'] = array();
             $issueData['fix_version_ids'] = array();
             $components = UbirimiContainer::get()['repository']->get(IssueComponent::class)->getByIssueIdAndProjectId($issueData['id'], $issueData['issue_project_id'], 'array');
             for ($i = 0; $i < count($components); $i++) {
                 $issueData['component'][] = $components[$i]['name'];
                 $issueData['component_ids'][] = $components[$i]['id'];
             }
             $affectsVersions = UbirimiContainer::get()['repository']->get(IssueVersion::class)->getByIssueIdAndProjectId($issueData['id'], $issueData['issue_project_id'], Issue::ISSUE_AFFECTED_VERSION_FLAG, 'array');
             for ($i = 0; $i < count($affectsVersions); $i++) {
                 $issueData['affects_version'][] = $affectsVersions[$i]['name'];
                 $issueData['affects_version_ids'][] = $affectsVersions[$i]['id'];
             }
             $fixVersions = UbirimiContainer::get()['repository']->get(IssueVersion::class)->getByIssueIdAndProjectId($issueData['id'], $issueData['issue_project_id'], Issue::ISSUE_FIX_VERSION_FLAG, 'array');
             for ($i = 0; $i < count($fixVersions); $i++) {
                 $issueData['fix_version'][] = $fixVersions[$i]['name'];
                 $issueData['fix_version_ids'][] = $fixVersions[$i]['id'];
             }
             return $issueData;
         } else {
             return $result;
         }
     }
 }