From 0c92788bc8280f958bdeddf7ec8998d2c15dd22a Mon Sep 17 00:00:00 2001 From: Vincent Vanwaelscappel Date: Wed, 15 Feb 2023 19:36:06 +0100 Subject: [PATCH] wip #5718 @1 --- .../Operations/Files/DownloadOperation.php | 127 ++++++++++++++++ app/Models/File.php | 45 ++++-- composer.json | 7 +- composer.lock | 136 ++++++++++-------- public/images/ios/512.png | Bin 0 -> 31565 bytes public/images/ios/57.png | Bin 0 -> 2907 bytes .../crud/buttons/files/download.blade.php | 2 + .../crud/buttons/files/install.blade.php | 8 ++ 8 files changed, 249 insertions(+), 76 deletions(-) create mode 100644 app/Http/Controllers/Admin/Operations/Files/DownloadOperation.php create mode 100644 public/images/ios/512.png create mode 100644 public/images/ios/57.png create mode 100644 resources/views/vendor/backpack/crud/buttons/files/download.blade.php create mode 100644 resources/views/vendor/backpack/crud/buttons/files/install.blade.php diff --git a/app/Http/Controllers/Admin/Operations/Files/DownloadOperation.php b/app/Http/Controllers/Admin/Operations/Files/DownloadOperation.php new file mode 100644 index 000000000..8c6098015 --- /dev/null +++ b/app/Http/Controllers/Admin/Operations/Files/DownloadOperation.php @@ -0,0 +1,127 @@ +withoutMiddleware([CheckIfAdmin::class]); + Route::match(['get'], $segment . '/{hash}/{file}', $controller . '@download')->withoutMiddleware([CheckIfAdmin::class]); + + } + + protected function setupDownloadDefaults() + { + $this->crud->addButtonFromView('line', 'install', 'files.install', 'end'); + $this->crud->addButtonFromView('line', 'download', 'files.download', 'end'); + } + + protected function download($hash, $name) + { + $file = File::where('hash', $hash)->where('name', $name)->first(); + if ($file === null) { + abort(404); + } + return XSendFileController::sendfile($file->path); + } + + /** + * @throws IOException + */ + protected function manifestIpa($hash) + { + $file = File::where('hash', $hash)->first(); + if ($file === null) { + abort(404); + } + + $xml = Cache::rememberForever('ipamanifest_' . $hash, function () use ($file) { + $ipa = $file->path; + + $zip = new ZipArchive(); + $zip->open($ipa); + for ($i = 0; $i < $zip->numFiles; $i++) { + $filename = $zip->getNameIndex($i); + if (preg_match('|Payload/(.+).app/Info.plist|', $filename, $matches)) { + $idx = $i; + break; + } + } + if (!$idx) { + return; + } + + $tmp = Files::tempnam(); + file_put_contents($tmp, $zip->getFromIndex($idx)); + + $plist = new CFPropertyList($tmp); + + $infos = $plist->toArray(); + $bundle = $infos['CFBundleIdentifier']; + $appName = $infos['CFBundleDisplayName']; + $version = $infos['CFBundleVersion']; + + return ' + + + + items + + + assets + + + kind + software-package + url + ' . $file->getURL() . ' + + + kind + display-image + url + https://toolbox.fluidbook.com/images/ios/57.png + + + kind + full-size-image + url + https://toolbox.fluidbook.com/images/ios/57.png + + + metadata + + bundle-identifier + ' . $bundle . ' + bundle-version + ' . $version . ' + kind + software + title + ' . $appName . ' + + + + +'; + }); + + + return response($xml, 200, ['Content-type' => 'application/xml']); + + + } + +} + diff --git a/app/Models/File.php b/app/Models/File.php index 6e8b8934a..1df51800f 100644 --- a/app/Models/File.php +++ b/app/Models/File.php @@ -2,7 +2,9 @@ namespace App\Models; +use App\Http\Controllers\Admin\Operations\Files\DownloadOperation; use App\Models\Base\ToolboxModel; +use Cubist\Backpack\CubistBackpackServiceProvider; use Cubist\Backpack\Magic\Fields\Date; use Cubist\Backpack\Magic\Fields\Hidden; use Cubist\Backpack\Magic\Fields\Integer; @@ -24,24 +26,33 @@ class File extends ToolboxModel protected static $_permissionBase = 'files'; + protected $_enableEdition = false; + protected $_enableClone = false; + + protected $primaryKey = 'hash'; + public $incrementing = false; + protected $keyType = 'string'; + + + protected $_operations = [DownloadOperation::class]; + public function setFields() { parent::setFields(); + //$this->addField('hash', Text::class, __('Hash'), ['column' => false, 'database_index' => true]); $this->addField('name', Text::class, __('Nom du fichier'), ['column' => true]); $this->addField('path', Hidden::class, __('Chemin')); $this->addField('ext', Text::class, __('Type'), ['column' => true]); $this->addField('updated_at', Date::class, __('Date'), ['column' => true]); - $this->addField('size', Integer::class, __('Taille'), ['column' => true]); + $this->addField('size', Integer::class, __('Taille'), ['column' => true, 'column_type' => 'filesize', 'column_view_namespace' => CubistBackpackServiceProvider::NAMESPACE . '::columns']); $this->addField('from', \App\Fields\User::class, __('Envoyé par'), ['column' => true]); $this->addField('to', \App\Fields\User::class, __('Destiné à'), ['column' => true]); - $this->addField('hash', Hidden::class, __('Hash')); $this->addField('mtime', Hidden::class, ''); - $this->addOwnerField(['column' => false]); } - protected function getData() + protected function _getData() { /** @var User $user */ $users = User::withoutGlobalScopes()->get(); @@ -49,10 +60,7 @@ class File extends ToolboxModel foreach ($users as $user) { $this->_listFilesOfUser($user->id, $files); } - usort($files, function ($a, $b) { - return $a['mtime'] - $b['mtime']; - }); - return array_values($files); + return $files; } protected function _listFilesOfUser($id, &$files) @@ -61,11 +69,11 @@ class File extends ToolboxModel return $this->___listFilesOfUser($id); }); - foreach ($uFiles as $path => $uFile) { - if (isset($files[$path])) { + foreach ($uFiles as $hash => $uFile) { + if (isset($files[$hash])) { continue; } - $files[$path] = $uFile; + $files[$hash] = $uFile; } } @@ -101,8 +109,9 @@ class File extends ToolboxModel $date = new \DateTime(); $date->setTimestamp($mtime); + $hash = Files::hashFileAttributes($pathname); - $res[$pathname] = [ + $res[$hash] = [ 'path' => $pathname, 'name' => $file->getFilename(), 'ext' => mb_strtolower($file->getExtension()), @@ -113,13 +122,18 @@ class File extends ToolboxModel 'to' => $to, 'owner' => $id, 'mtime' => $mtime, - 'hash' => Files::hashFileAttributes($pathname), + 'hash' => $hash, ]; } return $res; } + public function showPrimaryColumn() + { + return false; + } + public static function addOwnerClause(Builder $builder) { @@ -134,4 +148,9 @@ class File extends ToolboxModel } $builder->whereIn(static::$_ownerAttribute, backpack_user()->getManagedUsers()); } + + public function getURL() + { + return config('url', 'https://toolbox.fluidbook.com') . '/file/' . $this->hash . '/' . $this->name; + } } diff --git a/composer.json b/composer.json index 1b1f00797..7b3c9bf6e 100644 --- a/composer.json +++ b/composer.json @@ -46,12 +46,12 @@ "mxl/laravel-job": "^1.3", "nyholm/psr7": "^1.5", "php-ffmpeg/php-ffmpeg": "^0.18.0", + "rodneyrehm/plist": "^2.0", "rustici-software/scormcloud-api-v2-client-php": "^2.0", "symfony/http-client": "^v6.0" }, "require-dev": { "facade/ignition": "^2.17", - "fzaninotto/faker": "^1.9", "mockery/mockery": "^1.5", "nunomaduro/collision": "^4.3", "phpunit/phpunit": "^8.5", @@ -62,7 +62,10 @@ "config": { "optimize-autoloader": true, "preferred-install": "dist", - "sort-packages": true + "sort-packages": true, + "allow-plugins": { + "php-http/discovery": true + } }, "extra": { "laravel": { diff --git a/composer.lock b/composer.lock index 49ba241da..237ff04de 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "3841d2420cde41846464f40adf52e325", + "content-hash": "9e1d830868759266a700df2a00576cf8", "packages": [ { "name": "ahmadshah/lucy", @@ -1660,13 +1660,13 @@ "source": { "type": "git", "url": "git://git.cubedesigners.com/cubist_cms-back.git", - "reference": "3cbabfd839e1ee1449dfe53050e2f5537d0dd7fd" + "reference": "541015ec6f5b6838d5ac59fbfef12aac086311e7" }, "dist": { "type": "tar", - "url": "https://composer.cubedesigners.com/dist/cubist/cms-back/cubist-cms-back-dev-master-37b21b.tar", - "reference": "3cbabfd839e1ee1449dfe53050e2f5537d0dd7fd", - "shasum": "a5d02527b1621e284024d141f3d71634cd90d7fb" + "url": "https://composer.cubedesigners.com/dist/cubist/cms-back/cubist-cms-back-dev-master-0f74fc.tar", + "reference": "541015ec6f5b6838d5ac59fbfef12aac086311e7", + "shasum": "3adce0eeb2370518325f7ca2ab03f99d6d724267" }, "require": { "backpack/backupmanager": "^3.0", @@ -1747,7 +1747,7 @@ } ], "description": "Cubist Backpack extension", - "time": "2023-02-15T09:41:45+00:00" + "time": "2023-02-15T15:17:43+00:00" }, { "name": "cubist/cms-front", @@ -8381,6 +8381,75 @@ ], "time": "2022-02-11T10:27:51+00:00" }, + { + "name": "rodneyrehm/plist", + "version": "v2.0.3", + "source": { + "type": "git", + "url": "https://github.com/TECLIB/CFPropertyList.git", + "reference": "eb1f97cc44427359be9f09e617d68eef57707617" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TECLIB/CFPropertyList/zipball/eb1f97cc44427359be9f09e617d68eef57707617", + "reference": "eb1f97cc44427359be9f09e617d68eef57707617", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.0", + "squizlabs/php_codesniffer": "^3.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "CFPropertyList\\": "src/CFPropertyList/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Kruse", + "email": "cjk@wwwtech.de", + "role": "developer" + }, + { + "name": "Rodney Rehm", + "email": "mail+github@rodneyrehm.de", + "role": "developer" + }, + { + "name": "Thierry Bugier", + "email": "tbugier@teclib.com", + "role": "developer" + } + ], + "description": "Library for reading and writing Apple's CFPropertyList (plist) files in XML as well as binary format.", + "homepage": "https://github.com/TECLIB/CFPropertyList", + "keywords": [ + "CFPropertyList", + "Core Foundation", + "apple", + "binary", + "plist", + "xml" + ], + "support": { + "docs": "http://teclib.github.io/CFPropertyList/howtos/", + "email": "contact@teclib.com", + "issues": "https://github.com/TECLIB/CFPropertyList/issues", + "rss": "https://teclib.github.io/CFPropertyList/feed.xml", + "source": "https://github.com/TECLIB/CFPropertyList" + }, + "time": "2021-12-01T18:24:28+00:00" + }, { "name": "rustici-software/scormcloud-api-v2-client-php", "version": "2.1.0", @@ -13173,61 +13242,6 @@ ], "time": "2022-11-02T16:23:29+00:00" }, - { - "name": "fzaninotto/faker", - "version": "v1.9.2", - "source": { - "type": "git", - "url": "https://github.com/fzaninotto/Faker.git", - "reference": "848d8125239d7dbf8ab25cb7f054f1a630e68c2e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/848d8125239d7dbf8ab25cb7f054f1a630e68c2e", - "reference": "848d8125239d7dbf8ab25cb7f054f1a630e68c2e", - "shasum": "" - }, - "require": { - "php": "^5.3.3 || ^7.0" - }, - "require-dev": { - "ext-intl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7", - "squizlabs/php_codesniffer": "^2.9.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.9-dev" - } - }, - "autoload": { - "psr-4": { - "Faker\\": "src/Faker/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "François Zaninotto" - } - ], - "description": "Faker is a PHP library that generates fake data for you.", - "keywords": [ - "data", - "faker", - "fixtures" - ], - "support": { - "issues": "https://github.com/fzaninotto/Faker/issues", - "source": "https://github.com/fzaninotto/Faker/tree/v1.9.2" - }, - "abandoned": true, - "time": "2020-12-11T09:56:16+00:00" - }, { "name": "hamcrest/hamcrest-php", "version": "v2.0.1", diff --git a/public/images/ios/512.png b/public/images/ios/512.png new file mode 100644 index 0000000000000000000000000000000000000000..197673eec21ada101ff0a83985e8ee21376f897a GIT binary patch literal 31565 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 {{__('Télécharger')}} diff --git a/resources/views/vendor/backpack/crud/buttons/files/install.blade.php b/resources/views/vendor/backpack/crud/buttons/files/install.blade.php new file mode 100644 index 000000000..3533677a5 --- /dev/null +++ b/resources/views/vendor/backpack/crud/buttons/files/install.blade.php @@ -0,0 +1,8 @@ +@if($entry->ext==='apk') + {{__('Installer')}} +@elseif($entry->ext==='ipa') + {{__('Installer')}} +@endif -- 2.39.5