Uploaded From CV. Swandhana Server
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Arcanedev\Support\Console;
|
||||
|
||||
use Illuminate\Console\Command as IlluminateCommand;
|
||||
use Symfony\Component\Console\Helper\TableSeparator;
|
||||
|
||||
/**
|
||||
* Class Command
|
||||
*
|
||||
* @author ARCANEDEV <[email protected]>
|
||||
*/
|
||||
abstract class Command extends IlluminateCommand
|
||||
{
|
||||
/* -----------------------------------------------------------------
|
||||
| Main Methods
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
*/
|
||||
abstract public function handle();
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Other Methods
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Create table separator
|
||||
*
|
||||
* @return \Symfony\Component\Console\Helper\TableSeparator
|
||||
*/
|
||||
protected function tableSeparator()
|
||||
{
|
||||
return new TableSeparator;
|
||||
}
|
||||
|
||||
/**
|
||||
* Display frame the text info.
|
||||
*
|
||||
* @param string $text
|
||||
*/
|
||||
protected function frame(string $text)
|
||||
{
|
||||
$line = '+'.str_repeat('-', strlen($text) + 4).'+';
|
||||
$this->info($line);
|
||||
$this->info("| $text |");
|
||||
$this->info($line);
|
||||
}
|
||||
}
|
||||
+184
@@ -0,0 +1,184 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Arcanedev\Support\Database;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Database\Migrations\Migration as IlluminateMigration;
|
||||
use Illuminate\Database\Schema\Builder;
|
||||
|
||||
/**
|
||||
* Class Migration
|
||||
*
|
||||
* @author ARCANEDEV <[email protected]>
|
||||
*/
|
||||
abstract class Migration extends IlluminateMigration
|
||||
{
|
||||
/* -----------------------------------------------------------------
|
||||
| Properties
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* The table name.
|
||||
*
|
||||
* @var string|null
|
||||
*/
|
||||
protected $table;
|
||||
|
||||
/**
|
||||
* The table prefix.
|
||||
*
|
||||
* @var string|null
|
||||
*/
|
||||
protected $prefix;
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Getters & Setters
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Get a schema builder instance for the connection.
|
||||
*
|
||||
* @return \Illuminate\Database\Schema\Builder
|
||||
*/
|
||||
protected function getSchemaBuilder(): Builder
|
||||
{
|
||||
/** @var \Illuminate\Database\DatabaseManager $db */
|
||||
$db = app()->make('db');
|
||||
|
||||
return $db->connection($this->hasConnection() ? $this->getConnection() : null)
|
||||
->getSchemaBuilder();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the migration connection name.
|
||||
*
|
||||
* @param string $connection
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setConnection($connection)
|
||||
{
|
||||
$this->connection = $connection;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the prefixed table name.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getTableName()
|
||||
{
|
||||
return $this->hasPrefix()
|
||||
? $this->prefix.$this->table
|
||||
: $this->table;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the table name.
|
||||
*
|
||||
* @param string $table
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setTable($table)
|
||||
{
|
||||
$this->table = $table;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the prefix name.
|
||||
*
|
||||
* @param string $prefix
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setPrefix($prefix)
|
||||
{
|
||||
$this->prefix = $prefix;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Main Methods
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Migrate to database.
|
||||
*/
|
||||
abstract public function up(): void;
|
||||
|
||||
/**
|
||||
* Rollback the migration.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
$this->getSchemaBuilder()->dropIfExists($this->getTableName());
|
||||
}
|
||||
|
||||
/**
|
||||
* Create Table Schema.
|
||||
*
|
||||
* @param \Closure $blueprint
|
||||
*/
|
||||
protected function createSchema(Closure $blueprint): void
|
||||
{
|
||||
$this->getSchemaBuilder()->create($this->getTableName(), $blueprint);
|
||||
}
|
||||
|
||||
/**
|
||||
* Modify a table on the schema.
|
||||
*
|
||||
* @param \Closure $callback
|
||||
*/
|
||||
protected function table(Closure $callback): void
|
||||
{
|
||||
$this->getSchemaBuilder()->table($this->getTableName(), $callback);
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Check Methods
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Check if connection exists.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
protected function hasConnection(): bool
|
||||
{
|
||||
return $this->isNotEmpty($this->getConnection());
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if table has prefix.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
protected function hasPrefix(): bool
|
||||
{
|
||||
return $this->isNotEmpty($this->prefix);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the value is not empty.
|
||||
*
|
||||
* @param string|null $value
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
private function isNotEmpty($value): bool
|
||||
{
|
||||
return ! (is_null($value) || empty($value));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Arcanedev\Support\Database;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
/**
|
||||
* Class PrefixedModel
|
||||
*
|
||||
* @author ARCANEDEV <[email protected]>
|
||||
*/
|
||||
abstract class PrefixedModel extends Model
|
||||
{
|
||||
/* -----------------------------------------------------------------
|
||||
| Properties
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* The table prefix.
|
||||
*
|
||||
* @var string|null
|
||||
*/
|
||||
protected $prefix;
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Getters & Setters
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Get the table associated with the model.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getTable()
|
||||
{
|
||||
return $this->getPrefix().parent::getTable();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the prefix table associated with the model.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getPrefix(): string
|
||||
{
|
||||
return $this->isPrefixed() ? $this->prefix : '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the prefix table associated with the model.
|
||||
*
|
||||
* @param string|null $prefix
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setPrefix(?string $prefix)
|
||||
{
|
||||
$this->prefix = $prefix;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Check Methods
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Check if table is prefixed.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isPrefixed(): bool
|
||||
{
|
||||
return ! is_null($this->prefix);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Arcanedev\Support\Database;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model as Eloquent;
|
||||
use Illuminate\Database\Seeder as IlluminateSeeder;
|
||||
|
||||
/**
|
||||
* Class Seeder
|
||||
*
|
||||
* @author ARCANEDEV <[email protected]>
|
||||
*/
|
||||
abstract class Seeder extends IlluminateSeeder
|
||||
{
|
||||
/* -----------------------------------------------------------------
|
||||
| Properties
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Seeder collection.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $seeds = [];
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Main Methods
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
Eloquent::unguard();
|
||||
|
||||
foreach ($this->seeds as $seed) {
|
||||
$this->call($seed);
|
||||
}
|
||||
|
||||
Eloquent::reguard();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Arcanedev\Support\Exceptions;
|
||||
|
||||
use Exception;
|
||||
|
||||
/**
|
||||
* Class PackageException
|
||||
*
|
||||
* @author ARCANEDEV <[email protected]>
|
||||
*/
|
||||
class PackageException extends Exception
|
||||
{
|
||||
public static function unspecifiedName(): self
|
||||
{
|
||||
return new static('You must specify the vendor/package name.');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,114 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Arcanedev\Support\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\{JsonResponse, Request, Response};
|
||||
|
||||
/**
|
||||
* Class VerifyJsonRequest
|
||||
*
|
||||
* @author ARCANEDEV <[email protected]>
|
||||
*/
|
||||
class VerifyJsonRequest
|
||||
{
|
||||
/* -----------------------------------------------------------------
|
||||
| Properties
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Supported request method verbs.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $methods = ['GET', 'POST', 'PUT', 'PATCH', 'DELETE'];
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Main Methods
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure $next
|
||||
* @param string|array|null $methods
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle(Request $request, Closure $next, $methods = null)
|
||||
{
|
||||
if ($this->isJsonRequestValid($request, $methods)) {
|
||||
return $next($request);
|
||||
}
|
||||
|
||||
return $this->jsonErrorResponse();
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Check Methods
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Validate json Request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param string|array|null $methods
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
protected function isJsonRequestValid(Request $request, $methods)
|
||||
{
|
||||
$methods = $this->getMethods($methods);
|
||||
|
||||
if ( ! in_array($request->method(), $methods)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $request->isJson();
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Other Methods
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Get the error as json response.
|
||||
*
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
protected function jsonErrorResponse()
|
||||
{
|
||||
$data = [
|
||||
'status' => 'error',
|
||||
'code' => $statusCode = Response::HTTP_BAD_REQUEST,
|
||||
'message' => 'Request must be JSON',
|
||||
];
|
||||
|
||||
return new JsonResponse($data, $statusCode);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get request methods.
|
||||
*
|
||||
* @param string|array|null $methods
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function getMethods($methods): array
|
||||
{
|
||||
$methods = $methods ?? $this->methods;
|
||||
|
||||
if (is_string($methods)) {
|
||||
$methods = (array) $methods;
|
||||
}
|
||||
|
||||
return is_array($methods) ? array_map('strtoupper', $methods) : [];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Arcanedev\Support\Providers;
|
||||
|
||||
use Illuminate\Foundation\Support\Providers\AuthServiceProvider;
|
||||
use Illuminate\Support\Facades\Gate;
|
||||
|
||||
/**
|
||||
* Class AuthorizationServiceProvider
|
||||
*
|
||||
* @author ARCANEDEV <[email protected]>
|
||||
*/
|
||||
abstract class AuthorizationServiceProvider extends AuthServiceProvider
|
||||
{
|
||||
/* -----------------------------------------------------------------
|
||||
| Main Methods
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Define policies.
|
||||
*
|
||||
* @param string $class
|
||||
* @param array $policies
|
||||
*/
|
||||
protected function defineMany($class, array $policies)
|
||||
{
|
||||
foreach ($policies as $ability => $method) {
|
||||
Gate::define($ability, "$class@$method");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Arcanedev\Support\Providers;
|
||||
|
||||
/**
|
||||
* Class CommandServiceProvider
|
||||
*
|
||||
* @author ARCANEDEV <[email protected]>
|
||||
*/
|
||||
abstract class CommandServiceProvider extends ServiceProvider
|
||||
{
|
||||
/* -----------------------------------------------------------------
|
||||
| Properties
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* The commands to be registered.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $commands = [];
|
||||
|
||||
/**
|
||||
* Indicates if loading of the provider is deferred.
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
protected $defer = true;
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Main Methods
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Boot the service provider.
|
||||
*/
|
||||
public function boot()
|
||||
{
|
||||
$this->commands($this->commands);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the provided commands.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function provides()
|
||||
{
|
||||
return $this->commands;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Arcanedev\Support\Providers\Concerns;
|
||||
|
||||
/**
|
||||
* Trait HasAssets
|
||||
*
|
||||
* @author ARCANEDEV <[email protected]>
|
||||
*/
|
||||
trait HasAssets
|
||||
{
|
||||
/* -----------------------------------------------------------------
|
||||
| Getters & Setters
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Get the assets path.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function getAssetsFolder(): string
|
||||
{
|
||||
return realpath($this->getBasePath().DIRECTORY_SEPARATOR.'assets');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the assets destination path.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function assetsDestinationPath(): string
|
||||
{
|
||||
return base_path('assets'.DIRECTORY_SEPARATOR.$this->getPackageName());
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Getters & Setters
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Publish the assets.
|
||||
*/
|
||||
protected function publishAssets(): void
|
||||
{
|
||||
$this->publishes([
|
||||
$this->getAssetsFolder() => $this->assetsDestinationPath(),
|
||||
], $this->getPublishedTags('assets'));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,152 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Arcanedev\Support\Providers\Concerns;
|
||||
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
/**
|
||||
* Trait HasConfig
|
||||
*
|
||||
* @author ARCANEDEV <[email protected]>
|
||||
*/
|
||||
trait HasConfig
|
||||
{
|
||||
/* -----------------------------------------------------------------
|
||||
| Properties
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Merge multiple config files into one instance (package name as root key)
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
protected $multiConfigs = false;
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Main Methods
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Get config folder.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function getConfigFolder(): string
|
||||
{
|
||||
return realpath($this->getBasePath().DIRECTORY_SEPARATOR.'config');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get config key.
|
||||
*
|
||||
* @param bool $withVendor
|
||||
* @param string $separator
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function getConfigKey(bool $withVendor = false, string $separator = '.'): string
|
||||
{
|
||||
$package = Str::slug($this->getPackageName());
|
||||
|
||||
return $withVendor
|
||||
? Str::slug($this->getVendorName()).$separator.$package
|
||||
: $package;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get config file path.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function getConfigFile(): string
|
||||
{
|
||||
return $this->getConfigFolder().DIRECTORY_SEPARATOR."{$this->getPackageName()}.php";
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the config files (paths).
|
||||
*
|
||||
* @return array|false
|
||||
*/
|
||||
protected function configFilesPaths()
|
||||
{
|
||||
return glob($this->getConfigFolder().DIRECTORY_SEPARATOR.'*.php');
|
||||
}
|
||||
|
||||
/**
|
||||
* Register configs.
|
||||
*
|
||||
* @param string $separator
|
||||
*/
|
||||
protected function registerConfig(string $separator = '.'): void
|
||||
{
|
||||
$this->multiConfigs
|
||||
? $this->registerMultipleConfigs($separator)
|
||||
: $this->registerSingleConfig();
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a single config file.
|
||||
*/
|
||||
protected function registerSingleConfig(): void
|
||||
{
|
||||
$this->mergeConfigFrom($this->getConfigFile(), $this->getConfigKey());
|
||||
}
|
||||
|
||||
/**
|
||||
* Register all package configs.
|
||||
*
|
||||
* @param string $separator
|
||||
*/
|
||||
protected function registerMultipleConfigs(string $separator = '.'): void
|
||||
{
|
||||
foreach ($this->configFilesPaths() as $path) {
|
||||
$key = $this->getConfigKey(true, $separator).$separator.basename($path, '.php');
|
||||
|
||||
$this->mergeConfigFrom($path, $key);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Publish the config file.
|
||||
*
|
||||
* @param string|null $path
|
||||
*/
|
||||
protected function publishConfig(?string $path = null): void
|
||||
{
|
||||
$this->multiConfigs
|
||||
? $this->publishMultipleConfigs()
|
||||
: $this->publishSingleConfig($path);
|
||||
}
|
||||
|
||||
/**
|
||||
* Publish a single config file.
|
||||
*
|
||||
* @param string|null $path
|
||||
*/
|
||||
protected function publishSingleConfig(?string $path = null): void
|
||||
{
|
||||
$this->publishes([
|
||||
$this->getConfigFile() => $path ?: config_path("{$this->getPackageName()}.php"),
|
||||
], $this->getPublishedTags('config'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Publish multiple config files.
|
||||
*/
|
||||
protected function publishMultipleConfigs(): void
|
||||
{
|
||||
$paths = [];
|
||||
$package = $this->getConfigKey(true, DIRECTORY_SEPARATOR);
|
||||
|
||||
foreach ($this->configFilesPaths() as $file) {
|
||||
$paths[$file] = config_path($package.DIRECTORY_SEPARATOR.basename($file));
|
||||
}
|
||||
|
||||
$this->publishes($paths, $this->getPublishedTags('config'));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Arcanedev\Support\Providers\Concerns;
|
||||
|
||||
/**
|
||||
* Trait HasFactories
|
||||
*
|
||||
* @author ARCANEDEV <[email protected]>
|
||||
*/
|
||||
trait HasFactories
|
||||
{
|
||||
/* -----------------------------------------------------------------
|
||||
| Main Methods
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Get the migrations path.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function getFactoriesPath(): string
|
||||
{
|
||||
return $this->getBasePath().DIRECTORY_SEPARATOR.'database'.DIRECTORY_SEPARATOR.'factories';
|
||||
}
|
||||
|
||||
/**
|
||||
* Publish the factories.
|
||||
*
|
||||
* @param string|null $path
|
||||
*/
|
||||
protected function publishFactories(?string $path = null): void
|
||||
{
|
||||
$this->publishes([
|
||||
$this->getFactoriesPath() => $path ?: database_path('factories'),
|
||||
], $this->getPublishedTags('factories'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Load the factories.
|
||||
*/
|
||||
protected function loadFactories(): void
|
||||
{
|
||||
$this->loadFactoriesFrom($this->getFactoriesPath());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Arcanedev\Support\Providers\Concerns;
|
||||
|
||||
/**
|
||||
* Trait HasMigrations
|
||||
*
|
||||
* @author ARCANEDEV <[email protected]>
|
||||
*/
|
||||
trait HasMigrations
|
||||
{
|
||||
/* -----------------------------------------------------------------
|
||||
| Main Methods
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Get the migrations path.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function getMigrationsPath(): string
|
||||
{
|
||||
return $this->getBasePath().DIRECTORY_SEPARATOR.'database'.DIRECTORY_SEPARATOR.'migrations';
|
||||
}
|
||||
|
||||
/**
|
||||
* Publish the migration files.
|
||||
*
|
||||
* @param string|null $path
|
||||
*/
|
||||
protected function publishMigrations(?string $path = null): void
|
||||
{
|
||||
$this->publishes([
|
||||
$this->getMigrationsPath() => $path ?: database_path('migrations')
|
||||
], $this->getPublishedTags('migrations'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Load the migrations files.
|
||||
*/
|
||||
protected function loadMigrations(): void
|
||||
{
|
||||
$this->loadMigrationsFrom($this->getMigrationsPath());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Arcanedev\Support\Providers\Concerns;
|
||||
|
||||
/**
|
||||
* Trait HasTranslations
|
||||
*
|
||||
* @author ARCANEDEV <[email protected]>
|
||||
*/
|
||||
trait HasTranslations
|
||||
{
|
||||
/* -----------------------------------------------------------------
|
||||
| Main Methods
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Get the translations' folder name.
|
||||
*/
|
||||
protected function getTranslationsFolderName(): string
|
||||
{
|
||||
return 'translations';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the translations' path.
|
||||
*/
|
||||
protected function getTranslationsPath(): string
|
||||
{
|
||||
return $this->getBasePath().DIRECTORY_SEPARATOR.$this->getTranslationsFolderName();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the destination views path.
|
||||
*/
|
||||
protected function getTranslationsDestinationPath(): string
|
||||
{
|
||||
return $this->app->langPath(
|
||||
'vendor'.DIRECTORY_SEPARATOR.$this->getPackageName()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Publish the translations.
|
||||
*/
|
||||
protected function publishTranslations(?string $path = null): void
|
||||
{
|
||||
$this->publishes([
|
||||
$this->getTranslationsPath() => $path ?: $this->getTranslationsDestinationPath(),
|
||||
], $this->getPublishedTags('translations'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Load the translations files.
|
||||
*/
|
||||
protected function loadTranslations(): void
|
||||
{
|
||||
$packagePath = $this->getTranslationsPath();
|
||||
$vendorPath = $this->getTranslationsDestinationPath();
|
||||
|
||||
$this->loadTranslationsFrom($packagePath, $this->getPackageName());
|
||||
$this->loadJsonTranslationsFrom(file_exists($vendorPath) ? $vendorPath : $packagePath);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Arcanedev\Support\Providers\Concerns;
|
||||
|
||||
/**
|
||||
* Trait HasViews
|
||||
*
|
||||
* @author ARCANEDEV <[email protected]>
|
||||
*/
|
||||
trait HasViews
|
||||
{
|
||||
/* -----------------------------------------------------------------
|
||||
| Main Methods
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Get the base views path.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function getViewsPath(): string
|
||||
{
|
||||
return $this->getBasePath().DIRECTORY_SEPARATOR.'views';
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the destination views path.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function getViewsDestinationPath(): string
|
||||
{
|
||||
return $this->app['config']['view.paths'][0].DIRECTORY_SEPARATOR.'vendor'.DIRECTORY_SEPARATOR.$this->getPackageName();
|
||||
}
|
||||
|
||||
/**
|
||||
* Publish the views.
|
||||
*
|
||||
* @param string|null $path
|
||||
*/
|
||||
protected function publishViews(?string $path = null): void
|
||||
{
|
||||
$this->publishes([
|
||||
$this->getViewsPath() => $path ?: $this->getViewsDestinationPath(),
|
||||
], $this->getPublishedTags('views'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Load the views files.
|
||||
*/
|
||||
protected function loadViews(): void
|
||||
{
|
||||
$this->loadViewsFrom($this->getViewsPath(), $this->getPackageName());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Arcanedev\Support\Providers\Concerns;
|
||||
|
||||
/**
|
||||
* Trait InteractsWithApplication
|
||||
*
|
||||
* @author ARCANEDEV <[email protected]>
|
||||
*/
|
||||
trait InteractsWithApplication
|
||||
{
|
||||
/* -----------------------------------------------------------------
|
||||
| Main Methods
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Register multiple service providers.
|
||||
*
|
||||
* @param array $providers
|
||||
*/
|
||||
protected function registerProviders(array $providers)
|
||||
{
|
||||
foreach ($providers as $provider) {
|
||||
$this->registerProvider($provider);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a service provider.
|
||||
*
|
||||
* @param \Illuminate\Support\ServiceProvider|string $provider
|
||||
* @param bool $force
|
||||
*
|
||||
* @return \Illuminate\Support\ServiceProvider
|
||||
*/
|
||||
protected function registerProvider($provider, $force = false)
|
||||
{
|
||||
return $this->app->register($provider, $force);
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a console service provider.
|
||||
*
|
||||
* @param \Illuminate\Support\ServiceProvider|string $provider
|
||||
* @param bool $force
|
||||
*
|
||||
* @return \Illuminate\Support\ServiceProvider|null
|
||||
*/
|
||||
protected function registerConsoleServiceProvider($provider, $force = false)
|
||||
{
|
||||
if ($this->app->runningInConsole()) {
|
||||
return $this->registerProvider($provider, $force);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the package's custom Artisan commands when running in console.
|
||||
*
|
||||
* @param array $commands
|
||||
*/
|
||||
protected function registerCommands(array $commands)
|
||||
{
|
||||
if ($this->app->runningInConsole()) {
|
||||
$this->commands($commands);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a binding with the container.
|
||||
*
|
||||
* @param string $abstract
|
||||
* @param \Closure|string|null $concrete
|
||||
* @param bool $shared
|
||||
*/
|
||||
protected function bind($abstract, $concrete = null, $shared = false)
|
||||
{
|
||||
$this->app->bind($abstract, $concrete, $shared);
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a shared binding in the container.
|
||||
*
|
||||
* @param string|array $abstract
|
||||
* @param \Closure|string|null $concrete
|
||||
*/
|
||||
protected function singleton($abstract, $concrete = null)
|
||||
{
|
||||
$this->app->singleton($abstract, $concrete);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Arcanedev\Support\Providers;
|
||||
|
||||
use Illuminate\Support\Facades\Event;
|
||||
|
||||
/**
|
||||
* Class EventServiceProvider
|
||||
*
|
||||
* @author ARCANEDEV <[email protected]>
|
||||
*/
|
||||
abstract class EventServiceProvider extends ServiceProvider
|
||||
{
|
||||
/* -----------------------------------------------------------------
|
||||
| Properties
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* The event handler mappings for the application.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $listen = [];
|
||||
|
||||
/**
|
||||
* The subscriber classes to register.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $subscribe = [];
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Getters & Setters
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Get the events and handlers.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function listens()
|
||||
{
|
||||
return $this->listen;
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Main Methods
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Register the application's event listeners.
|
||||
*/
|
||||
public function boot()
|
||||
{
|
||||
foreach ($this->listens() as $event => $listeners) {
|
||||
foreach ($listeners as $listener) {
|
||||
Event::listen($event, $listener);
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($this->subscribe as $subscriber) {
|
||||
Event::subscribe($subscriber);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function register()
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,194 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Arcanedev\Support\Providers;
|
||||
|
||||
use Arcanedev\Support\Exceptions\PackageException;
|
||||
use Arcanedev\Support\Providers\Concerns\{
|
||||
HasAssets, HasConfig, HasFactories, HasMigrations, HasTranslations, HasViews
|
||||
};
|
||||
use Illuminate\Contracts\Foundation\Application;
|
||||
use Illuminate\Support\Str;
|
||||
use ReflectionClass;
|
||||
|
||||
/**
|
||||
* Class PackageServiceProvider
|
||||
*
|
||||
* @author ARCANEDEV <[email protected]>
|
||||
*/
|
||||
abstract class PackageServiceProvider extends ServiceProvider
|
||||
{
|
||||
/* -----------------------------------------------------------------
|
||||
| Traits
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
use HasAssets,
|
||||
HasConfig,
|
||||
HasFactories,
|
||||
HasMigrations,
|
||||
HasTranslations,
|
||||
HasViews;
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Properties
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Vendor name.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $vendor = 'arcanedev';
|
||||
|
||||
/**
|
||||
* Package name.
|
||||
*
|
||||
* @var string|null
|
||||
*/
|
||||
protected $package;
|
||||
|
||||
/**
|
||||
* Package base path.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $basePath;
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Constructor
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Create a new service provider instance.
|
||||
*
|
||||
* @param \Illuminate\Contracts\Foundation\Application $app
|
||||
*/
|
||||
public function __construct(Application $app)
|
||||
{
|
||||
parent::__construct($app);
|
||||
|
||||
$this->basePath = $this->resolveBasePath();
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolve the base path of the package.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function resolveBasePath()
|
||||
{
|
||||
return dirname(
|
||||
(new ReflectionClass($this))->getFileName(), 2
|
||||
);
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Getters & Setters
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Get the base path of the package.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getBasePath()
|
||||
{
|
||||
return $this->basePath;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the vendor name.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected function getVendorName(): string
|
||||
{
|
||||
return $this->vendor;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the package name.
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
protected function getPackageName(): ?string
|
||||
{
|
||||
return $this->package;
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Main Methods
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Register the service provider.
|
||||
*/
|
||||
public function register()
|
||||
{
|
||||
parent::register();
|
||||
|
||||
$this->checkPackageName();
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Package Methods
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Publish all the package files.
|
||||
*/
|
||||
protected function publishAll(): void
|
||||
{
|
||||
$this->publishAssets();
|
||||
$this->publishConfig();
|
||||
$this->publishFactories();
|
||||
$this->publishMigrations();
|
||||
$this->publishTranslations();
|
||||
$this->publishViews();
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Check Methods
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Check package name.
|
||||
*
|
||||
* @throws \Arcanedev\Support\Exceptions\PackageException
|
||||
*/
|
||||
protected function checkPackageName(): void
|
||||
{
|
||||
if (empty($this->getVendorName()) || empty($this->getPackageName())) {
|
||||
throw PackageException::unspecifiedName();
|
||||
}
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Other Methods
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Get the published tags.
|
||||
*
|
||||
* @param string $tag
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function getPublishedTags(string $tag): array
|
||||
{
|
||||
$package = $this->getPackageName();
|
||||
|
||||
return array_map(function ($name) {
|
||||
return Str::slug($name);
|
||||
}, [$this->getVendorName(), $package, $tag, $package.'-'.$tag]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Arcanedev\Support\Providers;
|
||||
|
||||
use Arcanedev\Support\Routing\Concerns\RegistersRouteClasses;
|
||||
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as IlluminateServiceProvider;
|
||||
|
||||
/**
|
||||
* Class RouteServiceProvider
|
||||
*
|
||||
* @author ARCANEDEV <[email protected]>
|
||||
*/
|
||||
abstract class RouteServiceProvider extends IlluminateServiceProvider
|
||||
{
|
||||
/* -----------------------------------------------------------------
|
||||
| Traits
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
use RegistersRouteClasses;
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Arcanedev\Support\Providers;
|
||||
|
||||
use Arcanedev\Support\Providers\Concerns\InteractsWithApplication;
|
||||
use Illuminate\Support\ServiceProvider as IlluminateServiceProvider;
|
||||
|
||||
/**
|
||||
* Class ServiceProvider
|
||||
*
|
||||
* @author ARCANEDEV <[email protected]>
|
||||
*/
|
||||
abstract class ServiceProvider extends IlluminateServiceProvider
|
||||
{
|
||||
/* -----------------------------------------------------------------
|
||||
| Traits
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
use InteractsWithApplication;
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Arcanedev\Support\Providers;
|
||||
|
||||
use Illuminate\Contracts\View\Factory as ViewFactory;
|
||||
|
||||
/**
|
||||
* Class ViewComposerServiceProvider
|
||||
*
|
||||
* @author ARCANEDEV <[email protected]>
|
||||
*/
|
||||
abstract class ViewComposerServiceProvider extends ServiceProvider
|
||||
{
|
||||
/* -----------------------------------------------------------------
|
||||
| Properties
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Register the composer classes.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $composerClasses = [
|
||||
// 'view-name' => 'class'
|
||||
];
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Main Methods
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Boot the view composer service provider.
|
||||
*/
|
||||
public function boot()
|
||||
{
|
||||
$this->registerComposerClasses();
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the view composer classes.
|
||||
*/
|
||||
protected function registerComposerClasses()
|
||||
{
|
||||
foreach ($this->composerClasses as $view => $class) {
|
||||
$this->composer($view, $class);
|
||||
}
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Other Methods
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Get the view factory instance.
|
||||
*
|
||||
* @return \Illuminate\Contracts\View\Factory
|
||||
*/
|
||||
protected function view()
|
||||
{
|
||||
return $this->app->make(ViewFactory::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Register a view composer event.
|
||||
*
|
||||
* @param array|string $views
|
||||
* @param \Closure|string $callback
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function composer($views, $callback)
|
||||
{
|
||||
return $this->view()->composer($views, $callback);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Arcanedev\Support\Routing\Concerns;
|
||||
|
||||
/**
|
||||
* Trait RegistersRouteClasses
|
||||
*
|
||||
* @author ARCANEDEV <[email protected]>
|
||||
*/
|
||||
trait RegistersRouteClasses
|
||||
{
|
||||
/* -----------------------------------------------------------------
|
||||
| Main Methods
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Map route classes.
|
||||
*
|
||||
* @param iterable $routes
|
||||
*/
|
||||
protected static function mapRouteClasses(iterable $routes): void
|
||||
{
|
||||
foreach ($routes as $route) {
|
||||
if (method_exists($route, 'map')) {
|
||||
app()->call("{$route}@map");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Bind route classes.
|
||||
*
|
||||
* @param iterable $routes
|
||||
*/
|
||||
protected static function bindRouteClasses(iterable $routes): void
|
||||
{
|
||||
foreach ($routes as $route) {
|
||||
if (method_exists($route, 'bindings')) {
|
||||
app()->call("{$route}@bindings");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Arcanedev\Support\Routing;
|
||||
|
||||
use Arcanedev\Support\Routing\Concerns\RegistersRouteClasses;
|
||||
use Illuminate\Contracts\Routing\Registrar;
|
||||
use Illuminate\Routing\Router;
|
||||
use Illuminate\Support\Traits\ForwardsCalls;
|
||||
|
||||
/**
|
||||
* Class RouteRegistrar
|
||||
*
|
||||
* @author ARCANEDEV <[email protected]>
|
||||
*
|
||||
* @method \Illuminate\Routing\RouteRegistrar bind(string $key, \Closure $binder)
|
||||
* @method void map()
|
||||
* @method void bindings()
|
||||
*
|
||||
* @mixin \Illuminate\Routing\RouteRegistrar
|
||||
*/
|
||||
abstract class RouteRegistrar
|
||||
{
|
||||
/* -----------------------------------------------------------------
|
||||
| Traits
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
use RegistersRouteClasses,
|
||||
ForwardsCalls;
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Other Methods
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Pass dynamic methods onto the router instance.
|
||||
*
|
||||
* @param string $method
|
||||
* @param array $parameters
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function __call($method, $parameters)
|
||||
{
|
||||
return $this->forwardCallToRouter(
|
||||
app(Router::class), $method, $parameters
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Pass dynamic methods onto the router instance.
|
||||
*
|
||||
* @param \Illuminate\Contracts\Routing\Registrar $router
|
||||
* @param string $method
|
||||
* @param array $parameters
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
protected function forwardCallToRouter(Registrar $router, $method, $parameters)
|
||||
{
|
||||
return $this->forwardCallTo($router, $method, $parameters);
|
||||
}
|
||||
}
|
||||
+241
@@ -0,0 +1,241 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Arcanedev\Support;
|
||||
|
||||
/**
|
||||
* Class Stub
|
||||
*
|
||||
* @author ARCANEDEV <[email protected]>
|
||||
*/
|
||||
class Stub
|
||||
{
|
||||
/* -----------------------------------------------------------------
|
||||
| Properties
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* The stub path.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $path;
|
||||
|
||||
/**
|
||||
* The base path of stub file.
|
||||
*
|
||||
* @var string|null
|
||||
*/
|
||||
protected static $basePath = null;
|
||||
|
||||
/**
|
||||
* The replacements array.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $replaces = [];
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Constructor
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Create a new instance.
|
||||
*
|
||||
* @param string $path
|
||||
* @param array $replaces
|
||||
*/
|
||||
public function __construct($path, array $replaces = [])
|
||||
{
|
||||
$this->setPath($path);
|
||||
$this->setReplaces($replaces);
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Getters & Setters
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Get stub path.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getPath(): string
|
||||
{
|
||||
$path = $this->path;
|
||||
|
||||
if ( ! empty(static::$basePath)) {
|
||||
$path = static::$basePath.DIRECTORY_SEPARATOR.ltrim($path, DIRECTORY_SEPARATOR);
|
||||
}
|
||||
|
||||
return $path;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set stub path.
|
||||
*
|
||||
* @param string $path
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setPath(string $path): self
|
||||
{
|
||||
$this->path = $path;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get base path.
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public static function getBasePath(): ?string
|
||||
{
|
||||
return static::$basePath;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set base path.
|
||||
*
|
||||
* @param string $path
|
||||
*/
|
||||
public static function setBasePath(string $path)
|
||||
{
|
||||
static::$basePath = $path;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get replacements.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getReplaces(): array
|
||||
{
|
||||
return $this->replaces;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set replacements array.
|
||||
*
|
||||
* @param array $replaces
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function setReplaces(array $replaces = []): self
|
||||
{
|
||||
$this->replaces = $replaces;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set replacements array.
|
||||
*
|
||||
* @param array $replaces
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function replaces(array $replaces = []): self
|
||||
{
|
||||
return $this->setReplaces($replaces);
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Main Methods
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Create new self instance.
|
||||
*
|
||||
* @param string $path
|
||||
* @param array $replaces
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public static function create(string $path, array $replaces = []): self
|
||||
{
|
||||
return new static($path, $replaces);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create new self instance from full path.
|
||||
*
|
||||
* @param string $path
|
||||
* @param array $replaces
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public static function createFromPath(string $path, array $replaces = []): self
|
||||
{
|
||||
return tap(new static($path, $replaces), function (self $stub) {
|
||||
$stub->setBasePath('');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Get stub contents.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function render(): string
|
||||
{
|
||||
return $this->getContents();
|
||||
}
|
||||
|
||||
/**
|
||||
* Save stub to base path.
|
||||
*
|
||||
* @param string $filename
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function save(string $filename): bool
|
||||
{
|
||||
return $this->saveTo(self::getBasePath(), $filename);
|
||||
}
|
||||
|
||||
/**
|
||||
* Save stub to specific path.
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $filename
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function saveTo(string $path, string $filename): bool
|
||||
{
|
||||
return file_put_contents($path.DIRECTORY_SEPARATOR.$filename, $this->render()) !== false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get stub contents.
|
||||
*
|
||||
* @return string|mixed
|
||||
*/
|
||||
public function getContents()
|
||||
{
|
||||
$contents = file_get_contents($this->getPath());
|
||||
|
||||
foreach ($this->getReplaces() as $search => $replace) {
|
||||
$contents = str_replace('$'.strtoupper($search).'$', $replace, $contents);
|
||||
}
|
||||
|
||||
return $contents;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle magic method __toString.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function __toString(): string
|
||||
{
|
||||
return $this->render();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Arcanedev\Support\Validation;
|
||||
|
||||
use Illuminate\Contracts\Validation\Rule as RuleContract;
|
||||
|
||||
/**
|
||||
* Class Rule
|
||||
*
|
||||
* @author ARCANEDEV <[email protected]>
|
||||
*/
|
||||
abstract class Rule implements RuleContract
|
||||
{
|
||||
/* -----------------------------------------------------------------
|
||||
| Properties
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* The message that should be used when validation fails.
|
||||
*
|
||||
* @var string|array
|
||||
*/
|
||||
protected $message;
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Getters & Setters
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Set the message that should be used when the rule fails.
|
||||
*
|
||||
* @param string|array $message
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function withMessage($message)
|
||||
{
|
||||
$this->message = $message;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation error message.
|
||||
*
|
||||
* @return string|array
|
||||
*/
|
||||
public function message()
|
||||
{
|
||||
return $this->message;
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------
|
||||
| Other Methods
|
||||
| -----------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/**
|
||||
* Fail if the validation rule.
|
||||
*
|
||||
* @param string|array $message
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
protected function fail($message): bool
|
||||
{
|
||||
$this->withMessage($message);
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user