/**
  * @see	\wcf\data\DatabaseObjectList::readObjects()
  */
 public function readObjects()
 {
     parent::readObjects();
     $fileIDs = array();
     foreach ($this->objects as $file) {
         if ($file->isDeleted) {
             $fileIDs[] = $file->fileID;
         }
     }
     if (!empty($fileIDs)) {
         $this->logList = new EntryFileModificationLogList();
         $this->logList->setEntryFileData($fileIDs, 'trash');
         $this->logList->readObjects();
         foreach ($this->logList->getObjects() as $logEntry) {
             $this->objects[$logEntry->objectID]->setLogEntry($logEntry);
         }
     }
 }
コード例 #2
0
 /**
  * Moves given files into trash bin.
  */
 public function trash()
 {
     $ignoreEntries = isset($this->parameters['ignoreEntries']) && $this->parameters['ignoreEntries'];
     $entryIDs = array();
     foreach ($this->getObjects() as $file) {
         if (!isset($entryIDs[$file->entryID])) {
             $entryIDs[$file->entryID] = $file->entryID;
         }
     }
     $fileStats = [];
     if (!$ignoreEntries) {
         $fileStats = $this->getDetailedFileStats($entryIDs);
     }
     // update entries
     $files = $disableEntries = $trashEntries = $entryIDs = $fileIDs = array();
     foreach ($this->getObjects() as $file) {
         $files[$file->fileID] = $file;
         // ignore files which are already in trash bin
         if ($file->isDeleted) {
             continue;
         }
         $entryEditor = new EntryEditor($file->getEntry());
         $fileIDs[] = $file->fileID;
         if (!$ignoreEntries) {
             if (!$file->isDisabled) {
                 $fileStats[$file->entryID]['files']--;
                 $fileStats[$file->entryID]['visibleFiles']--;
             } else {
                 $fileStats[$file->entryID]['disabledFiles']--;
             }
             // no more visible files
             if (!$fileStats[$file->entryID]['visibleFiles']) {
                 if ($fileStats[$file->entryID]['disabledFiles']) {
                     // entry has disabled files thus disable
                     // entry
                     $disableEntries[] = $entryEditor;
                     $this->addEntryData($entryEditor->entryID, 'isDisabled', 1);
                 } else {
                     // entry only has deleted files anymore
                     // thus trash it
                     $trashEntries[] = $entryEditor;
                     $this->addEntryData($entryEditor->entryID, 'isDeleted', 1);
                 }
             }
         }
         $file->update(array('deleteTime' => TIME_NOW, 'isDeleted' => 1));
         FileModificationLogHandler::getInstance()->trash($file->getDecoratedObject(), !empty($this->parameters['data']['reason']) ? $this->parameters['data']['reason'] : '');
         $this->addFileData($file->getDecoratedObject(), 'isDeleted', 1);
     }
     // get delete notes
     if (!empty($fileIDs)) {
         $logList = new EntryFileModificationLogList();
         $logList->setEntryFileData($fileIDs, 'trash');
         $logList->getConditionBuilder()->add('modification_log.time = ?', array(TIME_NOW));
         $logList->readObjects();
         $logEntries = array();
         foreach ($logList as $logEntry) {
             $logEntry->setFile($files[$logEntry->objectID]->getDecoratedObject());
             $logEntries[$logEntry->objectID] = $logEntry;
         }
         foreach ($this->getObjects() as $file) {
             if (isset($logEntries[$file->fileID])) {
                 $viewableFile = new ViewableEntryFile($file->getDecoratedObject());
                 $viewableFile->setLogEntry($logEntries[$file->fileID]);
                 $this->addFileData($file->getDecoratedObject(), 'deleteNote', WCF::getLanguage()->getDynamicVariable('filebase.entry.file.deleted', ['file' => $viewableFile]));
             }
         }
     }
     if (!empty($entryIDs)) {
         EntryEditor::rebuildEntryData($entryIDs);
     }
     // disable entries with no more visible files but which still have
     // disabled files
     if (!$ignoreEntries && !empty($disableEntries)) {
         $entryAction = new EntryAction($disableEntries, 'disable', array('ignoreFiles' => true));
         $entryAction->executeAction();
     }
     // trash entries with no more visible files
     if (!$ignoreEntries && !empty($trashEntries)) {
         $entryAction = new EntryAction($trashEntries, 'trash', array('ignoreFiles' => true, 'data' => array('reason' => !empty($this->parameters['data']['reason']) ? $this->parameters['data']['reason'] : '')));
         $entryAction->executeAction();
     }
     $this->unmarkItems($entryIDs);
     return $this->getFileData();
 }