/** * @see \wcf\system\user\activity\event\IUserActivityEvent::prepare() */ public function prepare(array $events) { $objectIDs = array(); foreach ($events as $event) { $objectIDs[] = $event->objectID; } // fetch files $fileList = new EntryFileList(); $fileList->setObjectIDs($objectIDs); $fileList->readObjects(); $files = $fileList->getObjects(); // fetch entries $entryIDs = $entries = array(); foreach ($files as $file) { $entryIDs[] = $file->entryID; } $entryIDs = array_unique($entryIDs); if (!empty($entryIDs)) { $entryList = new EntryList(); $entryList->setObjectIDs($entryIDs); $entryList->readObjects(); $entries = $entryList->getObjects(); } // set message foreach ($events as $event) { if (isset($files[$event->objectID]) && isset($entries[$files[$event->objectID]->entryID])) { $entry = $entries[$files[$event->objectID]->entryID]; $files[$event->objectID]->setEntry($entry); if (!$entry->canRead()) { continue; } $event->setIsAccessible(); // title $text = WCF::getLanguage()->getDynamicVariable('filebase.recentActivity.entry.file', array('file' => $files[$event->objectID])); $event->setTitle($text); // description $event->setDescription($files[$event->objectID]->getExcerpt()); } else { $event->setIsOrphaned(); } } }
/** * @see \wcf\system\moderation\queue\IModerationQueueHandler::populate() */ public function populate(array $queues) { $objectIDs = array(); foreach ($queues as $object) { $objectIDs[] = $object->objectID; } // fetch files $objectList = new EntryFileList(); $objectList->setObjectIDs($objectIDs); $objectList->readObjects(); $objects = $objectList->getObjects(); foreach ($queues as $object) { if (isset($objects[$object->objectID])) { $object->setAffectedObject($objects[$object->objectID]); } else { $object->setIsOrphaned(); } } }
/** * @see \wcf\data\DatabaseObjectList::readObjects() */ public function readObjects() { $sql = "SELECT user_avatar.*, user_table.email, user_table.disableAvatar, user_table.enableGravatar, user_table.gravatarFileExtension,\n modification_log.*\n FROM wcf" . WCF_N . "_modification_log modification_log\n LEFT JOIN wcf" . WCF_N . "_user user_table\n ON (user_table.userID = modification_log.userID)\n LEFT JOIN wcf" . WCF_N . "_user_avatar user_avatar\n ON (user_avatar.avatarID = user_table.avatarID)\n WHERE modification_log.objectTypeID = ?\n AND modification_log.objectID = ?\n UNION\n SELECT user_avatar.*, user_table.email, user_table.disableAvatar, user_table.enableGravatar, user_table.gravatarFileExtension,\n modification_log.*\n FROM wcf" . WCF_N . "_modification_log modification_log\n LEFT JOIN wcf" . WCF_N . "_user user_table\n ON (user_table.userID = modification_log.userID)\n LEFT JOIN wcf" . WCF_N . "_user_avatar user_avatar\n ON (user_avatar.avatarID = user_table.avatarID)\n WHERE modification_log.objectTypeID = ?\n AND modification_log.parentObjectID = ?\n " . (!empty($this->sqlOrderBy) ? "ORDER BY " . $this->sqlOrderBy : ''); $statement = WCF::getDB()->prepareStatement($sql, $this->sqlLimit, $this->sqlOffset); $statement->execute([$this->entryObjectTypeID, $this->entry->entryID, $this->fileObjectTypeID, $this->entry->entryID]); $this->objects = $statement->fetchObjects($this->objectClassName ?: $this->className); // use table index as array index $objects = []; foreach ($this->objects as $object) { $objectID = $object->{$this->getDatabaseTableIndexName()}; $objects[$objectID] = $object; $this->indexToObject[] = $objectID; } $this->objectIDs = $this->indexToObject; $this->objects = $objects; $fileIDs = []; foreach ($this->objects as &$object) { if ($object->objectTypeID == $this->fileObjectTypeID) { $object = new ViewableEntryFileModificationLog($object); $fileIDs[] = $object->objectID; } else { $object = new ViewableEntryModificationLog($object); } } unset($object); if (!empty($fileIDs)) { $fileList = new EntryFileList(); $fileList->setObjectIDs($fileIDs); $fileList->readObjects(); foreach ($this->objects as $object) { if ($object instanceof ViewableEntryFileModificationLog) { foreach ($fileList as $file) { if ($object->objectID == $file->fileID) { $object->setFile($file); break; } } } } } }