/** * Action - report * display table data in a report in HTML or PDF format * * Access to the action is possible in the following paths: * - /admin/user/report * * @return void */ public function reportAction() { try { $params = $this->getRequest()->getParams(); // Тип отчета $report_type = $params['type']; // Таблица для отчета $table = $params['table']; // Получим данные по отчету $reportData = $this->_getReportData($table); // Получим данные для отчета switch ($report_type) { case 'html': $templater = Default_Plugin_SysBox::createViewSmarty(); // Отображается в режиме отчета $templater->report = TRUE; //------ Установим параметры и переменные HTML ------ // ---- Титл ----- $templater->title_name = $reportData['html']['title_report']; $templater->title_logo = $reportData['html']['logo_report']; // ---- Заголовок ----- $templater->column_model = $reportData['html']['column_model']; $templater->is_group_head = isset($reportData['html']['is_group_head']) ? $reportData['html']['is_group_head'] : 0; // ---- Нижний колонтитул ----- $templater->rows_footer = $reportData['html']['rows_footer']; $templater->footer_colspan = $reportData['html']['footer_colspan']; // ---- Тело таблицы ----- $templater->rows_body = $reportData['html']['rows_body']; $templater->is_row_header = isset($reportData['html']['is_row_header']) ? $reportData['html']['is_row_header'] : 0; // Получим результат шаблона $html = $templater->render('reports/report-table.tpl'); $this->sendJson(array('result' => $this->Translate('Создан отчет в формате HTML'), 'html' => $html)); break; case 'pdf': // Проверим наличие файла mpdf.php // Если нет, то выдадим ошибку! $path = APPLICATION_BASE . '/library/mPDF/mpdf.php'; if (!is_file($path)) { throw new Exception($this->Translate('Не установлена библиотека mPDF', '/library/mPDF', 'http://www.mpdf1.com/mpdf/index.php?page=Download')); } // Создадим обьект шаблона if ($this->_isAjaxRequest) { $templater = Default_Plugin_SysBox::createViewSmarty(); } else { $templater = $this->view; } //------ Установим параметры и переменные HTML ------ // ---- Титл ----- $templater->title_name = $reportData['html']['title_report']; $templater->title_logo = $reportData['html']['logo_report']; // ---- Заголовок ----- $templater->column_model = $reportData['html']['column_model']; $templater->is_group_head = isset($reportData['html']['is_group_head']) ? $reportData['html']['is_group_head'] : 0; // ---- Нижний колонтитул ----- $templater->rows_footer = $reportData['html']['rows_footer']; $templater->footer_colspan = $reportData['html']['footer_colspan']; // ---- Тело таблицы ----- $templater->rows_body = $reportData['html']['rows_body']; $templater->is_row_header = isset($reportData['pdf']['is_row_header']) ? $reportData['pdf']['is_row_header'] : 0; // Получим результат шаблона $html = $templater->render('reports/table.tpl'); // Установим имя отчета PDF // в названии файла будет присутствовать хеш полученного HTML // это нужно для того, чтобы не создавать существующих файлов $md5Html = md5($html); $report = $table . '_' . $md5Html; // Установим параметры для отчета PDF $pdfParams['pdfReport'] = $report; $pdfParams['html'] = $html; $pdfParams['isCommonFont'] = FALSE; $pdfParams['pathStylesheet'] = 'css/report/blue-style.css'; //phpinfo blue-style $pdfParams['headerLeftMargin'] = $reportData['pdf']['title_report']; $pdfParams['headerCentreMargin'] = $reportData['pdf']['logo_report']; $pdfParams['pageFormat'] = $reportData['pdf']['pageFormat']; ob_start(); // Получим имя файла и проверим его наличие $filename = Default_Plugin_SysBox::getPath_For_FilePDF($report); if (file_exists($filename)) { // Файл уже существует sleep(1); // Получить URL PDF файла $urlFilePDF = Default_Plugin_SysBox::getFullUrl_For_FilePDF($report); $this->sendJson(array('result' => $this->Translate('Этот отчет уже существует'), 'url_file_pdf' => $urlFilePDF)); } else { // Создадим отчет... // Удалим ранее созданные отчеты // Получим директорию с файлами отчетов $patch_dir = Default_Plugin_SysBox::getPath_For_FilePDF(''); // Получим обьект построения дерева файлов $ft = new Default_Plugin_FileTree($patch_dir); // создадим дерево файлов $report_del = $table . '_*.pdf'; $ft->readTree(array('name' => $report_del)); // удалим файлы и директории $result = $ft->delFiles(); // Создать PDF файл из HTML $urlFilePDF = Default_Plugin_SysBox::mpdfGenerator_Html2PDF($pdfParams); $this->sendJson(array('result' => $this->Translate('Создан отчет в формате PDF'), 'url_file_pdf' => $urlFilePDF)); } break; case 'exel': break; default: break; } } catch (Exception $exc) { $jsons = array('class_message' => 'warning', 'messages' => array('<em>' . $this->Translate('Ошибка формирования отчета') . '</em>', Default_Plugin_SysBox::getMessageError($exc))); $this->sendJson($jsons); } }
/** * Action - pdf * сreate a PDF document using the mPDF library * * Access to the action is possible in the following paths: * - /admin/tools/pdf * * @return void */ public function pdfAction() { $isCommonFont = false; $pdfParams = array(); //--------------------- // Получим параметры $params = $this->getRequest()->getParams(); $report = $params['name']; // Определим параметры для конвертации HTML в PDF switch ($report) { case 'phpinfo': // Установим параметры для отчета $html = Default_Plugin_SysBox::getPHPInfo(); $pdfParams['pdfReport'] = $report; $pdfParams['html'] = $html; $pdfParams['isCommonFont'] = true; $pdfParams['pathStylesheet'] = 'css/report/phpinfo.css'; $pdfParams['headerLeftMargin'] = 'Params of PHP'; $pdfParams['headerCentreMargin'] = Default_Plugin_SysBox::getFullURL_Res('/images/system/settings32x32.png'); $pdfParams['footerRightMargin'] = Default_Plugin_SysBox::getFullUrl_For_FilePDF($report); break; case 'zend-progress': $adapter = new Zend_ProgressBar_Adapter_JsPush(array('updateMethodName' => 'BSA.Dialogs.Zend_ProgressBar_Update', 'finishMethodName' => 'BSA.Dialogs.Zend_ProgressBar_Finish')); $progressBar = new Zend_ProgressBar($adapter, 0, 100); for ($i = 1; $i <= 100; $i++) { if ($i < 20) { $text = 'Just beginning'; } else { if ($i < 50) { $text = 'A bit done'; } else { if ($i < 80) { $text = 'Getting closer'; } else { $text = 'Nearly done'; } } } $progressBar->update($i, $text); usleep(100000); } $progressBar->finish(); die; break; default: break; } // Создать PDF файл из HTML $urlFilePDF = Default_Plugin_SysBox::mpdfGenerator_Html2PDF($pdfParams); // Установим свой и предыдущий Breadcrumbs $Zend_Auth = Zend_Registry::get("Zend_Auth"); $lastBreadcrumbs = $Zend_Auth->lastBreadcrumbs; $this->_breadcrumbs->addStep($lastBreadcrumbs['title'], $this->getUrl($lastBreadcrumbs['action'], $lastBreadcrumbs['controller'], $lastBreadcrumbs['module'])); $this->_breadcrumbs->addStep($this->Translate('Отчет в PDF формате')); $this->view->urlFilePDF = $urlFilePDF; }