Merge branch 'seeddms-5.0.x' into seeddms-5.1.x

This commit is contained in:
Uwe Steinmann 2016-09-16 11:29:06 +02:00
commit 10f01c0fc6
12 changed files with 119 additions and 25 deletions

View File

@ -4933,6 +4933,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
*

View File

@ -1123,6 +1123,10 @@ class SeedDMS_Core_Workflow_Log { /* {{{ */
return $this->_transition;
} /* }}} */
function getWorkflow() { /* {{{ */
return $this->_workflow;
} /* }}} */
function getUser() { /* {{{ */
return $this->_user;
} /* }}} */

View File

@ -1091,6 +1091,9 @@ SeedDMS_Core_DMS::getNotificationsByUser() are deprecated
<license uri="http://opensource.org/licenses/gpl-license">GPL License</license>
<notes>
- 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()
</notes>
</release>
<release>

View File

@ -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' => '',

View File

@ -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\'',

View File

@ -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»',

View File

@ -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\'',

View File

@ -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',

View File

@ -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\'.',

View File

@ -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' => '点击选择审核人',

View File

@ -376,6 +376,7 @@ function tree($folder, $parent=null, $indent='', $skipcurrent=false) { /* {{{ */
foreach($wkflogs as $wklog) {
echo $indent." <workflowlog>\n";
echo $indent." <attr name=\"date\" format=\"Y-m-d H:i:s\">".$wklog->getDate()."</attr>\n";
echo $indent." <attr name=\"workflow\">".$wklog->getWorkflow()->getID()."</attr>\n";
echo $indent." <attr name=\"transition\">".$wklog->getTransition()->getID()."</attr>\n";
$loguser = $wklog->getUser();
echo $indent." <attr name=\"user\">".$loguser->getID()."</attr>\n";

View File

@ -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;
@ -358,10 +386,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 {
@ -516,8 +546,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'])) {
@ -608,6 +636,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']);
@ -712,6 +749,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']));
@ -736,7 +774,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']) {