diff --git a/utils/xmlimport.php b/utils/xmlimport.php index 54ed34a4a..eee7a8468 100644 --- a/utils/xmlimport.php +++ b/utils/xmlimport.php @@ -72,6 +72,15 @@ function insert_user($user) { /* {{{ */ if($debug) print_r($user); + $roleobj = null; + if(isset($user['attributes']['role']) && $user['attributes']['role']) { + if(array_key_exists($user['attributes']['role'], $objmap['roles'])) { + if(!$roleobj = $dms->getRole($objmap['roles'][$user['attributes']['role']])) { + $logger->warn("Role ".$user['attributes']['role']." cannot be found"); + } + } + } + if ($newUser = $dms->getUserByLogin($user['attributes']['login'])) { $logger->info("User '".$user['attributes']['login']."' already exists"); } else { @@ -84,7 +93,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']); @@ -111,14 +120,14 @@ function insert_user($user) { /* {{{ */ } /* }}} */ function set_homefolders() { /* {{{ */ - global $dms, $debug, $defaultUser, $users, $objmap; + global $logger, $dms, $debug, $defaultUser, $users, $objmap; foreach($users as $user) { if(isset($user['attributes']['homefolder']) && $user['attributes']['homefolder']) { if(array_key_exists($user['id'], $objmap['users'])) { $userobj = $dms->getUser($objmap['users'][$user['id']]); if(!array_key_exists((int) $user['attributes']['homefolder'], $objmap['folders'])) { - echo "Warning: homefolder ".$user['attributes']['homefolder']." cannot be found\n"; + $logger->warning("Homefolder ".$user['attributes']['homefolder']." cannot be found"); } else { $userobj->setHomeFolder($objmap['folders'][(int) $user['attributes']['homefolder']]); } @@ -172,6 +181,34 @@ function insert_group($group) { /* {{{ */ return $newGroup; } /* }}} */ +function insert_role($role) { /* {{{ */ + global $logger, $dms, $debug, $objmap, $sections, $users; + + if($debug) print_r($role); + + if ($newRole = $dms->getRoleByName($role['attributes']['name'])) { + $logger->info("Role already exists"); + } else { + if(in_array('roles', $sections)) { + $newRole = $dms->addRole($role['attributes']['name'], $role['attributes']['role']); + if($newRole) { + $logger->info("Added role '".$role['attributes']['name']."'"); + if(!empty($role['attributes']['noaccess'])) { + $newRole->setNoAccess(explode(',', $role['attributes']['noaccess'])); + } + } else { + $logger->err("Could not add role"); + return false; + } + } else { + $newRole = null; + } + } + if($newRole) + $objmap['roles'][$role['id']] = $newRole->getID(); + return $newRole; +} /* }}} */ + function insert_attributedefinition($attrdef) { /* {{{ */ global $logger, $dms, $debug, $objmap, $sections; @@ -277,6 +314,8 @@ function insert_workflow($workflow) { /* {{{ */ } else { $logger->info("Added workflow '".$workflow['attributes']['name']."'"); } + if(!empty($workflow['layoutdata'])) + $newWorkflow->setLayoutData($workflow['layoutdata']); if($workflow['transitions']) { foreach($workflow['transitions'] as $transition) { if(!$state = $dms->getWorkflowState($objmap['workflowstates'][(int) $transition['attributes']['startstate']])) { @@ -853,33 +892,33 @@ function insert_folder($folder) { /* {{{ */ } /* }}} */ function insert_transmittal($transmittal) { /* {{{ */ - global $dms, $debug, $objmap, $sections; + global $logger, $dms, $debug, $objmap, $sections; - if(1||$debug) print_r($transmittal); + if($debug) print_r($transmittal); if(!array_key_exists((int) $transmittal['attributes']['owner'], $objmap['users'])) { - echo "Error: owner of transmittal cannot be found\n"; + $logger->err( "Owner of transmittal cannot be found"); return false; } $owner = $dms->getUser($objmap['users'][(int) $transmittal['attributes']['owner']]); if(in_array('transmittals', $sections)) { if(!$newTransmittal = $dms->addTransmittal($transmittal['attributes']['name'], $transmittal['attributes']['comment'], $owner)) { - echo "Error: could not add transmittal\n"; + $logger->err("Could not add transmittal"); return false; } foreach($transmittal['items'] as $item) { if(!array_key_exists((int) $item['attributes']['document'], $objmap['documents'])) { - echo "Warning: document mapping of transmittal item cannot be found\n"; + $logger->warning("Document mapping of transmittal item cannot be found"); } else { if($document = $dms->getDocument($objmap['documents'][(int) $item['attributes']['document']])) { if($content = $document->getContentByVersion((int) $item['attributes']['version'])) { $newTransmittal->addContent($content); } else { - echo "Warning: document version of transmittal item cannot be found\n"; + $logger->warning("Document version of transmittal item cannot be found"); } } else { - echo "Warning: document of transmittal item cannot be found\n"; + $logger->warning("Document of transmittal item cannot be found"); } } } @@ -972,7 +1011,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, $cur_transmittal, $cur_transmittalitem; + 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, $cur_transmittal, $cur_transmittalitem, $cur_role; $parent = end($elementstack); array_push($elementstack, array('name'=>$name, 'attributes'=>$attrs)); @@ -1044,6 +1083,14 @@ function startElement($parser, $name, $attrs) { /* {{{ */ $cur_transition['groups'][] = (int) $attrs['ID']; } break; + case "ROLE": + $first = $elementstack[1]; + if($first['name'] == 'ROLES') { + $cur_role = array(); + $cur_role['id'] = (int) $attrs['ID']; + $cur_role['attributes'] = array(); + } + break; case "TRANSMITTAL": $cur_transmittal = array(); $cur_transmittal['id'] = (int) $attrs['ID']; @@ -1152,6 +1199,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') { @@ -1330,7 +1379,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, $cur_transmittal, $cur_transmittalitem; + 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, $cur_transmittal, $cur_transmittalitem, $cur_role; array_pop($elementstack); $parent = end($elementstack); @@ -1379,6 +1428,9 @@ function endElement($parser, $name) { /* {{{ */ insert_group($cur_group); } break; + case 'ROLE': + insert_role($cur_role); + break; case 'ATTRIBUTEDEFINITION': insert_attributedefinition($cur_attrdef); break; @@ -1463,7 +1515,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, $cur_transmittal, $cur_transmittalitem; + 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, $cur_transmittal, $cur_transmittalitem, $cur_role; $current = end($elementstack); $parent = prev($elementstack); @@ -1551,6 +1603,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; @@ -1730,7 +1788,7 @@ if(isset($options['no-version-check'])) { $noversioncheck = true; } -$sections = array('documents', 'folders', 'groups', 'users', 'keywordcategories', 'documentcategories', 'attributedefinitions', 'workflows', 'transmittals'); +$sections = array('documents', 'folders', 'groups', 'users', 'roles', 'keywordcategories', 'documentcategories', 'attributedefinitions', 'workflows', 'transmittals'); if(isset($options['sections'])) { $sections = explode(',', $options['sections']); } @@ -1799,6 +1857,7 @@ set_mandatory(); set_homefolders(); +print_r($objmap); if($exportmapping) { if($fp = fopen($exportmapping, 'w')) { fputcsv($fp, array('object type', 'old id', 'new id'));