mirror of
https://git.code.sf.net/p/seeddms/code
synced 2025-02-06 15:14:58 +00:00
add task to import files from dropfolder
This commit is contained in:
parent
5ebbaa9336
commit
878f7e559a
|
@ -838,10 +838,180 @@ class SeedDMS_RecentChangesTask extends SeedDMS_SchedulerTaskBase { /* {{{ */
|
|||
} /* }}} */
|
||||
} /* }}} */
|
||||
|
||||
/**
|
||||
* Class containing methods for running a scheduled task
|
||||
*
|
||||
* @author Uwe Steinmann <uwe@steinmann.cx>
|
||||
* @package SeedDMS
|
||||
* @subpackage core
|
||||
*/
|
||||
class SeedDMS_ImportDropFolderTask extends SeedDMS_SchedulerTaskBase { /* {{{ */
|
||||
|
||||
private static function getFiles($path, $recursive=false) {
|
||||
if($recursive)
|
||||
$rii = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));
|
||||
else
|
||||
$rii = new DirectoryIterator($path);
|
||||
|
||||
$files = array();
|
||||
try {
|
||||
foreach ($rii as $file)
|
||||
if (!$file->isDir())
|
||||
$files[] = [substr($file->getPath(), strlen($path)+1), $file->getFilename()];
|
||||
} catch(Exception $e) {
|
||||
}
|
||||
|
||||
return $files;
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the task
|
||||
*
|
||||
* @param SeedDMS_SchedulerTask $task task to be executed
|
||||
* @return boolean true if task was executed succesfully, otherwise false
|
||||
*/
|
||||
public function execute(SeedDMS_SchedulerTask $task) { /* {{{ */
|
||||
$dms = $this->dms;
|
||||
$user = $this->user;
|
||||
$logger = $this->logger;
|
||||
$settings = $this->settings;
|
||||
$fulltextservice = $this->fulltextservice;
|
||||
$notifier = $this->notifier;
|
||||
$taskparams = $task->getParameter();
|
||||
|
||||
$dropfolderdir = addDirSep($settings->_dropFolderDir);
|
||||
|
||||
if(!empty($taskparams['targetfolder'])) {
|
||||
if(!($folder = $dms->getFolder($taskparams['targetfolder']))) {
|
||||
$logger->log('Task \'import_dropfolder\': target folder with id '.$taskparams['targetfolder'].' does not exist', PEAR_LOG_ERR);
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
$logger->log('Task \'import_dropfolder\': target folder not set', PEAR_LOG_ERR);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!empty($taskparams['users'])) {
|
||||
$userids = $taskparams['users'];
|
||||
$users = [];
|
||||
foreach($userids as $userid)
|
||||
if($u = $dms->getUser($userid))
|
||||
$users[] = $u;
|
||||
} else {
|
||||
$users = $dms->getAllUsers();
|
||||
}
|
||||
|
||||
foreach($users as $user) {
|
||||
$dir = $dropfolderdir.$user->getLogin();
|
||||
$logger->log('Task \'import_dropfolder\': import from \''.$dir.'\' for user \''.$user->getLogin().'\' into \''.$folder->getName().'\'', PEAR_LOG_INFO);
|
||||
|
||||
/* Check if we are still looking in the configured directory and
|
||||
* not somewhere else, e.g. if the login was '../test'
|
||||
*/
|
||||
if(dirname($dir).DIRECTORY_SEPARATOR == $dropfolderdir) {
|
||||
if(is_dir($dir)) {
|
||||
$files = self::getFiles($dir, !empty($taskparams['recursive']));
|
||||
foreach($files as $file) {
|
||||
$logger->log('Task \'import_dropfolder\': import \''.($file[0] ? $file[0].DIRECTORY_SEPARATOR : '').$file[1].'\' for user \''.$user->getLogin().'\'', PEAR_LOG_INFO);
|
||||
|
||||
$mimetype = SeedDMS_Core_File::mimetype($dir.DIRECTORY_SEPARATOR.$file[0].$file[1]);
|
||||
$lastDotIndex = strrpos($file[1], ".");
|
||||
if (is_bool($lastDotIndex) && !$lastDotIndex) $filetype = ".";
|
||||
else $filetype = substr($file[1], $lastDotIndex);
|
||||
|
||||
$expires = false;
|
||||
if($settings->_presetExpirationDate) {
|
||||
$expires = strtotime($settings->_presetExpirationDate);
|
||||
}
|
||||
|
||||
$controller = Controller::factory('AddDocument', array('dms'=>$dms, 'user'=>$user));
|
||||
$controller->setParam('documentsource', 'importdropfolder');
|
||||
$controller->setParam('folder', $folder);
|
||||
$controller->setParam('fulltextservice', $fulltextservice);
|
||||
$controller->setParam('name', $file[1]);
|
||||
$controller->setParam('comment', '');
|
||||
$controller->setParam('expires', $expires);
|
||||
$controller->setParam('keywords', '');
|
||||
$controller->setParam('categories', []);
|
||||
$controller->setParam('owner', $user);
|
||||
$controller->setParam('userfiletmp', $dir.DIRECTORY_SEPARATOR.$file[0].$file[1]);
|
||||
$controller->setParam('userfilename', $file[1]);
|
||||
$controller->setParam('filetype', $filetype);
|
||||
$controller->setParam('userfiletype', $mimetype);
|
||||
$minmax = $folder->getDocumentsMinMax();
|
||||
$deviation = rand(10, 1000)/10;
|
||||
if($settings->_defaultDocPosition == 'start')
|
||||
$controller->setParam('sequence', $minmax['min'] - $deviation);
|
||||
else
|
||||
$controller->setParam('sequence', $minmax['max'] + $deviation);
|
||||
$controller->setParam('reviewers', []);
|
||||
$controller->setParam('approvers', []);
|
||||
$controller->setParam('reqversion', 1);
|
||||
$controller->setParam('versioncomment', '');
|
||||
$controller->setParam('attributes', []);
|
||||
$controller->setParam('attributesversion', array());
|
||||
$controller->setParam('workflow', null);
|
||||
$controller->setParam('notificationgroups', array());
|
||||
$controller->setParam('notificationusers', array());
|
||||
$controller->setParam('initialdocumentstatus', $settings->_initialDocumentStatus);
|
||||
$controller->setParam('maxsizeforfulltext', $settings->_maxSizeForFullText);
|
||||
$controller->setParam('defaultaccessdocs', $settings->_defaultAccessDocs);
|
||||
|
||||
if(!$document = $controller()) {
|
||||
$err = $controller->getErrorMsg();
|
||||
if(is_string($err))
|
||||
$errmsg = getMLText($err);
|
||||
elseif(is_array($err)) {
|
||||
$errmsg = getMLText($err[0], $err[1]);
|
||||
} else {
|
||||
$errmsg = $err;
|
||||
}
|
||||
$logger->log('Task \'import_dropfolder\': import of \''.($file[0] ? $file[0].DIRECTORY_SEPARATOR : '').$file[1].'\' for user \''.$user->getLogin().'\' failed', PEAR_LOG_ERR);
|
||||
} else {
|
||||
// Send notification to subscribers of folder.
|
||||
if($notifier) {
|
||||
$notifier->sendNewDocumentMail($document, $user);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
} /* }}} */
|
||||
|
||||
public function getDescription() { /* {{{ */
|
||||
return 'Import all files from drop folder';
|
||||
} /* }}} */
|
||||
|
||||
public function getAdditionalParams() { /* {{{ */
|
||||
return array(
|
||||
array(
|
||||
'name'=>'users',
|
||||
'type'=>'users',
|
||||
'multiple'=>true,
|
||||
'description'=> 'Use this user for the import',
|
||||
),
|
||||
array(
|
||||
'name'=>'recursive',
|
||||
'type'=>'boolean',
|
||||
'description'=> 'If set, import documents from sub foldrers in drop folder directory.',
|
||||
),
|
||||
array(
|
||||
'name'=>'targetfolder',
|
||||
'type'=>'folder',
|
||||
'description'=> getMLText('task_import_drop_folder_targetfolder_desc'),
|
||||
),
|
||||
);
|
||||
} /* }}} */
|
||||
} /* }}} */
|
||||
|
||||
$GLOBALS['SEEDDMS_SCHEDULER']['tasks']['core']['expireddocs'] = 'SeedDMS_ExpiredDocumentsTask';
|
||||
$GLOBALS['SEEDDMS_SCHEDULER']['tasks']['core']['indexingdocs'] = 'SeedDMS_IndexingDocumentsTask';
|
||||
$GLOBALS['SEEDDMS_SCHEDULER']['tasks']['core']['checksum'] = 'SeedDMS_CheckSumTask';
|
||||
$GLOBALS['SEEDDMS_SCHEDULER']['tasks']['core']['preview'] = 'SeedDMS_PreviewTask';
|
||||
$GLOBALS['SEEDDMS_SCHEDULER']['tasks']['core']['calendar'] = 'SeedDMS_CalendarTask';
|
||||
$GLOBALS['SEEDDMS_SCHEDULER']['tasks']['core']['statistic'] = 'SeedDMS_StatisticTask';
|
||||
$GLOBALS['SEEDDMS_SCHEDULER']['tasks']['core']['importdropfolder'] = 'SeedDMS_ImportDropFolderTask';
|
||||
$GLOBALS['SEEDDMS_SCHEDULER']['tasks']['core']['recentchanges'] = 'SeedDMS_RecentChangesTask';
|
||||
|
|
Loading…
Reference in New Issue
Block a user