17 use Psr\Log\LoggerAwareInterface;
18 use Psr\Log\LoggerAwareTrait;
47 protected $table =
'sys_file_processedfile';
62 parent::__construct();
75 return GeneralUtility::makeInstance(
89 $originalFile = $this->factory->getFileObject((
int)$databaseRow[
'original']);
90 $originalFile->setStorage($this->factory->getStorageObject($originalFile->
getProperty(
'storage')));
91 $taskType = $databaseRow[
'task_type'];
94 $configuration = unserialize(
95 $databaseRow[
'configuration'],
97 'allowed_classes' => [
103 return GeneralUtility::makeInstance(
120 $processedFileObject =
null;
121 if ($storage->
hasFile($identifier)) {
122 $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable($this->table);
123 $databaseRow = $queryBuilder
127 $queryBuilder->expr()->eq(
129 $queryBuilder->createNamedParameter($storage->
getUid(), \PDO::PARAM_INT)
131 $queryBuilder->expr()->eq(
133 $queryBuilder->createNamedParameter($identifier, \PDO::PARAM_STR)
143 return $processedFileObject;
155 $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
156 ->getQueryBuilderForTable($this->table);
157 return (
int)$queryBuilder
161 $queryBuilder->expr()->eq(
163 $queryBuilder->createNamedParameter($storage->
getUid(), \PDO::PARAM_INT)
175 public function add($processedFile)
177 if ($processedFile->isPersisted()) {
178 $this->
update($processedFile);
180 $insertFields = $processedFile->toArray();
181 $insertFields[
'crdate'] = $insertFields[
'tstamp'] = time();
184 $connection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable($this->table);
192 $uid = $connection->lastInsertId($this->table);
193 $processedFile->updateProperties([
'uid' => $uid]);
202 public function update($processedFile)
204 if ($processedFile->isPersisted()) {
205 $uid = (int)$processedFile->getUid();
207 $updateFields[
'tstamp'] = time();
209 $connection = GeneralUtility::makeInstance(ConnectionPool::class)->getConnectionForTable($this->table);
230 $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable($this->table);
232 $databaseRow = $queryBuilder
236 $queryBuilder->expr()->eq(
238 $queryBuilder->createNamedParameter($file->getUid(), \PDO::PARAM_INT)
240 $queryBuilder->expr()->eq(
'task_type', $queryBuilder->createNamedParameter($taskType, \PDO::PARAM_STR)),
241 $queryBuilder->expr()->eq(
243 $queryBuilder->createNamedParameter(sha1(serialize($configuration)), \PDO::PARAM_STR)
249 if (is_array($databaseRow)) {
254 return $processedFile;
264 if (!$file instanceof
File) {
265 throw new \InvalidArgumentException(
'Parameter is no File object but got type "'
266 . (is_object($file) ? get_class($file) : gettype($file)) .
'"', 1382006142);
269 $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable($this->table);
270 $result = $queryBuilder
274 $queryBuilder->expr()->eq(
276 $queryBuilder->createNamedParameter($file->getUid(), \PDO::PARAM_INT)
282 while ($row = $result->fetch()) {
295 public function removeAll($storageUid =
null)
297 $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
298 ->getQueryBuilderForTable($this->table);
300 $queryBuilder->expr()->neq(
'identifier', $queryBuilder->createNamedParameter(
'', \PDO::PARAM_STR))
302 if ($storageUid !==
null) {
303 $where[] = $queryBuilder->expr()->eq(
305 $queryBuilder->createNamedParameter($storageUid, \PDO::PARAM_INT)
308 $result = $queryBuilder
316 while ($row = $result->fetch()) {
317 if ($storageUid && (
int)$storageUid !== (
int)$row[
'storage']) {
325 $this->logger->error(
326 'Failed to delete file "' . $row[
'identifier'] .
'" in storage uid ' . $row[
'storage'] .
'.',
335 if ($storageUid ===
null) {
337 GeneralUtility::makeInstance(ConnectionPool::class)
338 ->getConnectionForTable($this->table)
339 ->truncate($this->table);
342 GeneralUtility::makeInstance(ConnectionPool::class)
343 ->getConnectionForTable($this->table)
344 ->delete($this->table, [
'storage' => $storageUid], [\PDO::PARAM_INT]);
360 if (empty($this->tableColumns[$this->table])) {
361 $this->tableColumns[
$this->table] = GeneralUtility::makeInstance(ConnectionPool::class)
362 ->getConnectionForTable($this->table)
364 ->listTableColumns($this->table);
367 return array_intersect_key($data, $this->tableColumns[$this->table]);