diff --git a/app/Models/User.php b/app/Models/User.php index 804799b..31519bc 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -7,7 +7,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; -class User extends Authenticatable +class User extends \TCG\Voyager\Models\User { use HasFactory, Notifiable; diff --git a/composer.json b/composer.json index 4dcf43f..f0cc455 100644 --- a/composer.json +++ b/composer.json @@ -13,7 +13,8 @@ "fruitcake/laravel-cors": "^2.0", "guzzlehttp/guzzle": "^7.0.1", "laravel/framework": "^8.0", - "laravel/tinker": "^2.0" + "laravel/tinker": "^2.0", + "tcg/voyager": "^1.4" }, "require-dev": { "facade/ignition": "^2.3.6", @@ -57,5 +58,11 @@ "post-create-project-cmd": [ "@php artisan key:generate --ansi" ] + }, + "repositories": { + "hooks": { + "type": "composer", + "url": "https://larapack.io" + } } -} +} \ No newline at end of file diff --git a/composer.lock b/composer.lock index 6504911..ae82b07 100644 --- a/composer.lock +++ b/composer.lock @@ -4,9 +4,71 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "7b56bfb5d21eaae286e532c3ed2f8941", + "content-hash": "23118d2db614daaee63f91cc7a5d422e", "packages": [ { + "name": "arrilot/laravel-widgets", + "version": "3.13.1", + "source": { + "type": "git", + "url": "https://github.com/arrilot/laravel-widgets.git", + "reference": "ae0e44ce625026ae71c6ab9259f89f13af227e37" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/arrilot/laravel-widgets/zipball/ae0e44ce625026ae71c6ab9259f89f13af227e37", + "reference": "ae0e44ce625026ae71c6ab9259f89f13af227e37", + "shasum": "" + }, + "require": { + "illuminate/cache": ">=5.5", + "illuminate/console": ">=5.5", + "illuminate/container": ">=5.5", + "illuminate/contracts": ">=5.5", + "illuminate/support": ">=5.5", + "illuminate/view": ">=5.5", + "php": ">=7.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Arrilot\\Widgets\\ServiceProvider" + ], + "aliases": { + "Widget": "Arrilot\\Widgets\\Facade", + "AsyncWidget": "Arrilot\\Widgets\\AsyncFacade" + } + } + }, + "autoload": { + "psr-4": { + "Arrilot\\Widgets\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nekrasov Ilya", + "email": "nekrasov.ilya90@gmail.com" + } + ], + "description": "A powerful alternative to view composers. Asynchronous widgets, reloadable widgets, console generator, caching - everything you can think of.", + "homepage": "https://github.com/arrilot/laravel-widgets", + "keywords": [ + "ajax", + "laravel", + "widgets" + ], + "time": "2020-09-20T19:56:38+00:00" + }, + { "name": "asm89/stack-cors", "version": "v2.0.1", "source": { @@ -111,6 +173,377 @@ "time": "2020-08-18T23:57:15+00:00" }, { + "name": "composer/ca-bundle", + "version": "1.2.8", + "source": { + "type": "git", + "url": "https://github.com/composer/ca-bundle.git", + "reference": "8a7ecad675253e4654ea05505233285377405215" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/8a7ecad675253e4654ea05505233285377405215", + "reference": "8a7ecad675253e4654ea05505233285377405215", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "ext-pcre": "*", + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8", + "psr/log": "^1.0", + "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\CaBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", + "keywords": [ + "cabundle", + "cacert", + "certificate", + "ssl", + "tls" + ], + "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-08-23T12:54:47+00:00" + }, + { + "name": "composer/composer", + "version": "1.10.15", + "source": { + "type": "git", + "url": "https://github.com/composer/composer.git", + "reference": "547c9ee73fe26c77af09a0ea16419176b1cdbd12" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/composer/zipball/547c9ee73fe26c77af09a0ea16419176b1cdbd12", + "reference": "547c9ee73fe26c77af09a0ea16419176b1cdbd12", + "shasum": "" + }, + "require": { + "composer/ca-bundle": "^1.0", + "composer/semver": "^1.0", + "composer/spdx-licenses": "^1.2", + "composer/xdebug-handler": "^1.1", + "justinrainbow/json-schema": "^5.2.10", + "php": "^5.3.2 || ^7.0", + "psr/log": "^1.0", + "seld/jsonlint": "^1.4", + "seld/phar-utils": "^1.0", + "symfony/console": "^2.7 || ^3.0 || ^4.0 || ^5.0", + "symfony/filesystem": "^2.7 || ^3.0 || ^4.0 || ^5.0", + "symfony/finder": "^2.7 || ^3.0 || ^4.0 || ^5.0", + "symfony/process": "^2.7 || ^3.0 || ^4.0 || ^5.0" + }, + "conflict": { + "symfony/console": "2.8.38" + }, + "require-dev": { + "phpspec/prophecy": "^1.10", + "symfony/phpunit-bridge": "^4.2" + }, + "suggest": { + "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", + "ext-zip": "Enabling the zip extension allows you to unzip archives", + "ext-zlib": "Allow gzip compression of HTTP requests" + }, + "bin": [ + "bin/composer" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\": "src/Composer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.", + "homepage": "https://getcomposer.org/", + "keywords": [ + "autoload", + "dependency", + "package" + ], + "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-10-13T13:59:09+00:00" + }, + { + "name": "composer/semver", + "version": "1.7.1", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "38276325bd896f90dfcfe30029aa5db40df387a7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/38276325bd896f90dfcfe30029aa5db40df387a7", + "reference": "38276325bd896f90dfcfe30029aa5db40df387a7", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.5 || ^5.0.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "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-09-27T13:13:07+00:00" + }, + { + "name": "composer/spdx-licenses", + "version": "1.5.4", + "source": { + "type": "git", + "url": "https://github.com/composer/spdx-licenses.git", + "reference": "6946f785871e2314c60b4524851f3702ea4f2223" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/6946f785871e2314c60b4524851f3702ea4f2223", + "reference": "6946f785871e2314c60b4524851f3702ea4f2223", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Spdx\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "SPDX licenses list and validation library.", + "keywords": [ + "license", + "spdx", + "validator" + ], + "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-07-15T15:35:07+00:00" + }, + { + "name": "composer/xdebug-handler", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "ebd27a9866ae8254e873866f795491f02418c5a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ebd27a9866ae8254e873866f795491f02418c5a5", + "reference": "ebd27a9866ae8254e873866f795491f02418c5a5", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0", + "psr/log": "^1.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without Xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "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-08-19T10:27:58+00:00" + }, + { "name": "dnoegel/php-xdg-base-dir", "version": "v0.1.1", "source": { @@ -144,6 +577,300 @@ "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" + ], + "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": "2.11.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/dbal.git", + "reference": "6e6903cd5e3a5be60a79439e3ee8fe126f78fe86" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/6e6903cd5e3a5be60a79439e3ee8fe126f78fe86", + "reference": "6e6903cd5e3a5be60a79439e3ee8fe126f78fe86", + "shasum": "" + }, + "require": { + "doctrine/cache": "^1.0", + "doctrine/event-manager": "^1.0", + "ext-pdo": "*", + "php": "^7.3" + }, + "require-dev": { + "doctrine/coding-standard": "^8.1", + "jetbrains/phpstorm-stubs": "^2019.1", + "nikic/php-parser": "^4.4", + "phpstan/phpstan": "^0.12.40", + "phpunit/phpunit": "^9.3", + "psalm/plugin-phpunit": "^0.10.0", + "symfony/console": "^2.0.5|^3.0|^4.0|^5.0", + "vimeo/psalm": "^3.14.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\\": "lib/Doctrine/DBAL" + } + }, + "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", + "sqlanywhere", + "sqlite", + "sqlserver", + "sqlsrv" + ], + "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-09-27T04:09: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" + ], + "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", "version": "2.0.3", "source": { @@ -832,6 +1559,291 @@ "time": "2020-09-30T07:37:11+00:00" }, { + "name": "intervention/image", + "version": "2.5.1", + "source": { + "type": "git", + "url": "https://github.com/Intervention/image.git", + "reference": "abbf18d5ab8367f96b3205ca3c89fb2fa598c69e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Intervention/image/zipball/abbf18d5ab8367f96b3205ca3c89fb2fa598c69e", + "reference": "abbf18d5ab8367f96b3205ca3c89fb2fa598c69e", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "guzzlehttp/psr7": "~1.1", + "php": ">=5.4.0" + }, + "require-dev": { + "mockery/mockery": "~0.9.2", + "phpunit/phpunit": "^4.8 || ^5.7" + }, + "suggest": { + "ext-gd": "to use GD library based image processing.", + "ext-imagick": "to use Imagick based image processing.", + "intervention/imagecache": "Caching extension for the Intervention Image library" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + }, + "laravel": { + "providers": [ + "Intervention\\Image\\ImageServiceProvider" + ], + "aliases": { + "Image": "Intervention\\Image\\Facades\\Image" + } + } + }, + "autoload": { + "psr-4": { + "Intervention\\Image\\": "src/Intervention/Image" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Oliver Vogel", + "email": "oliver@olivervogel.com", + "homepage": "http://olivervogel.com/" + } + ], + "description": "Image handling and manipulation library with support for Laravel integration", + "homepage": "http://image.intervention.io/", + "keywords": [ + "gd", + "image", + "imagick", + "laravel", + "thumbnail", + "watermark" + ], + "time": "2019-11-02T09:15:47+00:00" + }, + { + "name": "justinrainbow/json-schema", + "version": "5.2.10", + "source": { + "type": "git", + "url": "https://github.com/justinrainbow/json-schema.git", + "reference": "2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b", + "reference": "2ba9c8c862ecd5510ed16c6340aa9f6eadb4f31b", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", + "json-schema/json-schema-test-suite": "1.2.0", + "phpunit/phpunit": "^4.8.35" + }, + "bin": [ + "bin/validate-json" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "JsonSchema\\": "src/JsonSchema/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bruno Prieto Reis", + "email": "bruno.p.reis@gmail.com" + }, + { + "name": "Justin Rainbow", + "email": "justin.rainbow@gmail.com" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + }, + { + "name": "Robert Schönthal", + "email": "seroscho@googlemail.com" + } + ], + "description": "A library to validate a json schema.", + "homepage": "https://github.com/justinrainbow/json-schema", + "keywords": [ + "json", + "schema" + ], + "time": "2020-05-27T16:41:55+00:00" + }, + { + "name": "larapack/doctrine-support", + "version": "v0.1.9", + "source": { + "type": "git", + "url": "https://github.com/larapack/doctrine-support.git", + "reference": "ab6e821c467704ae91a9a944e6ebdaad6a99a294" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/larapack/doctrine-support/zipball/ab6e821c467704ae91a9a944e6ebdaad6a99a294", + "reference": "ab6e821c467704ae91a9a944e6ebdaad6a99a294", + "shasum": "" + }, + "require": { + "doctrine/dbal": "^2.5", + "illuminate/support": ">=5.3" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Larapack\\DoctrineSupport\\DoctrineSupportServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Larapack\\DoctrineSupport\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Topper", + "email": "mark@ulties.com" + } + ], + "description": "Better Doctrine Support with Laravel (Support for `enum`)", + "homepage": "https://github.com/larapack/doctrine-support", + "keywords": [ + "dbal", + "doctrine", + "enum", + "laravel", + "support" + ], + "time": "2019-09-05T13:15:40+00:00" + }, + { + "name": "larapack/hooks", + "version": "v1.0.12", + "source": { + "type": "git", + "url": "https://github.com/larapack/hooks.git", + "reference": "ce2c8c078a56036c357f26036174412cb9059f8e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/larapack/hooks/zipball/ce2c8c078a56036c357f26036174412cb9059f8e", + "reference": "ce2c8c078a56036c357f26036174412cb9059f8e", + "shasum": "" + }, + "require": { + "composer/composer": ">=1.4" + }, + "require-dev": { + "orchestra/testbench": ">=3.0", + "phpunit/phpunit": ">=5.6" + }, + "type": "library", + "autoload": { + "psr-4": { + "Larapack\\Hooks\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Topper", + "email": "mark@ulties.com" + } + ], + "description": "A Laravel Hook system", + "homepage": "https://larapack.io/", + "keywords": [ + "hooks", + "laravel" + ], + "time": "2020-03-10T13:15:02+00:00" + }, + { + "name": "larapack/voyager-hooks", + "version": "v1.2.3", + "source": { + "type": "git", + "url": "https://github.com/larapack/voyager-hooks.git", + "reference": "1a54df95b4179a9d26e9aacbd8676c8ccd78be0e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/larapack/voyager-hooks/zipball/1a54df95b4179a9d26e9aacbd8676c8ccd78be0e", + "reference": "1a54df95b4179a9d26e9aacbd8676c8ccd78be0e", + "shasum": "" + }, + "require": { + "larapack/hooks": "~1.0.2" + }, + "require-dev": { + "orchestra/testbench": ">=3.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Larapack\\VoyagerHooks\\VoyagerHooksServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Larapack\\VoyagerHooks\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Topper", + "email": "mark@ulties.com" + } + ], + "description": "Hooks integrated in Voyager", + "homepage": "https://larapack.io/", + "keywords": [ + "hooks", + "laravel", + "voyager" + ], + "time": "2020-03-04T21:35:18+00:00" + }, + { "name": "laravel/framework", "version": "v8.8.0", "source": { @@ -1059,6 +2071,60 @@ "time": "2020-08-11T19:28:08+00:00" }, { + "name": "laravel/ui", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/ui.git", + "reference": "ff6af4f0bc5a5bfe73352cdc03dbfffc4ace92d8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/ui/zipball/ff6af4f0bc5a5bfe73352cdc03dbfffc4ace92d8", + "reference": "ff6af4f0bc5a5bfe73352cdc03dbfffc4ace92d8", + "shasum": "" + }, + "require": { + "illuminate/console": "^8.0", + "illuminate/filesystem": "^8.0", + "illuminate/support": "^8.0", + "php": "^7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + }, + "laravel": { + "providers": [ + "Laravel\\Ui\\UiServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Ui\\": "src/", + "Illuminate\\Foundation\\Auth\\": "auth-backend/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel UI utilities and presets.", + "keywords": [ + "laravel", + "ui" + ], + "time": "2020-09-11T15:34:08+00:00" + }, + { "name": "league/commonmark", "version": "1.5.5", "source": { @@ -2256,6 +3322,109 @@ "time": "2020-08-18T17:17:46+00:00" }, { + "name": "seld/jsonlint", + "version": "1.8.2", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/jsonlint.git", + "reference": "590cfec960b77fd55e39b7d9246659e95dd6d337" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/590cfec960b77fd55e39b7d9246659e95dd6d337", + "reference": "590cfec960b77fd55e39b7d9246659e95dd6d337", + "shasum": "" + }, + "require": { + "php": "^5.3 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "bin": [ + "bin/jsonlint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Seld\\JsonLint\\": "src/Seld/JsonLint/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "JSON Linter", + "keywords": [ + "json", + "linter", + "parser", + "validator" + ], + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint", + "type": "tidelift" + } + ], + "time": "2020-08-25T06:56:57+00:00" + }, + { + "name": "seld/phar-utils", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/phar-utils.git", + "reference": "8674b1d84ffb47cc59a101f5d5a3b61e87d23796" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/8674b1d84ffb47cc59a101f5d5a3b61e87d23796", + "reference": "8674b1d84ffb47cc59a101f5d5a3b61e87d23796", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Seld\\PharUtils\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be" + } + ], + "description": "PHAR file format utilities, for when PHP phars you up", + "keywords": [ + "phar" + ], + "time": "2020-07-07T18:42:57+00:00" + }, + { "name": "swiftmailer/swiftmailer", "version": "v6.2.3", "source": { @@ -2776,6 +3945,70 @@ "time": "2020-09-07T11:33:47+00:00" }, { + "name": "symfony/filesystem", + "version": "v5.1.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "1a8697545a8d87b9f2f6b1d32414199cc5e20aae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/1a8697545a8d87b9f2f6b1d32414199cc5e20aae", + "reference": "1a8697545a8d87b9f2f6b1d32414199cc5e20aae", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-09-27T14:02:37+00:00" + }, + { "name": "symfony/finder", "version": "v5.1.6", "source": { @@ -4534,6 +5767,97 @@ "time": "2020-09-18T14:27:32+00:00" }, { + "name": "tcg/voyager", + "version": "1.4.x-dev", + "source": { + "type": "git", + "url": "https://github.com/the-control-group/voyager.git", + "reference": "5753a2c39fba82a8a10497efa2d38c2bb213103f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/the-control-group/voyager/zipball/5753a2c39fba82a8a10497efa2d38c2bb213103f", + "reference": "5753a2c39fba82a8a10497efa2d38c2bb213103f", + "shasum": "" + }, + "require": { + "arrilot/laravel-widgets": "^3.7", + "doctrine/dbal": "^2.5", + "ext-json": "*", + "illuminate/support": "~6.0|~7.0|~8.0", + "intervention/image": "^2.4", + "larapack/doctrine-support": "~0.1.4", + "larapack/voyager-hooks": "~1.2.1", + "laravel/ui": ">=1.0", + "league/flysystem": "~1.1|~2.0" + }, + "require-dev": { + "laravel/browser-kit-testing": ">=5.0.0", + "laravel/framework": "~6.0|~7.0|~8.0", + "orchestra/testbench": ">=4.0", + "orchestra/testbench-browser-kit": ">=4.0", + "phpunit/phpcov": ">=6.0", + "phpunit/phpunit": ">=8.0" + }, + "suggest": { + "laravel/legacy-factories": "Required to run Voyager tests with Laravel 8.x" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "TCG\\Voyager\\VoyagerServiceProvider", + "TCG\\Voyager\\Providers\\VoyagerDummyServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "TCG\\Voyager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tony Lea", + "email": "tony.lea@thecontrolgroup.com" + } + ], + "description": "A Laravel Admin Package for The Control Group to make your life easier and steer your project in the right direction", + "homepage": "https://voyager.devdojo.com/", + "keywords": [ + "admin", + "laravel", + "panel" + ], + "funding": [ + { + "url": "https://github.com/[user1", + "type": "github" + }, + { + "url": "https://github.com/emptynick]# Replace with up to 4 GitHub Sponsors-enabled usernames e.g.", + "type": "github" + }, + { + "url": "https://github.com/fletch3555", + "type": "github" + }, + { + "url": "https://github.com/tnylea", + "type": "github" + }, + { + "url": "https://github.com/user2", + "type": "github" + } + ], + "time": "2020-09-23T03:08:27+00:00" + }, + { "name": "tijsverkoyen/css-to-inline-styles", "version": "2.2.3", "source": { diff --git a/config/hooks.php b/config/hooks.php new file mode 100644 index 0000000..cb01413 --- /dev/null +++ b/config/hooks.php @@ -0,0 +1,7 @@ + env('HOOKS_ENABLED', true), + +]; diff --git a/config/voyager-hooks.php b/config/voyager-hooks.php new file mode 100644 index 0000000..a7c10e3 --- /dev/null +++ b/config/voyager-hooks.php @@ -0,0 +1,12 @@ + env('HOOKS_ENABLED', true), + + 'add-route' => true, + 'add-hook-menu-item' => true, + 'add-hook-permissions' => true, + 'publish-vendor-files' => true, + +]; diff --git a/config/voyager.php b/config/voyager.php new file mode 100644 index 0000000..052e00a --- /dev/null +++ b/config/voyager.php @@ -0,0 +1,260 @@ + [ + 'add_default_role_on_register' => true, + 'default_role' => 'user', + 'default_avatar' => 'users/default.png', + 'redirect' => '/admin', + ], + + /* + |-------------------------------------------------------------------------- + | Controllers config + |-------------------------------------------------------------------------- + | + | Here you can specify voyager controller settings + | + */ + + 'controllers' => [ + 'namespace' => 'TCG\\Voyager\\Http\\Controllers', + ], + + /* + |-------------------------------------------------------------------------- + | Models config + |-------------------------------------------------------------------------- + | + | Here you can specify default model namespace when creating BREAD. + | Must include trailing backslashes. If not defined the default application + | namespace will be used. + | + */ + + 'models' => [ + //'namespace' => 'App\\', + ], + + /* + |-------------------------------------------------------------------------- + | Storage Config + |-------------------------------------------------------------------------- + | + | Here you can specify attributes related to your application file system + | + */ + + 'storage' => [ + 'disk' => env('FILESYSTEM_DRIVER', 'public'), + ], + + /* + |-------------------------------------------------------------------------- + | Media Manager + |-------------------------------------------------------------------------- + | + | Here you can specify if media manager can show hidden files like(.gitignore) + | + */ + + 'hidden_files' => false, + + /* + |-------------------------------------------------------------------------- + | Database Config + |-------------------------------------------------------------------------- + | + | Here you can specify voyager database settings + | + */ + + 'database' => [ + 'tables' => [ + 'hidden' => ['migrations', 'data_rows', 'data_types', 'menu_items', 'password_resets', 'permission_role', 'settings'], + ], + 'autoload_migrations' => true, + ], + + /* + |-------------------------------------------------------------------------- + | Multilingual configuration + |-------------------------------------------------------------------------- + | + | Here you can specify if you want Voyager to ship with support for + | multilingual and what locales are enabled. + | + */ + + 'multilingual' => [ + /* + * Set whether or not the multilingual is supported by the BREAD input. + */ + 'enabled' => false, + + /* + * Select default language + */ + 'default' => 'en', + + /* + * Select languages that are supported. + */ + 'locales' => [ + 'en', + //'pt', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Dashboard config + |-------------------------------------------------------------------------- + | + | Here you can modify some aspects of your dashboard + | + */ + + 'dashboard' => [ + // Add custom list items to navbar's dropdown + 'navbar_items' => [ + 'voyager::generic.profile' => [ + 'route' => 'voyager.profile', + 'classes' => 'class-full-of-rum', + 'icon_class' => 'voyager-person', + ], + 'voyager::generic.home' => [ + 'route' => '/', + 'icon_class' => 'voyager-home', + 'target_blank' => true, + ], + 'voyager::generic.logout' => [ + 'route' => 'voyager.logout', + 'icon_class' => 'voyager-power', + ], + ], + + 'widgets' => [ + + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Automatic Procedures + |-------------------------------------------------------------------------- + | + | When a change happens on Voyager, we can automate some routines. + | + */ + + 'bread' => [ + // When a BREAD is added, create the Menu item using the BREAD properties. + 'add_menu_item' => true, + + // which menu add item to + 'default_menu' => 'admin', + + // When a BREAD is added, create the related Permission. + 'add_permission' => true, + + // which role add premissions to + 'default_role' => 'admin', + ], + + /* + |-------------------------------------------------------------------------- + | UI Generic Config + |-------------------------------------------------------------------------- + | + | Here you change some of the Voyager UI settings. + | + */ + + 'primary_color' => '#22A7F0', + + 'show_dev_tips' => true, // Show development tip "How To Use:" in Menu and Settings + + // Here you can specify additional assets you would like to be included in the master.blade + 'additional_css' => [ + //'css/custom.css', + ], + + 'additional_js' => [ + //'js/custom.js', + ], + + 'googlemaps' => [ + 'key' => env('GOOGLE_MAPS_KEY', ''), + 'center' => [ + 'lat' => env('GOOGLE_MAPS_DEFAULT_CENTER_LAT', '32.715738'), + 'lng' => env('GOOGLE_MAPS_DEFAULT_CENTER_LNG', '-117.161084'), + ], + 'zoom' => env('GOOGLE_MAPS_DEFAULT_ZOOM', 11), + ], + + /* + |-------------------------------------------------------------------------- + | Model specific settings + |-------------------------------------------------------------------------- + | + | Here you change some model specific settings + | + */ + + 'settings' => [ + // Enables Laravel cache method for + // storing cache values between requests + 'cache' => false, + ], + + // Activate compass when environment is NOT local + 'compass_in_production' => false, + + 'media' => [ + // The allowed mimetypes to be uploaded through the media-manager. + 'allowed_mimetypes' => '*', //All types can be uploaded + /* + 'allowed_mimetypes' => [ + 'image/jpeg', + 'image/png', + 'image/gif', + 'image/bmp', + 'video/mp4', + ], + */ + //Path for media-manager. Relative to the filesystem. + 'path' => '/', + 'show_folders' => true, + 'allow_upload' => true, + 'allow_move' => true, + 'allow_delete' => true, + 'allow_create_folder' => true, + 'allow_rename' => true, + /*'watermark' => [ + 'source' => 'watermark.png', + 'position' => 'bottom-left', + 'x' => 0, + 'y' => 0, + 'size' => 15, + ], + 'thumbnails' => [ + [ + 'type' => 'fit', + 'name' => 'fit-500', + 'width' => 500, + 'height'=> 500 + ], + ]*/ + ], +]; diff --git a/database/seeds/DataRowsTableSeeder.php b/database/seeds/DataRowsTableSeeder.php new file mode 100644 index 0000000..70a183f --- /dev/null +++ b/database/seeds/DataRowsTableSeeder.php @@ -0,0 +1,370 @@ +firstOrFail(); + $menuDataType = DataType::where('slug', 'menus')->firstOrFail(); + $roleDataType = DataType::where('slug', 'roles')->firstOrFail(); + + $dataRow = $this->dataRow($userDataType, 'id'); + if (!$dataRow->exists) { + $dataRow->fill([ + 'type' => 'number', + 'display_name' => __('voyager::seeders.data_rows.id'), + 'required' => 1, + 'browse' => 0, + 'read' => 0, + 'edit' => 0, + 'add' => 0, + 'delete' => 0, + 'order' => 1, + ])->save(); + } + + $dataRow = $this->dataRow($userDataType, 'name'); + if (!$dataRow->exists) { + $dataRow->fill([ + 'type' => 'text', + 'display_name' => __('voyager::seeders.data_rows.name'), + 'required' => 1, + 'browse' => 1, + 'read' => 1, + 'edit' => 1, + 'add' => 1, + 'delete' => 1, + 'order' => 2, + ])->save(); + } + + $dataRow = $this->dataRow($userDataType, 'email'); + if (!$dataRow->exists) { + $dataRow->fill([ + 'type' => 'text', + 'display_name' => __('voyager::seeders.data_rows.email'), + 'required' => 1, + 'browse' => 1, + 'read' => 1, + 'edit' => 1, + 'add' => 1, + 'delete' => 1, + 'order' => 3, + ])->save(); + } + + $dataRow = $this->dataRow($userDataType, 'password'); + if (!$dataRow->exists) { + $dataRow->fill([ + 'type' => 'password', + 'display_name' => __('voyager::seeders.data_rows.password'), + 'required' => 1, + 'browse' => 0, + 'read' => 0, + 'edit' => 1, + 'add' => 1, + 'delete' => 0, + 'order' => 4, + ])->save(); + } + + $dataRow = $this->dataRow($userDataType, 'remember_token'); + if (!$dataRow->exists) { + $dataRow->fill([ + 'type' => 'text', + 'display_name' => __('voyager::seeders.data_rows.remember_token'), + 'required' => 0, + 'browse' => 0, + 'read' => 0, + 'edit' => 0, + 'add' => 0, + 'delete' => 0, + 'order' => 5, + ])->save(); + } + + $dataRow = $this->dataRow($userDataType, 'created_at'); + if (!$dataRow->exists) { + $dataRow->fill([ + 'type' => 'timestamp', + 'display_name' => __('voyager::seeders.data_rows.created_at'), + 'required' => 0, + 'browse' => 1, + 'read' => 1, + 'edit' => 0, + 'add' => 0, + 'delete' => 0, + 'order' => 6, + ])->save(); + } + + $dataRow = $this->dataRow($userDataType, 'updated_at'); + if (!$dataRow->exists) { + $dataRow->fill([ + 'type' => 'timestamp', + 'display_name' => __('voyager::seeders.data_rows.updated_at'), + 'required' => 0, + 'browse' => 0, + 'read' => 0, + 'edit' => 0, + 'add' => 0, + 'delete' => 0, + 'order' => 7, + ])->save(); + } + + $dataRow = $this->dataRow($userDataType, 'avatar'); + if (!$dataRow->exists) { + $dataRow->fill([ + 'type' => 'image', + 'display_name' => __('voyager::seeders.data_rows.avatar'), + 'required' => 0, + 'browse' => 1, + 'read' => 1, + 'edit' => 1, + 'add' => 1, + 'delete' => 1, + 'order' => 8, + ])->save(); + } + + $dataRow = $this->dataRow($userDataType, 'user_belongsto_role_relationship'); + if (!$dataRow->exists) { + $dataRow->fill([ + 'type' => 'relationship', + 'display_name' => __('voyager::seeders.data_rows.role'), + 'required' => 0, + 'browse' => 1, + 'read' => 1, + 'edit' => 1, + 'add' => 1, + 'delete' => 0, + 'details' => [ + 'model' => 'TCG\\Voyager\\Models\\Role', + 'table' => 'roles', + 'type' => 'belongsTo', + 'column' => 'role_id', + 'key' => 'id', + 'label' => 'display_name', + 'pivot_table' => 'roles', + 'pivot' => 0, + ], + 'order' => 10, + ])->save(); + } + + $dataRow = $this->dataRow($userDataType, 'user_belongstomany_role_relationship'); + if (!$dataRow->exists) { + $dataRow->fill([ + 'type' => 'relationship', + 'display_name' => 'Roles', + 'required' => 0, + 'browse' => 1, + 'read' => 1, + 'edit' => 1, + 'add' => 1, + 'delete' => 0, + 'details' => [ + 'model' => 'TCG\\Voyager\\Models\\Role', + 'table' => 'roles', + 'type' => 'belongsToMany', + 'column' => 'id', + 'key' => 'id', + 'label' => 'display_name', + 'pivot_table' => 'user_roles', + 'pivot' => '1', + 'taggable' => '0', + ], + 'order' => 11, + ])->save(); + } + + $dataRow = $this->dataRow($userDataType, 'settings'); + if (!$dataRow->exists) { + $dataRow->fill([ + 'type' => 'hidden', + 'display_name' => 'Settings', + 'required' => 0, + 'browse' => 0, + 'read' => 0, + 'edit' => 0, + 'add' => 0, + 'delete' => 0, + 'order' => 12, + ])->save(); + } + + $dataRow = $this->dataRow($menuDataType, 'id'); + if (!$dataRow->exists) { + $dataRow->fill([ + 'type' => 'number', + 'display_name' => __('voyager::seeders.data_rows.id'), + 'required' => 1, + 'browse' => 0, + 'read' => 0, + 'edit' => 0, + 'add' => 0, + 'delete' => 0, + 'order' => 1, + ])->save(); + } + + $dataRow = $this->dataRow($menuDataType, 'name'); + if (!$dataRow->exists) { + $dataRow->fill([ + 'type' => 'text', + 'display_name' => __('voyager::seeders.data_rows.name'), + 'required' => 1, + 'browse' => 1, + 'read' => 1, + 'edit' => 1, + 'add' => 1, + 'delete' => 1, + 'order' => 2, + ])->save(); + } + + $dataRow = $this->dataRow($menuDataType, 'created_at'); + if (!$dataRow->exists) { + $dataRow->fill([ + 'type' => 'timestamp', + 'display_name' => __('voyager::seeders.data_rows.created_at'), + 'required' => 0, + 'browse' => 0, + 'read' => 0, + 'edit' => 0, + 'add' => 0, + 'delete' => 0, + 'order' => 3, + ])->save(); + } + + $dataRow = $this->dataRow($menuDataType, 'updated_at'); + if (!$dataRow->exists) { + $dataRow->fill([ + 'type' => 'timestamp', + 'display_name' => __('voyager::seeders.data_rows.updated_at'), + 'required' => 0, + 'browse' => 0, + 'read' => 0, + 'edit' => 0, + 'add' => 0, + 'delete' => 0, + 'order' => 4, + ])->save(); + } + + $dataRow = $this->dataRow($roleDataType, 'id'); + if (!$dataRow->exists) { + $dataRow->fill([ + 'type' => 'number', + 'display_name' => __('voyager::seeders.data_rows.id'), + 'required' => 1, + 'browse' => 0, + 'read' => 0, + 'edit' => 0, + 'add' => 0, + 'delete' => 0, + 'order' => 1, + ])->save(); + } + + $dataRow = $this->dataRow($roleDataType, 'name'); + if (!$dataRow->exists) { + $dataRow->fill([ + 'type' => 'text', + 'display_name' => __('voyager::seeders.data_rows.name'), + 'required' => 1, + 'browse' => 1, + 'read' => 1, + 'edit' => 1, + 'add' => 1, + 'delete' => 1, + 'order' => 2, + ])->save(); + } + + $dataRow = $this->dataRow($roleDataType, 'created_at'); + if (!$dataRow->exists) { + $dataRow->fill([ + 'type' => 'timestamp', + 'display_name' => __('voyager::seeders.data_rows.created_at'), + 'required' => 0, + 'browse' => 0, + 'read' => 0, + 'edit' => 0, + 'add' => 0, + 'delete' => 0, + 'order' => 3, + ])->save(); + } + + $dataRow = $this->dataRow($roleDataType, 'updated_at'); + if (!$dataRow->exists) { + $dataRow->fill([ + 'type' => 'timestamp', + 'display_name' => __('voyager::seeders.data_rows.updated_at'), + 'required' => 0, + 'browse' => 0, + 'read' => 0, + 'edit' => 0, + 'add' => 0, + 'delete' => 0, + 'order' => 4, + ])->save(); + } + + $dataRow = $this->dataRow($roleDataType, 'display_name'); + if (!$dataRow->exists) { + $dataRow->fill([ + 'type' => 'text', + 'display_name' => __('voyager::seeders.data_rows.display_name'), + 'required' => 1, + 'browse' => 1, + 'read' => 1, + 'edit' => 1, + 'add' => 1, + 'delete' => 1, + 'order' => 5, + ])->save(); + } + + $dataRow = $this->dataRow($userDataType, 'role_id'); + if (!$dataRow->exists) { + $dataRow->fill([ + 'type' => 'text', + 'display_name' => __('voyager::seeders.data_rows.role'), + 'required' => 1, + 'browse' => 1, + 'read' => 1, + 'edit' => 1, + 'add' => 1, + 'delete' => 1, + 'order' => 9, + ])->save(); + } + } + + /** + * [dataRow description]. + * + * @param [type] $type [description] + * @param [type] $field [description] + * + * @return [type] [description] + */ + protected function dataRow($type, $field) + { + return DataRow::firstOrNew([ + 'data_type_id' => $type->id, + 'field' => $field, + ]); + } +} diff --git a/database/seeds/DataTypesTableSeeder.php b/database/seeds/DataTypesTableSeeder.php new file mode 100644 index 0000000..5f85444 --- /dev/null +++ b/database/seeds/DataTypesTableSeeder.php @@ -0,0 +1,69 @@ +dataType('slug', 'users'); + if (!$dataType->exists) { + $dataType->fill([ + 'name' => 'users', + 'display_name_singular' => __('voyager::seeders.data_types.user.singular'), + 'display_name_plural' => __('voyager::seeders.data_types.user.plural'), + 'icon' => 'voyager-person', + 'model_name' => 'TCG\\Voyager\\Models\\User', + 'policy_name' => 'TCG\\Voyager\\Policies\\UserPolicy', + 'controller' => 'TCG\\Voyager\\Http\\Controllers\\VoyagerUserController', + 'generate_permissions' => 1, + 'description' => '', + ])->save(); + } + + $dataType = $this->dataType('slug', 'menus'); + if (!$dataType->exists) { + $dataType->fill([ + 'name' => 'menus', + 'display_name_singular' => __('voyager::seeders.data_types.menu.singular'), + 'display_name_plural' => __('voyager::seeders.data_types.menu.plural'), + 'icon' => 'voyager-list', + 'model_name' => 'TCG\\Voyager\\Models\\Menu', + 'controller' => '', + 'generate_permissions' => 1, + 'description' => '', + ])->save(); + } + + $dataType = $this->dataType('slug', 'roles'); + if (!$dataType->exists) { + $dataType->fill([ + 'name' => 'roles', + 'display_name_singular' => __('voyager::seeders.data_types.role.singular'), + 'display_name_plural' => __('voyager::seeders.data_types.role.plural'), + 'icon' => 'voyager-lock', + 'model_name' => 'TCG\\Voyager\\Models\\Role', + 'controller' => 'TCG\\Voyager\\Http\\Controllers\\VoyagerRoleController', + 'generate_permissions' => 1, + 'description' => '', + ])->save(); + } + } + + /** + * [dataType description]. + * + * @param [type] $field [description] + * @param [type] $for [description] + * + * @return [type] [description] + */ + protected function dataType($field, $for) + { + return DataType::firstOrNew([$field => $for]); + } +} diff --git a/database/seeds/MenuItemsTableSeeder.php b/database/seeds/MenuItemsTableSeeder.php new file mode 100644 index 0000000..0a92357 --- /dev/null +++ b/database/seeds/MenuItemsTableSeeder.php @@ -0,0 +1,177 @@ +firstOrFail(); + + $menuItem = MenuItem::firstOrNew([ + 'menu_id' => $menu->id, + 'title' => __('voyager::seeders.menu_items.dashboard'), + 'url' => '', + 'route' => 'voyager.dashboard', + ]); + if (!$menuItem->exists) { + $menuItem->fill([ + 'target' => '_self', + 'icon_class' => 'voyager-boat', + 'color' => null, + 'parent_id' => null, + 'order' => 1, + ])->save(); + } + + $menuItem = MenuItem::firstOrNew([ + 'menu_id' => $menu->id, + 'title' => __('voyager::seeders.menu_items.media'), + 'url' => '', + 'route' => 'voyager.media.index', + ]); + if (!$menuItem->exists) { + $menuItem->fill([ + 'target' => '_self', + 'icon_class' => 'voyager-images', + 'color' => null, + 'parent_id' => null, + 'order' => 5, + ])->save(); + } + + $menuItem = MenuItem::firstOrNew([ + 'menu_id' => $menu->id, + 'title' => __('voyager::seeders.menu_items.users'), + 'url' => '', + 'route' => 'voyager.users.index', + ]); + if (!$menuItem->exists) { + $menuItem->fill([ + 'target' => '_self', + 'icon_class' => 'voyager-person', + 'color' => null, + 'parent_id' => null, + 'order' => 3, + ])->save(); + } + + $menuItem = MenuItem::firstOrNew([ + 'menu_id' => $menu->id, + 'title' => __('voyager::seeders.menu_items.roles'), + 'url' => '', + 'route' => 'voyager.roles.index', + ]); + if (!$menuItem->exists) { + $menuItem->fill([ + 'target' => '_self', + 'icon_class' => 'voyager-lock', + 'color' => null, + 'parent_id' => null, + 'order' => 2, + ])->save(); + } + + $toolsMenuItem = MenuItem::firstOrNew([ + 'menu_id' => $menu->id, + 'title' => __('voyager::seeders.menu_items.tools'), + 'url' => '', + ]); + if (!$toolsMenuItem->exists) { + $toolsMenuItem->fill([ + 'target' => '_self', + 'icon_class' => 'voyager-tools', + 'color' => null, + 'parent_id' => null, + 'order' => 9, + ])->save(); + } + + $menuItem = MenuItem::firstOrNew([ + 'menu_id' => $menu->id, + 'title' => __('voyager::seeders.menu_items.menu_builder'), + 'url' => '', + 'route' => 'voyager.menus.index', + ]); + if (!$menuItem->exists) { + $menuItem->fill([ + 'target' => '_self', + 'icon_class' => 'voyager-list', + 'color' => null, + 'parent_id' => $toolsMenuItem->id, + 'order' => 10, + ])->save(); + } + + $menuItem = MenuItem::firstOrNew([ + 'menu_id' => $menu->id, + 'title' => __('voyager::seeders.menu_items.database'), + 'url' => '', + 'route' => 'voyager.database.index', + ]); + if (!$menuItem->exists) { + $menuItem->fill([ + 'target' => '_self', + 'icon_class' => 'voyager-data', + 'color' => null, + 'parent_id' => $toolsMenuItem->id, + 'order' => 11, + ])->save(); + } + + $menuItem = MenuItem::firstOrNew([ + 'menu_id' => $menu->id, + 'title' => __('voyager::seeders.menu_items.compass'), + 'url' => '', + 'route' => 'voyager.compass.index', + ]); + if (!$menuItem->exists) { + $menuItem->fill([ + 'target' => '_self', + 'icon_class' => 'voyager-compass', + 'color' => null, + 'parent_id' => $toolsMenuItem->id, + 'order' => 12, + ])->save(); + } + + $menuItem = MenuItem::firstOrNew([ + 'menu_id' => $menu->id, + 'title' => __('voyager::seeders.menu_items.bread'), + 'url' => '', + 'route' => 'voyager.bread.index', + ]); + if (!$menuItem->exists) { + $menuItem->fill([ + 'target' => '_self', + 'icon_class' => 'voyager-bread', + 'color' => null, + 'parent_id' => $toolsMenuItem->id, + 'order' => 13, + ])->save(); + } + + $menuItem = MenuItem::firstOrNew([ + 'menu_id' => $menu->id, + 'title' => __('voyager::seeders.menu_items.settings'), + 'url' => '', + 'route' => 'voyager.settings.index', + ]); + if (!$menuItem->exists) { + $menuItem->fill([ + 'target' => '_self', + 'icon_class' => 'voyager-settings', + 'color' => null, + 'parent_id' => null, + 'order' => 14, + ])->save(); + } + } +} diff --git a/database/seeds/MenusTableSeeder.php b/database/seeds/MenusTableSeeder.php new file mode 100644 index 0000000..492b833 --- /dev/null +++ b/database/seeds/MenusTableSeeder.php @@ -0,0 +1,19 @@ + 'admin', + ]); + } +} diff --git a/database/seeds/PermissionRoleTableSeeder.php b/database/seeds/PermissionRoleTableSeeder.php new file mode 100644 index 0000000..9bffa6d --- /dev/null +++ b/database/seeds/PermissionRoleTableSeeder.php @@ -0,0 +1,24 @@ +firstOrFail(); + + $permissions = Permission::all(); + + $role->permissions()->sync( + $permissions->pluck('id')->all() + ); + } +} diff --git a/database/seeds/PermissionsTableSeeder.php b/database/seeds/PermissionsTableSeeder.php new file mode 100644 index 0000000..996ee45 --- /dev/null +++ b/database/seeds/PermissionsTableSeeder.php @@ -0,0 +1,36 @@ + $key, + 'table_name' => null, + ]); + } + + Permission::generateFor('menus'); + + Permission::generateFor('roles'); + + Permission::generateFor('users'); + + Permission::generateFor('settings'); + } +} diff --git a/database/seeds/RolesTableSeeder.php b/database/seeds/RolesTableSeeder.php new file mode 100644 index 0000000..b8534e6 --- /dev/null +++ b/database/seeds/RolesTableSeeder.php @@ -0,0 +1,27 @@ + 'admin']); + if (!$role->exists) { + $role->fill([ + 'display_name' => __('voyager::seeders.roles.admin'), + ])->save(); + } + + $role = Role::firstOrNew(['name' => 'user']); + if (!$role->exists) { + $role->fill([ + 'display_name' => __('voyager::seeders.roles.user'), + ])->save(); + } + } +} diff --git a/database/seeds/SettingsTableSeeder.php b/database/seeds/SettingsTableSeeder.php new file mode 100644 index 0000000..3eb8c8e --- /dev/null +++ b/database/seeds/SettingsTableSeeder.php @@ -0,0 +1,145 @@ +findSetting('site.title'); + if (!$setting->exists) { + $setting->fill([ + 'display_name' => __('voyager::seeders.settings.site.title'), + 'value' => __('voyager::seeders.settings.site.title'), + 'details' => '', + 'type' => 'text', + 'order' => 1, + 'group' => 'Site', + ])->save(); + } + + $setting = $this->findSetting('site.description'); + if (!$setting->exists) { + $setting->fill([ + 'display_name' => __('voyager::seeders.settings.site.description'), + 'value' => __('voyager::seeders.settings.site.description'), + 'details' => '', + 'type' => 'text', + 'order' => 2, + 'group' => 'Site', + ])->save(); + } + + $setting = $this->findSetting('site.logo'); + if (!$setting->exists) { + $setting->fill([ + 'display_name' => __('voyager::seeders.settings.site.logo'), + 'value' => '', + 'details' => '', + 'type' => 'image', + 'order' => 3, + 'group' => 'Site', + ])->save(); + } + + $setting = $this->findSetting('site.google_analytics_tracking_id'); + if (!$setting->exists) { + $setting->fill([ + 'display_name' => __('voyager::seeders.settings.site.google_analytics_tracking_id'), + 'value' => '', + 'details' => '', + 'type' => 'text', + 'order' => 4, + 'group' => 'Site', + ])->save(); + } + + $setting = $this->findSetting('admin.bg_image'); + if (!$setting->exists) { + $setting->fill([ + 'display_name' => __('voyager::seeders.settings.admin.background_image'), + 'value' => '', + 'details' => '', + 'type' => 'image', + 'order' => 5, + 'group' => 'Admin', + ])->save(); + } + + $setting = $this->findSetting('admin.title'); + if (!$setting->exists) { + $setting->fill([ + 'display_name' => __('voyager::seeders.settings.admin.title'), + 'value' => 'Voyager', + 'details' => '', + 'type' => 'text', + 'order' => 1, + 'group' => 'Admin', + ])->save(); + } + + $setting = $this->findSetting('admin.description'); + if (!$setting->exists) { + $setting->fill([ + 'display_name' => __('voyager::seeders.settings.admin.description'), + 'value' => __('voyager::seeders.settings.admin.description_value'), + 'details' => '', + 'type' => 'text', + 'order' => 2, + 'group' => 'Admin', + ])->save(); + } + + $setting = $this->findSetting('admin.loader'); + if (!$setting->exists) { + $setting->fill([ + 'display_name' => __('voyager::seeders.settings.admin.loader'), + 'value' => '', + 'details' => '', + 'type' => 'image', + 'order' => 3, + 'group' => 'Admin', + ])->save(); + } + + $setting = $this->findSetting('admin.icon_image'); + if (!$setting->exists) { + $setting->fill([ + 'display_name' => __('voyager::seeders.settings.admin.icon_image'), + 'value' => '', + 'details' => '', + 'type' => 'image', + 'order' => 4, + 'group' => 'Admin', + ])->save(); + } + + $setting = $this->findSetting('admin.google_analytics_client_id'); + if (!$setting->exists) { + $setting->fill([ + 'display_name' => __('voyager::seeders.settings.admin.google_analytics_client_id'), + 'value' => '', + 'details' => '', + 'type' => 'text', + 'order' => 1, + 'group' => 'Admin', + ])->save(); + } + } + + /** + * [setting description]. + * + * @param [type] $key [description] + * + * @return [type] [description] + */ + protected function findSetting($key) + { + return Setting::firstOrNew(['key' => $key]); + } +} diff --git a/database/seeds/TranslationsTableSeeder.php b/database/seeds/TranslationsTableSeeder.php new file mode 100644 index 0000000..8aeff1e --- /dev/null +++ b/database/seeds/TranslationsTableSeeder.php @@ -0,0 +1,231 @@ +dataTypesTranslations(); + $this->categoriesTranslations(); + $this->pagesTranslations(); + $this->menusTranslations(); + } + + /** + * Auto generate Categories Translations. + * + * @return void + */ + private function categoriesTranslations() + { + // Adding translations for 'categories' + // + $cat = Category::where('slug', 'category-1')->firstOrFail(); + if ($cat->exists) { + $this->trans('pt', $this->arr(['categories', 'slug'], $cat->id), 'categoria-1'); + $this->trans('pt', $this->arr(['categories', 'name'], $cat->id), 'Categoria 1'); + } + $cat = Category::where('slug', 'category-2')->firstOrFail(); + if ($cat->exists) { + $this->trans('pt', $this->arr(['categories', 'slug'], $cat->id), 'categoria-2'); + $this->trans('pt', $this->arr(['categories', 'name'], $cat->id), 'Categoria 2'); + } + } + + /** + * Auto generate DataTypes Translations. + * + * @return void + */ + private function dataTypesTranslations() + { + // Adding translations for 'display_name_singular' + // + $_fld = 'display_name_singular'; + $_tpl = ['data_types', $_fld]; + $dtp = DataType::where($_fld, __('voyager::seeders.data_types.post.singular'))->firstOrFail(); + if ($dtp->exists) { + $this->trans('pt', $this->arr($_tpl, $dtp->id), 'Post'); + } + $dtp = DataType::where($_fld, __('voyager::seeders.data_types.page.singular'))->firstOrFail(); + if ($dtp->exists) { + $this->trans('pt', $this->arr($_tpl, $dtp->id), 'Página'); + } + $dtp = DataType::where($_fld, __('voyager::seeders.data_types.user.singular'))->firstOrFail(); + if ($dtp->exists) { + $this->trans('pt', $this->arr($_tpl, $dtp->id), 'Utilizador'); + } + $dtp = DataType::where($_fld, __('voyager::seeders.data_types.category.singular'))->firstOrFail(); + if ($dtp->exists) { + $this->trans('pt', $this->arr($_tpl, $dtp->id), 'Categoria'); + } + $dtp = DataType::where($_fld, __('voyager::seeders.data_types.menu.singular'))->firstOrFail(); + if ($dtp->exists) { + $this->trans('pt', $this->arr($_tpl, $dtp->id), 'Menu'); + } + $dtp = DataType::where($_fld, __('voyager::seeders.data_types.role.singular'))->firstOrFail(); + if ($dtp->exists) { + $this->trans('pt', $this->arr($_tpl, $dtp->id), 'Função'); + } + + // Adding translations for 'display_name_plural' + // + $_fld = 'display_name_plural'; + $_tpl = ['data_types', $_fld]; + $dtp = DataType::where($_fld, __('voyager::seeders.data_types.post.plural'))->firstOrFail(); + if ($dtp->exists) { + $this->trans('pt', $this->arr($_tpl, $dtp->id), 'Posts'); + } + $dtp = DataType::where($_fld, __('voyager::seeders.data_types.page.plural'))->firstOrFail(); + if ($dtp->exists) { + $this->trans('pt', $this->arr($_tpl, $dtp->id), 'Páginas'); + } + $dtp = DataType::where($_fld, __('voyager::seeders.data_types.user.plural'))->firstOrFail(); + if ($dtp->exists) { + $this->trans('pt', $this->arr($_tpl, $dtp->id), 'Utilizadores'); + } + $dtp = DataType::where($_fld, __('voyager::seeders.data_types.category.plural'))->firstOrFail(); + if ($dtp->exists) { + $this->trans('pt', $this->arr($_tpl, $dtp->id), 'Categorias'); + } + $dtp = DataType::where($_fld, __('voyager::seeders.data_types.menu.plural'))->firstOrFail(); + if ($dtp->exists) { + $this->trans('pt', $this->arr($_tpl, $dtp->id), 'Menus'); + } + $dtp = DataType::where($_fld, __('voyager::seeders.data_types.role.plural'))->firstOrFail(); + if ($dtp->exists) { + $this->trans('pt', $this->arr($_tpl, $dtp->id), 'Funções'); + } + } + + /** + * Auto generate Pages Translations. + * + * @return void + */ + private function pagesTranslations() + { + $page = Page::where('slug', 'hello-world')->firstOrFail(); + if ($page->exists) { + $_arr = $this->arr(['pages', 'title'], $page->id); + $this->trans('pt', $_arr, 'Olá Mundo'); + /** + * For configuring additional languages use it e.g. + * + * ``` + * $this->trans('es', $_arr, 'hola-mundo'); + * $this->trans('de', $_arr, 'hallo-welt'); + * ``` + */ + $_arr = $this->arr(['pages', 'slug'], $page->id); + $this->trans('pt', $_arr, 'ola-mundo'); + + $_arr = $this->arr(['pages', 'body'], $page->id); + $this->trans('pt', $_arr, '

Olá Mundo. Scallywag grog swab Cat o\'nine tails scuttle rigging hardtack cable nipper Yellow Jack. Handsomely spirits knave lad killick landlubber or just lubber deadlights chantey pinnace crack Jennys tea cup. Provost long clothes black spot Yellow Jack bilged on her anchor league lateen sail case shot lee tackle.

' + ."\r\n".'

Ballast spirits fluke topmast me quarterdeck schooner landlubber or just lubber gabion belaying pin. Pinnace stern galleon starboard warp carouser to go on account dance the hempen jig jolly boat measured fer yer chains. Man-of-war fire in the hole nipperkin handsomely doubloon barkadeer Brethren of the Coast gibbet driver squiffy.

'); + } + } + + /** + * Auto generate Menus Translations. + * + * @return void + */ + private function menusTranslations() + { + $_tpl = ['menu_items', 'title']; + $_item = $this->findMenuItem(__('voyager::seeders.menu_items.dashboard')); + if ($_item->exists) { + $this->trans('pt', $this->arr($_tpl, $_item->id), 'Painel de Controle'); + } + + $_item = $this->findMenuItem(__('voyager::seeders.menu_items.media')); + if ($_item->exists) { + $this->trans('pt', $this->arr($_tpl, $_item->id), 'Media'); + } + + $_item = $this->findMenuItem(__('voyager::seeders.menu_items.posts')); + if ($_item->exists) { + $this->trans('pt', $this->arr($_tpl, $_item->id), 'Publicações'); + } + + $_item = $this->findMenuItem(__('voyager::seeders.menu_items.users')); + if ($_item->exists) { + $this->trans('pt', $this->arr($_tpl, $_item->id), 'Utilizadores'); + } + + $_item = $this->findMenuItem(__('voyager::seeders.menu_items.categories')); + if ($_item->exists) { + $this->trans('pt', $this->arr($_tpl, $_item->id), 'Categorias'); + } + + $_item = $this->findMenuItem(__('voyager::seeders.menu_items.pages')); + if ($_item->exists) { + $this->trans('pt', $this->arr($_tpl, $_item->id), 'Páginas'); + } + + $_item = $this->findMenuItem(__('voyager::seeders.menu_items.roles')); + if ($_item->exists) { + $this->trans('pt', $this->arr($_tpl, $_item->id), 'Funções'); + } + + $_item = $this->findMenuItem(__('voyager::seeders.menu_items.tools')); + if ($_item->exists) { + $this->trans('pt', $this->arr($_tpl, $_item->id), 'Ferramentas'); + } + + $_item = $this->findMenuItem(__('voyager::seeders.menu_items.menu_builder')); + if ($_item->exists) { + $this->trans('pt', $this->arr($_tpl, $_item->id), 'Menus'); + } + + $_item = $this->findMenuItem(__('voyager::seeders.menu_items.database')); + if ($_item->exists) { + $this->trans('pt', $this->arr($_tpl, $_item->id), 'Base de dados'); + } + + $_item = $this->findMenuItem(__('voyager::seeders.menu_items.settings')); + if ($_item->exists) { + $this->trans('pt', $this->arr($_tpl, $_item->id), 'Configurações'); + } + } + + private function findMenuItem($title) + { + return MenuItem::where('title', $title)->firstOrFail(); + } + + private function arr($par, $id) + { + return [ + 'table_name' => $par[0], + 'column_name' => $par[1], + 'foreign_key' => $id, + ]; + } + + private function trans($lang, $keys, $value) + { + $_t = Translation::firstOrNew(array_merge($keys, [ + 'locale' => $lang, + ])); + + if (!$_t->exists) { + $_t->fill(array_merge( + $keys, + ['value' => $value] + ))->save(); + } + } +} diff --git a/database/seeds/VoyagerDatabaseSeeder.php b/database/seeds/VoyagerDatabaseSeeder.php new file mode 100644 index 0000000..1154eb4 --- /dev/null +++ b/database/seeds/VoyagerDatabaseSeeder.php @@ -0,0 +1,28 @@ +seed('DataTypesTableSeeder'); + $this->seed('DataRowsTableSeeder'); + $this->seed('MenusTableSeeder'); + $this->seed('MenuItemsTableSeeder'); + $this->seed('RolesTableSeeder'); + $this->seed('PermissionsTableSeeder'); + $this->seed('PermissionRoleTableSeeder'); + $this->seed('SettingsTableSeeder'); + } +} diff --git a/database/seeds/VoyagerDummyDatabaseSeeder.php b/database/seeds/VoyagerDummyDatabaseSeeder.php new file mode 100644 index 0000000..1b0cae0 --- /dev/null +++ b/database/seeds/VoyagerDummyDatabaseSeeder.php @@ -0,0 +1,27 @@ +seedersPath = database_path('seeds').'/'; + $this->seed('CategoriesTableSeeder'); + $this->seed('UsersTableSeeder'); + $this->seed('PostsTableSeeder'); + $this->seed('PagesTableSeeder'); + $this->seed('TranslationsTableSeeder'); + $this->seed('PermissionRoleTableSeeder'); + } +} diff --git a/hooks/hooks.json b/hooks/hooks.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/hooks/hooks.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 69ca69e..4d6dc4b 100644 --- a/routes/web.php +++ b/routes/web.php @@ -13,12 +13,18 @@ use App\Http\Controllers\ContentController; | contains the "web" middleware group. Now create something great! | */ - -Route::get('/', function () { - return view('welcome'); +Route::get('/don', function () { + return view('don'); }); //Route::get('/content', [ContentController::class, 'index']); Route::get('/content/{path}', [ContentController::class, 'show']); +Route::get('/', [ContentController::class, 'home']); Route::get('/category/{path}', [ContentController::class, 'index']); +Route::get('/search', [ContentController::class, 'search'])->name('content.search'); + + +Route::group(['prefix' => 'admin'], function () { + Voyager::routes(); +});