¨4.0.1¨

This commit is contained in:
¨NW¨
2023-12-03 14:07:47 +00:00
parent c08b36d1b6
commit f35052522d
1112 changed files with 43019 additions and 24987 deletions

View File

@@ -8,99 +8,124 @@ use Cartalyst\Sentinel\Laravel\Facades\Activation;
class AdminAccount
{
public function setup($data)
public function setup($request): void
{
$role = Role::create(['name' => 'Admin', 'permissions' => $this->getAdminRolePermissions()]);
$adminUser = $this->createAdminUser($request);
$this->activateAdminUser($adminUser);
$admin = User::create([
'first_name' => $data['first_name'],
'last_name' => $data['last_name'],
'email' => $data['email'],
'phone' => $data['phone'],
'password' => bcrypt($data['password']),
]);
$activation = Activation::create($admin);
Activation::complete($admin, $activation->code);
$admin->roles()->attach($role);
$adminRole = $this->createAdminRole();
$adminUser->roles()->attach($adminRole);
}
private function getAdminRolePermissions()
private function createAdminUser($request)
{
return User::create([
'first_name' => $request['admin_first_name'],
'last_name' => $request['admin_last_name'],
'email' => $request['admin_email'],
'phone' => $request['admin_phone'],
'password' => bcrypt($request['admin_password']),
]);
}
private function activateAdminUser($adminUser): void
{
$activation = Activation::create($adminUser);
Activation::complete($adminUser, $activation->code);
}
private function createAdminRole()
{
return Role::create([
'name' => 'Admin',
'permissions' => $this->getAdminRolePermissions(),
]);
}
private function getAdminRolePermissions(): array
{
return [
// users
# users
'admin.users.index' => true,
'admin.users.create' => true,
'admin.users.edit' => true,
'admin.users.destroy' => true,
// roles
# roles
'admin.roles.index' => true,
'admin.roles.create' => true,
'admin.roles.edit' => true,
'admin.roles.destroy' => true,
// products
# products
'admin.products.index' => true,
'admin.products.create' => true,
'admin.products.edit' => true,
'admin.products.destroy' => true,
// brands
# brands
'admin.brands.index' => true,
'admin.brands.create' => true,
'admin.brands.edit' => true,
'admin.brands.destroy' => true,
// attributes
# attributes
'admin.attributes.index' => true,
'admin.attributes.create' => true,
'admin.attributes.edit' => true,
'admin.attributes.destroy' => true,
// attribute sets
# attribute sets
'admin.attribute_sets.index' => true,
'admin.attribute_sets.create' => true,
'admin.attribute_sets.edit' => true,
'admin.attribute_sets.destroy' => true,
// options
#variations
'admin.variations.index' => true,
'admin.variations.create' => true,
'admin.variations.edit' => true,
'admin.variations.destroy' => true,
# options
'admin.options.index' => true,
'admin.options.create' => true,
'admin.options.edit' => true,
'admin.options.destroy' => true,
// filters
# filters
'admin.filters.index' => true,
'admin.filters.create' => true,
'admin.filters.edit' => true,
'admin.filters.destroy' => true,
// reviews
# reviews
'admin.reviews.index' => true,
'admin.reviews.create' => true,
'admin.reviews.edit' => true,
'admin.reviews.destroy' => true,
// categories
# categories
'admin.categories.index' => true,
'admin.categories.create' => true,
'admin.categories.edit' => true,
'admin.categories.destroy' => true,
// tags
# tags
'admin.tags.index' => true,
'admin.tags.create' => true,
'admin.tags.edit' => true,
'admin.tags.destroy' => true,
// orders
# orders
'admin.orders.index' => true,
'admin.orders.show' => true,
'admin.orders.edit' => true,
// flash sales
# flash sales
'admin.flash_sales.index' => true,
'admin.flash_sales.create' => true,
'admin.flash_sales.edit' => true,
'admin.flash_sales.destroy' => true,
// transactions
# transactions
'admin.transactions.index' => true,
// coupons
# coupons
'admin.coupons.index' => true,
'admin.coupons.create' => true,
'admin.coupons.edit' => true,
'admin.coupons.destroy' => true,
// menus
# menus
'admin.menus.index' => true,
'admin.menus.create' => true,
'admin.menus.edit' => true,
@@ -109,39 +134,39 @@ class AdminAccount
'admin.menu_items.create' => true,
'admin.menu_items.edit' => true,
'admin.menu_items.destroy' => true,
// Media
# Media
'admin.media.index' => true,
'admin.media.create' => true,
'admin.media.destroy' => true,
// pages
# pages
'admin.pages.index' => true,
'admin.pages.create' => true,
'admin.pages.edit' => true,
'admin.pages.destroy' => true,
// currency rates
# currency rates
'admin.currency_rates.index' => true,
'admin.currency_rates.edit' => true,
// tax
# tax
'admin.taxes.index' => true,
'admin.taxes.create' => true,
'admin.taxes.edit' => true,
'admin.taxes.destroy' => true,
// translations
# translations
'admin.translations.index' => true,
'admin.translations.edit' => true,
// appearance
# appearance
'admin.sliders.index' => true,
'admin.sliders.create' => true,
'admin.sliders.edit' => true,
'admin.sliders.destroy' => true,
// import
# import
'admin.importer.index' => true,
'admin.importer.create' => true,
// reports
# reports
'admin.reports.index' => true,
// settings
# settings
'admin.settings.edit' => true,
// storefront
# storefront
'admin.storefront.edit' => true,
];
}

View File

@@ -4,15 +4,13 @@ namespace FleetCart\Install;
use Modules\User\Entities\Role;
use Modules\Setting\Entities\Setting;
use Illuminate\Support\Facades\Artisan;
use Modules\Currency\Entities\CurrencyRate;
use Jackiedo\DotenvEditor\Facades\DotenvEditor;
class App
{
public function setup()
public function setup(): void
{
$this->generateAppKey();
$this->setEnvVariables();
$this->createCustomerRole();
$this->setAppSettings();
@@ -20,12 +18,8 @@ class App
$this->createStorageFolder();
}
private function generateAppKey()
{
Artisan::call('key:generate', ['--force' => true]);
}
private function setEnvVariables()
private function setEnvVariables(): void
{
$env = DotenvEditor::load();
@@ -37,12 +31,14 @@ class App
$env->save();
}
private function createCustomerRole()
private function createCustomerRole(): void
{
Role::create(['name' => 'Customer']);
}
private function setAppSettings()
private function setAppSettings(): void
{
Setting::setMany([
'active_theme' => 'Storefront',
@@ -58,7 +54,6 @@ class App
'supported_currencies' => ['USD'],
'default_currency' => 'USD',
'send_order_invoice_email' => false,
'store_email' => 'admin@fleetcart.test',
'newsletter_enabled' => false,
'search_engine' => 'mysql',
'local_pickup_cost' => 0,
@@ -97,12 +92,14 @@ class App
]);
}
private function createDefaultCurrencyRate()
private function createDefaultCurrencyRate(): void
{
CurrencyRate::create(['currency' => 'USD', 'rate' => 1]);
}
private function createStorageFolder()
private function createStorageFolder(): void
{
if (!is_dir(public_path('storage'))) {
mkdir(public_path('storage'));

View File

@@ -8,47 +8,51 @@ use Jackiedo\DotenvEditor\Facades\DotenvEditor;
class Database
{
public function setup($data)
public function setup($request): void
{
$this->checkDatabaseConnection($data);
$this->setEnvVariables($data);
$this->setupDatabaseConnection($request);
$this->setEnvVariables($request);
$this->migrateDatabase();
}
private function checkDatabaseConnection($data)
{
$this->setupDatabaseConnectionConfig($data);
private function setupDatabaseConnection($request): void
{
DB::purge('mysql');
$this->setupDatabaseConnectionConfig($request);
DB::connection('mysql')->reconnect();
DB::connection('mysql')->getPdo();
}
private function setupDatabaseConnectionConfig($data)
private function setupDatabaseConnectionConfig($request): void
{
config([
'database.default' => 'mysql',
'database.connections.mysql.host' => $data['host'],
'database.connections.mysql.port' => $data['port'],
'database.connections.mysql.database' => $data['database'],
'database.connections.mysql.username' => $data['username'],
'database.connections.mysql.password' => $data['password'],
'database.connections.mysql.host' => $request['db_host'],
'database.connections.mysql.port' => $request['db_port'],
'database.connections.mysql.database' => $request['db_database'],
'database.connections.mysql.username' => $request['db_username'],
'database.connections.mysql.password' => $request['db_password'],
]);
}
private function setEnvVariables($data)
private function setEnvVariables($request): void
{
$env = DotenvEditor::load();
$env->setKey('DB_HOST', $data['host']);
$env->setKey('DB_PORT', $data['port']);
$env->setKey('DB_DATABASE', $data['database']);
$env->setKey('DB_USERNAME', $data['username']);
$env->setKey('DB_PASSWORD', $data['password']);
$env->setKey('DB_HOST', $request['db_host']);
$env->setKey('DB_PORT', $request['db_port']);
$env->setKey('DB_DATABASE', $request['db_database']);
$env->setKey('DB_USERNAME', $request['db_username']);
$env->setKey('DB_PASSWORD', $request['db_password']);
$env->save();
}
private function migrateDatabase()
private function migrateDatabase(): void
{
Artisan::call('migrate', ['--force' => true]);
}

View File

@@ -0,0 +1,30 @@
<?php
namespace FleetCart\Install;
class Permission
{
public function provided(): bool
{
return collect($this->files())
->merge($this->directories())
->every(fn ($item) => $item);
}
public function files(): array
{
return [
'.env' => is_writable(base_path('.env')),
];
}
public function directories(): array
{
return [
'storage' => is_writable(storage_path()),
'bootstrap/cache' => is_writable(app()->bootstrapPath('cache')),
];
}
}

View File

@@ -4,36 +4,42 @@ namespace FleetCart\Install;
class Requirement
{
public function extensions()
private const extensions = [
'intl' => 'Intl',
'pdo' => 'PDO',
'json' => 'JSON',
'ctype' => 'Ctype',
'xml' => 'XML',
'tokenizer' => 'Tokenizer',
'mbstring' => 'Mbstring',
'openssl' => 'OpenSSL',
];
public function satisfied(): bool
{
return collect($this->php())
->merge($this->extensions())
->every(fn ($item) => $item);
}
public function php(): array
{
return [
'PHP >= 8.0.2' => version_compare(phpversion(), '8.0.2'),
'Intl PHP Extension' => extension_loaded('intl'),
'OpenSSL PHP Extension' => extension_loaded('openssl'),
'PDO PHP Extension' => extension_loaded('pdo'),
'Mbstring PHP Extension' => extension_loaded('mbstring'),
'Tokenizer PHP Extension' => extension_loaded('tokenizer'),
'XML PHP Extension' => extension_loaded('xml'),
'Ctype PHP Extension' => extension_loaded('ctype'),
'JSON PHP Extension' => extension_loaded('json'),
];
}
public function directories()
{
return [
'.env' => is_writable(base_path('.env')),
'storage' => is_writable(storage_path()),
'bootstrap/cache' => is_writable(app()->bootstrapPath('cache')),
];
}
public function satisfied()
public function extensions(): array
{
return collect($this->extensions())
->merge($this->directories())
->every(function ($item) {
return $item;
});
$extensions = [];
foreach (self::extensions as $extension => $name) {
$extensions[$name . ' PHP Extension'] = extension_loaded($extension);
}
return $extensions;
}
}

View File

@@ -6,17 +6,19 @@ use Modules\Setting\Entities\Setting;
class Store
{
public function setup($data)
public function setup($request): void
{
Setting::setMany([
'translatable' => [
'store_name' => $data['store_name'],
'store_name' => $request['store_name'],
],
'store_email' => $data['store_email'],
'store_phone' => $data['store_phone'],
'search_engine' => $data['search_engine'],
'algolia_app_id' => $data['algolia_app_id'],
'algolia_secret' => $data['algolia_secret'],
'store_email' => $request['store_email'],
'store_phone' => $request['store_phone'],
'search_engine' => $request['store_search_engine'],
'algolia_app_id' => $request['algolia_app_id'],
'algolia_secret' => $request['algolia_secret'],
'meilisearch_host' => $request['meilisearch_host'],
'meilisearch_key' => $request['meilisearch_key'],
]);
}
}