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;
 }