public function testChangelog() { $this->flushDBCache(); $objChanges = new class_module_system_changelog(); $strSystemid = generateSystemid(); $arrOldValues = $objChanges->readOldValues(new dummyObject($strSystemid)); $this->assertEquals($arrOldValues["strTest"], "old"); $this->assertEquals($arrOldValues["strSecondTest"], "second old"); $arrOldValues = $objChanges->getOldValuesForSystemid($strSystemid); $this->assertEquals($arrOldValues["strTest"], "old"); $this->assertEquals($arrOldValues["strSecondTest"], "second old"); $objChanges->createLogEntry(new dummyObject($strSystemid), "1"); $objChanges->processCachedInserts(); $this->assertEquals(0, class_module_system_changelog::getLogEntriesCount($strSystemid)); class_carrier::getInstance()->getObjDB()->flushQueryCache(); $objDummy = new dummyObject($strSystemid); $objDummy->setStrTest("new test 1"); $objDummy->setStrSecondTest("new val 2"); $objChanges->createLogEntry($objDummy, "2"); $objChanges->processCachedInserts(); $this->assertEquals(2, class_module_system_changelog::getLogEntriesCount($strSystemid)); $this->assertEquals(2, count(class_module_system_changelog::getLogEntries($strSystemid))); $arrLogs = class_module_system_changelog::getLogEntries($strSystemid); foreach ($arrLogs as $objOneChangelog) { if ($objOneChangelog->getStrProperty() == "strTest") { $this->assertEquals($objOneChangelog->getStrOldValue(), "old"); $this->assertEquals($objOneChangelog->getStrNewValue(), "new test 1"); } if ($objOneChangelog->getStrProperty() == "strSecondTest") { $this->assertEquals($objOneChangelog->getStrOldValue(), "second old"); $this->assertEquals($objOneChangelog->getStrNewValue(), "new val 2"); } } class_carrier::getInstance()->getObjDB()->flushQueryCache(); $objChanges->createLogEntry(new dummyObject($strSystemid), "2", true); $objChanges->processCachedInserts(); $this->assertEquals(4, class_module_system_changelog::getLogEntriesCount($strSystemid)); $this->assertEquals(4, count(class_module_system_changelog::getLogEntries($strSystemid))); }
/** * Generates an excel sheet based on the changelog entries from the given systemid * * @param string $strSystemid * * @since 4.6.6 * @permissions changelog */ protected function actionGenericChangelogExportExcel($strSystemid = "") { // include phpexcel require_once class_resourceloader::getInstance()->getCorePathForModule("module_phpexcel", true) . '/module_phpexcel/system/phpexcel/PHPExcel.php'; $objPHPExcel = new PHPExcel(); // get system id if ($strSystemid == "") { $strSystemid = $this->getSystemid(); } // get data $arrLogEntries = class_module_system_changelog::getLogEntries($strSystemid); // create excel $objPHPExcel->getProperties()->setCreator("Kajona")->setLastModifiedBy(class_carrier::getInstance()->getObjSession()->getUsername())->setTitle($this->getLang("change_report_title"))->setSubject($this->getLang("change_report_title")); $objDataSheet = $objPHPExcel->getActiveSheet(); $objDataSheet->setTitle($this->getLang("change_report_title")); $objDataSheet->setAutoFilter('A1:F' . (count($arrLogEntries) + 1)); // style $arrStyles = $this->getStylesArray(); $objDataSheet->getStyle("A1:F1")->applyFromArray($arrStyles["header_1"]); $objDataSheet->getDefaultColumnDimension()->setWidth(24); // add header $arrHeader = array(); $arrHeader[] = $this->getLang("commons_date"); $arrHeader[] = $this->getLang("change_user"); if ($strSystemid == "") { $arrHeader[] = $this->getLang("change_module"); } if ($strSystemid == "") { $arrHeader[] = $this->getLang("change_record"); } $arrHeader[] = $this->getLang("change_action"); $arrHeader[] = $this->getLang("change_property"); $arrHeader[] = $this->getLang("change_oldvalue"); $arrHeader[] = $this->getLang("change_newvalue"); $intCol = 0; $intRow = 1; foreach ($arrHeader as $strHeader) { $objDataSheet->setCellValueByColumnAndRow($intCol++, $intRow, $strHeader); } $intRow++; // add body $arrData = array(); /** @var $objOneEntry class_changelog_container */ foreach ($arrLogEntries as $objOneEntry) { $arrRowData = array(); /** @var interface_versionable|class_model $objTarget */ $objTarget = $objOneEntry->getObjTarget(); $strOldValue = $objOneEntry->getStrOldValue(); $strNewValue = $objOneEntry->getStrNewValue(); if ($objTarget != null) { $strOldValue = $objTarget->renderVersionValue($objOneEntry->getStrProperty(), $strOldValue); $strNewValue = $objTarget->renderVersionValue($objOneEntry->getStrProperty(), $strNewValue); } $strOldValue = htmlStripTags($strOldValue); $strNewValue = htmlStripTags($strNewValue); $arrRowData[] = PHPExcel_Shared_Date::PHPToExcel($objOneEntry->getObjDate()->getTimeInOldStyle()); $arrRowData[] = $objOneEntry->getStrUsername(); if ($strSystemid == "") { $arrRowData[] = $objTarget != null ? $objTarget->getArrModule("modul") : ""; } if ($strSystemid == "") { $arrRowData[] = $objTarget != null ? $objTarget->getVersionRecordName() . " " . $objOneEntry->getStrSystemid() : ""; } $arrRowData[] = $objTarget != null ? $objTarget->getVersionActionName($objOneEntry->getStrAction()) : ""; $arrRowData[] = $objTarget != null ? $objTarget->getVersionPropertyName($objOneEntry->getStrProperty()) : ""; $arrRowData[] = $strOldValue; $arrRowData[] = $strNewValue; $arrData[] = $arrRowData; } foreach ($arrData as $arrRow) { $intCol = 0; foreach ($arrRow as $strValue) { $objDataSheet->setCellValueByColumnAndRow($intCol++, $intRow, html_entity_decode(strip_tags($strValue), ENT_COMPAT, "UTF-8")); } // format first column as date $objDataSheet->getStyle('A' . $intRow)->getNumberFormat()->setFormatCode('dd.mm.yyyy hh:mm'); $intRow++; } // Set active sheet index to the first sheet, so Excel opens this as the first sheet $objPHPExcel->setActiveSheetIndex(0); header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="' . createFilename($this->getLang("change_report_title") . '.xlsx') . '"'); header('Pragma: private'); header('Cache-control: private, must-revalidate'); //header('Cache-Control : No Store'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); //and pass everything back to the browser $objWriter->save('php://output'); flush(); die; }