public function setFilesForItem(cs_item $item, $post_file_ids, $new_file_ids_to_store) { $session = $this->_environment->getSessionItem(); // temp files - uploaded via "Image"-Plugin (ckeditor; custom image-upload/image-browse) $temp_files_array = array(); $file_manager = $this->_environment->getFileManager(); $file_manager->resetLimits(); $file_manager->setTempUploadSessionIdLimit($this->_environment->getSessionId()); $file_manager->select(); $file_list = $file_manager->get(); $file_item = $file_list->getFirst(); while ($file_item) { $temp_files_array[] = $file_item->getFileID(); $file_manager->resetTempUpload($file_item); $file_item = $file_list->getNext(); } unset($file_manager); $file_ids = array(); // new file information are stored in the session object $new_files = $session->getValue("add_files"); $new_file_ids = array(); if (!empty($new_files)) { $file_manager = $this->_environment->getFileManager(); foreach ($new_file_ids_to_store as $file_id) { $file = $new_files[$file_id]; $file["file_id"] = $file_id; if (isset($file['tmp_name']) && file_exists($file['tmp_name'])) { $file_item = $file_manager->getNewItem(); $file_item->setTempKey($file['file_id']); $file['name'] = trim($file['name']); $file_item->setPostFile($file); $file_item->save(); unlink($file['tmp_name']); // Currently, the file manager does not unlink a file in its _saveOnDisk() method, because it is also used for copying files when copying material. $new_file_ids[] = $file_item->getFileID(); } /* else { $new_file_ids[] = $file['file_id']; }*/ } } $session->unsetValue("add_files"); // already attach file ids are in $post_file_ids $attached_ids = array(); foreach ($post_file_ids as $file_id) { if (is_numeric($file_id)) { $attached_ids[] = $file_id; } else { /* * if ( !isset($file_manager) ) { $file_manager = $this->_environment->getFileManager(); $file_manager->setContextLimit($this->_environment->getCurrentContextID()); } $temp_key = $file_manager->getFileIDForTempKey($file_id); if ( !empty($temp_key) and is_numeric($temp_key) ) { $temp_array[] = $temp_key; } elseif ( !empty($files) ) { foreach ( $files as $file_data ) { if ( $file_data["file_id"] == $file_id ) { if ( isset($file_data["tmp_name"]) and file_exists($file_data["tmp_name"]) ) { // create file entries for uploaded files $file_item = $file_manager->getNewItem(); $file_item->setTempKey($file_data["file_id"]); $file_item->setPostFile($file_data); $file_item->save(); unlink($file_data["tmp_name"]); // Currently, the file manager does not unlink a file in its _saveOnDisk() method, because it is also used for copying files when copying material. $temp_array[] = $file_item->getFileID(); } } } } */ } } // merge already attached file ids and new ones $file_ids = array_merge($new_file_ids, $attached_ids, $temp_files_array); // set $item->setFileIDArray($file_ids); }