diff --git a/utils/importfs.php b/utils/importfs.php index 16323a2f5..45e623927 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)) @@ -119,16 +119,94 @@ if(isset($options['d'])) { include($myincpath."/inc/inc.Settings.php"); include($myincpath."/inc/inc.Utils.php"); -include($myincpath."/inc/inc.Init.php"); include($myincpath."/inc/inc.Language.php"); +include($myincpath."/inc/inc.Init.php"); include($myincpath."/inc/inc.Extension.php"); include($myincpath."/inc/inc.DBInit.php"); -include($myincpath."/inc/inc.ClassNotificationService.php"); -include($myincpath."/inc/inc.ClassEmailNotify.php"); -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 +224,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 +252,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); } diff --git a/views/bootstrap/class.Bootstrap.php b/views/bootstrap/class.Bootstrap.php index d8eff2a7d..dbdae5c9c 100644 --- a/views/bootstrap/class.Bootstrap.php +++ b/views/bootstrap/class.Bootstrap.php @@ -3297,7 +3297,7 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) if(!$skipcont) $content .= $this->documentListRowStart($document); - $previewer->createPreview($latestContent); + if($previewer) $previewer->createPreview($latestContent); $version = $latestContent->getVersion(); if($ec = $this->callHook('documentListRowExtraContent', $document, $latestContent)) @@ -3311,7 +3311,7 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) else { if($accessop->check_controller_access('Download', array('action'=>'version'))) $content .= "params['settings']->_httpRoot."op/op.Download.php?documentid=".$docID."&version=".$version."\">"; - if($previewer->hasPreview($latestContent)) { + if($previewer && $previewer->hasPreview($latestContent)) { $content .= "params['settings']->_httpRoot."op/op.Preview.php?documentid=".$document->getID()."&version=".$latestContent->getVersion()."&width=".$previewwidth."\" title=\"".htmlspecialchars($latestContent->getMimeType())."\">"; } else { $content .= "getMimeIcon($latestContent->getFileType())."\" ".($previewwidth ? "width=\"".$previewwidth."\"" : "")."\" title=\"".htmlspecialchars($latestContent->getMimeType())."\">"; diff --git a/views/bootstrap/class.DropFolderChooser.php b/views/bootstrap/class.DropFolderChooser.php index e479368c3..554abb5bf 100644 --- a/views/bootstrap/class.DropFolderChooser.php +++ b/views/bootstrap/class.DropFolderChooser.php @@ -54,9 +54,12 @@ $('.folderselect').click(function(ev) { $rii = new DirectoryIterator($path); $files = array(); - foreach ($rii as $file) + foreach ($rii as $file) { if (!$file->isDir()) $files[] = [substr($file->getPath(), strlen($path)+1), $file->getFilename()]; + if(count($files) > 20) + return $files; + } return $files; } @@ -68,11 +71,14 @@ $('.folderselect').click(function(ev) { $rii = new DirectoryIterator($path); $files = array(); - foreach ($rii as $file) + foreach ($rii as $file) { if ($file->isDir()) { if(($t = substr($file->getPath(), strlen($path)+1)) && ($file->getFilename() == '.')) $files[] = $t; } + if(count($files) > 20) + return $files; + } return $files; } diff --git a/views/bootstrap4/class.Bootstrap4.php b/views/bootstrap4/class.Bootstrap4.php index 611131da3..f13b6dfc4 100644 --- a/views/bootstrap4/class.Bootstrap4.php +++ b/views/bootstrap4/class.Bootstrap4.php @@ -3289,7 +3289,7 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) if(!$skipcont) $content .= $this->documentListRowStart($document); - $previewer->createPreview($latestContent); + if($previewer) $previewer->createPreview($latestContent); $version = $latestContent->getVersion(); if($ec = $this->callHook('documentListRowExtraContent', $document, $latestContent)) @@ -3303,7 +3303,7 @@ $('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) else { if($accessop->check_controller_access('Download', array('action'=>'version'))) $content .= "params['settings']->_httpRoot."op/op.Download.php?documentid=".$docID."&version=".$version."\">"; - if($previewer->hasPreview($latestContent)) { + if($previewer && $previewer->hasPreview($latestContent)) { $content .= "params['settings']->_httpRoot."op/op.Preview.php?documentid=".$document->getID()."&version=".$latestContent->getVersion()."&width=".$previewwidth."\" title=\"".htmlspecialchars($latestContent->getMimeType())."\">"; } else { $content .= "getMimeIcon($latestContent->getFileType())."\" ".($previewwidth ? "width=\"".$previewwidth."\"" : "")."\" title=\"".htmlspecialchars($latestContent->getMimeType())."\">";