BossBey File Manager
PHP:
8.2.30
OS:
Linux
User:
imagivibe
Root
/
home
/
imagivibe
/
www
/
app.imagivibe.com
/
app
/
Helpers
/
Classes
📤 Upload
📝 New File
📁 New Folder
Close
Editing: InstallationHelper.php
<?php namespace App\Helpers\Classes; use App\Models; use App\Models\DashboardWidget; use App\Models\OpenAIGenerator; use App\Models\OpenaiGeneratorChatCategory; use App\Services\Common\MenuService; use Database\Seeders\AdminPermissionSeeder; use Database\Seeders\DashboardWidgetSeeder; use Database\Seeders\EngineSeeder; use Database\Seeders\EntitySeeder; use Database\Seeders\IntroductionSeeder; use Database\Seeders\MenuSeeder; use Database\Seeders\PermissionSeeder; use Database\Seeders\RoleSeeder; use Database\Seeders\SocialAccountsSeeder; use Database\Seeders\TokenSeeder; use Database\Seeders\VoiceIsolatorSeeder; use Exception; use Illuminate\Support\Arr; use Illuminate\Support\Facades\Artisan; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Schema; use Illuminate\Support\Str; use RachidLaasri\LaravelInstaller\Repositories\ApplicationStatusRepositoryInterface; class InstallationHelper { public static function runInstallation(?bool $check = true): void { $installationData = self::data($check); foreach ($installationData as $key => $value) { if (isset($value['table'])) { if (is_string($value['table'])) { if (! Schema::hasTable($value['table'])) { continue; } } else { if (! $value['table']) { continue; } } if (! isset($value['sql'])) { continue; } foreach ($value['sql'] as $sqlData) { if (isset($sqlData['condition'])) { if ($sqlData['condition']) { $files = $sqlData['files'] ?? []; if (is_array($files)) { foreach ($files as $file) { DB::unprepared( file_get_contents( resource_path($file) ) ); } } } } if (isset($sqlData['callback'])) { if (isset($sqlData['condition'])) { $condition = $sqlData['condition']; } else { $condition = true; } if ($condition) { $callback = $sqlData['callback']; if (is_callable($callback)) { call_user_func($callback); } } } } } else { // if there is a different variation. } } Artisan::call('optimize:clear'); DB::beginTransaction(); } public static function data(?bool $check = true): array { return [ [ 'table' => 'openai_filters', 'sql' => [ [ 'condition' => DB::table('openai_filters')->count() === 0, 'files' => [ 'dev_tools/openai_filters.sql', ], ], ], ], [ 'table' => 'openai', 'sql' => [ [ 'condition' => Models\OpenAIGenerator::count() === 0, 'files' => [ 'dev_tools/openai_table.sql', ], ], ], ], [ 'table' => 'openai', 'sql' => [ [ 'condition' => false, 'files' => [ 'dev_tools/new_openai_table_templates.sql', ], ], ], ], [ 'table' => 'frontend_tools', 'sql' => [ [ 'condition' => Models\FrontendTools::count() === 0, 'files' => [ 'dev_tools/frontend_tools.sql', ], ], ], ], [ 'table' => 'faq', 'sql' => [ [ 'condition' => Models\Faq::count() === 0, 'files' => [ 'dev_tools/faq.sql', ], ], ], ], [ 'table' => 'frontend_future', 'sql' => [ [ 'condition' => Models\FrontendFuture::count() === 0, 'files' => [ 'dev_tools/frontend_future.sql', ], ], ], ], [ 'table' => 'howitworks', 'sql' => [ [ 'condition' => Models\HowitWorks::count() === 0, 'files' => [ 'dev_tools/howitworks.sql', ], ], ], ], [ 'table' => 'testimonials', 'sql' => [ [ 'condition' => Models\Testimonials::count() === 0, 'files' => [ 'dev_tools/testimonials.sql', ], ], ], ], [ 'table' => 'frontend_who_is_for', 'sql' => [ [ 'condition' => Models\FrontendForWho::count() === 0, 'files' => [ 'dev_tools/frontend_who_is_for.sql', ], ], ], ], [ 'table' => 'frontend_generators', 'sql' => [ [ 'condition' => Models\FrontendGenerators::count() === 0, 'files' => [ 'dev_tools/frontend_generators.sql', ], ], ], ], [ 'table' => 'clients', 'sql' => [ [ 'condition' => Models\Clients::count() === 0, 'files' => [ 'dev_tools/clients.sql', ], ], ], ], [ 'table' => 'chatbot', 'sql' => [ [ 'condition' => Models\Chatbot\Chatbot::count() === 0, 'files' => [ 'dev_tools/chatbot.sql', ], ], ], ], [ 'table' => 'email_templates', 'sql' => [ [ 'condition' => Models\EmailTemplates::count() === 0, 'files' => [ 'dev_tools/email_templates.sql', ], ], ], ], [ 'table' => 'ads', 'sql' => [ [ 'condition' => Models\Ad::count() === 0, 'files' => [ 'dev_tools/ads.sql', ], ], ], ], [ 'table' => 'openai', 'sql' => [ [ 'condition' => Models\OpenAIGenerator::where('slug', 'ai_article_wizard_generator')->count() === 0, 'files' => [ 'dev_tools/ai_wizard.sql', ], ], [ 'condition' => Models\OpenAIGenerator::where('slug', 'ai_vision')->count() === 0, 'files' => [ 'dev_tools/ai_vision.sql', ], ], [ 'condition' => Models\OpenAIGenerator::where('slug', 'ai_pdf')->count() === 0, 'files' => [ 'dev_tools/ai_pdf.sql', ], ], [ 'condition' => Models\OpenAIGenerator::where('slug', 'ai_chat_image')->count() === 0, 'files' => [ 'dev_tools/ai_chat_image.sql', ], ], [ 'condition' => Models\OpenAIGenerator::where('slug', 'ai_rewriter')->count() === 0, 'files' => [ 'dev_tools/ai_rewriter.sql', ], ], [ 'condition' => Models\OpenAIGenerator::where('slug', 'ai_webchat')->count() === 0, 'files' => [ 'dev_tools/ai_webchat.sql', ], ], [ 'condition' => Models\OpenAIGenerator::where('slug', 'ai_pdf')->count() === 0, 'files' => [ 'dev_tools/ai_filechat.sql', ], ], [ 'condition' => Models\OpenAIGenerator::where('slug', 'ai_video')->count() === 0, 'files' => [ 'dev_tools/ai_video.sql', ], ], ], ], [ 'table' => 'openai_chat_category', 'sql' => [ [ 'condition' => Models\OpenaiGeneratorChatCategory::count() === 0, 'files' => [ 'dev_tools/openai_chat_categories_table.sql', ], ], [ 'condition' => Models\OpenaiGeneratorChatCategory::where('slug', 'ai_vision')->count() === 0, 'files' => [ 'dev_tools/ai_vision2.sql', ], ], [ 'condition' => Models\OpenaiGeneratorChatCategory::where('slug', 'ai_pdf')->count() === 0, 'files' => [ 'dev_tools/ai_pdf2.sql', 'dev_tools/ai_filechat2.sql', ], ], [ 'condition' => Models\OpenaiGeneratorChatCategory::where('slug', 'ai_chat_image')->count() === 0, 'files' => [ 'dev_tools/ai_chat_image2.sql', ], ], [ 'condition' => Models\OpenaiGeneratorChatCategory::where('slug', 'ai_webchat')->count() === 0, 'files' => [ 'dev_tools/ai_webchat2.sql', ], ], ], ], [ 'table' => 'email_templates', 'sql' => [ [ 'condition' => Models\EmailTemplates::count() === 0, 'files' => [ 'dev_tools/team_email_templates.sql', ], ], ], ], [ 'table' => 'email_templates', 'sql' => [ [ 'condition' => Models\EmailTemplates::count() === 0, 'files' => [ 'dev_tools/subscription_and_payment_email_templates.sql', ], ], ], ], [ 'table' => 'plans', 'sql' => [ [ 'condition' => Schema::hasColumn('plans', 'open_ai_items') && Schema::hasTable('openai'), 'callback' => function () { $openaiItems = Models\OpenAIGenerator::query()->pluck('slug')->toArray(); $plans = Models\Plan::query()->get(); foreach ($plans as $plan) { $plan->open_ai_items = $openaiItems; $plan->save(); } }, ], ], ], [ 'table' => 'plans', 'sql' => [ [ 'condition' => Schema::hasColumn('plans', 'hidden_url'), 'callback' => function () { $plans = Models\Plan::whereNotNull('hidden_url')->get(); foreach ($plans as $plan) { $newUrl = Str::replace('/dashboard/user/', '/plan/', $plan->hidden_url); if ($newUrl !== $plan->hidden_url) { $plan->update(['hidden_url' => $newUrl]); } } }, ], ], ], [ 'table' => 'openai', 'sql' => [ [ 'condition' => Schema::hasTable('settings') && Schema::hasColumn('settings', 'free_open_ai_items'), 'callback' => function () { $openaiItems = Models\OpenAIGenerator::query()->pluck('slug')->toArray(); $setting = Models\Setting::first(); $setting->update([ 'free_open_ai_items' => $openaiItems ?: [], ]); }, ], ], ], [ 'table' => (new Models\Page)->getTable(), 'sql' => [ [ 'condition' => Models\Page::where('is_custom', 1)->count() === 0, 'files' => [ 'dev_tools/inner_pages.sql', ], ], ], ], [ 'table' => (new Models\Currency)->getTable(), 'sql' => [ [ 'condition' => Models\Currency::count() === 0, 'files' => [ 'dev_tools/currency.sql', ], ], ], ], [ 'table' => 'openai', 'sql' => [ [ 'condition' => ! OpenAIGenerator::where('slug', 'ai_voiceover')->exists(), 'files' => [ 'dev_tools/ai_voiceover.sql', 'dev_tools/ai_filter_voiceover.sql', ], ], ], ], [ 'table' => 'openai', 'sql' => [ [ 'condition' => ! OpenAIGenerator::where('slug', 'ai_youtube')->exists(), 'files' => [ 'dev_tools/ai_youtube.sql', 'dev_tools/ai_filter_youtube.sql', ], ], ], ], [ 'table' => 'openai', 'sql' => [ [ 'condition' => ! OpenAIGenerator::where('slug', 'ai_rss')->exists(), 'files' => [ 'dev_tools/ai_rss.sql', 'dev_tools/ai_filter_rss.sql', ], ], ], ], [ 'table' => 'integrations', 'sql' => [ [ 'condition' => Models\Integration\Integration::query()->where('slug', 'wordpress')->doesntExist(), 'files' => [ 'dev_tools/integrations/wordpress.sql', ], ], ], ], [ 'table' => 'settings_two', 'sql' => [ [ 'condition' => Models\SettingTwo::query()->whereNotNull('liquid_license_domain_key')->exists() && $check, 'callback' => function () { try { $check = Helper::settingTwo('liquid_license_domain_key'); if ($check) { app(ApplicationStatusRepositoryInterface::class)->check( $check, true ); } } catch (Exception $e) { } }, ], ], ], [ 'table' => 'menus', 'sql' => [ [ 'condition' => true, 'callback' => function () { try { app(MenuSeeder::class)->run(); Models\Common\Menu::query()->where('key', 'config')->update([ 'order' => 0, ]); Models\Common\Menu::query()->where('key', 'cloudflare_r2_extension')->update([ 'order' => 1, ]); Models\Common\Menu::query()->where('key', 'maintenance_setting')->update([ 'order' => 2, ]); Models\Common\Menu::query()->where('key', 'ai_chat_models')->update([ 'order' => 3, ]); Models\Common\Menu::query()->where('key', 'ext_chat_bot')->update([ 'label' => 'AI Bots', 'order' => 2, ]); Models\Common\Menu::query()->where('key', 'ext_chat_bot_agent')->update([ 'label' => 'Human Agent', ]); // ai influencer Models\Common\Menu::query()->where('key', 'ai_influencer')->update([ 'icon' => 'tabler-star', 'route' => 'dashboard.user.ai-influencer.index', 'extension' => true, ]); if (Helper::appIsDemo()) { Models\Common\Menu::query()->where('key', 'ai_influencer_1')->delete(); Models\Common\Menu::query()->where('key', 'ai_influencer_2')->delete(); Models\Common\Menu::query()->where('key', 'ext_migration')->update([ 'is_active' => false, ]); } } catch (Exception $exception) { } }, ], ], ], [ 'table' => 'entities', 'sql' => [ [ 'condition' => true, 'callback' => function () { try { app(EntitySeeder::class)->run(); } catch (Exception $exception) { } }, ], ], ], [ 'table' => 'engines', 'sql' => [ [ 'condition' => true, 'callback' => function () { try { app(EngineSeeder::class)->run(); } catch (Exception $exception) { } }, ], ], ], [ 'table' => 'tokens', 'sql' => [ [ 'condition' => true, 'callback' => function () { try { app(TokenSeeder::class)->run(); } catch (Exception $exception) { } }, ], ], ], [ 'table' => 'social_media_accounts', 'sql' => [ [ 'condition' => true, 'callback' => function () { try { app(SocialAccountsSeeder::class)->run(); } catch (Exception $exception) { } }, ], ], ], [ 'table' => 'menus', 'sql' => [ [ 'condition' => true, 'callback' => function () { try { Models\Common\Menu::query() ->where([ 'key' => 'chat_training_extension', ])->update([ 'label' => 'Chatbot Training', ]); Models\Common\Menu::query() ->where([ 'key' => 'api_integration', ])->update([ 'route' => 'default', ]); Models\Common\Menu::query() ->where([ 'key' => 'ai_chat_all', ])->update([ 'route' => Helper::appIsDemo() ? 'dashboard.user.openai.chat.list' : 'dashboard.user.openai.chat.chat', ]); Models\Common\Menu::query() ->where([ 'key' => 'membership_plans', ])->update([ 'label' => 'Membership Plans (old version)', ]); Models\Common\Menu::query() ->where([ 'key' => 'admin_finance_plan', ])->update([ 'label' => 'Membership Plans', ]); Models\Common\Menu::query() ->where([ 'key' => 'storage', ])->delete(); Models\Common\Menu::query() ->where([ 'key' => 'languages', ])->delete(); Models\Common\Menu::query() ->where([ 'key' => 'smtp', ])->delete(); Models\Common\Menu::query() ->where([ 'key' => 'gdpr', ])->delete(); Models\Common\Menu::query() ->where([ 'key' => 'affiliate_setting', ])->delete(); Models\Common\Menu::query() ->where([ 'key' => 'invoice', ])->delete(); Models\Common\Menu::query() ->where([ 'key' => 'general', ])->delete(); Models\Common\Menu::query() ->where([ 'key' => 'ai_fall', ])->delete(); Models\Common\Menu::query() ->where([ 'key' => 'google_adsense', ])->delete(); Models\Common\Menu::query() ->where([ 'key' => 'ai_avatar_pro', ])->delete(); Models\Common\Menu::query() ->where([ 'key' => 'introductions', ])->delete(); Models\Common\Menu::query() ->where([ 'key' => 'api_cost_management', ])->delete(); $apiIntegration = Models\Common\Menu::query() ->where([ 'key' => 'api_integration', ])->first(); Models\Common\Menu::query()->where('key', 'photo_studio_setting')->update([ 'parent_id' => $apiIntegration->id, ]); Models\Common\Menu::query()->where('key', 'admin_finance_plan')->update([ 'label' => 'Pricing Plans', ]); $setting = Models\Common\Menu::query() ->where([ 'key' => 'settings', ])->first(); Models\Common\Menu::query()->where('key', 'ai_chat_models')->update([ 'parent_id' => $setting->id, 'label' => 'AI Models', ]); Models\Common\Menu::query()->where('key', 'api_integration_fal_ai')->update([ 'label' => 'Fal AI', ]); app(MenuService::class)->regenerate(); } catch (Exception $exception) { } }, ], ], ], [ 'table' => 'introductions', 'sql' => [ [ 'condition' => true, 'callback' => function () { try { app(IntroductionSeeder::class)->run(); } catch (Exception $exception) { } }, ], ], ], [ 'table' => 'permissions', 'sql' => [ [ 'condition' => true, 'callback' => function () { try { app(PermissionSeeder::class)->run(); } catch (Exception $exception) { } }, ], ], ], [ 'table' => 'role_has_permissions', 'sql' => [ [ 'condition' => true, 'callback' => function () { try { app(AdminPermissionSeeder::class)->run(); } catch (Exception $exception) { } }, ], ], ], [ 'table' => 'roles', 'sql' => [ [ 'condition' => true, 'callback' => function () { try { app(RoleSeeder::class)->run(); } catch (Exception $exception) { } }, ], ], ], [ 'table' => 'entities', 'sql' => [ [ 'condition' => true, 'callback' => function () { try { $models = \App\Domains\Entity\Models\Entity::query()->whereNull('selected_title')->get(); foreach ($models as $model) { $model->update(['selected_title' => $model->getAttribute('title')]); } } catch (Exception $exception) { } }, ], ], ], [ 'table' => 'frontend_sections_statuses_titles', 'sql' => [ [ 'condition' => Schema::hasColumn('frontend_sections_statuses_titles', 'marquee_items'), 'callback' => function () { try { // fill the column with the default value if it's empty Models\Frontend\FrontendSectionsStatus::query()->update([ 'marquee_items' => 'Cold Email,Newsletter,Summarize,Product Description,Testimonial,Pick an outfit,Study Vocabulary, Create a workout plan,Transcribe my class notes,Create a pros and cons list,Morning Productivity Plan,Experience Tokyo like a local,Translate', ]); } catch (Exception $exception) { } }, ], ], ], [ 'table' => 'openai_chat_category', 'sql' => [ [ 'condition' => true, 'callback' => function () { try { // fill the column with the default value if it's empty $data = OpenaiGeneratorChatCategory::query() ->where('slug', 'ai_pdf') ->first(); if ($data) { $description = $data->description; $helps_with = $data->helps_with; $description = str_replace('CSV', 'CSX, XLS, XLSX', $description); $helps_with = str_replace('CSV', 'CSX, XLS, XLSX', $helps_with); $data->update([ 'description' => $description, 'helps_with' => $helps_with, ]); } } catch (Exception $exception) { } }, ], ], ], [ 'table' => 'advanced_features_section', 'sql' => [ [ 'condition' => Models\Section\AdvancedFeaturesSection::query()->count() == 0, 'callback' => function () { try { // default data $defaultData = [ [ 'title' => __('Article Wizard'), 'description' => __('Create a social media post and schedule it to be published directly on Linkedin or X.'), 'image' => custom_theme_url('/assets/landing-page/advanced-feature-1.png'), ], [ 'title' => __('Intelligent AI Assistant'), 'description' => __('Create a social media post and schedule it to be published directly on Linkedin or X.'), 'image' => custom_theme_url('/assets/landing-page/advanced-feature-1.png'), ], [ 'title' => __('Publish on Social Media'), 'description' => __('Create a social media post and schedule it to be published directly on Linkedin or X.'), 'image' => custom_theme_url('/assets/landing-page/advanced-feature-1.png'), ], [ 'title' => __('SEO Tool'), 'description' => __('Create a social media post and schedule it to be published directly on Linkedin or X.'), 'image' => custom_theme_url('/assets/landing-page/advanced-feature-1.png'), ], [ 'title' => __('Real-Time Data'), 'description' => __('Create a social media post and schedule it to be published directly on Linkedin or X.'), 'image' => custom_theme_url('/assets/landing-page/advanced-feature-1.png'), ], [ 'title' => __('AI Photo Editor'), 'description' => __('Create a social media post and schedule it to be published directly on Linkedin or X.'), 'image' => custom_theme_url('/assets/landing-page/advanced-feature-1.png'), ], ]; // fill the column with the default value if it's empty Models\Section\AdvancedFeaturesSection::query()->insert($defaultData); } catch (Exception $exception) { } }, ], ], ], [ 'table' => 'comparison_section_items', 'sql' => [ [ 'condition' => Models\Section\ComparisonSectionItems::query()->count() == 0, 'callback' => function () { try { // default data $items = [ ['label' => 'Multiple AI Tools', 'others' => false, 'ours' => true], ['label' => 'Custom Templates and Chatbot Personas', 'others' => false, 'ours' => true], ['label' => 'All-in-one Platform', 'others' => false, 'ours' => true], ['label' => 'Knows Your Brand', 'others' => false, 'ours' => true], ['label' => 'Intelligent AI Assistant', 'others' => false, 'ours' => true], ['label' => 'PrePaid', 'others' => false, 'ours' => true], ['label' => 'Lifetime Access', 'others' => false, 'ours' => true], ]; // fill the column with the default value if it's empty Models\Section\ComparisonSectionItems::query()->insert($items); } catch (Exception $exception) { } }, ], ], ], [ 'table' => 'features_marquees', 'sql' => [ [ 'condition' => Models\Section\FeaturesMarquee::query()->count() == 0, 'callback' => function () { try { // default data $items = [ ['title' => 'Designed for mobile', 'position' => 'top'], ['title' => 'Easy to use', 'position' => 'top'], ['title' => 'Customizable', 'position' => 'top'], ['title' => 'No coding required', 'position' => 'top'], ['title' => '10 Reasons to use MagicAI', 'position' => 'bottom'], ['title' => 'No sign up required', 'position' => 'bottom'], ['title' => 'No watermarks', 'position' => 'bottom'], ['title' => 'No hidden fees', 'position' => 'bottom'], ]; // fill the column with the default value if it's empty Models\Section\FeaturesMarquee::query()->insert($items); } catch (Exception $exception) { } }, ], ], ], [ 'table' => 'footer_items', 'sql' => [ [ 'condition' => Models\Section\FooterItem::query()->count() === 0, 'callback' => function () { try { $items = [ ['item' => 'Premium Support 30-Day'], ['item' => 'Money Back Guarantee'], ['item' => 'Instant Access'], ['item' => 'Free Trial'], ['item' => 'Lifetime Updates'], ]; // fill the column with the default value if it's empty Models\Section\FooterItem::query()->insert($items); } catch (Exception $exception) { } }, ], ], ], [ 'table' => 'banner_bottom_texts', 'sql' => [ [ 'condition' => Models\Section\BannerBottomText::query()->count() == 0, 'callback' => function () { try { $items = [ ['text' => 'No Credit Card Required'], ['text' => 'Free Trial'], ['text' => '30 Day Money Back Guarentee'], ]; // fill the column with the default value if it's empty Models\Section\BannerBottomText::query()->insert($items); } catch (Exception $exception) { } }, ], ], ], [ 'table' => 'plans', 'sql' => [ [ 'condition' => true, 'callback' => function () { Models\Plan::query() ->whereNull('plan_ai_tools') ->whereNull('plan_features') ->get()->map(callback: function ($plan) { $plan_ai_tools = Arr::pluck(MenuService::planAiToolsMenu(), 'key'); $plan_features = Arr::pluck(MenuService::planFeatureMenu(), 'key'); $plan->update([ 'plan_ai_tools' => $plan_ai_tools, 'plan_features' => $plan_features, ]); }); }, ], ], ], [ 'table' => 'openai', 'sql' => [ [ 'condition' => ! OpenAIGenerator::where('slug', 'ai_voice_isolator')->exists(), 'callback' => function () { try { app(VoiceIsolatorSeeder::class)->run(); } catch (Exception $exception) { } }, ], ], ], [ 'table' => 'menus', 'sql' => [ [ 'condition' => Models\Common\Menu::query()->where('bolt_menu', true)->doesntExist(), 'callback' => function () { try { $middle_nav_urls = [ 'dashboard' => [ 'background' => '#9A6FFD', 'foreground' => '#fff', ], 'ai_writer' => [ 'background' => '#468EA6', 'foreground' => '#fff', ], 'finance' => [ 'background' => '#3569F5', 'foreground' => '#fff', ], 'ai_editor' => [ 'background' => '#E29CB6', 'foreground' => '#fff', ], ]; foreach ($middle_nav_urls as $key => $value) { Models\Common\Menu::query() ->where('key', $key) ->update([ 'bolt_menu' => true, 'bolt_background' => $value['background'], 'bolt_foreground' => $value['foreground'], ]); } app(MenuService::class)->regenerate(); } catch (Exception $exception) { } }, ], ], ], [ 'table' => 'dashboard_widgets', 'sql' => [ [ 'condition' => DashboardWidget::query()->doesntExist(), 'callback' => function () { try { app(DashboardWidgetSeeder::class)->run(); } catch (Exception $exception) { } }, ], ], ], ]; } }
Save
Cancel