selectcat = $selectcat; $this->datagen = new FlatViewDataGenerator($users, $evals, $links, array('only_subcat'=>$this->selectcat->get_id())); $this->limit_enabled = $limit_enabled; $this->offset = $offset; if (isset ($addparams)) { $this->set_additional_parameters($addparams); } // step 2: generate rows: students $this->datagen->category = $this->selectcat; } /** * Display the graph of the total results of all students * */ function display_graph() { include_once api_get_path(LIBRARY_PATH).'pchart/pData.class.php'; include_once api_get_path(LIBRARY_PATH).'pchart/pChart.class.php'; include_once api_get_path(LIBRARY_PATH).'pchart/pCache.class.php'; $header_name = $this->datagen->get_header_names(); $total_users = $this->datagen->get_total_users_count(); $img_file = ''; if ($this->datagen->get_total_items_count()>0 && $total_users > 0 ) { //Removing user names and total array_shift($header_name); array_shift($header_name); array_pop($header_name); $user_results = $this->datagen->get_data_to_graph(); $pre_result = $new_result = array(); $DataSet = new pData(); //$pre_result total score of students //filling the Dataset foreach($user_results as $result) { for($i=0; $i < count($header_name); $i++) { $pre_result[$i+3]+= $result[$i+1]; } } $i = 1; $show_draw = false; if ($total_users >0 ) { foreach($pre_result as $res) { $total = $res / ($total_users); if ($total != 0) { $show_draw = true; } $DataSet->AddPoint($total, "Serie".$i); $DataSet->SetSerieName(strip_tags($header_name[$i-1]),"Serie".$i); // Dataset definition $DataSet->AddAllSeries(); $DataSet->SetAbsciseLabelSerie(); $i++; } } // Cache definition $Cache = new pCache(); // the graph id $gradebook_id = intval($_GET['selectcat']); $graph_id = api_get_user_id().'AverageResultsVsResource'.$gradebook_id.api_get_course_id(); $data = $DataSet->GetData(); if ($show_draw) { if ($Cache->IsInCache($graph_id, $DataSet->GetData())) { //if (0) { //if we already created the img //echo 'in cache'; $img_file = $Cache->GetHash($graph_id,$DataSet->GetData()); } else { // if the image does not exist in the archive/ folder // Initialise the graph $Test = new pChart(760, 360); //which schema of color will be used $quant_resources = count($data[0])-1; // Adding the color schemma if ($quant_resources < 8) { $Test->loadColorPalette(api_get_path(LIBRARY_PATH)."pchart/palette/reduced.txt"); } else { $Test->loadColorPalette(api_get_path(LIBRARY_PATH)."pchart/palette/default.txt"); } // set font of the axes $Test->setFontProperties(api_get_path(LIBRARY_PATH)."pchart/fonts/tahoma.ttf",8); $Test->setGraphArea(50,30,610,300); $Test->drawFilledRoundedRectangle(7,7,780,330,5,240,240,240); //$Test->drawRoundedRectangle(5,5,790,330,5,230,230,230); //background color area & stripe or not $Test->drawGraphArea(255,255,255,TRUE); $Test->drawScale($DataSet->GetData(), $DataSet->GetDataDescription(), SCALE_START0 ,150,150,150,TRUE,0,1, FALSE); //background grid $Test->drawGrid(4,TRUE,230,230,230,50); // Draw the 0 line //$Test->setFontProperties(api_get_path(LIBRARY_PATH)."pchart/fonts/tahoma.ttf",6); //$Test->drawTreshold(0,143,55,72,TRUE,TRUE); // Draw the bar graph $Test->drawBarGraph($DataSet->GetData(),$DataSet->GetDataDescription(),TRUE); //Set legend properties: width, height and text color and font $Test->setFontProperties(api_get_path(LIBRARY_PATH)."pchart/fonts/tahoma.ttf",9); $Test->drawLegend(620, 70,$DataSet->GetDataDescription(),255,255,255); //Set title properties $Test->setFontProperties(api_get_path(LIBRARY_PATH)."pchart/fonts/tahoma.ttf",10); $Test->drawTitle(50,22,get_lang('AverageResultsVsResource'),50,50,80,620); //------------------ //echo 'not in cache'; $Cache->WriteToCache($graph_id,$DataSet->GetData(),$Test); ob_start(); $Test->Stroke(); ob_end_clean(); $img_file = $Cache->GetHash($graph_id,$DataSet->GetData()); } } } return api_get_path(WEB_ARCHIVE_PATH).$img_file; } function display_graph_by_resource() { require_once api_get_path(LIBRARY_PATH).'pchart/pData.class.php'; require_once api_get_path(LIBRARY_PATH).'pchart/pChart.class.php'; require_once api_get_path(LIBRARY_PATH).'pchart/pCache.class.php'; $header_name = $this->datagen->get_header_names(); $total_users = $this->datagen->get_total_users_count(); $img_file = ''; if ($this->datagen->get_total_items_count() > 0 && $total_users > 0 ) { //Removing first name array_shift($header_name); //Removing last name array_shift($header_name); $displayscore = ScoreDisplay :: instance(); $customdisplays = $displayscore->get_custom_score_display_settings(); if (is_array($customdisplays) && count(($customdisplays))) { $user_results = $this->datagen->get_data_to_graph2(); $pre_result = $new_result = array(); $DataSet = new pData(); //filling the Dataset foreach ($user_results as $result) { //print_r($result); for($i=0; $i< count($header_name); $i++) { $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) { $resource_list[$key][$user_result[1]] += 1; $key_list[] = $user_result[1]; } 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; $j = 0; foreach($resource_list as $key=>$resource) { $new_resource_list = $new_resource_list_name = array(); $DataSet = new pData(); // Reverse array, otherwise we get highest values first $resource = array_reverse($resource,true); foreach ($resource as $name=>$cant) { $DataSet->AddPoint($cant,"Serie".$j); $DataSet->SetSerieName(strip_tags($name),"Serie".$j); $j++; } //print_r($pre_result); print_r($header_name); // Dataset definition $DataSet->AddAllSeries(); $DataSet->SetAbsciseLabelSerie(''); $DataSet->SetXAxisName(get_lang('GradebookSkillsRanking')); $DataSet->SetYAxisName(get_lang('Students')); $show_draw = true; // Cache definition $Cache = new pCache(); // the graph id $gradebook_id = intval($_GET['selectcat']); $graph_id = api_get_user_id().'ByResource'.$gradebook_id.api_get_course_id().api_get_session_id(); if ($show_draw) { //if ($Cache->IsInCache($graph_id, $DataSet->GetData())) { if (0) { //if we already created the img we get the img file id //echo 'in cache'; $img_file = $Cache->GetHash($graph_id,$DataSet->GetData()); } else { // if the image does not exist in the archive/ folder // Initialise the graph $chart_size_w= 480; $chart_size_h= 250; $Test = new pChart($chart_size_w, $chart_size_h); // Adding the color schemma $Test->loadColorPalette(api_get_path(LIBRARY_PATH)."pchart/palette/pastel.txt"); // set font of the axes $Test->setFontProperties(api_get_path(LIBRARY_PATH)."pchart/fonts/tahoma.ttf",8); $area_graph_w = $chart_size_w-130; $Test->setGraphArea(50,30,$area_graph_w ,$chart_size_h-50); $Test->drawFilledRoundedRectangle(5,5,$chart_size_w-1,$chart_size_h-20,5,240,240,240); //$Test->drawRoundedRectangle(5,5,790,330,5,230,230,230); //background color area & stripe or not $Test->drawGraphArea(255,255,255,TRUE); //Setting max height by default see #3296 if (!empty($max)) { $Test->setFixedScale(0, $max); } $Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(), SCALE_ADDALLSTART0, 150,150,150, TRUE, 0, 0, FALSE); //background grid $Test->drawGrid(4, TRUE,230,230,230,50); // Draw the 0 line //$Test->setFontProperties(api_get_path(LIBRARY_PATH)."pchart/fonts/tahoma.ttf",6); //$Test->drawTreshold(0,143,55,72,TRUE,TRUE); // Draw the bar graph $Test->drawBarGraph($DataSet->GetData(),$DataSet->GetDataDescription(),TRUE); //Set legend properties: width, height and text color and font $Test->setFontProperties(api_get_path(LIBRARY_PATH)."pchart/fonts/tahoma.ttf",9); $Test->drawLegend($area_graph_w+10, 50,$DataSet->GetDataDescription(),255,255,255); //Set title properties $Test->setFontProperties(api_get_path(LIBRARY_PATH)."pchart/fonts/tahoma.ttf",10); $Test->drawTitle(50,22, strip_tags($header_name[$i-1]),50,50,80,$chart_size_w-50); //------------------ //echo 'not in cache'; $Cache->WriteToCache($graph_id,$DataSet->GetData(),$Test); //ob_start(); //$Test->Stroke(); //ob_end_clean(); $img_file = $Cache->GetHash($graph_id,$DataSet->GetData()); } echo ''; if ($i % 2 == 0 && $i!=0) { echo '
'; } $i++; } } //end foreach } else { echo get_lang('ToViewGraphScoreRuleMustBeEnabled'); } // Pie charts /* $show_draw = false; $resource_list = array(); //print_r($pre_result_pie); if ($total_users>0) { foreach($pre_result_pie as $key=>$res_array) { //$resource_list foreach($res_array as $user_result) { $total+= $user_result / ($total_users*100); } echo $total; //echo $total = $res / ($total_users*100); echo '
'; //$DataSet->AddPoint($total,"Serie".$i); //$DataSet->SetSerieName($header_name[$i-1],"Serie".$i); } } //here-------------- foreach($resource_list as $key=>$resource) { $new_resource_list = $new_resource_list_name = array(); foreach($resource as $name=>$cant) { $new_resource_list[]=$cant; $new_resource_list_name[]=$name; } //Pie chart $DataSet = new pData; $DataSet->AddPoint($new_resource_list,"Serie1"); $DataSet->AddPoint($new_resource_list_name,"Serie2"); $DataSet->AddAllSeries(); $DataSet->SetAbsciseLabelSerie("Serie2"); $Test = new pChart(400,300); $Test->loadColorPalette(api_get_path(LIBRARY_PATH)."pchart/palette/soft_tones.txt"); // background //$Test->drawFilledRoundedRectangle(7,7,293,193,5,240,240,240); // border color $Test->drawRoundedRectangle(5,5,295,195,5,230,230,230); // This will draw a shadow under the pie chart //$Test->drawFilledCircle(122,102,70,200,200,200); //Draw the pie chart $Test->setFontProperties(api_get_path(LIBRARY_PATH)."pchart/fonts/tahoma.ttf",8); $Test->drawBarGraph($DataSet->GetData(),$DataSet->GetDataDescription(),TRUE); $tmp_path = api_get_path(SYS_ARCHIVE_PATH); $Test->drawBasicPieGraph($DataSet->GetData(),$DataSet->GetDataDescription(),120,100,70,PIE_PERCENTAGE,255,255,218); $Test->drawPieLegend(230,15,$DataSet->GetData(),$DataSet->GetDataDescription(),250,250,250); $user_id = api_get_user_id(); $img_file_generated_name = $key.uniqid('').'gradebook.png'; $Test->Render($tmp_path.$img_file_generated_name); chmod($tmp_path.$img_file_generated_name, api_get_permissions_for_new_files()); if ($i % 2 == 0 && $i!= 0) { echo '
'; } echo ''; } */ } } /** * Function used by SortableTable to get total number of items in the table */ function get_total_number_of_items() { return $this->datagen->get_total_users_count(); } /** * Function used by SortableTable to generate the data to display */ function get_table_data ($from = 1, $per_page = null, $column = null, $direction = null, $sort = null) { $is_western_name_order = api_is_western_name_order(); // create page navigation if needed $totalitems = $this->datagen->get_total_items_count(); if ($this->limit_enabled && $totalitems > LIMIT) { $selectlimit = LIMIT; } else { $selectlimit = $totalitems; } if ($this->limit_enabled && $totalitems > LIMIT) { $calcprevious = LIMIT; $header .= '' .'' .''; // previous X $header .= ''; $header .= '
'; if ($this->offset >= LIMIT) { $header .= '' .Display::return_icon('action_prev.png', get_lang('PreviousPage'), array(), 32) .''; } else { $header .= Display::return_icon('action_prev_na.png', get_lang('PreviousPage'), array(), 32); } $header .= ' '; // next X $calcnext = (($this->offset+(2*LIMIT)) > $totalitems) ? ($totalitems-(LIMIT+$this->offset)) : LIMIT; if ($calcnext > 0) { $header .= '' .Display::return_icon('action_next.png', get_lang('NextPage'), array(), 32) .''; } else { $header .= Display::return_icon('action_next_na.png', get_lang('NextPage'), array(), 32); } $header .= '
'; echo $header; } // retrieve sorting type if ($is_western_name_order) { $users_sorting = ($this->column == 0 ? FlatViewDataGenerator :: FVDG_SORT_FIRSTNAME : FlatViewDataGenerator :: FVDG_SORT_LASTNAME); } else { $users_sorting = ($this->column == 0 ? FlatViewDataGenerator :: FVDG_SORT_LASTNAME : FlatViewDataGenerator :: FVDG_SORT_FIRSTNAME); } if ($this->direction == 'DESC') { $users_sorting |= FlatViewDataGenerator :: FVDG_SORT_DESC; } else { $users_sorting |= FlatViewDataGenerator :: FVDG_SORT_ASC; } // step 1: generate columns: evaluations and links $header_names = $this->datagen->get_header_names($this->offset, $selectlimit); $column = 0; if ($is_western_name_order) { $this->set_header($column++, $header_names[1]); $this->set_header($column++, $header_names[0]); } else { $this->set_header($column++, $header_names[0]); $this->set_header($column++, $header_names[1]); } while ($column < count($header_names)) { $this->set_header($column, $header_names[$column], false); $column++; } $data_array = $this->datagen->get_data($users_sorting, $from, $this->per_page, $this->offset, $selectlimit); $table_data = array(); foreach ($data_array as $user_row) { $table_row = array (); $count = 0; $user_id = $user_row[$count++]; $lastname = $user_row[$count++]; $firstname = $user_row[$count++]; if ($is_western_name_order) { $table_row[] = $this->build_name_link($user_id, $firstname); $table_row[] = $this->build_name_link($user_id, $lastname); } else { $table_row[] = $this->build_name_link($user_id, $lastname); $table_row[] = $this->build_name_link($user_id, $firstname); } while ($count < count($user_row)) { $table_row[] = $user_row[$count++]; } $table_data[]= $table_row; } return $table_data; } // Other functions private function build_name_link ($user_id, $name) { return ''.$name.''; } }