datagen = new ResultsDataGenerator($evaluation, $results, true); $this->evaluation = $evaluation; $this->iscourse = $iscourse; $this->forprint = $forprint; if (isset($addparams)) { $this->set_additional_parameters($addparams); } $scoredisplay = ScoreDisplay::instance(); $column = 0; if ($this->iscourse == '1') { $this->set_header($column++, '', false); $this->set_form_actions([ 'delete' => get_lang('Delete'), ]); } if (api_is_western_name_order()) { $this->set_header($column++, get_lang('First name')); $this->set_header($column++, get_lang('Last name')); } else { $this->set_header($column++, get_lang('Last name')); $this->set_header($column++, get_lang('First name')); } $model = ExerciseLib::getCourseScoreModel(); if (empty($model)) { $this->set_header($column++, get_lang('Score')); } if ($scoredisplay->is_custom()) { $this->set_header($column++, get_lang('Ranking')); } if (!$this->forprint) { $this->set_header($column++, get_lang('Edit'), false); } } /** * Function used by SortableTable to get total number of items in the table. */ public function get_total_number_of_items() { return $this->datagen->get_total_results_count(); } /** * Function used by SortableTable to generate the data to display. */ public function get_table_data( $from = 1, $per_page = null, $column = null, $direction = null, $sort = null ) { $isWesternNameOrder = api_is_western_name_order(); $scoredisplay = ScoreDisplay::instance(); // determine sorting type $col_adjust = $this->iscourse == '1' ? 1 : 0; switch ($this->column) { // first name or last name case 0 + $col_adjust: if ($isWesternNameOrder) { $sorting = ResultsDataGenerator::RDG_SORT_FIRSTNAME; } else { $sorting = ResultsDataGenerator::RDG_SORT_LASTNAME; } break; // first name or last name case 1 + $col_adjust: if ($isWesternNameOrder) { $sorting = ResultsDataGenerator::RDG_SORT_LASTNAME; } else { $sorting = ResultsDataGenerator::RDG_SORT_FIRSTNAME; } break; // Score case 2 + $col_adjust: $sorting = ResultsDataGenerator::RDG_SORT_SCORE; break; case 3 + $col_adjust: $sorting = ResultsDataGenerator::RDG_SORT_MASK; break; } if ($this->direction === 'DESC') { $sorting |= ResultsDataGenerator::RDG_SORT_DESC; } else { $sorting |= ResultsDataGenerator::RDG_SORT_ASC; } $data_array = $this->datagen->get_data($sorting, $from, $this->per_page); $model = ExerciseLib::getCourseScoreModel(); // generate the data to display $sortable_data = []; foreach ($data_array as $item) { $row = []; if ($this->iscourse == '1') { $row[] = $item['result_id']; } if ($isWesternNameOrder) { $row[] = $item['firstname']; $row[] = $item['lastname']; } else { $row[] = $item['lastname']; $row[] = $item['firstname']; } if (empty($model)) { $row[] = Display::bar_progress( $item['percentage_score'], false, $item['score'] ); } if ($scoredisplay->is_custom()) { $row[] = $item['display']; } if (!$this->forprint) { $row[] = $this->build_edit_column($item); } $sortable_data[] = $row; } return $sortable_data; } /** * @param Result $result * @param string $url * * @return string */ public static function getResultAttemptTable($result, $url = '') { if (empty($result)) { return ''; } $table = Database::get_main_table(TABLE_MAIN_GRADEBOOK_RESULT_ATTEMPT); $sql = "SELECT * FROM $table WHERE result_id = ".$result->get_id().' ORDER BY created_at DESC'; $resultQuery = Database::query($sql); $list = Database::store_result($resultQuery); $htmlTable = new HTML_Table(['class' => 'data_table']); $htmlTable->setHeaderContents(0, 0, get_lang('Score')); $htmlTable->setHeaderContents(0, 1, get_lang('Comment')); $htmlTable->setHeaderContents(0, 2, get_lang('Created at')); if (!empty($url)) { $htmlTable->setHeaderContents(0, 3, get_lang('Detail')); } $row = 1; foreach ($list as $data) { $htmlTable->setCellContents($row, 0, $data['score']); $htmlTable->setCellContents($row, 1, $data['comment']); $htmlTable->setCellContents($row, 2, Display::dateToStringAgoAndLongDate($data['created_at'])); if (!empty($url)) { $htmlTable->setCellContents( $row, 3, Display::url( Display::return_icon('delete.png', get_lang('Delete')), $url.'&action=delete_attempt&result_attempt_id='.$data['id'] ) ); } $row++; } return $htmlTable->toHtml(); } /** * @param array $item * * @return string */ private function build_edit_column($item) { $locked_status = $this->evaluation->get_locked(); $allowMultipleAttempts = api_get_configuration_value('gradebook_multiple_evaluation_attempts'); $baseUrl = api_get_self().'?selecteval='.$this->evaluation->get_id().'&'.api_get_cidreq(); $editColumn = ''; if (api_is_allowed_to_edit(null, true) && $locked_status == 0) { if ($allowMultipleAttempts) { if (!empty($item['percentage_score'])) { $editColumn .= Display::url( Display::return_icon('add.png', get_lang('AddAttempt'), '', '22'), $baseUrl.'&action=add_attempt&editres='.$item['result_id'] ); } else { $editColumn .= ''. Display::return_icon('edit.png', get_lang('Edit'), '', '22').''; } } else { $editColumn .= ''. Display::return_icon('edit.png', get_lang('Edit'), '', '22').''; } $editColumn .= ' '. Display::return_icon('delete.png', get_lang('Delete'), '', '22').''; } if ($this->evaluation->get_course_code() == null) { $editColumn .= ' '; $editColumn .= Display::return_icon('delete.png', get_lang('Delete')); $editColumn .= ''; $editColumn .= ' '; $editColumn .= Display::return_icon('statistics.gif', get_lang('Statistics')); $editColumn .= ''; } // Evaluation's origin is a link if ($this->evaluation->get_category_id() < 0) { $link = LinkFactory::get_evaluation_link($this->evaluation->get_id()); $doc_url = $link->get_view_url($item['id']); if ($doc_url != null) { $editColumn .= ' '; $editColumn .= Display::return_icon('link.gif', get_lang('Open document')).''; } } return $editColumn; } }