Merge branch 'seeddms-5.0.x' into develop

This commit is contained in:
Uwe Steinmann 2015-07-30 11:25:56 +02:00
commit 6c7ff86a09
2 changed files with 915 additions and 205 deletions

View File

@ -13,7 +13,10 @@ function usage() { /* {{{ */
echo " -v, --version: print version and exit.\n"; echo " -v, --version: print version and exit.\n";
echo " --config: set alternative config file.\n"; echo " --config: set alternative config file.\n";
echo " --folder: set start folder.\n"; echo " --folder: set start folder.\n";
echo " --maxsize: maximum size of files to be include in output.\n"; echo " --maxsize: maximum size of files to be included in output\n";
echo " (defaults to 100000)\n";
echo " --contentdir: directory where all document versions are stored\n";
echo " which are larger than maxsize.\n";
} /* }}} */ } /* }}} */
function wrapWithCData($text) { /* {{{ */ function wrapWithCData($text) { /* {{{ */
@ -25,7 +28,7 @@ function wrapWithCData($text) { /* {{{ */
$version = "0.0.1"; $version = "0.0.1";
$shortoptions = "hv"; $shortoptions = "hv";
$longoptions = array('help', 'version', 'config:', 'folder:', 'maxsize:'); $longoptions = array('help', 'version', 'skip-root', 'config:', 'folder:', 'maxsize:', 'contentdir:');
if(false === ($options = getopt($shortoptions, $longoptions))) { if(false === ($options = getopt($shortoptions, $longoptions))) {
usage(); usage();
exit(0); exit(0);
@ -52,11 +55,25 @@ if(isset($options['config'])) {
/* Set maximum size of files included in xml file */ /* Set maximum size of files included in xml file */
if(isset($options['maxsize'])) { if(isset($options['maxsize'])) {
$maxsize = intval($maxsize); $maxsize = intval($options['maxsize']);
} else { } else {
$maxsize = 100000; $maxsize = 100000;
} }
/* Set directory for file largen than maxsize */
if(isset($options['contentdir'])) {
if(file_exists($options['contentdir'])) {
$contentdir = $options['contentdir'];
if(substr($contentdir, -1, 1) != DIRECTORY_SEPARATOR)
$contentdir .= DIRECTORY_SEPARATOR;
} else {
echo "Directory ".$options['contentdir']." does not exists\n";
exit(1);
}
} else {
$contentdir = '';
}
if(isset($settings->_extraPath)) if(isset($settings->_extraPath))
ini_set('include_path', $settings->_extraPath. PATH_SEPARATOR .ini_get('include_path')); ini_set('include_path', $settings->_extraPath. PATH_SEPARATOR .ini_get('include_path'));
@ -68,52 +85,62 @@ if(isset($options['folder'])) {
$folderid = $settings->_rootFolderID; $folderid = $settings->_rootFolderID;
} }
function tree($folder, $parent=null, $indent='') { /* {{{ */ $skiproot = false;
global $index, $dms; if(isset($options['skip-root'])) {
echo $indent."<folder id=\"".$folder->getId()."\""; $skiproot = true;
if($parent) }
echo " parent=\"".$parent->getID()."\"";
echo ">\n"; function tree($folder, $parent=null, $indent='', $skipcurrent=false) { /* {{{ */
echo $indent." <attr name=\"name\">".wrapWithCData($folder->getName())."</attr>\n"; global $index, $dms, $maxsize, $contentdir;
echo $indent." <attr name=\"date\">".date('c', $folder->getDate())."</attr>\n";
echo $indent." <attr name=\"defaultaccess\">".$folder->getDefaultAccess()."</attr>\n"; if(!$skipcurrent) {
echo $indent." <attr name=\"inheritaccess\">".$folder->inheritsAccess()."</attr>\n"; echo $indent."<folder id=\"".$folder->getId()."\"";
echo $indent." <attr name=\"sequence\">".$folder->getSequence()."</attr>\n"; if($parent)
if($folder->getComment()) echo " parent=\"".$parent->getID()."\"";
echo ">\n";
echo $indent." <attr name=\"name\">".wrapWithCData($folder->getName())."</attr>\n";
echo $indent." <attr name=\"date\">".date('c', $folder->getDate())."</attr>\n";
echo $indent." <attr name=\"defaultaccess\">".$folder->getDefaultAccess()."</attr>\n";
echo $indent." <attr name=\"inheritaccess\">".$folder->inheritsAccess()."</attr>\n";
echo $indent." <attr name=\"sequence\">".$folder->getSequence()."</attr>\n";
echo $indent." <attr name=\"comment\">".wrapWithCData($folder->getComment())."</attr>\n"; echo $indent." <attr name=\"comment\">".wrapWithCData($folder->getComment())."</attr>\n";
echo $indent." <attr name=\"owner\">".$folder->getOwner()->getId()."</attr>\n"; echo $indent." <attr name=\"owner\">".$folder->getOwner()->getId()."</attr>\n";
if($attributes = $folder->getAttributes()) { if($attributes = $folder->getAttributes()) {
foreach($attributes as $attribute) { foreach($attributes as $attribute) {
$attrdef = $attribute->getAttributeDefinition(); $attrdef = $attribute->getAttributeDefinition();
echo $indent." <attr type=\"user\" attrdef=\"".$attrdef->getID()."\">".$attribute->getValue()."</attr>\n"; echo $indent." <attr type=\"user\" attrdef=\"".$attrdef->getID()."\">".$attribute->getValue()."</attr>\n";
}
} }
} if($folder->inheritsAccess()) {
if($folder->inheritsAccess()) { echo $indent." <acls type=\"inherited\" />\n";
echo $indent." <acls type=\"inherited\" />\n"; } else {
echo $indent." <acls>\n";
$accesslist = $folder->getAccessList();
foreach($accesslist['users'] as $acl) {
echo $indent." <acl type=\"user\"";
$user = $acl->getUser();
echo " user=\"".$user->getID()."\"";
echo " mode=\"".$acl->getMode()."\"";
echo "/>\n";
}
foreach($accesslist['groups'] as $acl) {
echo $indent." <acl type=\"group\"";
$group = $acl->getGroup();
echo $indent." group=\"".$group->getID()."\"";
echo $indent." mode=\"".$acl->getMode()."\"";
echo "/>\n";
}
echo $indent." </acls>\n";
}
echo $indent."</folder>\n";
$parentfolder = $folder;
} else { } else {
echo $indent." <acls>\n"; $parentfolder = null;
$accesslist = $folder->getAccessList();
foreach($accesslist['users'] as $acl) {
echo $indent." <acl type=\"user\"";
$user = $acl->getUser();
echo " user=\"".$user->getID()."\"";
echo " mode=\"".$acl->getMode()."\"";
echo "/>\n";
}
foreach($accesslist['groups'] as $acl) {
echo $indent." <acl type=\"group\"";
$group = $acl->getGroup();
echo $indent." group=\"".$group->getID()."\"";
echo $indent." mode=\"".$acl->getMode()."\"";
echo "/>\n";
}
echo $indent." </acls>\n";
} }
echo $indent."</folder>\n";
$subfolders = $folder->getSubFolders(); $subfolders = $folder->getSubFolders();
if($subfolders) { if($subfolders) {
foreach($subfolders as $subfolder) { foreach($subfolders as $subfolder) {
tree($subfolder, $folder, $indent); tree($subfolder, $parentfolder, $indent);
} }
} }
$documents = $folder->getDocuments(); $documents = $folder->getDocuments();
@ -138,8 +165,7 @@ function tree($folder, $parent=null, $indent='') { /* {{{ */
$user = $document->getLockingUser(); $user = $document->getLockingUser();
echo $indent." <attr name=\"lockedby\">".$user->getId()."</attr>\n"; echo $indent." <attr name=\"lockedby\">".$user->getId()."</attr>\n";
} }
if($document->getComment()) echo $indent." <attr name=\"comment\">".wrapWithCData($document->getComment())."</attr>\n";
echo $indent." <attr name=\"comment\">".wrapWithCData($document->getComment())."</attr>\n";
if($attributes = $document->getAttributes()) { if($attributes = $document->getAttributes()) {
foreach($attributes as $attribute) { foreach($attributes as $attribute) {
$attrdef = $attribute->getAttributeDefinition(); $attrdef = $attribute->getAttributeDefinition();
@ -149,36 +175,30 @@ function tree($folder, $parent=null, $indent='') { /* {{{ */
/* Check if acl is not inherited */ /* Check if acl is not inherited */
if(!$document->inheritsAccess()) { if(!$document->inheritsAccess()) {
$acls = $document->getAccessList(); echo $indent." <acls>\n";
if($acls['groups'] || $acls['users']) { $accesslist = $document->getAccessList();
echo $indent." <acls>\n"; foreach($accesslist['users'] as $acl) {
if($acls['users']) { echo $indent." <acl type=\"user\"";
foreach($acls['users'] as $acluser) { $user = $acl->getUser();
$user = $acluser->getUser(); echo " user=\"".$user->getID()."\"";
echo $indent." <acl type=\"user\">\n"; echo " mode=\"".$acl->getMode()."\"";
echo $indent." <attr name=\"user\">".$user->getId()."</attr>\n"; echo "/>\n";
echo $indent." <attr name=\"mode\">".$acluser->getMode()."</attr>\n";
echo $indent." </acl>\n";
}
}
if($acls['groups']) {
foreach($acls['groups'] as $aclgroup) {
$group = $aclgroup->getGroup();
echo $indent." <acl type=\"group\">\n";
echo $indent." <attr name=\"group\">".$group->getId()."</attr>\n";
echo $indent." <attr name=\"mode\">".$acluser->getMode()."</attr>\n";
echo $indent." </acl>\n";
}
}
echo $indent." </acls>\n";
} }
foreach($accesslist['groups'] as $acl) {
echo $indent." <acl type=\"group\"";
$group = $acl->getGroup();
echo $indent." group=\"".$group->getID()."\"";
echo $indent." mode=\"".$acl->getMode()."\"";
echo "/>\n";
}
echo $indent." </acls>\n";
} }
$cats = $document->getCategories(); $cats = $document->getCategories();
if($cats) { if($cats) {
echo $indent." <categories>\n"; echo $indent." <categories>\n";
foreach($cats as $cat) { foreach($cats as $cat) {
echo $indent." <category>".$cat->getId()."</category>\n"; echo $indent." <category id=\"".$cat->getId()."\"/>\n";
} }
echo $indent." </categories>\n"; echo $indent." </categories>\n";
} }
@ -187,10 +207,10 @@ function tree($folder, $parent=null, $indent='') { /* {{{ */
if($versions) { if($versions) {
echo $indent." <versions>\n"; echo $indent." <versions>\n";
foreach($versions as $version) { foreach($versions as $version) {
$approvalStatus = $version->getApprovalStatus(); $approvalStatus = $version->getApprovalStatus(30);
$reviewStatus = $version->getReviewStatus(); $reviewStatus = $version->getReviewStatus();
$owner = $version->getUser(); $owner = $version->getUser();
echo $indent." <version id=\"".$version->getVersion()."\">\n"; echo $indent." <version version=\"".$version->getVersion()."\">\n";
echo $indent." <attr name=\"mimetype\">".$version->getMimeType()."</attr>\n"; echo $indent." <attr name=\"mimetype\">".$version->getMimeType()."</attr>\n";
echo $indent." <attr name=\"date\">".date('c', $version->getDate())."</attr>\n"; echo $indent." <attr name=\"date\">".date('c', $version->getDate())."</attr>\n";
echo $indent." <attr name=\"filetype\">".$version->getFileType()."</attr>\n"; echo $indent." <attr name=\"filetype\">".$version->getFileType()."</attr>\n";
@ -205,38 +225,66 @@ function tree($folder, $parent=null, $indent='') { /* {{{ */
} }
if($approvalStatus) { if($approvalStatus) {
echo $indent." <approvals>\n"; echo $indent." <approvals>\n";
$curapprovalid = 0;
foreach($approvalStatus as $a) { foreach($approvalStatus as $a) {
echo $indent." <approval id=\"".$a['approveID']."\">\n"; if($a['approveID'] != $curapprovalid) {
echo $indent." <attr name=\"type\">".$a['type']."</attr>\n"; if($curapprovalid != 0) {
echo $indent." <attr name=\"required\">".$a['required']."</attr>\n"; echo $indent." </approval>\n";
echo $indent." <attr name=\"status\">".$a['status']."</attr>\n"; }
echo $indent." <attr name=\"comment\">".wrapWithCData($a['comment'])."</attr>\n"; echo $indent." <approval id=\"".$a['approveID']."\">\n";
echo $indent." <attr name=\"user\">".$a['userID']."</attr>\n"; echo $indent." <attr name=\"type\">".$a['type']."</attr>\n";
echo $indent." <attr name=\"date\">".$a['date']."</attr>\n"; echo $indent." <attr name=\"required\">".$a['required']."</attr>\n";
echo $indent." </approval>\n"; }
echo $indent." <approvallog id=\"".$a['approveLogID']."\">\n";
echo $indent." <attr name=\"user\">".$a['userID']."</attr>\n";
echo $indent." <attr name=\"status\">".$a['status']."</attr>\n";
echo $indent." <attr name=\"comment\">".wrapWithCData($a['comment'])."</attr>\n";
echo $indent." <attr name=\"date\">".$a['date']."</attr>\n";
echo $indent." </approvallog>\n";
// echo $indent." </approval>\n";
$curapprovalid = $a['approveID'];
} }
if($curapprovalid != 0)
echo $indent." </approval>\n";
echo $indent." </approvals>\n"; echo $indent." </approvals>\n";
} }
if($reviewStatus) { if($reviewStatus) {
echo $indent." <reviews>\n"; echo $indent." <reviews>\n";
$curreviewid = 0;
foreach($reviewStatus as $a) { foreach($reviewStatus as $a) {
echo $indent." <review id=\"".$a['reviewID']."\">\n"; if($a['reviewID'] != $curreviewid) {
echo $indent." <attr name=\"type\">".$a['type']."</attr>\n"; if($curreviewid != 0) {
echo $indent." <attr name=\"required\">".$a['required']."</attr>\n"; echo $indent." </review>\n";
echo $indent." <attr name=\"status\">".$a['status']."</attr>\n"; }
echo $indent." <attr name=\"comment\">".wrapWithCData($a['comment'])."</attr>\n"; echo $indent." <review id=\"".$a['reviewID']."\">\n";
echo $indent." <attr name=\"user\">".$a['userID']."</attr>\n"; echo $indent." <attr name=\"type\">".$a['type']."</attr>\n";
echo $indent." <attr name=\"date\">".$a['date']."</attr>\n"; echo $indent." <attr name=\"required\">".$a['required']."</attr>\n";
echo $indent." </review>\n"; }
echo $indent." <reviewlog id=\"".$a['reviewLogID']."\">\n";
echo $indent." <attr name=\"user\">".$a['userID']."</attr>\n";
echo $indent." <attr name=\"status\">".$a['status']."</attr>\n";
echo $indent." <attr name=\"comment\">".wrapWithCData($a['comment'])."</attr>\n";
echo $indent." <attr name=\"date\">".$a['date']."</attr>\n";
echo $indent." </reviewlog>\n";
// echo $indent." </review>\n";
$curreviewid = $a['reviewID'];
} }
if($curreviewid != 0)
echo $indent." </review>\n";
echo $indent." </reviews>\n"; echo $indent." </reviews>\n";
} }
if(file_exists($dms->contentDir . $version->getPath())) { if(file_exists($dms->contentDir . $version->getPath())) {
echo $indent." <data length=\"".filesize($dms->contentDir . $version->getPath())."\">\n"; echo $indent." <data length=\"".filesize($dms->contentDir . $version->getPath())."\"";
if(filesize($dms->contentDir . $version->getPath()) < 1000000) { if(filesize($dms->contentDir . $version->getPath()) < $maxsize) {
echo ">\n";
echo chunk_split(base64_encode(file_get_contents($dms->contentDir . $version->getPath())), 76, "\n"); echo chunk_split(base64_encode(file_get_contents($dms->contentDir . $version->getPath())), 76, "\n");
echo $indent." </data>\n";
} else {
echo " fileref=\"".$document->getID()."-".$version->getVersion().$version->getFileType()."\" />\n";
if($contentdir) {
copy($dms->contentDir . $version->getPath(), $contentdir.$document->getID()."-".$version->getVersion().$version->getFileType());
}
} }
echo $indent." </data>\n";
} else { } else {
echo $indent." <!-- ".$dms->contentDir . $version->getPath()." not found -->\n"; echo $indent." <!-- ".$dms->contentDir . $version->getPath()." not found -->\n";
} }
@ -258,11 +306,21 @@ function tree($folder, $parent=null, $indent='') { /* {{{ */
echo $indent." <attr name=\"owner\">".$owner->getId()."</attr>\n"; echo $indent." <attr name=\"owner\">".$owner->getId()."</attr>\n";
echo $indent." <attr name=\"comment\">".wrapWithCData($file->getComment())."</attr>\n"; echo $indent." <attr name=\"comment\">".wrapWithCData($file->getComment())."</attr>\n";
echo $indent." <attr name=\"orgfilename\">".wrapWithCData($file->getOriginalFileName())."</attr>\n"; echo $indent." <attr name=\"orgfilename\">".wrapWithCData($file->getOriginalFileName())."</attr>\n";
echo $indent." <data length=\"".filesize($dms->contentDir . $file->getPath())."\">\n"; if(file_exists($dms->contentDir . $file->getPath())) {
if(filesize($dms->contentDir . $file->getPath()) < 1000000) { echo $indent." <data length=\"".filesize($dms->contentDir . $file->getPath())."\"";
echo chunk_split(base64_encode(file_get_contents($dms->contentDir . $file->getPath())), 76, "\n"); if(filesize($dms->contentDir . $file->getPath()) < $maxsize) {
echo ">\n";
echo chunk_split(base64_encode(file_get_contents($dms->contentDir . $file->getPath())), 76, "\n");
echo $indent." </data>\n";
} else {
echo " fileref=\"".$document->getID()."-A-".$file->getID().$file->getFileType()."\" />\n";
if($contentdir) {
copy($dms->contentDir . $version->getPath(), $contentdir.$document->getID()."-A-".$file->getID().$file->getFileType());
}
}
} else {
echo $indent." <!-- ".$dms->contentDir . $version->getID()." not found -->\n";
} }
echo $indent." </data>\n";
echo $indent." </file>\n"; echo $indent." </file>\n";
} }
echo $indent." </files>\n"; echo $indent." </files>\n";
@ -287,19 +345,15 @@ function tree($folder, $parent=null, $indent='') { /* {{{ */
echo $indent." <notifications>\n"; echo $indent." <notifications>\n";
if($notifications['users']) { if($notifications['users']) {
foreach($notifications['users'] as $user) { foreach($notifications['users'] as $user) {
echo $indent." <notification type=\"user\">\n"; echo $indent." <user id=\"".$user->getID()."\" />\n";
echo $indent." <attr name=\"user\">".$user->getId()."</attr>\n";
echo $indent." </notification>\n";
} }
} }
if($notifications['groups']) { if($notifications['groups']) {
foreach($notifications['groups'] as $group) { foreach($notifications['groups'] as $group) {
echo $indent." <notification type=\"group\">\n"; echo $indent." <group id=\"".$group->getID()."\" />\n";
echo $indent." <attr name=\"group\">".$group->getId()."</attr>\n";
echo $indent." </notification>\n";
} }
} }
echo $indent." </notification>\n"; echo $indent." </notifications>\n";
} }
} }
@ -312,7 +366,7 @@ $db = new SeedDMS_Core_DatabaseAccess($settings->_dbDriver, $settings->_dbHostna
$db->connect() or die ("Could not connect to db-server \"" . $settings->_dbHostname . "\""); $db->connect() or die ("Could not connect to db-server \"" . $settings->_dbHostname . "\"");
$dms = new SeedDMS_Core_DMS($db, $settings->_contentDir.$settings->_contentOffsetDir); $dms = new SeedDMS_Core_DMS($db, $settings->_contentDir.$settings->_contentOffsetDir);
if(!$dms->checkVersion()) { if(!$settings->_doNotCheckDBVersion && !$dms->checkVersion()) {
echo "Database update needed."; echo "Database update needed.";
exit; exit;
} }
@ -320,7 +374,7 @@ if(!$dms->checkVersion()) {
$dms->setRootFolderID($settings->_rootFolderID); $dms->setRootFolderID($settings->_rootFolderID);
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
echo "<dms>\n"; echo "<dms dbversion=\"".implode('.', array_slice($dms->getDBVersion(), 1, 3))."\">\n";
$users = $dms->getAllUsers(); $users = $dms->getAllUsers();
if($users) { if($users) {
echo "<users>\n"; echo "<users>\n";
@ -343,6 +397,26 @@ if($users) {
echo " <data>".base64_encode($image['image'])."</data>\n"; echo " <data>".base64_encode($image['image'])."</data>\n";
echo " </image>\n"; echo " </image>\n";
} }
if($mreviewers = $user->getMandatoryReviewers()) {
echo " <mandatory_reviewers>\n";
foreach($mreviewers as $mreviewer) {
if((int) $mreviewer['reviewerUserID'])
echo " <user id=\"".$mreviewer['reviewerUserID']."\"></user>\n";
elseif((int) $mreviewer['reviewerGroupID'])
echo " <group id=\"".$mreviewer['reviewerGroupID']."\"></group>\n";
}
echo " </mandatory_reviewers>\n";
}
if($mapprovers = $user->getMandatoryApprovers()) {
echo " <mandatory_approvers>\n";
foreach($mapprovers as $mapprover) {
if((int) $mapprover['approverUserID'])
echo " <user id=\"".$mapprover['approverUserID']."\"></user>\n";
elseif((int) $mapprover['approverGroupID'])
echo " <group id=\"".$mapprover['approverGroupID']."\"></group>\n";
}
echo " </mandatory_approvers>\n";
}
echo " </user>\n"; echo " </user>\n";
} }
echo "</users>\n"; echo "</users>\n";
@ -359,7 +433,7 @@ if($groups) {
if($users) { if($users) {
echo " <users>\n"; echo " <users>\n";
foreach ($users as $user) { foreach ($users as $user) {
echo " <user>".$user->getId()."</user>\n"; echo " <user user=\"".$user->getId()."\"/>\n";
} }
echo " </users>\n"; echo " </users>\n";
} }
@ -427,6 +501,7 @@ if($attrdefs) {
echo " <attr name=\"type\">".$attrdef->getType()."</attr>\n"; echo " <attr name=\"type\">".$attrdef->getType()."</attr>\n";
echo " <attr name=\"minvalues\">".$attrdef->getMinValues()."</attr>\n"; echo " <attr name=\"minvalues\">".$attrdef->getMinValues()."</attr>\n";
echo " <attr name=\"maxvalues\">".$attrdef->getMaxValues()."</attr>\n"; echo " <attr name=\"maxvalues\">".$attrdef->getMaxValues()."</attr>\n";
echo " <attr name=\"regex\">".wrapWithCData($attrdef->getRegex())."</attr>\n";
echo " </attributedefinition>\n"; echo " </attributedefinition>\n";
} }
echo "</attrіbutedefinitions>\n"; echo "</attrіbutedefinitions>\n";
@ -434,7 +509,7 @@ if($attrdefs) {
$folder = $dms->getFolder($folderid); $folder = $dms->getFolder($folderid);
if($folder) { if($folder) {
tree($folder); tree($folder, null, '', $skiproot);
} }
echo "</dms>\n"; echo "</dms>\n";

File diff suppressed because it is too large Load Diff