¨4.0.1¨
This commit is contained in:
@@ -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,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -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'));
|
||||
|
||||
@@ -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]);
|
||||
}
|
||||
|
||||
30
app/Install/Permission.php
Normal file
30
app/Install/Permission.php
Normal 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')),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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'],
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user