/** * Post select process * @param array $selectState * @param ResultSet $result * @return ResultSet */ protected function processSelect($selectState, $result) { // Add file url and thumb url if ($selectState['table'] == 'directus_files') { $fileRows = $result->toArray(); $files = new Files(); foreach ($fileRows as &$row) { $config = Bootstrap::get('config'); $fileURL = $config['filesystem']['root_url']; $thumbnailURL = $config['filesystem']['root_thumb_url']; $thumbnailFilenameParts = explode('.', $row['name']); $thumbnailExtension = array_pop($thumbnailFilenameParts); $row['url'] = $fileURL . '/' . $row['name']; if (in_array($thumbnailExtension, ['tif', 'tiff', 'psd', 'pdf'])) { $thumbnailExtension = 'jpg'; } $thumbnailFilename = $row['id'] . '.' . $thumbnailExtension; $row['thumbnail_url'] = $thumbnailURL . '/' . $thumbnailFilename; // filename-ext-100-100-true.jpg // @TODO: This should be a hook // @TODO: Create a select hook $row['thumbnail_url'] = null; $filename = implode('.', $thumbnailFilenameParts); if ($row['type'] == 'embed/vimeo') { $oldThumbnailFilename = $row['name'] . '-vimeo-220-124-true.jpg'; } else { $oldThumbnailFilename = $filename . '-' . $thumbnailExtension . '-160-160-true.jpg'; } // 314551321-vimeo-220-124-true.jpg // hotfix: there's not thumbnail for this file if ($files->exists('thumbs/' . $oldThumbnailFilename)) { $row['thumbnail_url'] = $thumbnailURL . '/' . $oldThumbnailFilename; } if ($files->exists('thumbs/' . $thumbnailFilename)) { $row['thumbnail_url'] = $thumbnailURL . '/' . $thumbnailFilename; } $embedManager = Bootstrap::get('embedManager'); $provider = $embedManager->getByType($row['type']); $row['html'] = null; if ($provider) { $row['html'] = $provider->getCode($row); } } $filesArrayObject = new \ArrayObject($fileRows); $result->initialize($filesArrayObject->getIterator()); } return $result; }
public function addOrUpdateRecordByArray(array $recordData, $tableName = null) { $tableName = is_null($tableName) ? $this->table : $tableName; foreach ($recordData as $columnName => $columnValue) { if (is_array($columnValue)) { // $table = is_null($tableName) ? $this->table : $tableName; throw new SuppliedArrayAsColumnValue('Attempting to write an array as the value for column `' . $tableName . '`.`' . $columnName . '.'); } } $columns = TableSchema::getAllNonAliasTableColumns($tableName); $recordData = SchemaManager::parseRecordValuesByType($recordData, $columns); $TableGateway = new self($this->acl, $tableName, $this->adapter); $rowExists = isset($recordData[$TableGateway->primaryKeyFieldName]); if ($rowExists) { $Update = new Update($tableName); $Update->set($recordData); $Update->where([$TableGateway->primaryKeyFieldName => $recordData[$TableGateway->primaryKeyFieldName]]); $TableGateway->updateWith($Update); $this->emitter->run('postUpdate', [$TableGateway, $recordData, $this->adapter, $this->acl]); } else { $d = $recordData; if ($tableName == 'directus_files') { unset($d['data']); $d['user'] = Auth::getUserInfo('id'); } $TableGateway->insert($d); $recordData[$TableGateway->primaryKeyFieldName] = $TableGateway->getLastInsertValue(); if ($tableName == 'directus_files') { $Files = new \Directus\Files\Files(); $ext = pathinfo($recordData['name'], PATHINFO_EXTENSION); $thumbnailPath = 'thumbs/THUMB_' . $recordData['name']; if ($Files->exists($thumbnailPath)) { $Files->rename($thumbnailPath, 'thumbs/' . $recordData[$this->primaryKeyFieldName] . '.' . $ext); } $updateArray = []; if ($Files->getSettings('file_naming') == 'file_id') { $Files->rename($recordData['name'], str_pad($recordData[$this->primaryKeyFieldName], 11, '0', STR_PAD_LEFT) . '.' . $ext); $updateArray['name'] = str_pad($recordData[$this->primaryKeyFieldName], 11, '0', STR_PAD_LEFT) . '.' . $ext; $recordData['name'] = $updateArray['name']; } if (!empty($updateArray)) { $Update = new Update($tableName); $Update->set($updateArray); $Update->where([$TableGateway->primaryKeyFieldName => $recordData[$TableGateway->primaryKeyFieldName]]); $TableGateway->updateWith($Update); } } $this->emitter->run('postInsert', [$TableGateway, $recordData, $this->adapter, $this->acl]); } $columns = TableSchema::getAllNonAliasTableColumnNames($tableName); $recordData = $TableGateway->fetchAll(function ($select) use($recordData, $columns, $TableGateway) { $select->columns($columns)->limit(1); $select->where->equalTo($TableGateway->primaryKeyFieldName, $recordData[$TableGateway->primaryKeyFieldName]); })->current(); return $recordData; }