Files
dockerfluxodecaixapro/modules/affiliatesadmin/database/migrations/005_register_affiliates_modules.php
T
2026-09-01 10:46:29 -03:00

234 lines
10 KiB
PHP
Executable File

<?php
use Illuminate\Database\Capsule\Manager as Capsule;
class RegisterAffiliatesModules
{
public function up()
{
// Register modules in 'modules' table
$modules = [
[
'modules_name' => 'affiliatesadmin',
'modules_display_name' => 'Gerenciamento de Afiliados',
'modules_description' => 'Módulo administrativo para gerenciar afiliados, comissões e banners',
'modules_version' => '1.0.0',
'modules_author' => 'SysCMS Team',
'modules_dependencies' => json_encode(['auth']),
'modules_ative' => 1,
'modules_public' => 0,
'modules_blocked' => 0,
'modules_settings' => json_encode([
'commission_rate_default' => 10,
'commission_min_payout' => 50,
'banner_default_width' => 300,
'banner_default_height' => 250
]),
'modules_permissions' => json_encode([
'affiliatesadmin.affiliates.view',
'affiliatesadmin.affiliates.create',
'affiliatesadmin.affiliates.edit',
'affiliatesadmin.affiliates.delete',
'affiliatesadmin.commissions.view',
'affiliatesadmin.commissions.approve',
'affiliatesadmin.commissions.reject',
'affiliatesadmin.commissions.pay',
'affiliatesadmin.banners.view',
'affiliatesadmin.banners.create',
'affiliatesadmin.banners.edit',
'affiliatesadmin.banners.delete',
'affiliatesadmin.statistics.view'
]),
'modules_path' => 'modules/affiliatesadmin',
'modules_namespace' => 'Modules\\AffiliatesAdmin',
'modules_icon' => 'bi bi-people',
'menu_side_bar' => 1,
'menu_nav_bar' => 0,
'modules_order' => 80,
'modules_install_date' => date('Y-m-d H:i:s'),
'modules_update_date' => date('Y-m-d H:i:s')
],
[
'modules_name' => 'affiliates',
'modules_display_name' => 'Área de Afiliados',
'modules_description' => 'Módulo para afiliados gerenciarem sua conta e banners',
'modules_version' => '1.0.0',
'modules_author' => 'SysCMS Team',
'modules_dependencies' => json_encode(['auth', 'affiliatesadmin']),
'modules_ative' => 1,
'modules_public' => 1,
'modules_blocked' => 0,
'modules_settings' => null,
'modules_permissions' => json_encode([
'affiliates.dashboard.view',
'affiliates.banners.view',
'affiliates.banners.get_code',
'affiliates.commissions.view',
'affiliates.profile.view',
'affiliates.profile.edit'
]),
'modules_path' => 'modules/affiliates',
'modules_namespace' => 'Modules\\Affiliates',
'modules_icon' => 'bi bi-person-badge',
'menu_side_bar' => 0,
'menu_nav_bar' => 0,
'modules_order' => 90,
'modules_install_date' => date('Y-m-d H:i:s'),
'modules_update_date' => date('Y-m-d H:i:s')
]
];
foreach ($modules as $moduleData) {
$moduleName = $moduleData['modules_name'];
$existing = Capsule::table('modules')->where('modules_name', $moduleName)->first();
if (!$existing) {
$moduleId = Capsule::table('modules')->insertGetId($moduleData);
} else {
$moduleId = $existing->modules_id;
Capsule::table('modules')->where('modules_name', $moduleName)->update([
'modules_display_name' => $moduleData['modules_display_name'],
'modules_description' => $moduleData['modules_description'],
'modules_version' => $moduleData['modules_version'],
'modules_author' => $moduleData['modules_author'],
'modules_dependencies' => $moduleData['modules_dependencies'],
'modules_ative' => $moduleData['modules_ative'],
'modules_public' => $moduleData['modules_public'],
'modules_blocked' => $moduleData['modules_blocked'],
'modules_settings' => $moduleData['modules_settings'],
'modules_permissions' => $moduleData['modules_permissions'],
'modules_path' => $moduleData['modules_path'],
'modules_namespace' => $moduleData['modules_namespace'],
'modules_icon' => $moduleData['modules_icon'],
'menu_side_bar' => $moduleData['menu_side_bar'],
'menu_nav_bar' => $moduleData['menu_nav_bar'],
'modules_order' => $moduleData['modules_order'],
'modules_update_date' => date('Y-m-d H:i:s')
]);
}
// Associate module with all existing companies in 'bus_modules'
if (Capsule::schema()->hasTable('bus')) {
$companies = Capsule::table('bus')->get();
foreach ($companies as $company) {
$existingBusModule = Capsule::table('bus_modules')
->where('bus_modules_bus_id', $company->bus_id)
->where('bus_modules_module_id', $moduleId)
->first();
if (!$existingBusModule) {
Capsule::table('bus_modules')->insert([
'bus_modules_bus_id' => $company->bus_id,
'bus_modules_module_id' => $moduleId,
'bus_modules_is_enabled' => 1,
'bus_modules_show_public_nav' => $moduleData['modules_public'],
'bus_modules_show_dashboard_nav' => 1
]);
}
}
}
}
// Register permissions in 'role_permissions' table for admin and member roles
$permissions = [
// AffiliatesAdmin permissions
'affiliatesadmin.affiliates.view',
'affiliatesadmin.affiliates.create',
'affiliatesadmin.affiliates.edit',
'affiliatesadmin.affiliates.delete',
'affiliatesadmin.commissions.view',
'affiliatesadmin.commissions.approve',
'affiliatesadmin.commissions.reject',
'affiliatesadmin.commissions.pay',
'affiliatesadmin.banners.view',
'affiliatesadmin.banners.create',
'affiliatesadmin.banners.edit',
'affiliatesadmin.banners.delete',
'affiliatesadmin.statistics.view',
// Affiliates permissions
'affiliates.dashboard.view',
'affiliates.banners.view',
'affiliates.banners.get_code',
'affiliates.commissions.view',
'affiliates.profile.view',
'affiliates.profile.edit',
];
$defaultCompanyId = 1;
foreach (['admin', 'member'] as $role) {
foreach ($permissions as $perm) {
$existing = Capsule::table('role_permissions')
->where('role_permissions_role', $role)
->where('role_permissions_bus_id', $defaultCompanyId)
->where('role_permissions_permission', $perm)
->first();
if (!$existing) {
Capsule::table('role_permissions')->insert([
'role_permissions_role' => $role,
'role_permissions_bus_id' => $defaultCompanyId,
'role_permissions_permission' => $perm,
'role_permissions_created_by' => null,
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s')
]);
}
}
}
}
public function down()
{
// Remove permissions from 'role_permissions' for admin and member roles
$defaultCompanyId = 1;
$permissions = [
// AffiliatesAdmin permissions
'affiliatesadmin.affiliates.view',
'affiliatesadmin.affiliates.create',
'affiliatesadmin.affiliates.edit',
'affiliatesadmin.affiliates.delete',
'affiliatesadmin.commissions.view',
'affiliatesadmin.commissions.approve',
'affiliatesadmin.commissions.reject',
'affiliatesadmin.commissions.pay',
'affiliatesadmin.banners.view',
'affiliatesadmin.banners.create',
'affiliatesadmin.banners.edit',
'affiliatesadmin.banners.delete',
'affiliatesadmin.statistics.view',
// Affiliates permissions
'affiliates.dashboard.view',
'affiliates.banners.view',
'affiliates.banners.get_code',
'affiliates.commissions.view',
'affiliates.profile.view',
'affiliates.profile.edit',
];
foreach (['admin', 'member'] as $role) {
foreach ($permissions as $perm) {
Capsule::table('role_permissions')
->where('role_permissions_role', $role)
->where('role_permissions_bus_id', $defaultCompanyId)
->where('role_permissions_permission', $perm)
->delete();
}
}
// Remove from bus_modules
$moduleNames = ['affiliatesadmin', 'affiliates'];
foreach ($moduleNames as $moduleName) {
$module = Capsule::table('modules')->where('modules_name', $moduleName)->first();
if ($module) {
Capsule::table('bus_modules')
->where('bus_modules_module_id', $module->modules_id)
->delete();
}
}
// Remove from modules table
foreach ($moduleNames as $moduleName) {
Capsule::table('modules')->where('modules_name', $moduleName)->delete();
}
}
}