コード例 #1
0
 /**
  * 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 '&nbsp;&nbsp;&nbsp;';
         }
         $i++;
     }
 }
コード例 #2
0
 /**
  * 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;
 }