ILIAS  release_7 Revision v7.30-3-g800a261c036
class.ilDownloadFilesBackgroundTask.php
Go to the documentation of this file.
1<?php
2
4use \ILIAS\BackgroundTasks\Implementation\Values\ScalarValues\StringValue;
5
6/* Copyright (c) 1998-2010 ILIAS open source, Extended GPL, see docs/LICENSE */
7
15{
19 private $logger = null;
20
24 protected $user_id;
25
26
30 protected $user = null;
31
35 protected $task_factory = null;
36
40 private $events = [];
41
46 protected $bucket_title;
47
52 protected $has_files = false;
53
58 public function __construct($a_usr_id)
59 {
60 global $DIC;
61 $this->logger = $DIC->logger()->cal();
62 $this->user_id = $a_usr_id;
63 $this->task_factory = $DIC->backgroundTasks()->taskFactory();
64 $this->lng = $DIC->language();
65
66 $this->user = \ilObjectFactory::getInstanceByObjId($a_usr_id, false);
67 }
68
73 public function setEvents(array $a_events)
74 {
75 $this->events = $a_events;
76 }
77
82 public function getEvents()
83 {
84 return $this->events;
85 }
86
91 public function setBucketTitle($a_title)
92 {
93 $this->bucket_title = $a_title;
94 }
95
100 public function getBucketTitle()
101 {
102 //TODO: fix ilUtil zip stuff
103 // Error If name starts "-"
104 // error massage from ilUtil->execQuoted = ["","zip error: Invalid command arguments (short option 'a' not supported)"]
105 if (substr($this->bucket_title, 0, 1) === "-") {
106 $this->bucket_title = ltrim($this->bucket_title, "-");
107 }
108
109 return $this->bucket_title;
110 }
111
116 public function run()
117 {
118 $definition = new ilCalendarCopyDefinition();
119 $normalized_name = ilUtil::getASCIIFilename($this->getBucketTitle());
120 $definition->setTempDir($normalized_name);
121
122 $this->collectFiles($definition);
123
124 if (!$this->has_files) {
125 ilUtil::sendInfo($this->lng->txt("cal_down_no_files"), true);
126 return false;
127 }
128
129 $bucket = new BasicBucket();
130 $bucket->setUserId($this->user_id);
131
132 // move files from source dir to target directory
133 $copy_job = $this->task_factory->createTask(ilCalendarCopyFilesToTempDirectoryJob::class, [$definition]);
134 $zip_job = $this->task_factory->createTask(ilCalendarZipJob::class, [$copy_job]);
135
136 $download_name = new StringValue();
137
138 $this->logger->debug("Normalized name = " . $normalized_name);
139 $download_name->setValue($normalized_name . '.zip');
140
141 $download_interaction = $this->task_factory->createTask(ilCalendarDownloadZipInteraction::class, [$zip_job, $download_name]);
142
143 // last task to bucket
144 $bucket->setTask($download_interaction);
145
146 $bucket->setTitle($this->getBucketTitle());
147
148 $task_manager = $GLOBALS['DIC']->backgroundTasks()->taskManager();
149 $task_manager->run($bucket);
150 return true;
151 }
152
157 {
158 //filter here the objects, don't repeat the object Id
159 $object_ids = [];
160 foreach ($this->getEvents() as $event) {
161 $start = new ilDateTime($event['dstart'], IL_CAL_UNIX);
162 $cat = ilCalendarCategory::getInstanceByCategoryId($event['category_id']);
163 $obj_id = $cat->getObjId();
164
165 $this->logger->debug('Handling event: ' . $event['event']->getPresentationTitle());
166 //22295 If the object type is exc then we need all the assignments.Otherwise we will get only one.
167 if (
168 $cat->getType() != \ilCalendarCategory::TYPE_OBJ ||
169 $cat->getObjType() == 'exc' ||
170 !in_array($obj_id, $object_ids)
171 ) {
172
173 $this->logger->debug('New obj_id..');
174 $object_ids[] = $obj_id;
175
176 $folder_date = $start->get(IL_CAL_FKT_DATE, 'Y-m-d', $this->user->getTimeZone());
177
178
179 if ($event['fullday']) {
180 $folder_app = ilUtil::getASCIIFilename($event['event']->getPresentationTitle(false)); //title formalized
181 } else {
182 $start_time = $start->get(IL_CAL_FKT_DATE, 'H.i', $this->user->getTimeZone());
183
184 $end = new ilDateTime($event['dend'], IL_CAL_UNIX);
185 $end_time = $end->get(IL_CAL_FKT_DATE, 'H.i', $this->user->getTimeZone());
186
187 if ($start_time != $end_time) {
188 $start_time .= (' - ' . $end_time);
189 }
190 $folder_app = $start_time . ' ' .
191 ilUtil::getASCIIFilename($event['event']->getPresentationTitle(false)); //title formalized
192 }
193
194 $this->logger->debug("collecting files...event title = " . $folder_app);
195 $file_handler = ilAppointmentFileHandlerFactory::getInstance($event);
196 $this->logger->debug('Current file handler: ' . get_class($file_handler));
197
198 if ($files = $file_handler->getFiles()) {
199 $this->has_files = true;
200 }
201
202 $this->logger->dump($files);
203 foreach ($files as $idx => $file_property) {
204 $this->logger->debug('Filename:' . $file_property->getFileName());
205 $this->logger->debug('Absolute path: ' . $file_property->getAbsolutePath());
206
207 $def->addCopyDefinition(
208 $file_property->getAbsolutePath(),
209 $folder_date . '/' . $folder_app . '/' . $file_property->getFileName()
210 );
211 $this->logger->debug('Added new copy definition: ' .
212 $folder_date . '/' . $folder_app . '/' . $file_property->getFileName() . ' => ' .
213 $file_property->getAbsolutePath()
214 );
215 }
216 }
217 else {
218 $this->logger->info('Ignoring obj_id: ' . $obj_id . ' already processed.');
219 }
220 }
221 }
222}
user()
Definition: user.php:4
if(!defined('PATH_SEPARATOR')) $GLOBALS['_PEAR_default_error_mode']
Definition: PEAR.php:64
An exception for terminatinating execution or to throw for unit testing.
const IL_CAL_UNIX
const IL_CAL_FKT_DATE
static getInstanceByCategoryId($a_cat_id)
Get instance by category id.
addCopyDefinition($a_source, $a_target)
Add copy definition.
@classDescription Date and time handling
collectFiles(ilCalendarCopyDefinition $def)
Collect files.
static getInstanceByObjId($a_obj_id, $stop_on_error=true)
get an instance of an Ilias object by object id
static getASCIIFilename($a_filename)
convert utf8 to ascii filename
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
global $DIC
Definition: goto.php:24