From 53a277bb2b7a795a907af5ba082bf0e60ba071cb Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 16 Sep 2016 11:18:47 +0200 Subject: [PATCH 1/6] add method rewriteWorkflowLog() --- SeedDMS_Core/Core/inc.ClassDocument.php | 41 +++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/SeedDMS_Core/Core/inc.ClassDocument.php b/SeedDMS_Core/Core/inc.ClassDocument.php index 0b27b0cb7..7b3ec7619 100644 --- a/SeedDMS_Core/Core/inc.ClassDocument.php +++ b/SeedDMS_Core/Core/inc.ClassDocument.php @@ -3567,6 +3567,47 @@ class SeedDMS_Core_DocumentContent extends SeedDMS_Core_Object { /* {{{ */ return $this->_workflow; } /* }}} */ + /** + * Rewrites the complete workflow log + * + * Attention: this function is highly dangerous. + * It removes an existing workflow log and rewrites it. + * This method was added for importing an xml dump. + * + * @param array $workflowlog new workflow log with the newest log entry first. + * @return boolean true on success, otherwise false + */ + function rewriteWorkflowLog($workflowlog) { /* {{{ */ + $db = $this->_document->_dms->getDB(); + + $db->startTransaction(); + + /* First, remove the old entries */ + $queryStr = "DELETE FROM `tblWorkflowLog` WHERE `tblWorkflowLog`.`document` = '". $this->_document->getID() ."' AND `tblWorkflowLog`.`version` = '". $this->_version ."'"; + if (!$db->getResult($queryStr)) { + $db->rollbackTransaction(); + return false; + } + + /* Second, insert the new entries */ + $workflowlog = array_reverse($workflowlog); + foreach($workflowlog as $log) { + if(!SeedDMS_Core_DMS::checkDate($log['date'], 'Y-m-d H:i:s')) { + $db->rollbackTransaction(); + return false; + } + $queryStr = "INSERT INTO `tblWorkflowLog` (`document`, `version`, `workflow`, `transition`, `comment`, `date`, `userid`) ". + "VALUES ('".$this->_document->getID() ."', '".(int) $this->_version."', '".(int) $log['workflow']->getID()."', '".(int) $log['transition']->getID()."', ".$db->qstr($log['comment']) .", ".$db->qstr($log['date']).", ".$log['user']->getID().")"; + if (!$db->getResult($queryStr)) { + $db->rollbackTransaction(); + return false; + } + } + + $db->commitTransaction(); + return true; + } /* }}} */ + /** * Restart workflow from its initial state * From a79652e824e189ae953f201f85e631cc9ecc5865 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 16 Sep 2016 11:19:40 +0200 Subject: [PATCH 2/6] add note for 4.3.29 --- SeedDMS_Core/package.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml index 37d6ff9c2..e7732e01e 100644 --- a/SeedDMS_Core/package.xml +++ b/SeedDMS_Core/package.xml @@ -26,7 +26,8 @@ - SeedDMЅ_Core_Object::getAttributes() orders attributes by name of attribute definition - SeedDMЅ_Core_Workflow::addTransition() force reload of transition list after adding a -- SeedDMЅ_Core_Document::rewritet[Review|Approval]Log() will also copy file if it exists +- SeedDMЅ_Core_Document::rewrite[Review|Approval]Log() will also copy file if it exists +- add method SeedDMЅ_Core_Document::rewriteWorkflowLog() new transition From 01b6de8428b9c3e66f07af66aee45e81f2f0ce6b Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 16 Sep 2016 11:20:32 +0200 Subject: [PATCH 3/6] add getWorkflow() --- SeedDMS_Core/Core/inc.ClassWorkflow.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/SeedDMS_Core/Core/inc.ClassWorkflow.php b/SeedDMS_Core/Core/inc.ClassWorkflow.php index 5288f333e..e54d6d378 100644 --- a/SeedDMS_Core/Core/inc.ClassWorkflow.php +++ b/SeedDMS_Core/Core/inc.ClassWorkflow.php @@ -1101,6 +1101,10 @@ class SeedDMS_Core_Workflow_Log { /* {{{ */ return $this->_transition; } /* }}} */ + function getWorkflow() { /* {{{ */ + return $this->_workflow; + } /* }}} */ + function getUser() { /* {{{ */ return $this->_user; } /* }}} */ From 409fd62f11c92bf5113a9d2936920697006ec125 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 16 Sep 2016 11:20:55 +0200 Subject: [PATCH 4/6] add id of workflow in worfklowlog --- utils/xmldump.php | 1 + 1 file changed, 1 insertion(+) diff --git a/utils/xmldump.php b/utils/xmldump.php index 37bd87c46..e0e9bf774 100644 --- a/utils/xmldump.php +++ b/utils/xmldump.php @@ -366,6 +366,7 @@ function tree($folder, $parent=null, $indent='', $skipcurrent=false) { /* {{{ */ foreach($wkflogs as $wklog) { echo $indent." \n"; echo $indent." ".$wklog->getDate()."\n"; + echo $indent." ".$wklog->getWorkflow()->getID()."\n"; echo $indent." ".$wklog->getTransition()->getID()."\n"; $loguser = $wklog->getUser(); echo $indent." ".$loguser->getID()."\n"; From 491e5e8f237ede9f2723921a6c34e7764ff99904 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 16 Sep 2016 11:21:14 +0200 Subject: [PATCH 5/6] import workflow log --- utils/xmlimport.php | 53 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 49 insertions(+), 4 deletions(-) diff --git a/utils/xmlimport.php b/utils/xmlimport.php index 064be034a..9c6b86323 100644 --- a/utils/xmlimport.php +++ b/utils/xmlimport.php @@ -67,6 +67,34 @@ function getRevAppLog($reviews) { /* {{{ */ return $newreviews; } /* }}} */ +function getWorkflowLog($workflowlogs) { /* {{{ */ + global $logger, $dms, $objmap; + + $newlogs = array(); + foreach($workflowlogs as $i=>$log) { + if(!array_key_exists($log['attributes']['user'], $objmap['users'])) { + unset($initversion['workflowlogs'][$i]); + $logger->warning("User for workflow log cannot be mapped"); + } else { + $log['attributes']['user'] = $dms->getUser($objmap['users'][$log['attributes']['user']]); + if(!array_key_exists($log['attributes']['workflow'], $objmap['workflows'])) { + unset($initversion['workflowlogs'][$i]); + $logger->warning("Workflow for workflow log cannot be mapped"); + } else { + $log['attributes']['workflow'] = $dms->getWorkflow($objmap['workflows'][$log['attributes']['workflow']]); + if(!array_key_exists($log['attributes']['transition'], $objmap['workflowtransitions'])) { + unset($initversion['workflowlogs'][$i]); + $logger->warning("Workflow transition for workflow log cannot be mapped"); + } else { + $log['attributes']['transition'] = $dms->getWorkflowTransition($objmap['workflowtransitions'][$log['attributes']['transition']]); + $newlogs[] = $log['attributes']; + } + } + } + } + return $newlogs; +} /* }}} */ + function insert_user($user) { /* {{{ */ global $logger, $dms, $debug, $sections, $defaultUser, $objmap; @@ -302,10 +330,12 @@ function insert_workflow($workflow) { /* {{{ */ } } } - if(!$newWorkflow->addTransition($state, $action, $nextstate, $tusers, $tgroups)) { + if(!($newWorkflowTransition = $newWorkflow->addTransition($state, $action, $nextstate, $tusers, $tgroups))) { $logger->err("Could not add workflow because transition could not be added"); return false; } + if($newWorkflowTransition) + $objmap['workflowtransitions'][$transition['id']] = $newWorkflowTransition->getID(); } } } else { @@ -460,8 +490,6 @@ function insert_document($document) { /* {{{ */ $logger->warning("Workflowstate ".$initversion['workflow']['state']." cannot be mapped"); } } - if($initversion['workflowlogs']) { - } $version_attributes = array(); if(isset($initversion['user_attributes'])) { @@ -552,6 +580,15 @@ function insert_document($document) { /* {{{ */ $newVersion->rewriteApprovalLog($newapprovals); } + if($initversion['workflowlogs']) { + $newworkflowlogs = getWorkflowLog($initversion['workflowlogs']); + if(!$newVersion->rewriteWorkflowLog($newworkflowlogs)) { + $logger->err("Could not rewrite workflow log of version '".$newVersion->getVersion()."' of document '".$newDocument->getName()."'"); + $logger->debug($dms->getDB()->getErrorMsg()); + return false; + } + } + $newDocument->setDate(dateToTimestamp($document['attributes']['date'])); $newDocument->setDefaultAccess($document['attributes']['defaultaccess']); $newDocument->setInheritAccess($document['attributes']['inheritaccess']); @@ -656,6 +693,7 @@ function insert_document($document) { /* {{{ */ $logger->info("Added version '".$version['version']."' of document '".$document['attributes']['name']."'"); $newVersion = $result->getContent(); + unlink($filename); if($workflowstate) $newVersion->setWorkflowState($workflowstate); $newVersion->setDate(dateToTimestamp($version['attributes']['date'])); @@ -680,7 +718,14 @@ function insert_document($document) { /* {{{ */ $newVersion->rewriteApprovalLog($newapprovals); } - unlink($filename); + if($version['workflowlogs']) { + $newworkflowlogs = getWorkflowLog($version['workflowlogs']); + if(!$newVersion->rewriteWorkflowLog($newworkflowlogs)) { + $logger->err("Could not rewrite workflow log of version '".$newVersion->getVersion()."' of document '".$newDocument->getName()."'"); + $logger->debug($dms->getDB()->getErrorMsg()); + return false; + } + } } if(isset($document['notifications']['users']) && $document['notifications']['users']) { From c4fbcf6abab87f65387b1f52f05b6cb6fee1895e Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Fri, 16 Sep 2016 11:26:56 +0200 Subject: [PATCH 6/6] various new translations --- languages/bg_BG/lang.inc | 12 ++++++------ languages/cs_CZ/lang.inc | 4 ++-- languages/es_ES/lang.inc | 4 ++-- languages/it_IT/lang.inc | 4 ++-- languages/nl_NL/lang.inc | 4 ++-- languages/pl_PL/lang.inc | 4 ++-- languages/zh_CN/lang.inc | 10 +++++----- 7 files changed, 21 insertions(+), 21 deletions(-) diff --git a/languages/bg_BG/lang.inc b/languages/bg_BG/lang.inc index c73b5faa6..12f6318f2 100644 --- a/languages/bg_BG/lang.inc +++ b/languages/bg_BG/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (786) +// Translators: Admin (791) $text = array( '2_factor_auth' => '', @@ -160,7 +160,7 @@ $text = array( 'backup_tools' => 'Иструменти за бекъп', 'between' => 'между', 'bg_BG' => '', -'browse' => '', +'browse' => 'Преглеждане', 'calendar' => 'Календар', 'calendar_week' => '', 'cancel' => 'Отмяна', @@ -216,11 +216,11 @@ $text = array( 'choose_workflow_action' => 'Изберете workflow действие', 'choose_workflow_state' => 'Изберете състояние на workflow', 'class_name' => '', -'clear_cache' => '', +'clear_cache' => 'Изчистване на кеша', 'clear_clipboard' => '', 'clear_password' => '', 'clipboard' => '', -'close' => '', +'close' => 'Затвори', 'comment' => 'Коментар', 'comment_changed_email' => 'Коментарите са изменени', 'comment_for_current_version' => 'Коментар за версията', @@ -394,7 +394,7 @@ $text = array( 'files' => 'Файлове', 'files_deletion' => 'Изтриване на файлове', 'files_deletion_warning' => 'Тази операция ще изтрие всички файлове във всички папки. Информацията за версиите ще остане достъпна', -'files_loading' => '', +'files_loading' => 'Моля изчакайте докато се зареди списъкът на файловете', 'file_size' => 'Размер', 'filter_for_documents' => '', 'filter_for_folders' => '', @@ -800,7 +800,7 @@ $text = array( 'seconds' => 'секунди', 'selection' => 'Избор', 'select_attrdefgrp_show' => '', -'select_category' => '', +'select_category' => 'Изберете категория', 'select_groups' => 'Кликни да избереш групи', 'select_grp_approvers' => 'Кликни да избереш група утвърждаващи', 'select_grp_ind_approvers' => '', diff --git a/languages/cs_CZ/lang.inc b/languages/cs_CZ/lang.inc index bab22000b..8cc8ebb94 100644 --- a/languages/cs_CZ/lang.inc +++ b/languages/cs_CZ/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (707), kreml (455) +// Translators: Admin (708), kreml (455) $text = array( '2_factor_auth' => '', @@ -410,7 +410,7 @@ URL: [url]', 'edit_user' => 'Upravit uživatele', 'edit_user_details' => 'Upravit podrobnosti uživatele', 'edit_version' => '', -'el_GR' => '', +'el_GR' => 'Řecký', 'email' => 'E-mail', 'email_error_title' => 'Není zadána emailová adresa', 'email_footer' => 'Změnu nastavení e-mailu můžete kdykoliv provést pomocí funkce\'Můj účet\'', diff --git a/languages/es_ES/lang.inc b/languages/es_ES/lang.inc index 0c0c4d32c..3973845a0 100644 --- a/languages/es_ES/lang.inc +++ b/languages/es_ES/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: acabello (20), Admin (996), angel (123), francisco (2), jaimem (14) +// Translators: acabello (20), Admin (998), angel (123), francisco (2), jaimem (14) $text = array( '2_factor_auth' => '', @@ -410,7 +410,7 @@ URL: [url]', 'edit_user' => 'Editar usuario...', 'edit_user_details' => 'Editar detalles de usuario', 'edit_version' => '', -'el_GR' => '', +'el_GR' => 'Griego', 'email' => 'Email', 'email_error_title' => 'No ha introducido un correo', 'email_footer' => 'Siempre se puede cambiar la configuración de correo electrónico utilizando las funciones de «Mi cuenta»', diff --git a/languages/it_IT/lang.inc b/languages/it_IT/lang.inc index 9f25ce077..f4b2c28c3 100644 --- a/languages/it_IT/lang.inc +++ b/languages/it_IT/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (1530), rickr (144), s.pnt (26) +// Translators: Admin (1531), rickr (144), s.pnt (26) $text = array( '2_factor_auth' => 'Autorizzazione a due fattori', @@ -416,7 +416,7 @@ URL: [url]', 'edit_user' => 'Modifica l\'utente', 'edit_user_details' => 'Modifica i dettagli utente', 'edit_version' => 'Versione editato', -'el_GR' => '', +'el_GR' => 'Greco', 'email' => 'Email', 'email_error_title' => 'Nessuna email immessa', 'email_footer' => 'Puoi cambiare l\'impostazione della tua email utilizzando le funzioni del menu \'Account personale\'', diff --git a/languages/nl_NL/lang.inc b/languages/nl_NL/lang.inc index a15cf928d..505f68a86 100644 --- a/languages/nl_NL/lang.inc +++ b/languages/nl_NL/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (720), gijsbertush (329), pepijn (45), reinoutdijkstra@hotmail.com (270) +// Translators: Admin (721), gijsbertush (329), pepijn (45), reinoutdijkstra@hotmail.com (270) $text = array( '2_factor_auth' => '', @@ -408,7 +408,7 @@ URL: [url]', 'edit_user' => 'Wijzig gebruiker', 'edit_user_details' => 'Wijzig gebruiker Details', 'edit_version' => '', -'el_GR' => '', +'el_GR' => 'Griek', 'email' => 'E-mail', 'email_error_title' => 'Geen email ingevoerd', 'email_footer' => 'U kunt altijd uw e-mail instellingen wijzigen via de \'Mijn Account\' opties', diff --git a/languages/pl_PL/lang.inc b/languages/pl_PL/lang.inc index 5bc010527..870136649 100644 --- a/languages/pl_PL/lang.inc +++ b/languages/pl_PL/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (739), netixw (84), romi (93), uGn (112) +// Translators: Admin (740), netixw (84), romi (93), uGn (112) $text = array( '2_factor_auth' => '', @@ -403,7 +403,7 @@ URL: [url]', 'edit_user' => 'Edytuj użytkownika', 'edit_user_details' => 'Zmień dane użytkownika', 'edit_version' => '', -'el_GR' => '', +'el_GR' => 'Grecki', 'email' => 'Email', 'email_error_title' => 'Nie wprowadzono adresu email', 'email_footer' => 'W każdej chwili możesz zmienić swój email używając zakładki \'Moje konto\'.', diff --git a/languages/zh_CN/lang.inc b/languages/zh_CN/lang.inc index 7e64cd14d..967d6a386 100644 --- a/languages/zh_CN/lang.inc +++ b/languages/zh_CN/lang.inc @@ -19,7 +19,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // -// Translators: Admin (644), fengjohn (5) +// Translators: Admin (648), fengjohn (5) $text = array( '2_factor_auth' => '', @@ -364,7 +364,7 @@ URL: [url]', 'edit_user' => '编辑用户', 'edit_user_details' => '编辑用户详情', 'edit_version' => '', -'el_GR' => '', +'el_GR' => '希腊人', 'email' => 'Email', 'email_error_title' => '', 'email_footer' => '您可以用‘我的账户’选项来改变您的e-mail设置', @@ -556,7 +556,7 @@ URL: [url]', 'manager_of_group' => '', 'mandatory_approvergroups' => '', 'mandatory_approvergroup_no_access' => '', -'mandatory_approvers' => '', +'mandatory_approvers' => '必须的审批者', 'mandatory_approver_no_access' => '', 'mandatory_reviewergroups' => '', 'mandatory_reviewergroup_no_access' => '', @@ -808,7 +808,7 @@ URL: [url]', 'select_attrdefgrp_show' => '', 'select_category' => '选中分类', 'select_groups' => '点击选择组', -'select_grp_approvers' => '', +'select_grp_approvers' => '点击选择组审批组', 'select_grp_ind_approvers' => '', 'select_grp_ind_notification' => '', 'select_grp_ind_recipients' => '', @@ -817,7 +817,7 @@ URL: [url]', 'select_grp_recipients' => '', 'select_grp_reviewers' => '点击选择审核群组', 'select_grp_revisors' => '', -'select_ind_approvers' => '', +'select_ind_approvers' => '点击选择审批个人', 'select_ind_notification' => '点击选择被通知人', 'select_ind_recipients' => '', 'select_ind_reviewers' => '点击选择审核人',