Stuff
This commit is contained in:
parent
6f4ebf6a96
commit
6f2754c7b5
12 changed files with 498 additions and 15 deletions
|
@ -13,6 +13,9 @@
|
||||||
<excludeFolder url="file://$MODULE_DIR$/vendor/brick/math" />
|
<excludeFolder url="file://$MODULE_DIR$/vendor/brick/math" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/vendor/composer" />
|
<excludeFolder url="file://$MODULE_DIR$/vendor/composer" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/vendor/dnoegel/php-xdg-base-dir" />
|
<excludeFolder url="file://$MODULE_DIR$/vendor/dnoegel/php-xdg-base-dir" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/cache" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/dbal" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/event-manager" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/inflector" />
|
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/inflector" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/instantiator" />
|
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/instantiator" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/lexer" />
|
<excludeFolder url="file://$MODULE_DIR$/vendor/doctrine/lexer" />
|
||||||
|
|
|
@ -115,6 +115,9 @@
|
||||||
<path value="$PROJECT_DIR$/vendor/gumlet/php-image-resize" />
|
<path value="$PROJECT_DIR$/vendor/gumlet/php-image-resize" />
|
||||||
<path value="$PROJECT_DIR$/vendor/erusev/parsedown" />
|
<path value="$PROJECT_DIR$/vendor/erusev/parsedown" />
|
||||||
<path value="$PROJECT_DIR$/vendor/intervention/image" />
|
<path value="$PROJECT_DIR$/vendor/intervention/image" />
|
||||||
|
<path value="$PROJECT_DIR$/vendor/doctrine/cache" />
|
||||||
|
<path value="$PROJECT_DIR$/vendor/doctrine/event-manager" />
|
||||||
|
<path value="$PROJECT_DIR$/vendor/doctrine/dbal" />
|
||||||
</include_path>
|
</include_path>
|
||||||
</component>
|
</component>
|
||||||
<component name="PhpUnit">
|
<component name="PhpUnit">
|
||||||
|
|
|
@ -41,6 +41,7 @@ class EXIFRead extends Command
|
||||||
{
|
{
|
||||||
$images = Image::query()
|
$images = Image::query()
|
||||||
->where("exifRead", "=", 0)
|
->where("exifRead", "=", 0)
|
||||||
|
->where("typ", "=", "gallery")
|
||||||
->limit(10)
|
->limit(10)
|
||||||
->get();
|
->get();
|
||||||
foreach ($images as $image) {
|
foreach ($images as $image) {
|
||||||
|
|
|
@ -194,6 +194,7 @@ class GalleryController extends BaseController
|
||||||
$image->filename = $validated["files"][0]->getClientOriginalName();
|
$image->filename = $validated["files"][0]->getClientOriginalName();
|
||||||
$image->gallery = $gallery->id;
|
$image->gallery = $gallery->id;
|
||||||
$image->size = $validated["files"][0]->getSize();
|
$image->size = $validated["files"][0]->getSize();
|
||||||
|
$image->typ = "gallery";
|
||||||
$image->saveOrFail();
|
$image->saveOrFail();
|
||||||
|
|
||||||
if(is_null($gallery->main_image)) {
|
if(is_null($gallery->main_image)) {
|
||||||
|
|
|
@ -110,7 +110,7 @@ class PublicController extends BaseController
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private function addAccessLog(int $tenant, int $gallery, int $image, string $typ, int $size) {
|
private function addAccessLog(int $tenant, int $gallery, int $image, string $typ, int $size, $type = "general") {
|
||||||
$access = new Access();
|
$access = new Access();
|
||||||
$access->year = date("Y");
|
$access->year = date("Y");
|
||||||
$access->month = date("m");
|
$access->month = date("m");
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Models\Image;
|
||||||
use App\Models\Tenant;
|
use App\Models\Tenant;
|
||||||
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
|
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
|
||||||
use Illuminate\Foundation\Bus\DispatchesJobs;
|
use Illuminate\Foundation\Bus\DispatchesJobs;
|
||||||
|
@ -52,4 +53,30 @@ class TenantController extends BaseController
|
||||||
private function switchTenantById($id) {
|
private function switchTenantById($id) {
|
||||||
session(["current_tenant_id" => $id]);
|
session(["current_tenant_id" => $id]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function watermarkView() {
|
||||||
|
return view("tenant.watermark");
|
||||||
|
}
|
||||||
|
|
||||||
|
public function watermarkSave(Request $request) {
|
||||||
|
$validated = $request->validate([
|
||||||
|
'files.0' => 'required|image'
|
||||||
|
]);
|
||||||
|
$path = $validated["files"][0]->store("watermark/".session("current_tenant_id"));
|
||||||
|
|
||||||
|
$image = new Image();
|
||||||
|
$image->path = $path;
|
||||||
|
$image->driver = env('FILESYSTEM_DRIVER', 'local');
|
||||||
|
$image->filename = $validated["files"][0]->getClientOriginalName();
|
||||||
|
$image->gallery = null;
|
||||||
|
$image->size = $validated["files"][0]->getSize();
|
||||||
|
$image->typ = "watermark";
|
||||||
|
$image->saveOrFail();
|
||||||
|
|
||||||
|
$tenant = Tenant::query()->where("id", "=", session("current_tenant_id"))->firstOrFail();
|
||||||
|
$tenant->watermark = $image->id;
|
||||||
|
$tenant->saveOrFail();
|
||||||
|
|
||||||
|
return "OK";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,17 +51,7 @@ class ResizeImage implements ShouldQueue
|
||||||
$cacheName = "cache/".$tenant->url."_".$gallery->url."_".$image->id;
|
$cacheName = "cache/".$tenant->url."_".$gallery->url."_".$image->id;
|
||||||
|
|
||||||
//Check if orginal size is cached on the current system
|
//Check if orginal size is cached on the current system
|
||||||
if (Storage::disk('cache')->exists($cacheName."_orginal")) {
|
$file = $this->getImage($tenant, $gallery, $image, $cacheName);
|
||||||
$file = Storage::disk("cache")->get($cacheName."_orginal");
|
|
||||||
} else {
|
|
||||||
$this->addAccessLog($tenant->id, $gallery->id, $image->id, "Access", $image->size);
|
|
||||||
$file = Storage::disk($image->driver)->get($image->path);
|
|
||||||
if(env("CACHE_ORGINAL"))
|
|
||||||
{
|
|
||||||
Storage::disk("cache")->put($cacheName."_orginal", $file);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
$manager = new ImageManager(array('driver' => 'imagick'));
|
$manager = new ImageManager(array('driver' => 'imagick'));
|
||||||
$img = $manager->make($file);
|
$img = $manager->make($file);
|
||||||
|
@ -81,8 +71,13 @@ class ResizeImage implements ShouldQueue
|
||||||
$img->resize($newWidth, $newHeight);
|
$img->resize($newWidth, $newHeight);
|
||||||
|
|
||||||
//$img->blur(50);
|
//$img->blur(50);
|
||||||
if($this->size > 500) {
|
if($this->size > 500 && !is_null($gallery->watermark)) {
|
||||||
$watermark = $manager->make(storage_path("logo-sample.png"));
|
|
||||||
|
$cacheNameWatermark = "";
|
||||||
|
$waterMarkImage = Image::query()->where("id", "=", $tenant->watermark);
|
||||||
|
$watermarkSource = $this->getImage($tenant, $gallery, $waterMarkImage, $cacheNameWatermark);
|
||||||
|
|
||||||
|
$watermark = $manager->make($watermarkSource);
|
||||||
if($watermark->getWidth() > $img->getWidth()) {
|
if($watermark->getWidth() > $img->getWidth()) {
|
||||||
$newWidth = $img->getWidth() / 1.2;
|
$newWidth = $img->getWidth() / 1.2;
|
||||||
$newHeight = $watermark->getHeight() * ($newWidth / $watermark->getWidth());
|
$newHeight = $watermark->getHeight() * ($newWidth / $watermark->getWidth());
|
||||||
|
@ -96,6 +91,8 @@ class ResizeImage implements ShouldQueue
|
||||||
$watermark->opacity(40);
|
$watermark->opacity(40);
|
||||||
$img->insert($watermark, 'center');
|
$img->insert($watermark, 'center');
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Reddit like balken unten
|
||||||
$img->resizeCanvas(0, 28, 'top', true, "#000000");
|
$img->resizeCanvas(0, 28, 'top', true, "#000000");
|
||||||
$img->text('www.kuvia.cloud/'.$tenant->url, $img->getWidth() - 10, $img->getHeight() - 25, function($font) {
|
$img->text('www.kuvia.cloud/'.$tenant->url, $img->getWidth() - 10, $img->getHeight() - 25, function($font) {
|
||||||
$font->file(storage_path("OpenSans-Light.ttf"));
|
$font->file(storage_path("OpenSans-Light.ttf"));
|
||||||
|
@ -105,6 +102,7 @@ class ResizeImage implements ShouldQueue
|
||||||
$font->valign('top');
|
$font->valign('top');
|
||||||
//$font->angle(45);
|
//$font->angle(45);
|
||||||
});
|
});
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -117,6 +115,19 @@ class ResizeImage implements ShouldQueue
|
||||||
//Storage::disk("cache")->put($cacheName."_".$this->size, $image->getImageAsString(IMAGETYPE_JPEG, 100));
|
//Storage::disk("cache")->put($cacheName."_".$this->size, $image->getImageAsString(IMAGETYPE_JPEG, 100));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function getImage($tenant, $gallery, $image, $cacheName) {
|
||||||
|
if (Storage::disk('cache')->exists($cacheName."_orginal")) {
|
||||||
|
$file = Storage::disk("cache")->get($cacheName."_orginal");
|
||||||
|
} else {
|
||||||
|
$this->addAccessLog($tenant->id, $gallery->id, $image->id, "Access", $image->size);
|
||||||
|
$file = Storage::disk($image->driver)->get($image->path);
|
||||||
|
if (env("CACHE_ORGINAL")) {
|
||||||
|
Storage::disk("cache")->put($cacheName . "_orginal", $file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $file;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private function addAccessLog(int $tenant, int $gallery, int $image, string $typ, int $size) {
|
private function addAccessLog(int $tenant, int $gallery, int $image, string $typ, int $size) {
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^7.3|^8.0",
|
"php": "^7.3|^8.0",
|
||||||
"almasaeed2010/adminlte": "^3.0",
|
"almasaeed2010/adminlte": "^3.0",
|
||||||
|
"doctrine/dbal": "^3.0",
|
||||||
"erusev/parsedown": "^1.7",
|
"erusev/parsedown": "^1.7",
|
||||||
"fideloper/proxy": "^4.4",
|
"fideloper/proxy": "^4.4",
|
||||||
"fruitcake/laravel-cors": "^2.0",
|
"fruitcake/laravel-cors": "^2.0",
|
||||||
|
|
380
composer.lock
generated
380
composer.lock
generated
|
@ -4,7 +4,7 @@
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "fd0ab766a01c2bf348b0108782d792d7",
|
"content-hash": "aad8aae4d553fd85e9d879debb23bada",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "almasaeed2010/adminlte",
|
"name": "almasaeed2010/adminlte",
|
||||||
|
@ -251,6 +251,79 @@
|
||||||
],
|
],
|
||||||
"time": "2020-08-18T23:57:15+00:00"
|
"time": "2020-08-18T23:57:15+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "composer/package-versions-deprecated",
|
||||||
|
"version": "1.11.99.1",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/composer/package-versions-deprecated.git",
|
||||||
|
"reference": "7413f0b55a051e89485c5cb9f765fe24bb02a7b6"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/7413f0b55a051e89485c5cb9f765fe24bb02a7b6",
|
||||||
|
"reference": "7413f0b55a051e89485c5cb9f765fe24bb02a7b6",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"composer-plugin-api": "^1.1.0 || ^2.0",
|
||||||
|
"php": "^7 || ^8"
|
||||||
|
},
|
||||||
|
"replace": {
|
||||||
|
"ocramius/package-versions": "1.11.99"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"composer/composer": "^1.9.3 || ^2.0@dev",
|
||||||
|
"ext-zip": "^1.13",
|
||||||
|
"phpunit/phpunit": "^6.5 || ^7"
|
||||||
|
},
|
||||||
|
"type": "composer-plugin",
|
||||||
|
"extra": {
|
||||||
|
"class": "PackageVersions\\Installer",
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"PackageVersions\\": "src/PackageVersions"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Marco Pivetta",
|
||||||
|
"email": "ocramius@gmail.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Jordi Boggiano",
|
||||||
|
"email": "j.boggiano@seld.be"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)",
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/composer/package-versions-deprecated/issues",
|
||||||
|
"source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.1"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://packagist.com",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/composer",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/composer/composer",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2020-11-11T10:22:58+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "dnoegel/php-xdg-base-dir",
|
"name": "dnoegel/php-xdg-base-dir",
|
||||||
"version": "v0.1.1",
|
"version": "v0.1.1",
|
||||||
|
@ -288,6 +361,311 @@
|
||||||
},
|
},
|
||||||
"time": "2019-12-04T15:06:13+00:00"
|
"time": "2019-12-04T15:06:13+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "doctrine/cache",
|
||||||
|
"version": "1.10.2",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/doctrine/cache.git",
|
||||||
|
"reference": "13e3381b25847283a91948d04640543941309727"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/doctrine/cache/zipball/13e3381b25847283a91948d04640543941309727",
|
||||||
|
"reference": "13e3381b25847283a91948d04640543941309727",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "~7.1 || ^8.0"
|
||||||
|
},
|
||||||
|
"conflict": {
|
||||||
|
"doctrine/common": ">2.2,<2.4"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"alcaeus/mongo-php-adapter": "^1.1",
|
||||||
|
"doctrine/coding-standard": "^6.0",
|
||||||
|
"mongodb/mongodb": "^1.1",
|
||||||
|
"phpunit/phpunit": "^7.0",
|
||||||
|
"predis/predis": "~1.0"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.9.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Guilherme Blanco",
|
||||||
|
"email": "guilhermeblanco@gmail.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Roman Borschel",
|
||||||
|
"email": "roman@code-factory.org"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Benjamin Eberlei",
|
||||||
|
"email": "kontakt@beberlei.de"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Jonathan Wage",
|
||||||
|
"email": "jonwage@gmail.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Johannes Schmitt",
|
||||||
|
"email": "schmittjoh@gmail.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.",
|
||||||
|
"homepage": "https://www.doctrine-project.org/projects/cache.html",
|
||||||
|
"keywords": [
|
||||||
|
"abstraction",
|
||||||
|
"apcu",
|
||||||
|
"cache",
|
||||||
|
"caching",
|
||||||
|
"couchdb",
|
||||||
|
"memcached",
|
||||||
|
"php",
|
||||||
|
"redis",
|
||||||
|
"xcache"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/doctrine/cache/issues",
|
||||||
|
"source": "https://github.com/doctrine/cache/tree/1.10.x"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://www.doctrine-project.org/sponsorship.html",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://www.patreon.com/phpdoctrine",
|
||||||
|
"type": "patreon"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2020-07-07T18:54:01+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "doctrine/dbal",
|
||||||
|
"version": "3.0.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/doctrine/dbal.git",
|
||||||
|
"reference": "ee6d1260d5cc20ec506455a585945d7bdb98662c"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/doctrine/dbal/zipball/ee6d1260d5cc20ec506455a585945d7bdb98662c",
|
||||||
|
"reference": "ee6d1260d5cc20ec506455a585945d7bdb98662c",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"composer/package-versions-deprecated": "^1.11.99",
|
||||||
|
"doctrine/cache": "^1.0",
|
||||||
|
"doctrine/event-manager": "^1.0",
|
||||||
|
"php": "^7.3 || ^8.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"doctrine/coding-standard": "^8.1",
|
||||||
|
"jetbrains/phpstorm-stubs": "^2019.1",
|
||||||
|
"phpstan/phpstan": "^0.12.40",
|
||||||
|
"phpstan/phpstan-strict-rules": "^0.12.2",
|
||||||
|
"phpunit/phpunit": "^9.4",
|
||||||
|
"psalm/plugin-phpunit": "^0.10.0",
|
||||||
|
"symfony/console": "^2.0.5|^3.0|^4.0|^5.0",
|
||||||
|
"vimeo/psalm": "^3.17.2"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"symfony/console": "For helpful console commands such as SQL execution and import of files."
|
||||||
|
},
|
||||||
|
"bin": [
|
||||||
|
"bin/doctrine-dbal"
|
||||||
|
],
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "4.0.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Doctrine\\DBAL\\": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Guilherme Blanco",
|
||||||
|
"email": "guilhermeblanco@gmail.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Roman Borschel",
|
||||||
|
"email": "roman@code-factory.org"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Benjamin Eberlei",
|
||||||
|
"email": "kontakt@beberlei.de"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Jonathan Wage",
|
||||||
|
"email": "jonwage@gmail.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.",
|
||||||
|
"homepage": "https://www.doctrine-project.org/projects/dbal.html",
|
||||||
|
"keywords": [
|
||||||
|
"abstraction",
|
||||||
|
"database",
|
||||||
|
"db2",
|
||||||
|
"dbal",
|
||||||
|
"mariadb",
|
||||||
|
"mssql",
|
||||||
|
"mysql",
|
||||||
|
"oci8",
|
||||||
|
"oracle",
|
||||||
|
"pdo",
|
||||||
|
"pgsql",
|
||||||
|
"postgresql",
|
||||||
|
"queryobject",
|
||||||
|
"sasql",
|
||||||
|
"sql",
|
||||||
|
"sqlite",
|
||||||
|
"sqlserver",
|
||||||
|
"sqlsrv"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/doctrine/dbal/issues",
|
||||||
|
"source": "https://github.com/doctrine/dbal/tree/3.0.0"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://www.doctrine-project.org/sponsorship.html",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://www.patreon.com/phpdoctrine",
|
||||||
|
"type": "patreon"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2020-11-15T18:20:41+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "doctrine/event-manager",
|
||||||
|
"version": "1.1.1",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/doctrine/event-manager.git",
|
||||||
|
"reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/doctrine/event-manager/zipball/41370af6a30faa9dc0368c4a6814d596e81aba7f",
|
||||||
|
"reference": "41370af6a30faa9dc0368c4a6814d596e81aba7f",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^7.1 || ^8.0"
|
||||||
|
},
|
||||||
|
"conflict": {
|
||||||
|
"doctrine/common": "<2.9@dev"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"doctrine/coding-standard": "^6.0",
|
||||||
|
"phpunit/phpunit": "^7.0"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.0.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Doctrine\\Common\\": "lib/Doctrine/Common"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Guilherme Blanco",
|
||||||
|
"email": "guilhermeblanco@gmail.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Roman Borschel",
|
||||||
|
"email": "roman@code-factory.org"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Benjamin Eberlei",
|
||||||
|
"email": "kontakt@beberlei.de"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Jonathan Wage",
|
||||||
|
"email": "jonwage@gmail.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Johannes Schmitt",
|
||||||
|
"email": "schmittjoh@gmail.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Marco Pivetta",
|
||||||
|
"email": "ocramius@gmail.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.",
|
||||||
|
"homepage": "https://www.doctrine-project.org/projects/event-manager.html",
|
||||||
|
"keywords": [
|
||||||
|
"event",
|
||||||
|
"event dispatcher",
|
||||||
|
"event manager",
|
||||||
|
"event system",
|
||||||
|
"events"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/doctrine/event-manager/issues",
|
||||||
|
"source": "https://github.com/doctrine/event-manager/tree/1.1.x"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://www.doctrine-project.org/sponsorship.html",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://www.patreon.com/phpdoctrine",
|
||||||
|
"type": "patreon"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2020-05-29T18:28:51+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "doctrine/inflector",
|
"name": "doctrine/inflector",
|
||||||
"version": "2.0.3",
|
"version": "2.0.3",
|
||||||
|
|
35
database/migrations/2021_01_20_192143_image_watermark.php
Normal file
35
database/migrations/2021_01_20_192143_image_watermark.php
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class ImageWatermark extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::table("images", function (Blueprint $table) {
|
||||||
|
$table->unsignedBigInteger("gallery")->nullable()->change();
|
||||||
|
$table->enum("typ", ["gallery", "watermark"])->default("gallery");
|
||||||
|
});
|
||||||
|
|
||||||
|
Schema::table("tenants", function (Blueprint $table) {
|
||||||
|
$table->unsignedBigInteger("watermark")->nullable()->default(null);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
}
|
21
resources/views/tenant/watermark.blade.php
Normal file
21
resources/views/tenant/watermark.blade.php
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
@extends('layout/template')
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
<h1>Watermark</h1>
|
||||||
|
@if ($errors->any())
|
||||||
|
<div class="alert alert-danger">
|
||||||
|
<ul>
|
||||||
|
@foreach ($errors->all() as $error)
|
||||||
|
<li>{{ $error }}</li>
|
||||||
|
@endforeach
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
<form method="post" enctype="multipart/form-data">
|
||||||
|
@csrf
|
||||||
|
<input type="file" name="files[]" class="form-control" >
|
||||||
|
<input type="submit" value="Upload Watermark" class="btn btn-outline-success">
|
||||||
|
</form>
|
||||||
|
|
||||||
|
@endsection
|
||||||
|
|
|
@ -45,6 +45,8 @@ Route::middleware([\App\Http\Middleware\TenanMiddleware::class])->group(function
|
||||||
Route::get("/g/{url}/setDefault", [\App\Http\Controllers\GalleryController::class, 'setDefault']);
|
Route::get("/g/{url}/setDefault", [\App\Http\Controllers\GalleryController::class, 'setDefault']);
|
||||||
Route::get("/g/{url}/delete", [\App\Http\Controllers\GalleryController::class, 'deleteImage']);
|
Route::get("/g/{url}/delete", [\App\Http\Controllers\GalleryController::class, 'deleteImage']);
|
||||||
Route::post("/g/{url}/save", [\App\Http\Controllers\GalleryController::class, 'saveImage']);
|
Route::post("/g/{url}/save", [\App\Http\Controllers\GalleryController::class, 'saveImage']);
|
||||||
|
Route::get("/s/watermark", [\App\Http\Controllers\TenantController::class, 'watermarkView']);
|
||||||
|
Route::post("/s/watermark", [\App\Http\Controllers\TenantController::class, 'watermarkSave']);
|
||||||
});
|
});
|
||||||
|
|
||||||
Route::get("/{name}", [\App\Http\Controllers\PublicController::class, 'listGalleriesView'])->middleware([\App\Http\Middleware\TenanMiddleware::class]);
|
Route::get("/{name}", [\App\Http\Controllers\PublicController::class, 'listGalleriesView'])->middleware([\App\Http\Middleware\TenanMiddleware::class]);
|
||||||
|
|
Loading…
Reference in a new issue