mirror of
https://git.code.sf.net/p/seeddms/code
synced 2025-11-28 18:40:39 +00:00
lots of bug fixes
This commit is contained in:
parent
e55047fb58
commit
7b065e7b05
|
|
@ -53,6 +53,12 @@ function getRevAppLog($reviews) { /* {{{ */
|
||||||
$newlog['status'] = $log['attributes']['status'];
|
$newlog['status'] = $log['attributes']['status'];
|
||||||
$newlog['comment'] = $log['attributes']['comment'];
|
$newlog['comment'] = $log['attributes']['comment'];
|
||||||
$newlog['date'] = $log['attributes']['date'];
|
$newlog['date'] = $log['attributes']['date'];
|
||||||
|
if(!empty($log['data'])) {
|
||||||
|
$filecontents = base64_decode($log['data']);
|
||||||
|
$filename = tempnam('/tmp', 'FOO-revapp');
|
||||||
|
file_put_contents($filename, $filecontents);
|
||||||
|
$newlog['file'] = $filename;
|
||||||
|
}
|
||||||
$newreview['logs'][] = $newlog;
|
$newreview['logs'][] = $newlog;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -394,8 +400,69 @@ function insert_document($document) { /* {{{ */
|
||||||
$folder = $rootfolder;
|
$folder = $rootfolder;
|
||||||
|
|
||||||
if(in_array('documents', $sections)) {
|
if(in_array('documents', $sections)) {
|
||||||
$error = false;
|
|
||||||
$initversion = array_shift($document['versions']);
|
$initversion = array_shift($document['versions']);
|
||||||
|
$reviews = array('i'=>array(), 'g'=>array());
|
||||||
|
/*
|
||||||
|
if($initversion['reviews']) {
|
||||||
|
foreach($initversion['reviews'] as $review) {
|
||||||
|
if($review['attributes']['type'] == 1) {
|
||||||
|
if(isset($objmap['groups'][(int) $review['attributes']['required']]))
|
||||||
|
$reviews['g'][] = $objmap['groups'][(int) $review['attributes']['required']];
|
||||||
|
} else {
|
||||||
|
if(isset($objmap['users'][(int) $review['attributes']['required']]))
|
||||||
|
$reviews['i'][] = $objmap['users'][(int) $review['attributes']['required']];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
$approvals = array('i'=>array(), 'g'=>array());
|
||||||
|
/*
|
||||||
|
if($initversion['approvals']) {
|
||||||
|
foreach($initversion['approvals'] as $approval) {
|
||||||
|
if($approval['attributes']['type'] == 1) {
|
||||||
|
if(isset($objmap['groups'][(int) $approval['attributes']['required']]))
|
||||||
|
$approvals['g'][] = $objmap['groups'][(int) $approval['attributes']['required']];
|
||||||
|
} else {
|
||||||
|
if(isset($objmap['users'][(int) $approval['attributes']['required']]))
|
||||||
|
$approvals['i'][] = $objmap['users'][(int) $approval['attributes']['required']];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
$workflow = null;
|
||||||
|
$workflowstate = null;
|
||||||
|
if(isset($initversion['workflow']) && $initversion['workflow']) {
|
||||||
|
if(array_key_exists((int) $initversion['workflow']['id'], $objmap['workflows'])) {
|
||||||
|
$workflow = $dms->getWorkflow($objmap['workflows'][(int) $initversion['workflow']['id']]);
|
||||||
|
if(!$workflow) {
|
||||||
|
$logger->warning("Workflow ".$initversion['workflow']['id']." cannot be mapped");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$logger->warning("Workflow ".$initversion['workflow']['id']." cannot be mapped");
|
||||||
|
}
|
||||||
|
if(array_key_exists((int) $initversion['workflow']['state'], $objmap['workflowstates'])) {
|
||||||
|
$workflowstate = $dms->getWorkflow($objmap['workflowstates'][(int) $initversion['workflow']['state']]);
|
||||||
|
if(!$workflowstate) {
|
||||||
|
$logger->warning("Workflowstate ".$initversion['workflow']['state']." cannot be mapped");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$logger->warning("Workflowstate ".$initversion['workflow']['state']." cannot be mapped");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if($initversion['workflowlogs']) {
|
||||||
|
}
|
||||||
|
|
||||||
|
$version_attributes = array();
|
||||||
|
if(isset($initversion['user_attributes'])) {
|
||||||
|
foreach($initversion['user_attributes'] as $orgid=>$value) {
|
||||||
|
if(array_key_exists((int) $orgid, $objmap['attributedefs'])) {
|
||||||
|
$version_attributes[$objmap['attributedefs'][$orgid]] = $value;
|
||||||
|
} else {
|
||||||
|
$logger->warning("User attribute ".$orgid." cannot be mapped");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if(!empty($initversion['fileref'])) {
|
if(!empty($initversion['fileref'])) {
|
||||||
$filename = tempnam('/tmp', 'FOO');
|
$filename = tempnam('/tmp', 'FOO');
|
||||||
copy($contentdir.$initversion['fileref'], $filename);
|
copy($contentdir.$initversion['fileref'], $filename);
|
||||||
|
|
@ -403,17 +470,92 @@ function insert_document($document) { /* {{{ */
|
||||||
$filecontents = base64_decode($initversion['data']);
|
$filecontents = base64_decode($initversion['data']);
|
||||||
if(strlen($filecontents) != $initversion['data_length']) {
|
if(strlen($filecontents) != $initversion['data_length']) {
|
||||||
$logger->warning("File length (".strlen($filecontents).") doesn't match expected length (".$initversion['data_length'].").");
|
$logger->warning("File length (".strlen($filecontents).") doesn't match expected length (".$initversion['data_length'].").");
|
||||||
$newDocument = null;
|
|
||||||
$error = true;
|
|
||||||
}
|
}
|
||||||
$filename = tempnam('/tmp', 'FOO');
|
$filename = tempnam('/tmp', 'FOO');
|
||||||
file_put_contents($filename, $filecontents);
|
file_put_contents($filename, $filecontents);
|
||||||
}
|
}
|
||||||
if(!$error) {
|
if(!$result = $folder->addDocument(
|
||||||
|
$document['attributes']['name'],
|
||||||
|
$document['attributes']['comment'],
|
||||||
|
isset($document['attributes']['expires']) ? dateToTimestamp($document['attributes']['expires']) : 0,
|
||||||
|
$owner,
|
||||||
|
isset($document['attributes']['keywords']) ? $document['attributes']['keywords'] : 0,
|
||||||
|
$categories,
|
||||||
|
$filename,
|
||||||
|
$initversion['attributes']['orgfilename'],
|
||||||
|
$initversion['attributes']['filetype'],
|
||||||
|
$initversion['attributes']['mimetype'],
|
||||||
|
$document['attributes']['sequence'],
|
||||||
|
$reviews, //reviewers
|
||||||
|
$approvals, //approvers
|
||||||
|
$initversion['version'],
|
||||||
|
isset($initversion['attributes']['comment']) ? $initversion['attributes']['comment'] : '',
|
||||||
|
$attributes,
|
||||||
|
$version_attributes,
|
||||||
|
$workflow
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
unlink($filename);
|
||||||
|
$logger->err("Could not add document '".$document['attributes']['name']."'");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The document and its initial version was added */
|
||||||
|
$logger->info("Added document '".$document['attributes']['name']."'");
|
||||||
|
$newDocument = $result[0];
|
||||||
|
unlink($filename);
|
||||||
|
|
||||||
|
if(isset($document['attributes']['lockedby'])) {
|
||||||
|
if(!array_key_exists($document['attributes']['lockedby'], $objmap['users'])) {
|
||||||
|
$logger->warning("User for document lock cannot be mapped");
|
||||||
|
} else {
|
||||||
|
if($lockuser = $dms->getUser($objmap['users'][$document['attributes']['lockedby']])) {
|
||||||
|
$newDocument->setLocked($lockuser);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$newVersion = $result[1]->getContent();
|
||||||
|
$newVersion->setDate(dateToTimestamp($initversion['attributes']['date']));
|
||||||
|
if($workflowstate)
|
||||||
|
$newVersion->setWorkflowState($workflowstate);
|
||||||
|
$newlogs = array();
|
||||||
|
foreach($initversion['statuslogs'] as $i=>$log) {
|
||||||
|
if(!array_key_exists($log['attributes']['user'], $objmap['users'])) {
|
||||||
|
unset($initversion['statuslogs'][$i]);
|
||||||
|
$logger->warning("User for status log cannot be mapped");
|
||||||
|
} else {
|
||||||
|
$log['attributes']['user'] = $dms->getUser($objmap['users'][$log['attributes']['user']]);
|
||||||
|
$newlogs[] = $log['attributes'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$newVersion->rewriteStatusLog($newlogs);
|
||||||
|
|
||||||
|
/* Set reviewers and review log */
|
||||||
|
if($initversion['reviews']) {
|
||||||
|
// print_r($initversion['reviews']);
|
||||||
|
$newreviews = getRevAppLog($initversion['reviews']);
|
||||||
|
$newVersion->rewriteReviewLog($newreviews);
|
||||||
|
}
|
||||||
|
if($initversion['approvals']) {
|
||||||
|
$newapprovals = getRevAppLog($initversion['approvals']);
|
||||||
|
$newVersion->rewriteApprovalLog($newapprovals);
|
||||||
|
}
|
||||||
|
|
||||||
|
$newDocument->setDate(dateToTimestamp($document['attributes']['date']));
|
||||||
|
$newDocument->setDefaultAccess($document['attributes']['defaultaccess']);
|
||||||
|
$newDocument->setInheritAccess($document['attributes']['inheritaccess']);
|
||||||
|
foreach($document['versions'] as $version) {
|
||||||
|
if(!array_key_exists((int) $version['attributes']['owner'], $objmap['users'])) {
|
||||||
|
$logger->err("Owner of document cannot be mapped");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$owner = $dms->getUser($objmap['users'][(int) $version['attributes']['owner']]);
|
||||||
|
|
||||||
$reviews = array('i'=>array(), 'g'=>array());
|
$reviews = array('i'=>array(), 'g'=>array());
|
||||||
/*
|
/*
|
||||||
if($initversion['reviews']) {
|
if($version['reviews']) {
|
||||||
foreach($initversion['reviews'] as $review) {
|
foreach($version['reviews'] as $review) {
|
||||||
if($review['attributes']['type'] == 1) {
|
if($review['attributes']['type'] == 1) {
|
||||||
if(isset($objmap['groups'][(int) $review['attributes']['required']]))
|
if(isset($objmap['groups'][(int) $review['attributes']['required']]))
|
||||||
$reviews['g'][] = $objmap['groups'][(int) $review['attributes']['required']];
|
$reviews['g'][] = $objmap['groups'][(int) $review['attributes']['required']];
|
||||||
|
|
@ -426,8 +568,8 @@ function insert_document($document) { /* {{{ */
|
||||||
*/
|
*/
|
||||||
$approvals = array('i'=>array(), 'g'=>array());
|
$approvals = array('i'=>array(), 'g'=>array());
|
||||||
/*
|
/*
|
||||||
if($initversion['approvals']) {
|
if($version['approvals']) {
|
||||||
foreach($initversion['approvals'] as $approval) {
|
foreach($version['approvals'] as $approval) {
|
||||||
if($approval['attributes']['type'] == 1) {
|
if($approval['attributes']['type'] == 1) {
|
||||||
if(isset($objmap['groups'][(int) $approval['attributes']['required']]))
|
if(isset($objmap['groups'][(int) $approval['attributes']['required']]))
|
||||||
$approvals['g'][] = $objmap['groups'][(int) $approval['attributes']['required']];
|
$approvals['g'][] = $objmap['groups'][(int) $approval['attributes']['required']];
|
||||||
|
|
@ -440,22 +582,31 @@ function insert_document($document) { /* {{{ */
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$workflow = null;
|
$workflow = null;
|
||||||
if(isset($initversion['workflow']) && $initversion['workflow']) {
|
$workflowstate = null;
|
||||||
if(array_key_exists((int) $initversion['workflow']['id'], $objmap['workflows'])) {
|
if(isset($version['workflow']) && $version['workflow']) {
|
||||||
$workflow = $dms->getWorkflow($objmap['workflows'][(int) $initversion['workflow']['id']]);
|
if(array_key_exists((int) $version['workflow']['id'], $objmap['workflows'])) {
|
||||||
|
$workflow = $dms->getWorkflow($objmap['workflows'][(int) $version['workflow']['id']]);
|
||||||
if(!$workflow) {
|
if(!$workflow) {
|
||||||
$logger->warning("Workflow ".$orgid." cannot be mapped");
|
$logger->warning("Workflow ".$version['workflow']['id']." cannot be mapped");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$logger->warning("Workflow ".$initversion['workflow']['id']." cannot be mapped");
|
$logger->warning("Workflow ".$version['workflow']['id']." cannot be mapped");
|
||||||
|
}
|
||||||
|
if(array_key_exists((int) $version['workflow']['state'], $objmap['workflowstates'])) {
|
||||||
|
$workflowstate = $dms->getWorkflow($objmap['workflowstates'][(int) $version['workflow']['state']]);
|
||||||
|
if(!$workflowstate) {
|
||||||
|
$logger->warning("Workflowstate ".$version['workflow']['state']." cannot be mapped");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$logger->warning("Workflowstate ".$version['workflow']['state']." cannot be mapped");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if($initversion['workflowlogs']) {
|
if($version['workflowlogs']) {
|
||||||
}
|
}
|
||||||
|
|
||||||
$version_attributes = array();
|
$version_attributes = array();
|
||||||
if(isset($initversion['user_attributes'])) {
|
if(isset($version['user_attributes'])) {
|
||||||
foreach($initversion['user_attributes'] as $orgid=>$value) {
|
foreach($version['user_attributes'] as $orgid=>$value) {
|
||||||
if(array_key_exists((int) $orgid, $objmap['attributedefs'])) {
|
if(array_key_exists((int) $orgid, $objmap['attributedefs'])) {
|
||||||
$version_attributes[$objmap['attributedefs'][$orgid]] = $value;
|
$version_attributes[$objmap['attributedefs'][$orgid]] = $value;
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -463,233 +614,128 @@ function insert_document($document) { /* {{{ */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!$result = $folder->addDocument(
|
if(!empty($version['fileref'])) {
|
||||||
$document['attributes']['name'],
|
$filename = tempnam('/tmp', 'FOO');
|
||||||
$document['attributes']['comment'],
|
copy($contentdir.$version['fileref'], $filename);
|
||||||
isset($document['attributes']['expires']) ? dateToTimestamp($document['attributes']['expires']) : 0,
|
} else {
|
||||||
|
$filecontents = base64_decode($version['data']);
|
||||||
|
if(strlen($filecontents) != $version['data_length']) {
|
||||||
|
$logger->warning("File length (".strlen($filecontents).") doesn't match expected length (".$version['data_length'].").");
|
||||||
|
}
|
||||||
|
$filename = tempnam('/tmp', 'FOO');
|
||||||
|
file_put_contents($filename, $filecontents);
|
||||||
|
}
|
||||||
|
if(!($result = $newDocument->addContent(
|
||||||
|
$version['attributes']['comment'],
|
||||||
$owner,
|
$owner,
|
||||||
isset($document['attributes']['keywords']) ? $document['attributes']['keywords'] : 0,
|
|
||||||
$categories,
|
|
||||||
$filename,
|
$filename,
|
||||||
$initversion['attributes']['orgfilename'],
|
$version['attributes']['orgfilename'],
|
||||||
$initversion['attributes']['filetype'],
|
$version['attributes']['filetype'],
|
||||||
$initversion['attributes']['mimetype'],
|
$version['attributes']['mimetype'],
|
||||||
$document['attributes']['sequence'],
|
|
||||||
$reviews, //reviewers
|
$reviews, //reviewers
|
||||||
$approvals, //approvers
|
$approvals, //approvers
|
||||||
$initversion['version'],
|
$version['version'],
|
||||||
isset($initversion['attributes']['comment']) ? $initversion['attributes']['comment'] : '',
|
|
||||||
$attributes,
|
|
||||||
$version_attributes,
|
$version_attributes,
|
||||||
$workflow
|
$workflow
|
||||||
)
|
))) {
|
||||||
) {
|
|
||||||
unlink($filename);
|
unlink($filename);
|
||||||
$logger->err("Could not add document '".$document['attributes']['name']."'");
|
$logger->err("Could not add version '".$version['version']."' of document '".$document['attributes']['name']."'");
|
||||||
return false;
|
return false;
|
||||||
} else {
|
}
|
||||||
$logger->info("Added document '".$document['attributes']['name']."'");
|
|
||||||
$newDocument = $result[0];
|
$logger->info("Added version '".$version['version']."' of document '".$document['attributes']['name']."'");
|
||||||
|
$newVersion = $result->getContent();
|
||||||
|
if($workflowstate)
|
||||||
|
$newVersion->setWorkflowState($workflowstate);
|
||||||
|
$newVersion->setDate(dateToTimestamp($version['attributes']['date']));
|
||||||
|
$newlogs = array();
|
||||||
|
foreach($version['statuslogs'] as $i=>$log) {
|
||||||
|
if(!array_key_exists($log['attributes']['user'], $objmap['users'])) {
|
||||||
|
unset($version['statuslogs'][$i]);
|
||||||
|
$logger->warning("User for status log cannot be mapped");
|
||||||
|
} else {
|
||||||
|
$log['attributes']['user'] = $dms->getUser($objmap['users'][$log['attributes']['user']]);
|
||||||
|
$newlogs[] = $log['attributes'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$newVersion->rewriteStatusLog($newlogs);
|
||||||
|
|
||||||
|
if($version['reviews']) {
|
||||||
|
$newreviews = getRevAppLog($version['reviews']);
|
||||||
|
$newVersion->rewriteReviewLog($newreviews);
|
||||||
|
}
|
||||||
|
if($version['approvals']) {
|
||||||
|
$newapprovals = getRevAppLog($version['approvals']);
|
||||||
|
$newVersion->rewriteApprovalLog($newapprovals);
|
||||||
|
}
|
||||||
|
|
||||||
|
unlink($filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(isset($document['notifications']['users']) && $document['notifications']['users']) {
|
||||||
|
foreach($document['notifications']['users'] as $userid) {
|
||||||
|
if(!array_key_exists($userid, $objmap['users'])) {
|
||||||
|
$logger->warning("User for notification cannot be mapped");
|
||||||
|
} else {
|
||||||
|
$newDocument->addNotify($objmap['users'][$userid], 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(isset($document['notifications']['groups']) && $document['notifications']['groups']) {
|
||||||
|
foreach($document['notifications']['groups'] as $groupid) {
|
||||||
|
if(!array_key_exists($groupid, $objmap['groups'])) {
|
||||||
|
$logger->warning("User for notification cannot be mapped");
|
||||||
|
} else {
|
||||||
|
$newDocument->addNotify($objmap['groups'][$groupid], 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(isset($document['acls']) && $document['acls']) {
|
||||||
|
foreach($document['acls'] as $acl) {
|
||||||
|
if($acl['type'] == 'user') {
|
||||||
|
if(!array_key_exists($acl['user'], $objmap['users'])) {
|
||||||
|
$logger->warning("User for notification cannot be mapped");
|
||||||
|
} else {
|
||||||
|
$newDocument->addAccess($acl['mode'], $objmap['users'][$acl['user']], 1);
|
||||||
|
}
|
||||||
|
} elseif($acl['type'] == 'group') {
|
||||||
|
if(!array_key_exists($acl['group'], $objmap['groups'])) {
|
||||||
|
$logger->warning("Group for notification cannot be mapped");
|
||||||
|
} else {
|
||||||
|
$newDocument->addAccess($acl['mode'], $objmap['groups'][$acl['group']], 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(isset($document['files']) && $document['files']) {
|
||||||
|
foreach($document['files'] as $file) {
|
||||||
|
if(!array_key_exists($file['attributes']['owner'], $objmap['users'])) {
|
||||||
|
$logger->warning("User for file cannot be mapped");
|
||||||
|
$owner = $defaultUser;
|
||||||
|
} else {
|
||||||
|
$owner = $dms->getUser($objmap['users'][$file['attributes']['owner']]);
|
||||||
|
}
|
||||||
|
if(!empty($file['fileref'])) {
|
||||||
|
$filename = tempnam('/tmp', 'FOO');
|
||||||
|
copy($contentdir.$file['fileref'], $filename);
|
||||||
|
} else {
|
||||||
|
$filecontents = base64_decode($file['data']);
|
||||||
|
if(strlen($filecontents) != $file['data_length']) {
|
||||||
|
$logger->warning("File length (".strlen($filecontents).") doesn't match expected length (".$file['data_length'].").");
|
||||||
|
}
|
||||||
|
$filename = tempnam('/tmp', 'FOO');
|
||||||
|
file_put_contents($filename, $filecontents);
|
||||||
|
}
|
||||||
|
$newDocument->addDocumentFile(
|
||||||
|
$file['attributes']['name'],
|
||||||
|
$file['attributes']['comment'],
|
||||||
|
$owner,
|
||||||
|
$filename,
|
||||||
|
$file['attributes']['orgfilename'],
|
||||||
|
$file['attributes']['filetype'],
|
||||||
|
$file['attributes']['mimetype']
|
||||||
|
);
|
||||||
unlink($filename);
|
unlink($filename);
|
||||||
|
|
||||||
if(isset($document['attributes']['lockedby'])) {
|
|
||||||
if(!array_key_exists($document['attributes']['lockedby'], $objmap['users'])) {
|
|
||||||
$logger->warning("User for document lock cannot be mapped");
|
|
||||||
} else {
|
|
||||||
if($lockuser = $dms->getUser($objmap['users'][$document['attributes']['lockedby']])) {
|
|
||||||
$newDocument->setLocked($lockuser);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$newVersion = $result[1]->getContent();
|
|
||||||
$newVersion->setDate(dateToTimestamp($initversion['attributes']['date']));
|
|
||||||
$newlogs = array();
|
|
||||||
foreach($initversion['statuslogs'] as $i=>$log) {
|
|
||||||
if(!array_key_exists($log['attributes']['user'], $objmap['users'])) {
|
|
||||||
unset($initversion['statuslogs'][$i]);
|
|
||||||
$logger->warning("User for status log cannot be mapped");
|
|
||||||
} else {
|
|
||||||
$log['attributes']['user'] = $dms->getUser($objmap['users'][$log['attributes']['user']]);
|
|
||||||
$newlogs[] = $log['attributes'];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$newVersion->rewriteStatusLog($newlogs);
|
|
||||||
|
|
||||||
/* Set reviewers and review log */
|
|
||||||
if($initversion['reviews']) {
|
|
||||||
$newreviews = getRevAppLog($initversion['reviews']);
|
|
||||||
$newVersion->rewriteReviewLog($newreviews);
|
|
||||||
}
|
|
||||||
if($initversion['approvals']) {
|
|
||||||
$newapprovals = getRevAppLog($initversion['approvals']);
|
|
||||||
$newVersion->rewriteApprovalLog($newapprovals);
|
|
||||||
}
|
|
||||||
|
|
||||||
$newDocument->setDate(dateToTimestamp($document['attributes']['date']));
|
|
||||||
$newDocument->setDefaultAccess($document['attributes']['defaultaccess']);
|
|
||||||
foreach($document['versions'] as $version) {
|
|
||||||
if(!array_key_exists((int) $version['attributes']['owner'], $objmap['users'])) {
|
|
||||||
$logger->err("Owner of document cannot be mapped");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$owner = $dms->getUser($objmap['users'][(int) $version['attributes']['owner']]);
|
|
||||||
|
|
||||||
$reviews = array('i'=>array(), 'g'=>array());
|
|
||||||
/*
|
|
||||||
if($version['reviews']) {
|
|
||||||
foreach($version['reviews'] as $review) {
|
|
||||||
if($review['attributes']['type'] == 1) {
|
|
||||||
if(isset($objmap['groups'][(int) $review['attributes']['required']]))
|
|
||||||
$reviews['g'][] = $objmap['groups'][(int) $review['attributes']['required']];
|
|
||||||
} else {
|
|
||||||
if(isset($objmap['users'][(int) $review['attributes']['required']]))
|
|
||||||
$reviews['i'][] = $objmap['users'][(int) $review['attributes']['required']];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
$approvals = array('i'=>array(), 'g'=>array());
|
|
||||||
/*
|
|
||||||
if($version['approvals']) {
|
|
||||||
foreach($version['approvals'] as $approval) {
|
|
||||||
if($approval['attributes']['type'] == 1) {
|
|
||||||
if(isset($objmap['groups'][(int) $approval['attributes']['required']]))
|
|
||||||
$approvals['g'][] = $objmap['groups'][(int) $approval['attributes']['required']];
|
|
||||||
} else {
|
|
||||||
if(isset($objmap['users'][(int) $approval['attributes']['required']]))
|
|
||||||
$approvals['i'][] = $objmap['users'][(int) $approval['attributes']['required']];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
$version_attributes = array();
|
|
||||||
if(isset($version['user_attributes'])) {
|
|
||||||
foreach($version['user_attributes'] as $orgid=>$value) {
|
|
||||||
if(array_key_exists((int) $orgid, $objmap['attributedefs'])) {
|
|
||||||
$version_attributes[$objmap['attributedefs'][$orgid]] = $value;
|
|
||||||
} else {
|
|
||||||
$logger->warning("User attribute ".$orgid." cannot be mapped");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(!empty($version['fileref'])) {
|
|
||||||
$filename = tempnam('/tmp', 'FOO');
|
|
||||||
copy($contentdir.$version['fileref'], $filename);
|
|
||||||
} else {
|
|
||||||
$filecontents = base64_decode($version['data']);
|
|
||||||
if(strlen($filecontents) != $version['data_length']) {
|
|
||||||
$logger->warning("File length (".strlen($filecontents).") doesn't match expected length (".$version['data_length'].").");
|
|
||||||
}
|
|
||||||
$filename = tempnam('/tmp', 'FOO');
|
|
||||||
file_put_contents($filename, $filecontents);
|
|
||||||
}
|
|
||||||
if(!($result = $newDocument->addContent(
|
|
||||||
$version['attributes']['comment'],
|
|
||||||
$owner,
|
|
||||||
$filename,
|
|
||||||
$version['attributes']['orgfilename'],
|
|
||||||
$version['attributes']['filetype'],
|
|
||||||
$version['attributes']['mimetype'],
|
|
||||||
$reviews, //reviewers
|
|
||||||
$approvals, //approvers
|
|
||||||
$version['version'],
|
|
||||||
$version_attributes,
|
|
||||||
null //workflow
|
|
||||||
))) {
|
|
||||||
}
|
|
||||||
$newVersion = $result->getContent();
|
|
||||||
$newVersion->setDate(dateToTimestamp($version['attributes']['date']));
|
|
||||||
$newlogs = array();
|
|
||||||
foreach($version['statuslogs'] as $i=>$log) {
|
|
||||||
if(!array_key_exists($log['attributes']['user'], $objmap['users'])) {
|
|
||||||
unset($version['statuslogs'][$i]);
|
|
||||||
$logger->warning("User for status log cannot be mapped");
|
|
||||||
} else {
|
|
||||||
$log['attributes']['user'] = $dms->getUser($objmap['users'][$log['attributes']['user']]);
|
|
||||||
$newlogs[] = $log['attributes'];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$newVersion->rewriteStatusLog($newlogs);
|
|
||||||
|
|
||||||
if($version['reviews']) {
|
|
||||||
$newreviews = getRevAppLog($version['reviews']);
|
|
||||||
$newVersion->rewriteReviewLog($newreviews);
|
|
||||||
}
|
|
||||||
if($version['approvals']) {
|
|
||||||
$newapprovals = getRevAppLog($version['approvals']);
|
|
||||||
$newVersion->rewriteApprovalLog($newapprovals);
|
|
||||||
}
|
|
||||||
|
|
||||||
unlink($filename);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(isset($document['notifications']['users']) && $document['notifications']['users']) {
|
|
||||||
foreach($document['notifications']['users'] as $userid) {
|
|
||||||
if(!array_key_exists($userid, $objmap['users'])) {
|
|
||||||
$logger->warning("User for notification cannot be mapped");
|
|
||||||
} else {
|
|
||||||
$newDocument->addNotify($objmap['users'][$userid], 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(isset($document['notifications']['groups']) && $document['notifications']['groups']) {
|
|
||||||
foreach($document['notifications']['groups'] as $groupid) {
|
|
||||||
if(!array_key_exists($groupid, $objmap['groups'])) {
|
|
||||||
$logger->warning("User for notification cannot be mapped");
|
|
||||||
} else {
|
|
||||||
$newDocument->addNotify($objmap['groups'][$groupid], 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(isset($document['acls']) && $document['acls']) {
|
|
||||||
$newDocument->setInheritAccess(false);
|
|
||||||
foreach($document['acls'] as $acl) {
|
|
||||||
if($acl['type'] == 'user') {
|
|
||||||
if(!array_key_exists($acl['user'], $objmap['users'])) {
|
|
||||||
$logger->warning("User for notification cannot be mapped");
|
|
||||||
} else {
|
|
||||||
$newDocument->addAccess($acl['mode'], $objmap['users'][$acl['user']], 1);
|
|
||||||
}
|
|
||||||
} elseif($acl['type'] == 'group') {
|
|
||||||
if(!array_key_exists($acl['group'], $objmap['groups'])) {
|
|
||||||
$logger->warning("Group for notification cannot be mapped");
|
|
||||||
} else {
|
|
||||||
$newDocument->addAccess($acl['mode'], $objmap['groups'][$acl['group']], 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(isset($document['files']) && $document['files']) {
|
|
||||||
foreach($document['files'] as $file) {
|
|
||||||
if(!array_key_exists($file['attributes']['owner'], $objmap['users'])) {
|
|
||||||
$logger->warning("User for file cannot be mapped");
|
|
||||||
$owner = $defaultUser;
|
|
||||||
} else {
|
|
||||||
$owner = $dms->getUser($objmap['users'][$file['attributes']['owner']]);
|
|
||||||
}
|
|
||||||
if(!empty($file['fileref'])) {
|
|
||||||
$filename = tempnam('/tmp', 'FOO');
|
|
||||||
copy($contentdir.$file['fileref'], $filename);
|
|
||||||
} else {
|
|
||||||
$filecontents = base64_decode($file['data']);
|
|
||||||
if(strlen($filecontents) != $file['data_length']) {
|
|
||||||
$logger->warning("File length (".strlen($filecontents).") doesn't match expected length (".$file['data_length'].").");
|
|
||||||
}
|
|
||||||
$filename = tempnam('/tmp', 'FOO');
|
|
||||||
file_put_contents($filename, $filecontents);
|
|
||||||
}
|
|
||||||
$newDocument->addDocumentFile(
|
|
||||||
$file['attributes']['name'],
|
|
||||||
$file['attributes']['comment'],
|
|
||||||
$owner,
|
|
||||||
$filename,
|
|
||||||
$file['attributes']['orgfilename'],
|
|
||||||
$file['attributes']['filetype'],
|
|
||||||
$file['attributes']['mimetype']
|
|
||||||
);
|
|
||||||
unlink($filename);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -744,6 +790,7 @@ function insert_folder($folder) { /* {{{ */
|
||||||
|
|
||||||
$newFolder->setDate(dateToTimestamp($folder['attributes']['date']));
|
$newFolder->setDate(dateToTimestamp($folder['attributes']['date']));
|
||||||
$newFolder->setDefaultAccess($folder['attributes']['defaultaccess']);
|
$newFolder->setDefaultAccess($folder['attributes']['defaultaccess']);
|
||||||
|
$newFolder->setInheritAccess($folder['attributes']['inheritaccess']);
|
||||||
if(isset($folder['notifications']['users']) && $folder['notifications']['users']) {
|
if(isset($folder['notifications']['users']) && $folder['notifications']['users']) {
|
||||||
foreach($folder['notifications']['users'] as $userid) {
|
foreach($folder['notifications']['users'] as $userid) {
|
||||||
if(!array_key_exists($userid, $objmap['users'])) {
|
if(!array_key_exists($userid, $objmap['users'])) {
|
||||||
|
|
@ -763,7 +810,6 @@ function insert_folder($folder) { /* {{{ */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(isset($folder['acls']) && $folder['acls']) {
|
if(isset($folder['acls']) && $folder['acls']) {
|
||||||
$newFolder->setInheritAccess(false);
|
|
||||||
foreach($folder['acls'] as $acl) {
|
foreach($folder['acls'] as $acl) {
|
||||||
if($acl['type'] == 'user') {
|
if($acl['type'] == 'user') {
|
||||||
if(!array_key_exists($acl['user'], $objmap['users'])) {
|
if(!array_key_exists($acl['user'], $objmap['users'])) {
|
||||||
|
|
@ -828,6 +874,46 @@ function resolve_links() { /* {{{ */
|
||||||
}
|
}
|
||||||
} /* }}} */
|
} /* }}} */
|
||||||
|
|
||||||
|
function set_mandatory() { /* {{{ */
|
||||||
|
global $logger, $dms, $users, $objmap;
|
||||||
|
|
||||||
|
if(!$users)
|
||||||
|
return;
|
||||||
|
|
||||||
|
foreach($users as $user) {
|
||||||
|
if ($newUser = $dms->getUserByLogin($user['attributes']['login'])) {
|
||||||
|
if($user['individual']['reviewers']) {
|
||||||
|
foreach($user['individual']['reviewers'] as $u) {
|
||||||
|
if($uobj = $dms->getUser($objmap['users'][$u])) {
|
||||||
|
$newUser->setMandatoryReviewer($uobj->getID(), false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if($user['individual']['approvers']) {
|
||||||
|
foreach($user['individual']['approvers'] as $u) {
|
||||||
|
if($uobj = $dms->getUser($objmap['users'][$u])) {
|
||||||
|
$newUser->setMandatoryApprover($uobj->getID(), false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if($user['group']['reviewers']) {
|
||||||
|
foreach($user['group']['reviewers'] as $u) {
|
||||||
|
if($uobj = $dms->getGroup($objmap['groups'][$u])) {
|
||||||
|
$newUser->setMandatoryReviewer($uobj->getID(), true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if($user['group']['approvers']) {
|
||||||
|
foreach($user['group']['approvers'] as $u) {
|
||||||
|
if($uobj = $dms->getGroup($objmap['groups'][$u])) {
|
||||||
|
$newUser->setMandatoryApprover($uobj->getID(), true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} /* }}} */
|
||||||
|
|
||||||
function startElement($parser, $name, $attrs) { /* {{{ */
|
function startElement($parser, $name, $attrs) { /* {{{ */
|
||||||
global $logger, $dms, $noversioncheck, $elementstack, $objmap, $cur_user, $cur_group, $cur_folder, $cur_document, $cur_version, $cur_statuslog, $cur_workflowlog, $cur_approval, $cur_approvallog, $cur_review, $cur_reviewlog, $cur_attrdef, $cur_documentcat, $cur_keyword, $cur_keywordcat, $cur_file, $cur_link, $cur_workflow, $cur_workflowtransition, $cur_workflowaction, $cur_workflowstate, $cur_transition;
|
global $logger, $dms, $noversioncheck, $elementstack, $objmap, $cur_user, $cur_group, $cur_folder, $cur_document, $cur_version, $cur_statuslog, $cur_workflowlog, $cur_approval, $cur_approvallog, $cur_review, $cur_reviewlog, $cur_attrdef, $cur_documentcat, $cur_keyword, $cur_keywordcat, $cur_file, $cur_link, $cur_workflow, $cur_workflowtransition, $cur_workflowaction, $cur_workflowstate, $cur_transition;
|
||||||
|
|
||||||
|
|
@ -1070,6 +1156,12 @@ function startElement($parser, $name, $attrs) { /* {{{ */
|
||||||
$cur_file['fileref'] = $attrs['FILEREF'];
|
$cur_file['fileref'] = $attrs['FILEREF'];
|
||||||
else
|
else
|
||||||
$cur_file['data'] = "";
|
$cur_file['data'] = "";
|
||||||
|
} elseif($parent['name'] == 'REVIEWLOG') {
|
||||||
|
$cur_reviewlog['data_length'] = (int) $attrs['LENGTH'];
|
||||||
|
if(isset($attrs['FILEREF']))
|
||||||
|
$cur_reviewlog['fileref'] = $attrs['FILEREF'];
|
||||||
|
else
|
||||||
|
$cur_reviewlog['data'] = "";
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "KEYWORD":
|
case "KEYWORD":
|
||||||
|
|
@ -1451,6 +1543,9 @@ function characterData($parser, $data) { /* {{{ */
|
||||||
case 'FILE':
|
case 'FILE':
|
||||||
$cur_file['data'] .= $data;
|
$cur_file['data'] .= $data;
|
||||||
break;
|
break;
|
||||||
|
case 'REVIEWLOG':
|
||||||
|
$cur_reviewlog['data'] .= $data;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'USER':
|
case 'USER':
|
||||||
|
|
@ -1609,6 +1704,7 @@ while ($data = fread($fp, 65535)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
resolve_links();
|
resolve_links();
|
||||||
|
set_mandatory();
|
||||||
|
|
||||||
if($exportmapping) {
|
if($exportmapping) {
|
||||||
if($fp = fopen($exportmapping, 'w')) {
|
if($fp = fopen($exportmapping, 'w')) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user