MCPcopy Create free account
hub / github.com/error311/FileRise / createFile

Method createFile

src/FileRise/Domain/FileModel.php:3977–4033  ·  view source on GitHub ↗

* Create an empty file plus metadata entry. * * @param string $folder * @param string $filename * @param string $uploader * @return array ['success'=>bool, 'error'=>string, 'code'=>int] */

(string $folder, string $filename, string $uploader)

Source from the content-addressed store, hash-verified

3975 * @return array ['success'=>bool, 'error'=>string, 'code'=>int]
3976 */
3977 public static function createFile(string $folder, string $filename, string $uploader): array
3978 {
3979 // 1) basic validation
3980 $filename = basename(trim($filename));
3981 if (!UploadNamePolicy::isAllowedForWrite($filename)) {
3982 return ['success' => false, 'error' => 'Invalid filename', 'code' => 400];
3983 }
3984
3985 $storage = self::storage();
3986
3987 // 2) resolve target folder
3988 list($baseDir, $err) = self::resolveFolderPath($folder, true);
3989 if ($err) {
3990 return ['success' => false, 'error' => $err, 'code' => ($err === 'Invalid folder name.' ? 400 : 500)];
3991 }
3992
3993 $path = $baseDir . DIRECTORY_SEPARATOR . $filename;
3994
3995 // 3) no overwrite
3996 if ($storage->stat($path) !== null) {
3997 return ['success' => false, 'error' => 'File already exists', 'code' => 400];
3998 }
3999
4000 // 4) touch the file (seed minimal DOCX to keep ONLYOFFICE happy)
4001 $seed = self::seedFileContents($filename);
4002 $data = ($seed !== null) ? $seed : '';
4003 if (!$storage->write($path, $data, LOCK_EX)) {
4004 $detail = self::adapterErrorDetail($storage);
4005 return [
4006 'success' => false,
4007 'error' => $detail !== '' ? ('Could not create file: ' . $detail) : 'Could not create file',
4008 'code' => 500
4009 ];
4010 }
4011
4012 // 5) write metadata
4013 $metaPath = self::getMetadataFilePath($folder);
4014
4015 $collection = [];
4016 if (file_exists($metaPath)) {
4017 $json = file_get_contents($metaPath);
4018 $collection = json_decode($json, true) ?: [];
4019 }
4020
4021 $now = date(DATE_TIME_FORMAT);
4022 $collection[$filename] = [
4023 'uploaded' => $now,
4024 'modified' => $now,
4025 'uploader' => $uploader
4026 ];
4027
4028 if (false === file_put_contents($metaPath, json_encode($collection, JSON_PRETTY_PRINT), LOCK_EX)) {
4029 return ['success' => false, 'error' => 'Failed to update metadata', 'code' => 500];
4030 }
4031
4032 return ['success' => true];
4033 }
4034}

Callers 3

createFile.phpFile · 0.45
opCreateFileMethod · 0.45

Calls 8

storageMethod · 0.95
resolveFolderPathMethod · 0.95
seedFileContentsMethod · 0.95
adapterErrorDetailMethod · 0.95
getMetadataFilePathMethod · 0.95
isAllowedForWriteMethod · 0.80
statMethod · 0.45
writeMethod · 0.45

Tested by

no test coverage detected