diff --git a/app/CMS/Helpers/RootDirectory.php b/app/CMS/Helpers/RootDirectory.php new file mode 100644 index 00000000..c0a4c88f --- /dev/null +++ b/app/CMS/Helpers/RootDirectory.php @@ -0,0 +1,49 @@ +name = 'Root'; + $directory->is_root = true; + $directory->save(); + + Directory::whereNull('parent_id') + ->where('is_root', false) + ->update(['parent_id' => $directory->id]); + + File::where('directory_id', null) + ->update(['directory_id' => $directory->id]); + + return $directory; + } + + /** + * Get root directory + * + * @return Directory + */ + public static function get() + { + self::$directory = Directory::where('is_root', true) + ->first(); + + if (is_null(self::$directory)) { + self::$directory = self::create(); + } + + return self::$directory; + } +} diff --git a/app/CMS/Repositories/FileManager/Directory.php b/app/CMS/Repositories/FileManager/Directory.php index 0a262fdd..96083fab 100644 --- a/app/CMS/Repositories/FileManager/Directory.php +++ b/app/CMS/Repositories/FileManager/Directory.php @@ -1,7 +1,9 @@ where('parent_id', $directoryId) ->exists(); } + + /** + * @param DirectoryModel $directory + * + * @return \Illuminate\Database\Eloquent\Relations\HasMany + */ + public function getAllSubdirectories(DirectoryModel &$directory) + { + if (!$directory->exists) { + $directory = DirectoryModel::where('is_root', true) + ->first(); + + if (is_null($directory)) { + $directory = RootDirectory::get(); + } + } + + $subdirectories = $directory->allSubdirectories(); + + return $subdirectories; + } } \ No newline at end of file diff --git a/app/Http/Controllers/Admin/FileManager/EditUploadedFile.php b/app/Http/Controllers/Admin/FileManager/EditUploadedFile.php index 78886163..374f4dcf 100644 --- a/app/Http/Controllers/Admin/FileManager/EditUploadedFile.php +++ b/app/Http/Controllers/Admin/FileManager/EditUploadedFile.php @@ -2,13 +2,13 @@ namespace App\Http\Controllers\Admin\FileManager; -use App\Events\EditFile; use App\CMS\Helpers\FileManager; +use App\CMS\Helpers\RootDirectory; +use App\Events\EditFile; use App\Http\Controllers\Admin\Controller; use App\Http\Requests\EditUploadedFileRequest; use App\Models\FileManager\File; use Illuminate\Support\Facades\Event; -use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; class EditUploadedFile extends Controller { @@ -17,14 +17,18 @@ class EditUploadedFile extends Controller * * Render edit form for displaying details and updating given file * - * @param int $id file id + * @param File $file * * @return \Illuminate\Contracts\View\Factory|\Illuminate\Http\RedirectResponse|\Illuminate\View\View + * @internal param int $id file id + * */ public function show(File $file) { + $root = RootDirectory::get(); return view('admin.fileManager.edit', [ 'file' => $file, + 'root' => $root, 'extraInfo' => FileManager::getAdditionalInfo($file) ]); } @@ -48,6 +52,7 @@ class EditUploadedFile extends Controller $file->name = $request->name; $file->keywords = $request->keywords; $file->description = $request->description; + $file->directory_id = $request->directory_id; $file->save(); // fire action diff --git a/app/Http/Controllers/Admin/FileManager/UploadFile.php b/app/Http/Controllers/Admin/FileManager/UploadFile.php index 144f41b1..3c4a7933 100644 --- a/app/Http/Controllers/Admin/FileManager/UploadFile.php +++ b/app/Http/Controllers/Admin/FileManager/UploadFile.php @@ -27,7 +27,7 @@ class UploadFile extends Controller * * @param Request $request * - * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\RedirectResponse + * @return \Illuminate\Contracts\View\Factory|\Illuminate\Http\RedirectResponse|\Illuminate\View\View */ public function store(Request $request) { diff --git a/app/Http/Controllers/Admin/FileManager/UploadedFilesOverview.php b/app/Http/Controllers/Admin/FileManager/UploadedFilesOverview.php index 55c3a69e..29612d5f 100644 --- a/app/Http/Controllers/Admin/FileManager/UploadedFilesOverview.php +++ b/app/Http/Controllers/Admin/FileManager/UploadedFilesOverview.php @@ -1,12 +1,28 @@ directoryRepository = $directoryRepository; + } + /** * List of all files and directories * @@ -19,13 +35,9 @@ class UploadedFilesOverview extends Controller // include hidden directories? $includeHidden = Input::get('hidden'); - if (!$directory->exists) { - $subdirectories = Directory::whereNull('parent_id'); - } else { - $subdirectories = $directory->allSubdirectories(); - } + $subdirectories = $this->directoryRepository->getAllSubdirectories($directory); - if ($includeHidden === false) { + if (!$includeHidden) { $subdirectories = $subdirectories->where('hidden', false); } diff --git a/app/Models/FileManager/Directory.php b/app/Models/FileManager/Directory.php index e98fdd07..86d581c2 100644 --- a/app/Models/FileManager/Directory.php +++ b/app/Models/FileManager/Directory.php @@ -3,6 +3,7 @@ namespace App\Models\FileManager; use Illuminate\Database\Eloquent\Model; +use Psy\Exception\ErrorException; class Directory extends Model { @@ -17,7 +18,16 @@ class Directory extends Model 'user_id', 'hidden' ]; + protected $casts = [ + 'hidden' => 'bool', + 'is_root' => 'bool' + ]; + /** + * Files in directory + * + * @return \Illuminate\Database\Eloquent\Relations\HasMany + */ public function files() { return $this->hasMany(File::class); @@ -30,14 +40,7 @@ class Directory extends Model */ public function allSubdirectories() { - $subdirectories = $this->hasMany(Directory::class, 'parent_id', 'id'); - - // todo fix this ugly hack! statement above produces WHERE parent_id IS NOT NULL and parent_id IS NULL when selecting subdirectories from root/none directory - if (is_null($this->id)) { - $subdirectories = $subdirectories->orWhereNull('parent_id'); - } - - return $subdirectories; + return $this->hasMany(Directory::class, 'parent_id', 'id'); } public function subdirectories() @@ -47,4 +50,14 @@ class Directory extends Model return $subdirectories; } + + public function delete() + { + // try to prevent from deleting root folder + if ($this->is_root == true) { + throw new ErrorException('Cannot delete root folder!'); + } + + return parent::delete(); + } } diff --git a/app/Models/FileManager/File.php b/app/Models/FileManager/File.php index 3f4f8156..dcedea6d 100644 --- a/app/Models/FileManager/File.php +++ b/app/Models/FileManager/File.php @@ -28,9 +28,9 @@ class File extends Model 'user_id', 'file_size', 'mime_type', - 'hash_algorith', + 'hash_algorithm', 'name', - 'file_size' + 'file_hash' ]; public function directory() diff --git a/app/Models/FileManager/ModelTraits/File.php b/app/Models/FileManager/ModelTraits/File.php index a35fa861..759c6bf6 100644 --- a/app/Models/FileManager/ModelTraits/File.php +++ b/app/Models/FileManager/ModelTraits/File.php @@ -4,12 +4,8 @@ namespace App\Models\FileManager\ModelTraits; use App\Events\UploadFile; use App\Models\FileManager\File as FileModel; -use Franzose\ClosureTable\Extensions\Str; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Event; -use Illuminate\Support\Facades\File as FileFacade; -use Intervention\Image\Constraint; -use Intervention\Image\Facades\Image; use Symfony\Component\HttpFoundation\File\File as SymphonyFile; use Symfony\Component\HttpFoundation\File\UploadedFile; @@ -26,7 +22,7 @@ trait File */ public function getFilename(UploadedFile $file) { - return uniqid() . '.' . $file->getClientOriginalExtension(); + return date('Y-m-').uniqid() . '.' . $file->getClientOriginalExtension(); } /** @@ -48,12 +44,6 @@ trait File // save file into physical location (local FS) $uploadedFile = $file->move($destination, $filename); - // is uploaded file an image? - if (Str::startsWith($uploadedFile->getMimeType(), 'image')) { - // yes, create thumbnail - $this->createThumbnail($uploadedFile); - } - // insert record into database $id = $this->saveIntoDatabase($uploadedFile, $data, $file->getClientOriginalName()); @@ -101,29 +91,4 @@ trait File return $newFile->id; } - - /** - * Create thumbnail of given image - * - * @param SymphonyFile $file - */ - private function createThumbnail(SymphonyFile $file) - { - // does thumbnail directory exist? - if (!is_dir(config('app.thumbnail_path'))) { - FileFacade::makeDirectory(config('app.thumbnail_path')); - } - - // get image instance - $image = Image::make(config('app.upload_path') . DIRECTORY_SEPARATOR . $file->getFilename()); - - // resize image and keep aspect ration - $image->resize(env('THUMBNAIL_WIDTH', 300), null, function (Constraint $constraint) { - $constraint->aspectRatio(); - $constraint->upsize(); - }); - - // save thumbnail with lower quality - $image->save(config('app.thumbnail_path') . DIRECTORY_SEPARATOR . $file->getFilename(), 75); - } -} \ No newline at end of file +} \ No newline at end of file diff --git a/database/migrations/2017_02_02_113138_MarkDirectoryAsRoot.php b/database/migrations/2017_02_02_113138_MarkDirectoryAsRoot.php new file mode 100644 index 00000000..7af611fd --- /dev/null +++ b/database/migrations/2017_02_02_113138_MarkDirectoryAsRoot.php @@ -0,0 +1,31 @@ +boolean('is_root')->default(false); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('directories', function (Blueprint $table) { + $table->dropColumn('is_root'); + }); + } +} diff --git a/modules/Blog/Article/Modificators/PerexCreator.php b/modules/Blog/Article/Modificators/PerexCreator.php new file mode 100644 index 00000000..ad76b0be --- /dev/null +++ b/modules/Blog/Article/Modificators/PerexCreator.php @@ -0,0 +1,60 @@ +DOMDocument = new \DOMDocument('1.0', 'UTF-8'); + $this->maxLength = 300; + $this->maxImages = 2; + $this->perex = ''; + } + + private function addHtml($node) + { + $this->perex .= strip_tags($this->DOMDocument->saveHTML($node), '
');
+ }
+
+ public function create($html)
+ {
+ if (empty($html)) {
+ return null;
+ }
+
+ $html = mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8');
+ $this->DOMDocument->loadHTML($html);
+
+ $texts = $this->DOMDocument->getElementsByTagName('p');
+ $images = $this->DOMDocument->getElementsByTagName('img');
+ $iframes = $this->DOMDocument->getElementsByTagName('iframe');
+
+ $textId = 0;
+ $imgId = 0;
+ if ($texts->length > 1) {
+ $this->addHtml($texts[$textId++]);
+ }
+
+ if (mb_strlen($this->perex) < $this->maxLength) {
+ if ($iframes->length > 0) {
+ $this->perex .= $this->DOMDocument->saveHTML($iframes[0]);
+ } elseif ($images->length > 0) {
+ while ($imgId < $images->length && $imgId < $this->maxImages) {
+ $this->perex .= $this->DOMDocument->saveHTML($images[$imgId++]);
+ }
+ } else {
+ while (mb_strlen($this->perex) < $this->maxLength && $textId < $texts->length) {
+ $this->addHtml($texts[$textId++]);
+ }
+ }
+ }
+
+ return $this->perex;
+ }
+}
\ No newline at end of file
diff --git a/resources/lang/cs/admin/fileManager.php b/resources/lang/cs/admin/fileManager.php
index 146f78f4..71776c14 100644
--- a/resources/lang/cs/admin/fileManager.php
+++ b/resources/lang/cs/admin/fileManager.php
@@ -1,42 +1,44 @@
"Vytvořit podadresář v :directory.",
- "createdAt" => "Nahráno",
- "delete" => "Smazat",
- "description" => "Popis souboru",
- "directories" => "Podadresáře v adresáři :directory",
- "directoryDescription" => "Popis",
- "directoryHidden" => "Skrytý adresář",
- "directoryName" => "Jméno adresáře",
- "edit" => "Upravit soubor :name",
- "editButton" => "Upravit",
- "editDirectory" => "Upravit adresář",
- "editDirectorySuccess" => "Úspěšně uloženo",
- "encoding" => "Kódování",
- "fileDeleted" => "Soubor smazán",
- "fileInfo" => "Informace",
- "fileSize" => "Velikost",
- "hash" => "Hash",
- "invalidFile" => "Nahrávaný soubor nelze nahrát, z nějakého důvodu není validní.",
- "keywords" => "Klíčová slova (oddělena čárkou)",
- "mime" => "MIME typ",
- "name" => "Jméno",
- "newDirectory" => "Vytvořit nový adresář",
- "newDirectorySuccess" => "Nový adresář úspěšně vytvořen",
- "newFile" => "Nový soubor",
- "noFileSpecified" => "Nebyl zvolen žádný soubor k nahrávání",
- "noFiles" => "Žádný soubor nebyl nalezen",
- "noSubdirectories" => "Žádné podadresáře",
- "originalFilename" => "Původní jméno",
- "overview" => "Seznam všech souborů",
- "parentDirectory" => "Rodičovský adresář",
- "resolution" => "Rozlišení",
- "rootDirectories" => "Kořenové adresáře",
- "selectFile" => "Vybrat soubor",
- "subdirectoryExists" => "Adresář s tímto jménem tu již eixstuje",
- "successfullyChanged" => "Úspěšně uloženo",
- "updatedAt" => "Poslední změna",
- "upload" => "Nahrát nový soubor",
- "uploadSuccessfull" => "Soubor úspěšně nahrán|:count soubory úspěšně nahrány|:count souborů úspěšně nahráno",
- "url" => "Veřejná URL",
+ "createdAt" => "Nahráno",
+ "delete" => "Smazat",
+ "description" => "Popis souboru",
+ "directories" => "Podadresáře v adresáři :directory",
+ "directoryDescription" => "Popis",
+ "directoryHidden" => "Skrytý adresář",
+ 'directory' => 'Adresář',
+ "directoryName" => "Jméno adresáře",
+ "edit" => "Upravit soubor :name",
+ "editButton" => "Upravit",
+ "editDirectory" => "Upravit adresář",
+ "editDirectorySuccess" => "Úspěšně uloženo",
+ "encoding" => "Kódování",
+ "fileDeleted" => "Soubor smazán",
+ "fileInfo" => "Informace",
+ "fileSize" => "Velikost",
+ "hash" => "Hash",
+ "invalidFile" => "Nahrávaný soubor nelze nahrát, z nějakého důvodu není validní.",
+ "keywords" => "Klíčová slova (oddělena čárkou)",
+ "mime" => "MIME typ",
+ "name" => "Jméno",
+ "newDirectory" => "Vytvořit nový adresář",
+ "newDirectorySuccess" => "Nový adresář úspěšně vytvořen",
+ "newFile" => "Nový soubor",
+ "noFileSpecified" => "Nebyl zvolen žádný soubor k nahrávání",
+ "noFiles" => "Žádný soubor nebyl nalezen",
+ "noSubdirectories" => "Žádné podadresáře",
+ "originalFilename" => "Původní jméno",
+ "overview" => "Seznam všech souborů",
+ "parentDirectory" => "Rodičovský adresář",
+ "resolution" => "Rozlišení",
+ "rootDirectories" => "Kořenové adresáře",
+ "selectFile" => "Vybrat soubor",
+ "subdirectoryExists" => "Adresář s tímto jménem tu již eixstuje",
+ "successfullyChanged" => "Úspěšně uloženo",
+ "updatedAt" => "Poslední změna",
+ "upload" => "Nahrát nový soubor",
+ "uploadSuccessfull" => "Soubor úspěšně nahrán|:count soubory úspěšně nahrány|:count souborů úspěšně nahráno",
+ "url" => "Veřejná URL",
+ 'rootDirectory' => 'Kořenový adresář'
];
diff --git a/resources/views/admin/fileManager/directories/subdirectoriesOptionList.blade.php b/resources/views/admin/fileManager/directories/subdirectoriesOptionList.blade.php
new file mode 100644
index 00000000..5cdfbdb4
--- /dev/null
+++ b/resources/views/admin/fileManager/directories/subdirectoriesOptionList.blade.php
@@ -0,0 +1,10 @@
+
+
+@if (!is_null($directory->subdirectories))
+ @foreach($directory->subdirectories as $dir)
+ @include('admin.fileManager.directories.subdirectoriesOptionList', ['directory' => $dir, 'depth' => $depth +1, 'file' => $file])
+ @endforeach
+@endif
\ No newline at end of file
diff --git a/resources/views/admin/fileManager/directories/subdirectoriesTiles.blade.php b/resources/views/admin/fileManager/directories/subdirectoriesTiles.blade.php
index 9957b44f..a4b4b95f 100644
--- a/resources/views/admin/fileManager/directories/subdirectoriesTiles.blade.php
+++ b/resources/views/admin/fileManager/directories/subdirectoriesTiles.blade.php
@@ -1,4 +1,4 @@
-@if($directory->id)
+@if (!$directory->is_root)
'.trans('admin/fileManager.parentDirectory').'