Overview
Comment: | Accept more unicode in filenames |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | dev |
Files: | files | file ages | folders |
SHA3-256: |
176bbe63cdcd3735999c20470c6ed93c |
User & Date: | bohwaz on 2021-03-15 02:55:13 |
Other Links: | branch diff | manifest | tags |
Context
2021-03-15
| ||
03:19 | Fix storage migration check-in: d51394747f user: bohwaz tags: dev | |
02:55 | Accept more unicode in filenames check-in: 176bbe63cd user: bohwaz tags: dev | |
02:54 | Use realpath() to make sure file exists check-in: 512b22edcb user: bohwaz tags: dev | |
Changes
Modified src/include/lib/Garradin/Entities/Files/File.php from [ba040a35ea] to [67fb91f85e].
︙ | ︙ | |||
140 141 142 143 144 145 146 | public function context(): string { return strtok($this->path, '/'); } public function fullpath(): string { | | > > > > > > | 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 | public function context(): string { return strtok($this->path, '/'); } public function fullpath(): string { $path = Files::callStorage('getFullPath', $this); if (null === $path) { throw new \RuntimeException('File does not exist: ' . $this->path); } return $path; } public function canPreview(): bool { return in_array($this->mime, self::PREVIEW_TYPES); } |
︙ | ︙ | |||
378 379 380 381 382 383 384 | static public function create(string $path, string $name, ?string $source_path, ?string $source_content): self { if (!isset($source_path) && !isset($source_content)) { throw new \InvalidArgumentException('Either source path or source content should be set but not both'); } | < < | 384 385 386 387 388 389 390 391 392 393 394 395 396 397 | static public function create(string $path, string $name, ?string $source_path, ?string $source_content): self { if (!isset($source_path) && !isset($source_content)) { throw new \InvalidArgumentException('Either source path or source content should be set but not both'); } self::ensureDirectoryExists($path); $finfo = \finfo_open(\FILEINFO_MIME_TYPE); $file = new self; $file->set('path', $path . '/' . $name); $file->set('parent', $path); $file->set('name', $name); |
︙ | ︙ | |||
444 445 446 447 448 449 450 | } if (!is_uploaded_file($file['tmp_name'])) { throw new \RuntimeException('Le fichier n\'a pas été envoyé de manière conventionnelle.'); } $name = preg_replace('/\s+/', '_', $file['name']); | | | 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 | } if (!is_uploaded_file($file['tmp_name'])) { throw new \RuntimeException('Le fichier n\'a pas été envoyé de manière conventionnelle.'); } $name = preg_replace('/\s+/', '_', $file['name']); $name = self::filterName($name); return self::createAndStore($path, $name, $file['tmp_name'], null); } /** * Récupération du message d'erreur |
︙ | ︙ | |||
855 856 857 858 859 860 861 | if (!array_key_exists($path[0], self::CONTEXTS_NAMES)) { throw new ValidationException('Chemin invalide'); } $context = array_shift($path); foreach ($path as $part) { | | | 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 | if (!array_key_exists($path[0], self::CONTEXTS_NAMES)) { throw new ValidationException('Chemin invalide'); } $context = array_shift($path); foreach ($path as $part) { if (substr($part, 0, 1) == '.') { throw new ValidationException('Chemin invalide'); } } $name = array_pop($path); $ref = implode('/', $path); return [$context, $ref ?: null, $name]; |
︙ | ︙ |
Modified src/templates/admin/config/advanced/index.tpl from [472b663153] to [fc7d4690cb].
︙ | ︙ | |||
43 44 45 46 47 48 49 50 51 52 | <h2 class="ruler">Stockage des fichiers</h2> {if !$quota_used} <fieldset> <legend>Migration de stockage de fichiers</legend> <p class="alert block"> Les fichiers seront <strong>supprimés</strong> de la base de données après avoir été recopiés vers '{$storage_backend}'. </p> <p class="help">Cette opération peut prendre quelques minutes.</p> <p> {csrf_field key="migrate_backend"} | > > > | | | 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | <h2 class="ruler">Stockage des fichiers</h2> {if !$quota_used} <fieldset> <legend>Migration de stockage de fichiers</legend> <p class="alert block"> Les fichiers seront <strong>supprimés</strong> de la base de données après avoir été recopiés vers '{$storage_backend}'. </p> <p class="error block"> Sauvegarde fortement recommandée avant de procéder à cette opération ! </p> <p class="help">Cette opération peut prendre quelques minutes.</p> <p> {csrf_field key="migrate_backend"} {button type="submit" name="migrate_backend_ok" label="Copier tous les fichiers vers %s et les supprimer de la base de données"|args:$storage_backend shape="right"} </p> </fieldset> {else} <fieldset> <legend>Recopier les fichiers dans la base de données</legend> <p class="alert block"> Les fichiers ne seront pas effacés de {$storage_backend} mais simplement recopiés dans la base de données. </p> <p class="help">Cette opération peut prendre quelques minutes. Elle est utile pour migrer entre deux systèmes de fichiers différents.</p> <p> {csrf_field key="migrate_back"} {button type="submit" name="migrate_back_ok" label="Copier tous les fichiers de %s vers la base de données"|args:$storage_backend shape="right"} </p> </fieldset> {/if} {/if} |
︙ | ︙ |
Modified src/www/admin/config/donnees/index.php from [899143cff3] to [9a9d510a5b].
1 2 3 4 5 6 7 8 9 | <?php namespace Garradin; require_once __DIR__ . '/../_inc.php'; $s = new Sauvegarde; $tpl->assign('code', null); | > > | 1 2 3 4 5 6 7 8 9 10 11 | <?php namespace Garradin; use Garradin\Files\Files; require_once __DIR__ . '/../_inc.php'; $s = new Sauvegarde; $tpl->assign('code', null); |
︙ | ︙ | |||
26 27 28 29 30 31 32 | Utils::redirect(ADMIN_URL . 'config/donnees/?ok=restore&code=' . (int)$r); } catch (UserException $e) { $tpl->assign('code', $e->getCode()); } }, 'backup_restore'); $tpl->assign('db_size', $s->getDBSize()); | | | 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | Utils::redirect(ADMIN_URL . 'config/donnees/?ok=restore&code=' . (int)$r); } catch (UserException $e) { $tpl->assign('code', $e->getCode()); } }, 'backup_restore'); $tpl->assign('db_size', $s->getDBSize()); $tpl->assign('files_size', Files::getUsedQuota()); $tpl->assign('ok_code', qg('code')); $tpl->assign('ok', qg('ok')); $tpl->assign('now_date', date('Y-m-d')); $tpl->assign('max_file_size', Utils::getMaxUploadSize()); $tpl->display('admin/config/donnees/index.tpl'); |
Modified src/www/admin/docs/new_file.php from [b3c87b98b2] to [7f74958ac9].
︙ | ︙ | |||
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | $name = trim(f('name')); if (!strpos($name, '.')) { $name .= '.txt'; } File::validatePath($parent . '/' . $name); $file = File::createAndStore($parent, $name, null, ''); $file->set('mime', 'text/plain'); $file->save(); }, $csrf_key, '!docs/?p=' . $parent); $tpl->assign(compact('csrf_key')); $tpl->display('docs/new_file.tpl'); | > | 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | $name = trim(f('name')); if (!strpos($name, '.')) { $name .= '.txt'; } File::validatePath($parent . '/' . $name); $name = File::filterName($name); $file = File::createAndStore($parent, $name, null, ''); $file->set('mime', 'text/plain'); $file->save(); }, $csrf_key, '!docs/?p=' . $parent); $tpl->assign(compact('csrf_key')); $tpl->display('docs/new_file.tpl'); |