export and import roles

This commit is contained in:
Uwe Steinmann 2024-04-27 18:09:38 +02:00
parent 6679c3b868
commit d70c90e758
2 changed files with 86 additions and 8 deletions

View File

@ -101,6 +101,7 @@ $statistic = array(
'documents'=>0,
'folders'=>0,
'users'=>0,
'roles'=>0,
'groups'=>0,
'attributedefinitions'=>0,
'keywordcategories'=>0,
@ -472,13 +473,31 @@ if(!$folderid) {
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
echo "<dms dbversion=\"".implode('.', array_slice($dms->getDBVersion(), 1, 3))."\" date=\"".date('Y-m-d H:i:s')."\">\n";
/* Dump roles {{{ */
if(!$sections || in_array('roles', $sections)) {
$roles = $dms->getAllRoles();
if($roles) {
echo "<roles>\n";
foreach ($roles as $role) {
echo " <role id=\"".$role->getId()."\">\n";
echo " <attr name=\"name\">".wrapWithCData($role->getName())."</attr>\n";
echo " <attr name=\"noaccess\">".wrapWithCData(implode(',', $role->getNoAccess()))."</attr>\n";
echo " <attr name=\"role\">".$role->getRole()."</attr>\n";
echo " </role>\n";
$statistic['roles']++;
}
echo "</roles>\n";
}
}
/* }}} */
/* Dump users {{{ */
if(!$sections || in_array('users', $sections)) {
$users = $dms->getAllUsers();
if($users) {
echo "<users>\n";
foreach ($users as $user) {
echo " <user id=\"".$user->getId()."\">\n";
echo " <user id=\"".$user->getId()."\" role=\"".$user->getRole()->getId()."\">\n";
echo " <attr name=\"login\">".wrapWithCData($user->getLogin())."</attr>\n";
echo " <attr name=\"pwd\">".wrapWithCData($user->getPwd())."</attr>\n";
echo " <attr name=\"email\">".wrapWithCData($user->getEmail())."</attr>\n";
@ -486,7 +505,7 @@ if($users) {
echo " <attr name=\"comment\">".wrapWithCData($user->getComment())."</attr>\n";
echo " <attr name=\"language\">".$user->getLanguage()."</attr>\n";
echo " <attr name=\"theme\">".$user->getTheme()."</attr>\n";
echo " <attr name=\"role\">".$user->getRole()."</attr>\n";
// echo " <attr name=\"role\">".$user->getRole()->getId()."</attr>\n";
echo " <attr name=\"hidden\">".$user->isHidden()."</attr>\n";
echo " <attr name=\"disabled\">".$user->isDisabled()."</attr>\n";
echo " <attr name=\"pwdexpiration\">".$user->getPwdExpiration()."</attr>\n";

View File

@ -21,7 +21,7 @@ function usage() { /* {{{ */
echo " --folder <folder id>: set import folder.".PHP_EOL;
echo " --file <file>: file containing the dump.".PHP_EOL;
echo " --sections <sections>: comma seperated list of sections to read from dump.".PHP_EOL;
echo " can be: users, groups, documents, folders, keywordcategories, or".PHP_EOL;
echo " can be: users, groups, roles, documents, folders, keywordcategories, or".PHP_EOL;
echo " documentcategories".PHP_EOL;
echo " --contentdir <dir>: directory where all document versions are stored".PHP_EOL;
echo " which are not included in the xml file.".PHP_EOL;
@ -117,6 +117,10 @@ function insert_user($user) { /* {{{ */
if(in_array('users', $sections)) {
if(substr($user['attributes']['pwdexpiration'], 0, 10) == '0000-00-00')
$user['attributes']['pwdexpiration'] = '';
$roleobj = null;
if(array_key_exists($user['role'], $objmap['roles'])) {
$roleobj = $dms->getRole($objmap['roles'][$user['role']]);
}
$newUser = $dms->addUser(
$user['attributes']['login'],
$user['attributes']['pwd'],
@ -125,7 +129,7 @@ function insert_user($user) { /* {{{ */
$user['attributes']['language'],
$user['attributes']['theme'],
$user['attributes']['comment'],
$user['attributes']['role'],
$roleobj,
$user['attributes']['hidden'],
$user['attributes']['disabled'],
$user['attributes']['pwdexpiration']);
@ -169,6 +173,36 @@ function set_homefolders() { /* {{{ */
}
} /* }}} */
function insert_role($role) { /* {{{ */
global $logger, $dms, $debug, $sections, $defaultUser, $objmap;
if($debug) print_r($role);
if ($newRole = $dms->getRoleByName($role['attributes']['name'])) {
$logger->warning("Role '".$role['attributes']['name']."' already exists");
} else {
if(in_array('roles', $sections)) {
$newRole = $dms->addRole(
$role['attributes']['name'],
$role['role']);
if(!$newRole) {
$logger->err("Could not add role");
$logger->debug($dms->getDB()->getErrorMsg());
return false;
} else {
$logger->info("Added role '".$role['attributes']['name']."'");
if(isset($role['attributes']['noaccess'])) {
$noaccess = explode(',', $role['attributes']['noaccess']);
$role->setNoAccess($noaccess);
}
}
}
}
if($newRole)
$objmap['roles'][$role['id']] = $newRole->getID();
return $newRole;
} /* }}} */
function insert_group($group) { /* {{{ */
global $logger, $dms, $debug, $objmap, $sections, $users;
@ -959,7 +993,7 @@ function set_mandatory() { /* {{{ */
} /* }}} */
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_role, $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;
$parent = end($elementstack);
array_push($elementstack, array('name'=>$name, 'attributes'=>$attrs));
@ -988,6 +1022,7 @@ function startElement($parser, $name, $attrs) { /* {{{ */
} else {
$cur_user = array();
$cur_user['id'] = (int) $attrs['ID'];
$cur_user['role'] = (int) $attrs['ROLE'];
$cur_user['attributes'] = array();
$cur_user['individual']['reviewers'] = array();
$cur_user['individual']['approvers'] = array();
@ -1031,6 +1066,15 @@ function startElement($parser, $name, $attrs) { /* {{{ */
$cur_transition['groups'][] = (int) $attrs['ID'];
}
break;
case "ROLE":
$first = $elementstack[1];
$second = $elementstack[2];
if($first['name'] == 'ROLES') {
$cur_role = array();
$cur_role['id'] = (int) $attrs['ID'];
$cur_role['attributes'] = array();
}
break;
case "DOCUMENT":
$cur_document = array();
$cur_document['id'] = (int) $attrs['ID'];
@ -1128,6 +1172,8 @@ function startElement($parser, $name, $attrs) { /* {{{ */
$cur_user['attributes'][$attrs['NAME']] = '';
} elseif($parent['name'] == 'GROUP') {
$cur_group['attributes'][$attrs['NAME']] = '';
} elseif($parent['name'] == 'ROLE') {
$cur_role['attributes'][$attrs['NAME']] = '';
} elseif($parent['name'] == 'KEYWORD') {
$cur_keyword['attributes'][$attrs['NAME']] = '';
} elseif($parent['name'] == 'ATTRIBUTEDEFINITION') {
@ -1302,7 +1348,7 @@ function startElement($parser, $name, $attrs) { /* {{{ */
} /* }}} */
function endElement($parser, $name) { /* {{{ */
global $logger, $dms, $sections, $rootfolder, $objmap, $elementstack, $users, $groups, $links,$cur_user, $cur_group, $cur_folder, $cur_document, $cur_version, $cur_statuslog, $cur_approval, $cur_approvallog, $cur_review, $cur_reviewlog, $cur_attrdef, $cur_documentcat, $cur_keyword, $cur_keywordcat, $cur_file, $cur_link, $cur_workflow, $cur_workflowlog, $cur_workflowtransition, $cur_workflowaction, $cur_workflowstate, $cur_transition;
global $logger, $dms, $sections, $rootfolder, $objmap, $elementstack, $users, $groups, $links,$cur_user, $cur_group, $cur_role, $cur_folder, $cur_document, $cur_version, $cur_statuslog, $cur_approval, $cur_approvallog, $cur_review, $cur_reviewlog, $cur_attrdef, $cur_documentcat, $cur_keyword, $cur_keywordcat, $cur_file, $cur_link, $cur_workflow, $cur_workflowlog, $cur_workflowtransition, $cur_workflowaction, $cur_workflowstate, $cur_transition;
array_pop($elementstack);
$parent = end($elementstack);
@ -1351,6 +1397,13 @@ function endElement($parser, $name) { /* {{{ */
insert_group($cur_group);
}
break;
case "ROLE":
$first = $elementstack[1];
if($first['name'] == 'ROLES') {
$roles[$cur_role['id']] = $cur_role;
insert_role($cur_role);
}
break;
case 'ATTRIBUTEDEFINITION':
insert_attributedefinition($cur_attrdef);
break;
@ -1429,7 +1482,7 @@ function endElement($parser, $name) { /* {{{ */
} /* }}} */
function characterData($parser, $data) { /* {{{ */
global $elementstack, $objmap, $cur_user, $cur_group, $cur_folder, $cur_document, $cur_version, $cur_statuslog, $cur_approval, $cur_approvallog, $cur_review, $cur_reviewlog, $cur_attrdef, $cur_documentcat, $cur_keyword, $cur_keywordcat, $cur_file, $cur_link, $cur_workflow, $cur_workflowlog, $cur_workflowtransition, $cur_workflowaction, $cur_workflowstate, $cur_transition;
global $elementstack, $objmap, $cur_user, $cur_group, $cur_role, $cur_folder, $cur_document, $cur_version, $cur_statuslog, $cur_approval, $cur_approvallog, $cur_review, $cur_reviewlog, $cur_attrdef, $cur_documentcat, $cur_keyword, $cur_keywordcat, $cur_file, $cur_link, $cur_workflow, $cur_workflowlog, $cur_workflowtransition, $cur_workflowaction, $cur_workflowstate, $cur_transition;
$current = end($elementstack);
$parent = prev($elementstack);
@ -1517,6 +1570,12 @@ function characterData($parser, $data) { /* {{{ */
else
$cur_group['attributes'][$current['attributes']['NAME']] = $data;
break;
case 'ROLE':
if(isset($cur_role['attributes'][$current['attributes']['NAME']]))
$cur_role['attributes'][$current['attributes']['NAME']] .= $data;
else
$cur_role['attributes'][$current['attributes']['NAME']] = $data;
break;
case 'ATTRIBUTEDEFINITION':
if(isset($cur_attrdef['attributes'][$current['attributes']['NAME']]))
$cur_attrdef['attributes'][$current['attributes']['NAME']] .= $data;
@ -1689,7 +1748,7 @@ if(isset($options['no-version-check'])) {
$noversioncheck = true;
}
$sections = array('documents', 'folders', 'groups', 'users', 'keywordcategories', 'documentcategories', 'attributedefinitions', 'workflows');
$sections = array('documents', 'folders', 'groups', 'users', 'roles', 'keywordcategories', 'documentcategories', 'attributedefinitions', 'workflows');
if(isset($options['sections'])) {
$sections = explode(',', $options['sections']);
}