diff --git a/SeedDMS_Core/Core/inc.ClassDocument.php b/SeedDMS_Core/Core/inc.ClassDocument.php
index 35d35c24e..4f61aa10a 100644
--- a/SeedDMS_Core/Core/inc.ClassDocument.php
+++ b/SeedDMS_Core/Core/inc.ClassDocument.php
@@ -3600,6 +3600,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
*
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;
} /* }}} */
diff --git a/SeedDMS_Core/package.xml b/SeedDMS_Core/package.xml
index bc081f7e3..3cc172094 100644
--- a/SeedDMS_Core/package.xml
+++ b/SeedDMS_Core/package.xml
@@ -1088,6 +1088,9 @@ SeedDMS_Core_DMS::getNotificationsByUser() are deprecated
GPL License
- 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::rewrite[Review|Approval]Log() will also copy file if it exists
+- add method SeedDMЅ_Core_Document::rewriteWorkflowLog()
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' => '点击选择审核人',
diff --git a/utils/xmldump.php b/utils/xmldump.php
index 4715b5647..3d896eb0e 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";
diff --git a/utils/xmlimport.php b/utils/xmlimport.php
index 5e49d7133..6c8576fcf 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;
@@ -319,10 +347,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 {
@@ -477,8 +507,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'])) {
@@ -569,6 +597,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']);
@@ -673,6 +710,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']));
@@ -697,7 +735,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']) {