/** * Display gradebook graphs */ public function display_graph_by_resource() { $headerName = $this->datagen->get_header_names(); $total_users = $this->datagen->get_total_users_count(); $displayscore = ScoreDisplay::instance(); $customdisplays = $displayscore->get_custom_score_display_settings(); if (empty($customdisplays)) { echo get_lang('ToViewGraphScoreRuleMustBeEnabled'); return ''; } $user_results = $this->datagen->get_data_to_graph2(false); //if (empty($this->datagen->get_total_items_count()) || empty($total_users)) { if (empty($user_results) || empty($total_users)) { echo get_lang('NoResults'); return ''; } // Removing first name array_shift($headerName); // Removing last name array_shift($headerName); $pre_result = $new_result = array(); foreach ($user_results as $result) { for ($i = 0; $i < count($headerName); $i++) { if (isset($result[$i + 1])) { $pre_result[$i + 3][] = $result[$i + 1]; } } } $i = 0; $show_draw = false; $resource_list = array(); $pre_result2 = array(); foreach ($pre_result as $key => $res_array) { rsort($res_array); $pre_result2[] = $res_array; } //@todo when a display custom does not exist the order of the color does not match //filling all the answer that are not responded with 0 rsort($customdisplays); if ($total_users > 0) { foreach ($pre_result2 as $key => $res_array) { $key_list = array(); foreach ($res_array as $user_result) { $userResult = isset($user_result[1]) ? $user_result[1] : null; if (!isset($resource_list[$key][$userResult])) { $resource_list[$key][$userResult] = 0; } $resource_list[$key][$userResult] += 1; $key_list[] = $userResult; } foreach ($customdisplays as $display) { if (!in_array($display['display'], $key_list)) { $resource_list[$key][$display['display']] = 0; } } $i++; } } //fixing $resource_list $max = 0; $new_list = array(); foreach ($resource_list as $key => $value) { $new_value = array(); foreach ($customdisplays as $item) { if ($value[$item['display']] > $max) { $max = $value[$item['display']]; } $new_value[$item['display']] = strip_tags($value[$item['display']]); } $new_list[] = $new_value; } $resource_list = $new_list; $i = 1; foreach ($resource_list as $key => $resource) { // Reverse array, otherwise we get highest values first $resource = array_reverse($resource, true); $dataSet = new pData(); $dataSet->addPoints($resource, 'Serie'); $dataSet->addPoints(array_keys($resource), 'Labels'); $dataSet->setSerieDescription('Labels', strip_tags($headerName[$i - 1])); $dataSet->setAbscissa('Labels'); $dataSet->setAbscissaName(get_lang('GradebookSkillsRanking')); $dataSet->setAxisName(0, get_lang('Students')); $palette = array('0' => array('R' => 186, 'G' => 206, 'B' => 151, 'Alpha' => 100), '1' => array('R' => 210, 'G' => 148, 'B' => 147, 'Alpha' => 100), '2' => array('R' => 148, 'G' => 170, 'B' => 208, 'Alpha' => 100), '3' => array('R' => 221, 'G' => 133, 'B' => 61, 'Alpha' => 100), '4' => array('R' => 65, 'G' => 153, 'B' => 176, 'Alpha' => 100), '5' => array('R' => 114, 'G' => 88, 'B' => 144, 'Alpha' => 100), '6' => array('R' => 138, 'G' => 166, 'B' => 78, 'Alpha' => 100), '7' => array('R' => 171, 'G' => 70, 'B' => 67, 'Alpha' => 100), '8' => array('R' => 69, 'G' => 115, 'B' => 168, 'Alpha' => 100)); // Cache definition $cachePath = api_get_path(SYS_ARCHIVE_PATH); $myCache = new pCache(array('CacheFolder' => substr($cachePath, 0, strlen($cachePath) - 1))); $chartHash = $myCache->getHash($dataSet); if ($myCache->isInCache($chartHash)) { $imgPath = api_get_path(SYS_ARCHIVE_PATH) . $chartHash; $myCache->saveFromCache($chartHash, $imgPath); $imgPath = api_get_path(WEB_ARCHIVE_PATH) . $chartHash; } else { /* Create the pChart object */ $widthSize = 480; $heightSize = 250; $myPicture = new pImage($widthSize, $heightSize, $dataSet); /* Turn of Antialiasing */ $myPicture->Antialias = false; /* Add a border to the picture */ $myPicture->drawRectangle(0, 0, $widthSize - 1, $heightSize - 1, array('R' => 0, 'G' => 0, 'B' => 0)); /* Set the default font */ $myPicture->setFontProperties(array('FontName' => api_get_path(SYS_FONTS_PATH) . 'opensans/OpenSans-Regular.ttf', 'FontSize' => 10)); /* Write the chart title */ $myPicture->drawText(250, 30, strip_tags($headerName[$i - 1]), array('FontSize' => 12, 'Align' => TEXT_ALIGN_BOTTOMMIDDLE)); /* Define the chart area */ $myPicture->setGraphArea(50, 40, $widthSize - 20, $heightSize - 50); /* Draw the scale */ $scaleSettings = array('GridR' => 200, 'GridG' => 200, 'GridB' => 200, 'DrawSubTicks' => true, 'CycleBackground' => true, 'Mode' => SCALE_MODE_START0); $myPicture->drawScale($scaleSettings); /* Turn on shadow computing */ $myPicture->setShadow(true, array('X' => 1, 'Y' => 1, 'R' => 0, 'G' => 0, 'B' => 0, 'Alpha' => 10)); /* Draw the chart */ $myPicture->setShadow(true, array('X' => 1, 'Y' => 1, 'R' => 0, 'G' => 0, 'B' => 0, 'Alpha' => 10)); $settings = array('OverrideColors' => $palette, 'Gradient' => false, 'GradientMode' => GRADIENT_SIMPLE, 'DisplayPos' => LABEL_POS_TOP, 'DisplayValues' => true, 'DisplayR' => 0, 'DisplayG' => 0, 'DisplayB' => 0, 'DisplayShadow' => true, 'Surrounding' => 10); $myPicture->drawBarChart($settings); /* Render the picture (choose the best way) */ $myCache->writeToCache($chartHash, $myPicture); $imgPath = api_get_path(SYS_ARCHIVE_PATH) . $chartHash; $myCache->saveFromCache($chartHash, $imgPath); $imgPath = api_get_path(WEB_ARCHIVE_PATH) . $chartHash; } echo '<img src="' . $imgPath . '" >'; if ($i % 2 == 0 && $i != 0) { echo '<br /><br />'; } else { echo ' '; } $i++; } }
/** * This method return a graph containing information about students evaluation, * it's used inside get_block method for showing it inside dashboard interface * @return string img html */ public function get_students_attendance_graph() { $students = $this->students; $attendance = new Attendance(); // get data $attendances_faults_avg = array(); if (is_array($students) && count($students) > 0) { foreach ($students as $student) { $student_id = $student['user_id']; //$student_info = api_get_user_info($student_id); // get average of faults in attendances by student $results_faults_avg = $attendance->get_faults_average_inside_courses($student_id); if (!empty($results_faults_avg)) { $attendances_faults_avg[$student['lastname']] = $results_faults_avg['porcent']; } else { $attendances_faults_avg[$student['lastname']] = 0; } } } arsort($attendances_faults_avg); $usernames = array_keys($attendances_faults_avg); $faults = array(); foreach ($usernames as $username) { $faults[] = $attendances_faults_avg[$username]; } $graph = ''; $img_file = ''; if (is_array($usernames) && count($usernames) > 0) { // Defining data $dataSet = new pData(); $dataSet->addPoints($faults, 'Serie1'); $dataSet->addPoints($usernames, 'Labels'); $dataSet->setSerieDescription('Series1', get_lang('Average')); $dataSet->setSerieDescription('Labels', get_lang('User')); $dataSet->setAbscissa('Labels'); $dataSet->setAbscissaName(get_lang('User')); $dataSet->setAxisName(0, get_lang('Attendance')); $palette = array('0' => array('R' => 186, 'G' => 206, 'B' => 151, 'Alpha' => 100), '1' => array('R' => 210, 'G' => 148, 'B' => 147, 'Alpha' => 100), '2' => array('R' => 148, 'G' => 170, 'B' => 208, 'Alpha' => 100), '3' => array('R' => 221, 'G' => 133, 'B' => 61, 'Alpha' => 100), '4' => array('R' => 65, 'G' => 153, 'B' => 176, 'Alpha' => 100), '5' => array('R' => 114, 'G' => 88, 'B' => 144, 'Alpha' => 100), '6' => array('R' => 138, 'G' => 166, 'B' => 78, 'Alpha' => 100), '7' => array('R' => 171, 'G' => 70, 'B' => 67, 'Alpha' => 100), '8' => array('R' => 69, 'G' => 115, 'B' => 168, 'Alpha' => 100)); // Cache definition $cachePath = api_get_path(SYS_ARCHIVE_PATH); $myCache = new pCache(array('CacheFolder' => substr($cachePath, 0, strlen($cachePath) - 1))); $chartHash = $myCache->getHash($dataSet); if ($myCache->isInCache($chartHash)) { $imgPath = api_get_path(SYS_ARCHIVE_PATH) . $chartHash; $myCache->saveFromCache($chartHash, $imgPath); $imgPath = api_get_path(WEB_ARCHIVE_PATH) . $chartHash; } else { $maxCounts = max(count($usernames), count($faults)); if ($maxCounts < 5) { $heightSize = 200; } else { $heightSize = $maxCounts * 40; } /* Create the pChart object */ $widthSize = 480; $angle = 40; $myPicture = new pImage($widthSize, $heightSize, $dataSet); /* Turn of Antialiasing */ $myPicture->Antialias = false; /* Add a border to the picture */ $myPicture->drawRectangle(0, 0, $widthSize - 1, $heightSize - 1, array('R' => 0, 'G' => 0, 'B' => 0)); /* Set the default font */ $myPicture->setFontProperties(array('FontName' => api_get_path(SYS_FONTS_PATH) . 'opensans/OpenSans-Regular.ttf', 'FontSize' => 10)); /* Do NOT Write the chart title */ /* Define the chart area */ $myPicture->setGraphArea(80, 40, $widthSize - 20, $heightSize - 40); /* Draw the scale */ $scaleSettings = array('GridR' => 200, 'GridG' => 200, 'GridB' => 200, 'DrawSubTicks' => true, 'CycleBackground' => true, 'Mode' => SCALE_MODE_ADDALL_START0, 'Pos' => SCALE_POS_TOPBOTTOM, 'DrawXLines' => false, 'LabelRotation' => $angle); $myPicture->drawScale($scaleSettings); /* Turn on shadow computing */ $myPicture->setShadow(true, array('X' => 1, 'Y' => 1, 'R' => 0, 'G' => 0, 'B' => 0, 'Alpha' => 10)); /* Draw the chart */ $myPicture->setShadow(true, array('X' => 1, 'Y' => 1, 'R' => 0, 'G' => 0, 'B' => 0, 'Alpha' => 10)); $settings = array('OverrideColors' => $palette, 'Gradient' => false, 'GradientMode' => GRADIENT_SIMPLE, 'DisplayPos' => LABEL_POS_TOP, 'DisplayValues' => true, 'DisplayR' => 0, 'DisplayG' => 0, 'DisplayB' => 0, 'DisplayShadow' => true, 'Surrounding' => 10); $myPicture->drawBarChart($settings); /* Write and save into cache */ $myCache->writeToCache($chartHash, $myPicture); $imgPath = api_get_path(SYS_ARCHIVE_PATH) . $chartHash; $myCache->saveFromCache($chartHash, $imgPath); $imgPath = api_get_path(WEB_ARCHIVE_PATH) . $chartHash; } $graph = '<img src="' . $imgPath . '" >'; } else { $graph = '<p>' . api_convert_encoding(get_lang('GraphicNotAvailable'), 'UTF-8') . '</p>'; } return $graph; }