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)

@include('admin.snippets.card', [ 'body' => '


'.trans('admin/fileManager.parentDirectory').'

', diff --git a/resources/views/admin/fileManager/editForm.blade.php b/resources/views/admin/fileManager/editForm.blade.php index 65bae56e..d7d0e21d 100644 --- a/resources/views/admin/fileManager/editForm.blade.php +++ b/resources/views/admin/fileManager/editForm.blade.php @@ -12,6 +12,15 @@ + + + @lang('admin/fileManager.directory') + + + + diff --git a/resources/views/admin/fileManager/newFileForm.blade.php b/resources/views/admin/fileManager/newFileForm.blade.php index 5f685dd3..00b61c44 100644 --- a/resources/views/admin/fileManager/newFileForm.blade.php +++ b/resources/views/admin/fileManager/newFileForm.blade.php @@ -5,7 +5,7 @@ @endif - + diff --git a/resources/views/admin/fileManager/overview.blade.php b/resources/views/admin/fileManager/overview.blade.php index a5cd2d0c..54d4c027 100644 --- a/resources/views/admin/fileManager/overview.blade.php +++ b/resources/views/admin/fileManager/overview.blade.php @@ -1,6 +1,6 @@ @extends('admin.layoutWithNavigation') -@if ($directory->id) +@if (!$directory->is_root) @section('pageHeading', @trans('admin/fileManager.directories', ['directory' => $directory->name])) @else @section('pageHeading', @trans('admin/fileManager.rootDirectories')) @@ -31,7 +31,7 @@
- @if ($directory->exists) + @if (!$directory->is_root)