You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
350 lines
12 KiB
350 lines
12 KiB
<?php
|
|
/* For licensing terms, see /license.txt */
|
|
/**
|
|
* Script
|
|
* @package chamilo.gradebook
|
|
*/
|
|
|
|
/**
|
|
* Prints an HTML page with a table containing the gradebook data
|
|
* @param array Array containing the data to be printed in the table
|
|
* @param array Table headers
|
|
* @param string View to print as a title for the table
|
|
* @param string Course name to print as title for the table
|
|
*/
|
|
function print_table($data_array, $header_names, $view, $coursename)
|
|
{
|
|
$printdata = '<!DOCTYPE html
|
|
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="'.api_get_language_isocode().'" lang="'.api_get_language_isocode().'">
|
|
<head>
|
|
<title>'.get_lang('Print').'</title>
|
|
<meta http-equiv="Content-Type" content="text/html; charset='.api_get_system_encoding().'" />
|
|
|
|
|
|
<style type="text/css">
|
|
body {
|
|
font-size: 12px;
|
|
color: #000;
|
|
margin: 10px;
|
|
padding: 0;
|
|
}
|
|
|
|
a:link {text-decoration: none; font-weight : bold; color : black;}
|
|
a:visited {text-decoration: none; font-weight : bold; color : black;}
|
|
a:active {text-decoration: none; font-weight : bold; color : black;}
|
|
|
|
.data_table{
|
|
border-collapse: collapse;
|
|
width: 100%;
|
|
padding: 5px;
|
|
border: 1px;
|
|
}
|
|
.data_table th{
|
|
padding: 5px;
|
|
vertical-align: top;
|
|
border-top: 1px solid black;
|
|
border-bottom: 1px solid black;
|
|
border-right: 1px solid black;
|
|
border-left: 1px solid black;
|
|
}
|
|
.data_table tr.row_odd{
|
|
background-color: #fafafa;
|
|
}
|
|
.data_table tr.row_even{
|
|
background-color: #fff;
|
|
}
|
|
.data_table td{
|
|
padding: 5px;
|
|
vertical-align: top;
|
|
border-bottom: 1px solid black;
|
|
border-right: 1px solid black;
|
|
border-left: 1px solid black;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body dir="'.api_get_text_direction().'"><div id="main">';
|
|
|
|
$printdata .= '<h2>'.$view.' : '.$coursename.'</h2>';
|
|
//@todo not necessary here
|
|
|
|
$printdata .= '<table border="1" width="90%" cellspacing="1" cellpadding="1">';
|
|
foreach ($header_names as $header) {
|
|
$printdata .= '<th>'.$header.'</th>';
|
|
}
|
|
|
|
foreach ($data_array as $data) {
|
|
$printdata .= '<tr>';
|
|
foreach ($data as $rowdata) {
|
|
$printdata .= '<td>'.$rowdata.'</td>';
|
|
}
|
|
$printdata .= '</tr>';
|
|
|
|
}
|
|
$printdata .= '</table></div></body></html>';
|
|
|
|
return $printdata;
|
|
}
|
|
|
|
/**
|
|
* This function get a content html for export inside a pdf file
|
|
* @param array table headers
|
|
* @param array table body
|
|
* @param array pdf headers
|
|
* @param array pdf footers
|
|
* @return void
|
|
*/
|
|
function export_pdf_attendance($headers_table, $data_table, $headers_pdf, $footers_pdf, $title_pdf)
|
|
{
|
|
$mpdf = new mPDF('UTF-8', 'A4-L', '', '', 15, 10, 35, 20, 4, 2, 'L');
|
|
$mpdf->useOnlyCoreFonts = true;
|
|
$mpdf->mirrorMargins = 0;
|
|
// Use different Odd/Even headers and footers and mirror margins
|
|
|
|
if (is_array($headers_pdf)) {
|
|
// preparing headers pdf
|
|
$header = '
|
|
<table width="100%" cellspacing="1" cellpadding="1" border="0" class="strong">
|
|
<tr>
|
|
<td ROWSPAN="3" style="text-align: left;" class="title">
|
|
<img src="'.api_get_path(WEB_CSS_PATH).api_get_setting('stylesheets').'/images/header-logo.png">
|
|
</td>
|
|
<td colspan="3">
|
|
<h1>'.$title_pdf.'</h1>
|
|
</td>
|
|
<tr>
|
|
<td></td>
|
|
<td><strong>'.$headers_pdf[0][0].'</strong> </td><td> <strong>'.$headers_pdf[0][1].'</strong></td>
|
|
<td><strong>'.$headers_pdf[1][0].'</strong> </td><td> <strong>'.$headers_pdf[1][1].'</strong></td>
|
|
|
|
</tr>
|
|
<tr>
|
|
<td></td>
|
|
<td><strong>'.$headers_pdf[2][0].'</strong> </td><td> <strong>'.$headers_pdf[2][1].'</strong></td>
|
|
<td><strong>'.$headers_pdf[3][0].' </strong></td><td> <strong>'.$headers_pdf[3][1].'</strong></td>
|
|
</tr>
|
|
<tr>
|
|
<td></td><td></td>
|
|
<td><strong>'.$headers_pdf[4][0].'</strong></td><td> <strong>'.$headers_pdf[4][1].'</strong></td>
|
|
<td><strong>'.$headers_pdf[5][0].'</strong> </td><td> <strong>'.$headers_pdf[5][1].'</strong></td>
|
|
</tr>
|
|
</table>';
|
|
}
|
|
|
|
// preparing footer pdf
|
|
$footer = '<table width="100%" cellspacing="2" cellpadding="10" border="0">';
|
|
if (is_array($footers_pdf)) {
|
|
$footer .= '<tr>';
|
|
foreach ($footers_pdf as $foot_pdf) {
|
|
$footer .= '<td width="33%" style="text-align: center;">'.$foot_pdf.'</td>';
|
|
}
|
|
$footer .= '</tr>';
|
|
}
|
|
$footer .= '</table>';
|
|
$footer .= '<div align="right" style="font-weight: bold;">{PAGENO}/{nb}</div>';
|
|
|
|
// preparing content pdf
|
|
$css_file = api_get_path(SYS_CSS_PATH).'themes/'.api_get_setting('stylesheets').'/print.css';
|
|
|
|
if (file_exists($css_file)) {
|
|
$css = @file_get_contents($css_file);
|
|
} else {
|
|
$css = '';
|
|
}
|
|
|
|
if (count($data_table) > 30) {
|
|
$items_per_page = (count($data_table) / 2);
|
|
} else {
|
|
$items_per_page = count($data_table);
|
|
}
|
|
|
|
$count_pages = ceil(count($data_table) / $items_per_page);
|
|
$content_table = '';
|
|
for ($x = 0; $x < $count_pages; $x++) {
|
|
$content_table .= '<table width="100%" border="1" style="border-collapse:collapse">';
|
|
// header table
|
|
$content_table .= '<tr>';
|
|
$i = 0;
|
|
if (is_array($headers_table)) {
|
|
|
|
foreach ($headers_table as $head_table) {
|
|
if (!empty($head_table[0])) {
|
|
$width = (!empty($head_table[1]) ? $head_table[1].'%' : '');
|
|
$content_table .= '<th width="'.$width.'">'.$head_table[0].'</th>';
|
|
$i++;
|
|
}
|
|
}
|
|
}
|
|
$content_table .= '</tr>';
|
|
// body table
|
|
if (is_array($data_table) && count($data_table) > 0) {
|
|
$offset = $x * $items_per_page;
|
|
$data_table = array_slice($data_table, $offset, count($data_table));
|
|
$i = 1;
|
|
$item = $offset + 1;
|
|
foreach ($data_table as $data) {
|
|
$content_table .= '<tr>';
|
|
$content_table .= '<td>'.($item < 10 ? '0'.$item : $item).'</td>';
|
|
foreach ($data as $key => $content) {
|
|
if (isset($content)) {
|
|
$key == 1 ? $align = 'align="left"' : $align = 'align="center"';
|
|
$content_table .= '<td '.$align.' style="padding:4px;" >'.$content.'</td>';
|
|
}
|
|
}
|
|
$content_table .= '</tr>';
|
|
$i++;
|
|
$item++;
|
|
if ($i > $items_per_page) { break; }
|
|
}
|
|
} else {
|
|
$content_table .= '<tr colspan="'.$i.'"><td>'.get_lang('Empty').'</td></tr>';
|
|
}
|
|
$content_table .= '</table>';
|
|
if ($x < ($count_pages - 1)) { $content_table .= '<pagebreak />'; }
|
|
}
|
|
$html = $content_table;
|
|
|
|
// set attributes for pdf
|
|
$mpdf->SetHTMLHeader($header);
|
|
$mpdf->SetHTMLFooter($footer);
|
|
if (!empty($css)) {
|
|
$mpdf->WriteHTML($css, 1);
|
|
$mpdf->WriteHTML($html, 2);
|
|
} else {
|
|
$mpdf->WriteHTML($html);
|
|
}
|
|
$mpdf->Output(api_replace_dangerous_char($title_pdf.'.pdf'), 'D');
|
|
|
|
exit;
|
|
}
|
|
|
|
|
|
/**
|
|
* This function get a content html for export inside a pdf file
|
|
* @param array table headers
|
|
* @param array table body
|
|
* @param array pdf headers
|
|
* @param array pdf footers
|
|
* @return void
|
|
*/
|
|
function export_pdf_with_html($headers_table, $data_table, $headers_pdf, $footers_pdf, $title_pdf)
|
|
{
|
|
$headers_in_pdf = '<img src="'.api_get_path(WEB_CSS_PATH).api_get_setting('stylesheets').'/images/header-logo.png">';
|
|
|
|
if (is_array($headers_pdf)) {
|
|
// preparing headers pdf
|
|
$header = '<br/><br/>
|
|
<table width="100%" cellspacing="1" cellpadding="5" border="0" class="strong">
|
|
<tr>
|
|
<td width="100%" style="text-align: center;" class="title" colspan="4">
|
|
<h1>'.$title_pdf.'</h1></td></tr>';
|
|
foreach ($headers_pdf as $header_pdf) {
|
|
if (!empty($header_pdf[0]) && !empty($header_pdf[1])) {
|
|
$header .= '<tr><td><strong>'.$header_pdf[0].'</strong> </td><td>'.$header_pdf[1].'</td></tr>';
|
|
}
|
|
}
|
|
$header .= '</table><br />';
|
|
}
|
|
|
|
// preparing footer pdf
|
|
$footer = '<table width="100%" cellspacing="2" cellpadding="10" border="0">';
|
|
if (is_array($footers_pdf)) {
|
|
$footer .= '<tr>';
|
|
foreach ($footers_pdf as $foot_pdf) {
|
|
$footer .= '<td width="33%" style="text-align: center;">'.$foot_pdf.'</td>';
|
|
}
|
|
$footer .= '</tr>';
|
|
}
|
|
$footer .= '</table>';
|
|
$footer .= '<div align="right" style="font-weight: bold;">{PAGENO}/{nb}</div>';
|
|
|
|
// preparing content pdf
|
|
$css_file = api_get_path(SYS_CSS_PATH).'themes/'.api_get_setting('stylesheets').'/print.css';
|
|
if (file_exists($css_file)) {
|
|
$css = @file_get_contents($css_file);
|
|
} else {
|
|
$css = '';
|
|
}
|
|
$items_per_page = 30;
|
|
$count_pages = ceil(count($data_table) / $items_per_page);
|
|
for ($x = 0; $x < $count_pages; $x++) {
|
|
$content_table .= '<table width="100%" border="1" style="border-collapse:collapse">';
|
|
// header table
|
|
$content_table .= '<tr>';
|
|
$i = 0;
|
|
if (is_array($headers_table)) {
|
|
foreach ($headers_table as $head_table) {
|
|
if (!empty($head_table[0])) {
|
|
$width = (!empty($head_table[1]) ? $head_table[1].'%' : '');
|
|
$content_table .= '<th width="'.$width.'">'.$head_table[0].'</th>';
|
|
$i++;
|
|
}
|
|
}
|
|
}
|
|
$content_table .= '</tr>';
|
|
// body table
|
|
|
|
if (is_array($data_table) && count($data_table) > 0) {
|
|
$offset = $x * $items_per_page;
|
|
$data_table = array_slice($data_table, $offset, count($data_table));
|
|
$i = 1;
|
|
$item = $offset + 1;
|
|
foreach ($data_table as $data) {
|
|
$content_table .= '<tr>';
|
|
$content_table .= '<td>'.($item < 10 ? '0'.$item : $item).'</td>';
|
|
foreach ($data as $key => $content) {
|
|
if (isset($content)) {
|
|
$key == 1 ? $align = 'align="left"' : $align = 'align="center"';
|
|
$content_table .= '<td '.$align.' style="padding:4px;" >'.$content.'</td>';
|
|
}
|
|
}
|
|
$content_table .= '</tr>';
|
|
$i++;
|
|
$item++;
|
|
if ($i > $items_per_page) { break; }
|
|
}
|
|
} else {
|
|
$content_table .= '<tr colspan="'.$i.'"><td>'.get_lang('Empty').'</td></tr>';
|
|
}
|
|
$content_table .= '</table>';
|
|
if ($x < ($count_pages - 1)) { $content_table .= '<pagebreak />'; }
|
|
}
|
|
$pdf = new PDF();
|
|
$pdf->set_custom_footer($footer);
|
|
$pdf->set_custom_header($headers_in_pdf);
|
|
$pdf->content_to_pdf($header.$content_table, $css, $title_pdf);
|
|
exit;
|
|
|
|
}
|
|
|
|
/**
|
|
* Exports the data as a table on a PDF page
|
|
* @param resource The PDF object (ezpdf class) used to generate the file
|
|
* @param array The data array
|
|
* @param array Table headers
|
|
* @param string Format (portrait or landscape)
|
|
*/
|
|
function export_pdf($pdf, $newarray, $header_names, $format)
|
|
{
|
|
$pdf->selectFont(api_get_path(LIBRARY_PATH).'ezpdf/fonts/Courier.afm');
|
|
$pdf->ezSetCmMargins(0, 0, 0, 0);
|
|
$pdf->ezSetY(($format == 'portrait') ? '820' : '570');
|
|
$pdf->selectFont(api_get_path(LIBRARY_PATH).'ezpdf/fonts/Courier.afm');
|
|
if ($format == 'portrait') {
|
|
$pdf->line(40, 790, 540, 790);
|
|
$pdf->line(40, 40, 540, 40);
|
|
} else {
|
|
$pdf->line(40, 540, 790, 540);
|
|
$pdf->line(40, 40, 790, 40);
|
|
}
|
|
$pdf->ezSetY(($format == 'portrait') ? '750' : '520');
|
|
$pdf->ezTable($newarray, $header_names, '', array(
|
|
'showHeadings' => 1,
|
|
'shaded' => 1,
|
|
'showLines' => 1,
|
|
'rowGap' => 3,
|
|
'width' => (($format == 'portrait') ? '500' : '750'),
|
|
));
|
|
$pdf->ezStream();
|
|
}
|
|
|