123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359 |
- <?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
- *
- * @return string
- */
- 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
- */
- 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
- */
- 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, '', [
- 'showHeadings' => 1,
- 'shaded' => 1,
- 'showLines' => 1,
- 'rowGap' => 3,
- 'width' => (($format == 'portrait') ? '500' : '750'),
- ]);
- $pdf->ezStream();
- }
|