30 $this->logger =
$GLOBALS[
'DIC']->logger()->cal();
52 return new SingleType(ilCopyDefinition::class);
71 $this->logger->debug(
'Start collecting files!');
72 $this->logger->dump($input);
73 $definition = $input[0];
74 $initiated_by_folder_action = $input[1]->getValue();
75 $object_ref_ids = $definition->getObjectRefIds();
78 foreach ($object_ref_ids as $object_ref_id) {
80 $object_type = $object->getType();
81 $object_name = $object->getTitle();
82 $object_temp_dir =
"";
84 if ($object_type ==
"fold") {
86 $files_from_folder = self::recurseFolder($object_ref_id, $object_name, $object_temp_dir, $num_recursions, $initiated_by_folder_action);
87 $files = array_merge($files, $files_from_folder);
89 if (($object_type ==
"file") and (($file_dirs = self::getFileDirs($object_ref_id, $object_name, $object_temp_dir)) !=
false)) {
90 $files[] = $file_dirs;
94 $this->logger->debug(
'Collected files:');
95 $this->logger->dump($files);
98 foreach ($files as $file) {
99 $definition->addCopyDefinition($file[
'source_dir'], $file[
'target_dir']);
100 $this->logger->debug(
'Added new copy definition: ' . $file[
'source_dir'] .
' -> ' . $file[
'target_dir']);
103 $is_empty_folder = preg_match_all(
"/\/$/", $file[
'target_dir']);
104 if (!$is_empty_folder) {
108 $definition->setObjectRefIds($object_ref_ids);
109 $definition->setNumFiles($num_files);
119 private static function getFileDirs($a_ref_id, $a_file_name, $a_temp_dir)
123 $user = $DIC->user();
124 $ilAccess = $DIC->access();
125 if ($ilAccess->checkAccessOfUser($user->getId(),
"read",
"", $a_ref_id)) {
127 $source_dir = $file->getFile();
128 if (@!is_file($source_dir)) {
136 if (isset(self::$targets[$target_dir])) {
137 $target_info = pathinfo($target_dir);
139 $extension = isset($target_info[
"extension"]) ?
"." . $target_info[
"extension"] :
"";
140 $target_dir = $a_temp_dir .
$filename .
" (" . ++self::$targets[$target_dir] .
")" . $extension;
142 self::$targets[$target_dir] = 0;
146 "source_dir" => $source_dir,
147 "target_dir" => $target_dir,
162 private static function recurseFolder($a_ref_id, $a_folder_name, $a_temp_dir, $a_num_recursions, $a_initiated_by_folder_action)
166 $num_recursions = $a_num_recursions + 1;
167 $tree = $DIC->repositoryTree();
168 $ilAccess = $DIC->access();
173 if (($num_recursions <= 1) and ($a_initiated_by_folder_action)) {
174 $temp_dir = $a_temp_dir;
179 $subtree = $tree->getChildsByTypeFilter($a_ref_id, array(
"fold",
"file"));
181 foreach ($subtree as $child) {
182 if (!$ilAccess->checkAccess(
"read",
"", $child[
"ref_id"])) {
188 if ($child[
"type"] ==
"fold") {
189 $files_from_folder = self::recurseFolder($child[
"ref_id"], $child[
'title'], $temp_dir, $num_recursions, $a_initiated_by_folder_action);
190 $files = array_merge($files, $files_from_folder);
192 if (($child[
"type"] ==
"file") and (($dirs = self::getFileDirs($child[
"ref_id"], $child[
'title'], $temp_dir)) !=
false)) {
198 if (empty($subtree)) {
201 "target_dir" => $temp_dir .
'/',
static getFileDirs($a_ref_id, $a_file_name, $a_temp_dir)
Please note that this method must only be called ONCE in order to detect duplicate entries...
static recurseFolder($a_ref_id, $a_folder_name, $a_temp_dir, $a_num_recursions, $a_initiated_by_folder_action)
Description of class class.
Class ChatMainBarProvider .
static _isInTrash($a_ref_id)
checks wether object is in trash
static getASCIIFilename($a_filename)
convert utf8 to ascii filename
run(array $input, \ILIAS\BackgroundTasks\Observer $observer)
if(!defined('PATH_SEPARATOR')) $GLOBALS['_PEAR_default_error_mode']
static getInstanceByRefId($a_ref_id, $stop_on_error=true)
get an instance of an Ilias object by reference id
getExpectedTimeOfTaskInSeconds()
int the amount of seconds this task usually taskes. If your task-duration scales with the the amount ...