From 4e2af679e927c5252daaefd96d467484aac79a02 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Tue, 31 Oct 2023 18:49:19 +0100 Subject: [PATCH] sync with op/op.ImportFS.php --- utils/importfs.php | 161 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 128 insertions(+), 33 deletions(-) diff --git a/utils/importfs.php b/utils/importfs.php index 16323a2f5..eaa50f040 100644 --- a/utils/importfs.php +++ b/utils/importfs.php @@ -88,13 +88,13 @@ if(isset($options['basefolder'])) { } /* check if modification time shall be taken over */ -$filemtime = false; +$setfiledate = false; if(isset($options['filemtime'])) { - $filemtime = true; + $setfiledate = true; } -$foldermtime = false; -if(isset($options['foldermtime'])) { - $foldermtime = true; +$setfolderdate = false; +if(isset($options['setfolderdate'])) { + $setfolderdate = true; } if(isset($settings->_extraPath)) @@ -129,6 +129,87 @@ include($myincpath."/inc/inc.ClassController.php"); echo $settings->_contentDir.$settings->_contentOffsetDir.PHP_EOL; +function getBaseData($colname, $coldata, $objdata) { /* {{{ */ + $objdata[$colname] = $coldata; + return $objdata; +} /* }}} */ + +function getAttributeData($attrdef, $coldata, $objdata) { /* {{{ */ + $objdata['attributes'][$attrdef->getID()] = $coldata; + return $objdata; +} /* }}} */ + +function getCategoryData($colname, $coldata, $objdata) { /* {{{ */ + global $catids; + $kk = explode(',', $coldata); + $objdata['category'][] = array(); + foreach($kk as $k) { + if(isset($catids[$k])) + $objdata['category'][] = $catids[$k]; + } + return $objdata; +} /* }}} */ + +function getUserData($colname, $coldata, $objdata) { /* {{{ */ + global $userids; + if(isset($userids[$coldata])) + $objdata['owner'] = $userids[$coldata]; + return $objdata; +} /* }}} */ + +$metadata = array(); +if(!isset($metadatafile)) { + $csvdelim = ';'; + $csvencl = '"'; + if($fp = fopen($metadatafile, 'r')) { + $colmap = array(); + if($header = fgetcsv($fp, 0, $csvdelim, $csvencl)) { + foreach($header as $i=>$colname) { + $colname = trim($colname); + if(in_array($colname, array('category'))) { + $colmap[$i] = array("getCategoryData", $colname); + } elseif(in_array($colname, array('owner'))) { + $colmap[$i] = array("getUserData", $colname); + } elseif(in_array($colname, array('filename', 'category', 'name', 'comment'))) { + $colmap[$i] = array("getBaseData", $colname); + } elseif(substr($colname, 0, 5) == 'attr:') { + $kk = explode(':', $colname, 2); + if(($attrdef = $dms->getAttributeDefinitionByName($kk[1])) || ($attrdef = $dms->getAttributeDefinition((int) $kk[1]))) { + $colmap[$i] = array("getAttributeData", $attrdef); + } + } + } + } +// echo "
";print_r($colmap);echo "
"; + if(count($colmap) > 1) { + $nameprefix = dirname($dirname).'/'; + $allcats = $dms->getDocumentCategories(); + $catids = array(); + foreach($allcats as $cat) + $catids[$cat->getName()] = $cat; + $allusers = $dms->getAllUsers(); + $userids = array(); + foreach($allusers as $muser) + $userids[$muser->getLogin()] = $muser; + while(!feof($fp)) { + if($data = fgetcsv($fp, 0, $csvdelim, $csvencl)) { + $mi = $nameprefix.$data[$colmap['filename']]; +// $metadata[$mi] = array('category'=>array()); + $md = array(); + $md['attributes'] = array(); + foreach($data as $i=>$coldata) { + if(isset($colmap[$i])) { + $md = call_user_func($colmap[$i][0], $colmap[$i][1], $coldata, $md); + } + } + if(!empty($md['filename'])) + $metadata[$nameprefix.$md['filename']] = $md; + } + } + } + } +} + /* Create a global user object */ if(!($user = $dms->getUserByLogin($userlogin))) { echo "User with login '".$userlogin."' does not exists."; @@ -146,21 +227,22 @@ if ($folder->getAccessMode($user) < M_READWRITE) { exit(1); } -function import_folder($dirname, $folder, $filemtime, $foldermtime) { - global $user, $excludefiles, $fsencoding; +$dms->setForceLink(true); + +function import_folder($dirname, $folder, $setfiledate, $setfolderdate, $metadata) { /* {{{ */ + global $user, $doccount, $foldercount; $d = dir($dirname); $sequence = 1; while(false !== ($entry = $d->read())) { $path = $dirname.'/'.$entry; - if(!in_array($entry, $excludefiles)) { - $name = iconv($fsencoding, 'utf-8', basename($path)); + if($entry != '.' && $entry != '..' && $entry != '.svn') { if(is_file($path)) { + $name = utf8_basename($path); $filetmp = $path; $reviewers = array(); $approvers = array(); - $comment = ''; $version_comment = ''; $reqversion = 1; $expires = false; @@ -173,43 +255,56 @@ function import_folder($dirname, $folder, $filemtime, $foldermtime) { if (is_bool($lastDotIndex) && !$lastDotIndex) $filetype = "."; else $filetype = substr($name, $lastDotIndex); - echo $mimetype." - ".$filetype." - ".$path.PHP_EOL; - $res = $folder->addDocument($name, $comment, $expires, $user, $keywords, - $categories, $filetmp, $name, - $filetype, $mimetype, $sequence, $reviewers, - $approvers, $reqversion, $version_comment); + $docname = !empty($metadata[$path]['name']) ? $metadata[$path]['name'] : $name; + $comment = !empty($metadata[$path]['comment']) ? $metadata[$path]['comment'] : ''; + $owner = !empty($metadata[$path]['owner']) ? $metadata[$path]['owner'] : $user; - if (is_bool($res) && !$res) { - echo "Could not add document to folder".PHP_EOL; - exit(1); + echo $mimetype." - ".$filetype." - ".$path."
\n"; + if($res = $folder->addDocument($docname, $comment, $expires, $owner, $keywords, + !empty($metadata[$path]['category']) ? $metadata[$path]['category'] : array(), $filetmp, $name, + $filetype, $mimetype, $sequence, $reviewers, + $approvers, $reqversion, $version_comment, + !empty($metadata[$path]['attributes']) ? $metadata[$path]['attributes'] : array())) { + $doccount++; + if($setfiledate) { + $newdoc = $res[0]; + $newdoc->setDate(filemtime($path)); + $lc = $newdoc->getLatestContent(); + $lc->setDate(filemtime($path)); + } + } else { + echo "Error importing ".$path."
"; + echo "
".print_r($res, true)."
"; +// return false; } - if($filemtime) { - $newdoc = $res[0]; - $newdoc->setDate(filemtime($path)); - $lc = $newdoc->getLatestContent(); - $lc->setDate(filemtime($path)); - } - set_time_limit(1200); + set_time_limit(30); } elseif(is_dir($path)) { - $newfolder = $folder->addSubFolder($name, '', $user, $sequence); - if($foldermtime) { - $newfolder->setDate(filemtime($path)); + $name = utf8_basename($path); + if($newfolder = $folder->addSubFolder($name, '', $user, $sequence)) { + $foldercount++; + if($setfolderdate) { + $newfolder->setDate(filemtime($path)); + } + if(!import_folder($path, $newfolder, $setfiledate, $setfolderdate, $metadata)) + return false; + } else { +// return false; } - import_folder($path, $newfolder, $filemtime, $foldermtime); } $sequence++; } } -} + return true; +} /* }}} */ if($createbasefolder) { if($newfolder = $folder->addSubFolder(basename($dirname), '', $user, 1)) { - if($foldermtime) { + if($setfolderdate) { $newfolder->setDate(filemtime($dirname)); } - import_folder($dirname, $newfolder, $filemtime, $foldermtime); + import_folder($dirname, $newfolder, $setfiledate, $setfolderdate, $metadata); } } else { - import_folder($dirname, $folder, $filemtime, $foldermtime); + import_folder($dirname, $folder, $setfiledate, $setfolderdate, $metadata); }