Esempio n. 1
0
 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);
 }