public function testObjectIndexerPerformance() { if (class_module_system_module::getModuleByName("news") === null) { return; } $arrNewsIds = array(); echo "Indexing without deferred indexer...\n"; class_module_system_changelog::$bitChangelogEnabled = false; $intTimeStart = microtime(true); $intQueriesStart = class_db::getInstance()->getNumber(); for ($intI = 0; $intI < 15; $intI++) { $objNews = new class_module_news_news(); $objNews->setStrTitle("demo 1"); $objNews->setStrIntro("intro demo news"); $objNews->setStrText("text demo news"); $objNews->updateObjectToDb(); $arrNewsIds[] = $objNews->getSystemid(); } echo "Queries pre indexing: ", class_db::getInstance()->getNumber() - $intQueriesStart . " \n"; $objHandler = new class_module_search_request_endprocessinglistener(); $objHandler->handleEvent(class_system_eventidentifier::EVENT_SYSTEM_REQUEST_AFTERCONTENTSEND, array()); $intTimeEnd = microtime(true); $time = $intTimeEnd - $intTimeStart; echo "Object updates: ", sprintf('%f', $time), " sec.\n"; echo "Queries total: ", class_db::getInstance()->getNumber() - $intQueriesStart . " \n"; echo "\nIndexing with deferred indexer...\n"; $objConfig = class_module_system_setting::getConfigByName("_search_deferred_indexer_"); $objConfig->setStrValue("true"); $objConfig->updateObjectToDb(); $intTimeStart = microtime(true); $intQueriesStart = class_db::getInstance()->getNumber(); for ($intI = 0; $intI < 15; $intI++) { $objNews = new class_module_news_news(); $objNews->setStrTitle("demo 1"); $objNews->setStrIntro("intro demo news"); $objNews->setStrText("text demo news"); $objNews->updateObjectToDb(); $arrNewsIds[] = $objNews->getSystemid(); } echo "Queries pre indexing: ", class_db::getInstance()->getNumber() - $intQueriesStart . " \n"; echo "Triggering queue update event...\n"; $objHandler = new class_module_search_request_endprocessinglistener(); $objHandler->handleEvent(class_system_eventidentifier::EVENT_SYSTEM_REQUEST_AFTERCONTENTSEND, array()); $intTimeEnd = microtime(true); $time = $intTimeEnd - $intTimeStart; echo "Object updates: ", sprintf('%f', $time), " sec.\n"; echo "Queries total: ", class_db::getInstance()->getNumber() - $intQueriesStart . " \n"; $objConfig = class_module_system_setting::getConfigByName("_search_deferred_indexer_"); $objConfig->setStrValue("false"); $objConfig->updateObjectToDb(); foreach ($arrNewsIds as $strNewsId) { class_objectfactory::getInstance()->getObject($strNewsId)->deleteObjectFromDatabase(); } }
/** * Renderes the content of a single widget. * * @return string * @permissions view */ protected function actionGetWidgetContent() { //load the aspect and close the session afterwards class_module_system_aspect::getCurrentAspect(); $objWidgetModel = new class_module_dashboard_widget($this->getSystemid()); if ($objWidgetModel->rightView()) { $objConcreteWidget = $objWidgetModel->getConcreteAdminwidget(); if (!$objConcreteWidget->getBitBlockSessionClose()) { class_carrier::getInstance()->getObjSession()->sessionClose(); } //disable the internal changelog class_module_system_changelog::$bitChangelogEnabled = false; class_response_object::getInstance()->setStrResponseType(class_http_responsetypes::STR_TYPE_JSON); $strReturn = json_encode($objConcreteWidget->generateWidgetOutput()); } else { class_response_object::getInstance()->setStrStatusCode(class_http_statuscodes::SC_UNAUTHORIZED); $strReturn = "<message><error>" . xmlSafeString($this->getLang("commons_error_permissions")) . "</error></message>"; } return $strReturn; }
/** * Updates the current object to the database. * Only the value is updated!!! * * @param bool $strPrevId * * @return bool */ public function updateObjectToDb($strPrevId = false) { $objChangelog = new class_module_system_changelog(); $objChangelog->createLogEntry($this, class_module_system_changelog::$STR_ACTION_EDIT); self::$arrInstanceCache = null; if (!class_module_system_setting::checkConfigExisting($this->getStrName())) { class_logger::getInstance()->addLogRow("new constant " . $this->getStrName() . " with value " . $this->getStrValue(), class_logger::$levelInfo); $strQuery = "INSERT INTO " . _dbprefix_ . "system_config\n (system_config_id, system_config_name, system_config_value, system_config_type, system_config_module) VALUES\n (?, ?, ?, ?, ?)"; return $this->objDB->_pQuery($strQuery, array(generateSystemid(), $this->getStrName(), $this->getStrValue(), (int) $this->getIntType(), (int) $this->getIntModule())); } else { class_logger::getInstance()->addLogRow("updated constant " . $this->getStrName() . " to value " . $this->getStrValue(), class_logger::$levelInfo); $strQuery = "UPDATE " . _dbprefix_ . "system_config\n SET system_config_value = ?\n WHERE system_config_name = ?"; return $this->objDB->_pQuery($strQuery, array($this->getStrValue(), $this->getStrName())); } }
/** * Writes rights to the database. * Wrapper to the recursive function class_rights::setRightsRecursive($arrRights, $strSystemid) * * @param mixed $arrRights * @param string $strSystemid * * @see setRightsRecursive($arrRights, $strSystemid) * @throws class_exception * @return bool */ public function setRights($arrRights, $strSystemid) { //start a new tx $this->flushRightsCache(); $this->objDb->transactionBegin(); $objInstance = class_objectfactory::getInstance()->getObject($strSystemid); if ($objInstance !== null && $objInstance instanceof interface_versionable) { $arrCurrPermissions = $this->getPlainRightRow($strSystemid); //create a changehistory entry $objLog = new class_module_system_changelog(); $arrChanges = array(array("property" => "rightInherit", "oldvalue" => $arrCurrPermissions[self::$STR_RIGHT_INHERIT], "newvalue" => $arrRights[self::$STR_RIGHT_INHERIT]), array("property" => "rightView", "oldvalue" => $arrCurrPermissions[self::$STR_RIGHT_VIEW], "newvalue" => $arrRights[self::$STR_RIGHT_VIEW]), array("property" => "rightEdit", "oldvalue" => $arrCurrPermissions[self::$STR_RIGHT_EDIT], "newvalue" => $arrRights[self::$STR_RIGHT_EDIT]), array("property" => "rightDelete", "oldvalue" => $arrCurrPermissions[self::$STR_RIGHT_DELETE], "newvalue" => $arrRights[self::$STR_RIGHT_DELETE]), array("property" => "rightRight", "oldvalue" => $arrCurrPermissions[self::$STR_RIGHT_RIGHT], "newvalue" => $arrRights[self::$STR_RIGHT_RIGHT]), array("property" => "rightRight1", "oldvalue" => $arrCurrPermissions[self::$STR_RIGHT_RIGHT1], "newvalue" => $arrRights[self::$STR_RIGHT_RIGHT1]), array("property" => "rightRight2", "oldvalue" => $arrCurrPermissions[self::$STR_RIGHT_RIGHT2], "newvalue" => $arrRights[self::$STR_RIGHT_RIGHT2]), array("property" => "rightRight3", "oldvalue" => $arrCurrPermissions[self::$STR_RIGHT_RIGHT3], "newvalue" => $arrRights[self::$STR_RIGHT_RIGHT3]), array("property" => "rightRight4", "oldvalue" => $arrCurrPermissions[self::$STR_RIGHT_RIGHT4], "newvalue" => $arrRights[self::$STR_RIGHT_RIGHT4]), array("property" => "rightRight5", "oldvalue" => $arrCurrPermissions[self::$STR_RIGHT_RIGHT5], "newvalue" => $arrRights[self::$STR_RIGHT_RIGHT5]), array("property" => "rightChangelog", "oldvalue" => $arrCurrPermissions[self::$STR_RIGHT_CHANGELOG], "newvalue" => $arrRights[self::$STR_RIGHT_CHANGELOG])); $objLog->processChanges($objInstance, "editPermissions", $arrChanges); } $bitSave = $this->setRightsRecursive($arrRights, $strSystemid); if ($bitSave) { $this->objDb->transactionCommit(); class_logger::getInstance()->addLogRow("saving rights of record " . $strSystemid . " succeeded", class_logger::$levelInfo); } else { $this->objDb->transactionRollback(); class_logger::getInstance()->addLogRow("saving rights of record " . $strSystemid . " failed", class_logger::$levelError); throw new class_exception("saving rights of record " . $strSystemid . " failed", class_exception::$level_ERROR); } return $bitSave; }
/** * Returns a list of objects implementing the changelog-provider-interface * @return interface_changelog_provider[] */ public static function getAdditionalProviders() { if (self::$arrCachedProviders != null) { return self::$arrCachedProviders; } $arrReturn = class_resourceloader::getInstance()->getFolderContent("/system", array(".php"), false, function ($strOneFile) { if (uniStrpos($strOneFile, "class_changelog_provider") === false) { return false; } $objReflection = new ReflectionClass(uniSubstr($strOneFile, 0, -4)); if ($objReflection->implementsInterface("interface_changelog_provider")) { return true; } return false; }, function (&$strOneFile) { $objReflection = new ReflectionClass(uniSubstr($strOneFile, 0, -4)); $strOneFile = $objReflection->newInstance(); }); self::$arrCachedProviders = $arrReturn; return $arrReturn; }
public function testArrayHandling() { $objChangelog = new class_module_system_changelog(); $objOne = new dummyObject2(generateSystemid()); $objChangelog->readOldValues($objOne); $arrChanges = array(); $this->assertTrue(!$objChangelog->isObjectChanged($objOne, $arrChanges)); $this->assertTrue(count($arrChanges) == 0); $objOne->setArrValues(array("a", "c", "d")); $arrChanges = array(); $this->assertTrue($objChangelog->isObjectChanged($objOne, $arrChanges)); $this->assertTrue(count($arrChanges) == 1); $this->assertEquals($arrChanges[0]["property"], "arrValues"); $this->assertEquals($arrChanges[0]["oldvalue"], "b,c,d"); $this->assertEquals($arrChanges[0]["newvalue"], "a,c,d"); $objChangelog->readOldValues($objOne); $objOne->setArrValues(array("a", "d", "c")); $arrChanges = array(); $this->assertTrue(!$objChangelog->isObjectChanged($objOne, $arrChanges)); $this->assertTrue(count($arrChanges) == 0); }
/** * Triggers the update sequence for assignment properties * @return bool */ private function updateAssignments() { $bitReturn = true; $objReflection = new class_reflection($this->getObjObject()); //get the mapped properties $arrProperties = $objReflection->getPropertiesWithAnnotation(class_orm_base::STR_ANNOTATION_OBJECTLIST, class_reflection_enum::PARAMS()); foreach ($arrProperties as $strPropertyName => $arrValues) { $objCfg = class_orm_assignment_config::getConfigForProperty($this->getObjObject(), $strPropertyName); //try to load the orm config of the arrayObject - if given $strGetter = $objReflection->getGetter($strPropertyName); $arrValues = null; if ($strGetter !== null) { $arrValues = call_user_func(array($this->getObjObject(), $strGetter)); } $objAssignmentDeleteHandling = $this->getIntCombinedLogicalDeletionConfig(); if ($arrValues != null && $arrValues instanceof class_orm_assignment_array) { $objAssignmentDeleteHandling = $arrValues->getObjDeletedHandling(); } //try to restore the object-set from the database using the same config as when initializing the object $objOldHandling = $this->getIntCombinedLogicalDeletionConfig(); $this->setObjHandleLogicalDeleted($objAssignmentDeleteHandling); $arrAssignmentsFromObject = $this->getAssignmentValuesFromObject($strPropertyName, $objCfg->getArrTypeFilter()); $arrAssignmentsFromDatabase = $this->getAssignmentsFromDatabase($strPropertyName); $this->setObjHandleLogicalDeleted($objOldHandling); //if the delete handling was set to excluded when loading the assignment, the logically deleted nodes should be merged with the values from db if ($objAssignmentDeleteHandling->equals(class_orm_deletedhandling_enum::EXCLUDED())) { $this->setObjHandleLogicalDeleted(class_orm_deletedhandling_enum::EXCLUSIVE()); $arrDeletedIds = $this->getAssignmentsFromDatabase($strPropertyName); $this->setObjHandleLogicalDeleted($objOldHandling); foreach ($arrDeletedIds as $strOneId) { if (!in_array($strOneId, $arrAssignmentsFromDatabase)) { $arrAssignmentsFromDatabase[] = $strOneId; } if (!in_array($strOneId, $arrAssignmentsFromObject)) { $arrAssignmentsFromObject[] = $strOneId; } } } sort($arrAssignmentsFromObject); sort($arrAssignmentsFromDatabase); //only do s.th. if the array differs $arrNewAssignments = array_diff($arrAssignmentsFromObject, $arrAssignmentsFromDatabase); $arrDeletedAssignments = array_diff($arrAssignmentsFromDatabase, $arrAssignmentsFromObject); //skip in case there's nothing to do if (count($arrNewAssignments) == 0 && count($arrDeletedAssignments) == 0) { continue; } $objDB = class_carrier::getInstance()->getObjDB(); $arrInserts = array(); foreach ($arrAssignmentsFromObject as $strOneTargetId) { $arrInserts[] = array($this->getObjObject()->getSystemid(), $strOneTargetId); } $bitReturn = $bitReturn && $objDB->_pQuery("DELETE FROM " . $objDB->encloseTableName(_dbprefix_ . $objCfg->getStrTableName()) . " WHERE " . $objDB->encloseColumnName($objCfg->getStrSourceColumn()) . " = ?", array($this->getObjObject()->getSystemid())); $bitReturn = $bitReturn && $objDB->multiInsert($objCfg->getStrTableName(), array($objCfg->getStrSourceColumn(), $objCfg->getStrTargetColumn()), $arrInserts); $bitReturn = $bitReturn && class_core_eventdispatcher::getInstance()->notifyGenericListeners(class_system_eventidentifier::EVENT_SYSTEM_OBJECTASSIGNMENTSUPDATED, array(array_values($arrNewAssignments), array_values($arrDeletedAssignments), array_values($arrAssignmentsFromObject), $this->getObjObject(), $strPropertyName)); if ($objReflection->hasPropertyAnnotation($strPropertyName, class_module_system_changelog::ANNOTATION_PROPERTY_VERSIONABLE)) { $objChanges = new class_module_system_changelog(); $objChanges->setOldValueForSystemidAndProperty($this->getObjObject()->getSystemid(), $strPropertyName, implode(",", $arrAssignmentsFromDatabase)); } } return $bitReturn; }
/** * Deletes the object from the database. The record is removed in total, so no restoring will be possible. * * @return bool * @throws class_exception */ public function deleteObjectFromDatabase() { if (!$this->getLockManager()->isAccessibleForCurrentUser()) { return false; } if ($this instanceof interface_versionable) { $objChanges = new class_module_system_changelog(); $objChanges->createLogEntry($this, class_module_system_changelog::$STR_ACTION_DELETE); } /** @var $this class_root|interface_model */ $this->objDB->transactionBegin(); //validate, if there are subrecords, so child nodes to be deleted $arrChilds = $this->objDB->getPArray("SELECT system_id FROM " . _dbprefix_ . "system where system_prev_id = ?", array($this->getSystemid())); foreach ($arrChilds as $arrOneChild) { if (validateSystemid($arrOneChild["system_id"])) { $objInstance = class_objectfactory::getInstance()->getObject($arrOneChild["system_id"]); if ($objInstance !== null) { $objInstance->deleteObjectFromDatabase(); } } } $objORM = new class_orm_objectdelete($this); $bitReturn = $objORM->deleteObject(); $this->objSortManager->fixSortOnDelete(); $bitReturn = $bitReturn && $this->deleteSystemRecord($this->getSystemid()); class_objectfactory::getInstance()->removeFromCache($this->getSystemid()); class_orm_rowcache::removeSingleRow($this->getSystemid()); //try to call other modules, maybe wanting to delete anything in addition, if the current record //is going to be deleted $bitReturn = $bitReturn && class_core_eventdispatcher::getInstance()->notifyGenericListeners(class_system_eventidentifier::EVENT_SYSTEM_RECORDDELETED, array($this->getSystemid(), get_class($this))); if ($bitReturn) { class_logger::getInstance()->addLogRow("successfully deleted record " . $this->getSystemid() . " / " . $this->getStrDisplayName(), class_logger::$levelInfo); $this->objDB->transactionCommit(); $this->objDB->flushQueryCache(); return true; } else { class_logger::getInstance()->addLogRow("error deleting record " . $this->getSystemid() . " / " . $this->getStrDisplayName(), class_logger::$levelInfo); $this->objDB->transactionRollback(); $this->objDB->flushQueryCache(); return false; } }
public function testObjectIndexerPerformance() { if (class_module_system_module::getModuleByName("news") === null) { return; } $objNews = new class_module_news_news(); $objNews->setStrTitle("demo 1"); $objNews->setStrIntro("intro demo news"); $objNews->setStrText("text demo news"); $objNews->updateObjectToDb(); $strNewsId = $objNews->getSystemid(); echo "Status changes with disabled changelog indexer integration...\n"; class_module_system_changelog::$bitChangelogEnabled = false; $intTimeStart = microtime(true); $intQueriesStart = class_db::getInstance()->getNumber(); for ($intI = 0; $intI < 150; $intI++) { $objNews->setIntRecordStatus($intI % 2); $objNews->updateObjectToDb(); } $intTimeEnd = microtime(true); $time = $intTimeEnd - $intTimeStart; echo "Object updates: ", sprintf('%f', $time), " sec.\n"; echo "Queries: ", class_db::getInstance()->getNumber() - $intQueriesStart . " \n"; echo "Status changes with enabled changelog indexer integration...\n"; class_module_system_changelog::$bitChangelogEnabled = true; $intTimeStart = microtime(true); $intQueriesStart = class_db::getInstance()->getNumber(); for ($intI = 0; $intI < 150; $intI++) { $objNews->setIntRecordStatus($intI % 2); $objNews->updateObjectToDb(); } $intTimeEnd = microtime(true); $time = $intTimeEnd - $intTimeStart; echo "Object updates: ", sprintf('%f', $time), " sec.\n"; echo "Queries: ", class_db::getInstance()->getNumber() - $intQueriesStart . " \n"; class_objectfactory::getInstance()->getObject($strNewsId)->deleteObjectFromDatabase(); }
/** * Creates a list of the recent messages for the current user. * The structure is returned in an json-format. * * @permissions view * @xml * @autoTestable * * @return string */ protected function actionGetRecentMessages() { class_carrier::getInstance()->getObjSession()->setBitBlockDbUpdate(true); class_session::getInstance()->sessionClose(); class_module_system_changelog::$bitChangelogEnabled = false; class_response_object::getInstance()->setStrResponseType(class_http_responsetypes::STR_TYPE_JSON); $intMaxAmount = $this->getParam("limit") != "" ? $this->getParam("limit") : 5; $arrMessages = class_module_messaging_message::getObjectList($this->objSession->getUserID(), 0, $intMaxAmount - 1); $arrReturn = array(); foreach ($arrMessages as $objOneMessage) { $arrReturn[] = array("systemid" => $objOneMessage->getSystemid(), "title" => $objOneMessage->getStrDisplayName(), "unread" => $objOneMessage->getBitRead(), "details" => class_link::getLinkAdminHref($objOneMessage->getArrModule("modul"), "edit", "&systemid=" . $objOneMessage->getSystemid(), false)); } $arrReturn = array("messages" => $arrReturn, "messageCount" => class_module_messaging_message::getNumberOfMessagesForUser($this->objSession->getUserID(), true)); return json_encode($arrReturn); }
/** * Generates the list of favorite tags for the current user. * Returned structure is json based. * * @return string * @permissions view */ protected function actionGetFavoriteTags() { class_session::getInstance()->sessionClose(); class_carrier::getInstance()->getObjSession()->setBitBlockDbUpdate(true); class_module_system_changelog::$bitChangelogEnabled = false; $arrReturn = array(); $arrFavorites = class_module_tags_favorite::getAllFavoritesForUser(class_carrier::getInstance()->getObjSession()->getUserID(), 0, 10); foreach ($arrFavorites as $objOneFavorite) { $arrReturn[] = array("name" => $objOneFavorite->getStrDisplayName(), "onclick" => "location.href='" . getLinkAdminHref("tags", "showAssignedRecords", "&systemid=" . $objOneFavorite->getMappedTagSystemid(), false) . "'", "url" => getLinkAdminHref("tags", "showAssignedRecords", "&systemid=" . $objOneFavorite->getMappedTagSystemid(), false)); } class_response_object::getInstance()->setStrResponseType(class_http_responsetypes::STR_TYPE_JSON); return json_encode($arrReturn); }
/** * Searches for languagesets containing the current systemid. either as a language or a referenced record. * Called whenever a records was deleted using the common methods. * Implement this method to be notified when a record is deleted, e.g. to to additional cleanups afterwards. * There's no need to register the listener, this is done automatically. * Make sure to return a matching boolean-value, otherwise the transaction may be rolled back. * * @param string $strEventName * @param array $arrArguments * * @return bool */ public function handleEvent($strEventName, array $arrArguments) { $objChangelog = new class_module_system_changelog(); return $objChangelog->processCachedInserts(); }
public function installChangeTables() { $strReturn = ""; $arrFields = array(); $arrFields["change_id"] = array("char20", false); $arrFields["change_date"] = array("long", true); $arrFields["change_user"] = array("char20", true); $arrFields["change_systemid"] = array("char20", true); $arrFields["change_system_previd"] = array("char20", true); $arrFields["change_class"] = array("char254", true); $arrFields["change_action"] = array("char254", true); $arrFields["change_property"] = array("char254", true); $arrFields["change_oldvalue"] = array("text", true); $arrFields["change_newvalue"] = array("text", true); $arrTables = array("changelog"); $arrProvider = class_module_system_changelog::getAdditionalProviders(); foreach ($arrProvider as $objOneProvider) { $arrTables[] = $objOneProvider->getTargetTable(); } $arrDbTables = $this->objDB->getTables(); foreach ($arrTables as $strOneTable) { if (!in_array(_dbprefix_ . $strOneTable, $arrDbTables)) { if (!$this->objDB->createTable($strOneTable, $arrFields, array("change_id"), array("change_date", "change_user", "change_systemid", "change_property"), false)) { $strReturn .= "An error occurred! ...\n"; } } } return $strReturn; }
/** * 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; }
/** * Updates the current object to the database * * @return bool */ protected function updateStateToDb() { //Make texts db-safe $strName = $this->generateNonexistingPagename($this->getStrName()); $this->setStrName($strName); //create change-logs $objChanges = new class_module_system_changelog(); $objChanges->createLogEntry($this, class_module_system_changelog::$STR_ACTION_EDIT); $this->updatePath(); //Update the baserecord $bitBaseUpdate = parent::updateStateToDb(); //and the properties record //properties for this language already existing? $strCountQuery = "SELECT COUNT(*)\n FROM " . _dbprefix_ . "page_properties\n\t\t WHERE pageproperties_id= ?\n\t\t AND pageproperties_language= ?"; $arrCountRow = $this->objDB->getPRow($strCountQuery, array($this->getSystemid(), $this->getStrLanguage()), 0, false); if ((int) $arrCountRow["COUNT(*)"] >= 1) { //Already existing, updating properties $strQuery2 = "UPDATE " . _dbprefix_ . "page_properties\n \t\t\t\t\tSET pageproperties_description=?,\n \t\t\t\t\t\tpageproperties_template=?,\n \t\t\t\t\t\tpageproperties_keywords=?,\n \t\t\t\t\t\tpageproperties_browsername=?,\n \t\t\t\t\t\tpageproperties_seostring=?,\n \t\t\t\t\t\tpageproperties_alias=?,\n \t\t\t\t\t\tpageproperties_target=?,\n pageproperties_path=?\n \t\t\t\t WHERE pageproperties_id=?\n \t\t\t\t AND pageproperties_language=?"; $arrParams = array($this->getStrDesc(), $this->getStrTemplate(), $this->getStrKeywords(), $this->getStrBrowsername(), $this->getStrSeostring(), $this->getStrAlias(), $this->getStrTarget(), $this->getStrPath(), $this->getSystemid(), $this->getStrLanguage()); } else { //Not existing, create one $strQuery2 = "INSERT INTO " . _dbprefix_ . "page_properties\n\t\t\t\t\t\t(pageproperties_id, pageproperties_keywords, pageproperties_description, pageproperties_template, pageproperties_browsername,\n\t\t\t\t\t\t pageproperties_seostring, pageproperties_alias, pageproperties_target, pageproperties_language, pageproperties_path) VALUES\n\t\t\t\t\t\t(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; $arrParams = array($this->getSystemid(), $this->getStrKeywords(), $this->getStrDesc(), $this->getStrTemplate(), $this->getStrBrowsername(), $this->getStrSeostring(), $this->getStrAlias(), $this->getStrTarget(), $this->getStrLanguage(), $this->getStrPath()); } $bitBaseUpdate = $bitBaseUpdate && $this->objDB->_pQuery($strQuery2, $arrParams); $arrChildIds = $this->getChildNodesAsIdArray(); foreach ($arrChildIds as $strChildId) { $objInstance = class_objectfactory::getInstance()->getObject($strChildId); $objInstance->updateObjectToDb(); } return $bitBaseUpdate; }
/** * A general helper to flush the systems various caches. * * @param int $intCacheType A bitmask of caches to be flushed, e.g. class_carrier::INT_CACHE_TYPE_DBQUERIES | class_carrier::INT_CACHE_TYPE_ORMCACHE */ public function flushCache($intCacheType = 0) { if ($intCacheType & self::INT_CACHE_TYPE_DBQUERIES) { $this->getObjDB()->flushQueryCache(); } if ($intCacheType & self::INT_CACHE_TYPE_DBSTATEMENTS) { $this->getObjDB()->flushPreparedStatementsCache(); } if ($intCacheType & self::INT_CACHE_TYPE_DBTABLES) { $this->getObjDB()->flushTablesCache(); } if ($intCacheType & self::INT_CACHE_TYPE_ORMCACHE) { class_orm_rowcache::flushCache(); } if ($intCacheType & self::INT_CACHE_TYPE_OBJECTFACTORY) { class_objectfactory::getInstance()->flushCache(); } if ($intCacheType & self::INT_CACHE_TYPE_MODULES) { class_module_system_module::flushCache(); } if ($intCacheType & self::INT_CACHE_TYPE_CLASSLOADER) { class_classloader::getInstance()->flushCache(); } if ($intCacheType & self::INT_CACHE_TYPE_APC) { class_apc_cache::getInstance()->flushCache(); } if ($intCacheType & self::INT_CACHE_TYPE_CHANGELOG) { $objChangelog = new class_module_system_changelog(); $objChangelog->processCachedInserts(); } }