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()));
     }
 }
Example #4
0
 /**
  * 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;
 }
Example #8
0
 /**
  * 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;
 }
Example #16
0
 /**
  * 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();
     }
 }