Passed
Push — develop ( 89dc6a...390c15 )
by Nikita
09:45
created

ModulesController::disable()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
eloc 3
c 0
b 0
f 0
dl 0
loc 7
rs 10
ccs 0
cts 0
cp 0
cc 1
nc 1
nop 1
crap 2
1
<?php
2
3
namespace Gameap\Http\Controllers;
4
5
use Gameap\Http\Requests\Modules\InstallModuleRequest;
6
use Gameap\Http\Requests\Modules\ModuleActionRequest;
7
use Gameap\Repositories\Modules\LaravelModulesRepository;
8
use Gameap\Repositories\Modules\MarketplaceModulesRepository;
9
use Gameap\Services\Modules\Installer;
10
use Illuminate\Contracts\Foundation\Application;
11
use Illuminate\Contracts\View\Factory;
12
use Illuminate\Http\RedirectResponse;
13
use Illuminate\Support\Facades\Artisan;
14
use Illuminate\View\View;
15
16
class ModulesController extends AuthController
17
{
18
    /** @var MarketplaceModulesRepository */
19
    private $marketplaceModulesRepository;
20
21
    /** @var LaravelModulesRepository */
22
    private $laravelModulesRepository;
23
24
    /** @var Installer */
25
    private $modulesInstaller;
26
27
    public function __construct(
28
        MarketplaceModulesRepository $modulesRepository,
29
        LaravelModulesRepository $laravelModulesRepository,
30
        Installer $modulesInstaller
31
    ) {
32
        parent::__construct();
33
34
        $this->marketplaceModulesRepository = $modulesRepository;
35
        $this->laravelModulesRepository     = $laravelModulesRepository;
36
        $this->modulesInstaller             = $modulesInstaller;
37
    }
38
39
    /**
40
     * @return Application|Factory|View
41
     */
42
    public function index()
43
    {
44
        $modules = $this->laravelModulesRepository->getCached();
45
46
        return view('modules/installed', compact('modules'));
47
    }
48
49
    public function marketplace()
50
    {
51
        $installedModules = $this->laravelModulesRepository->getModulesVersions();
52
        $modules          = $this->marketplaceModulesRepository->getAll();
53
54
        return view('modules/marketplace', compact('modules', 'installedModules'));
55
    }
56
57
    /**
58
     * @throws \Gameap\Exceptions\GameapException
59
     * @throws \Gameap\Exceptions\InvalidArgumentValueException
60
     * @throws \splitbrain\PHPArchive\ArchiveCorruptedException
61
     * @throws \splitbrain\PHPArchive\ArchiveIOException
62
     * @throws \splitbrain\PHPArchive\ArchiveIllegalCompressionException
63
     */
64
    public function install(InstallModuleRequest $request): RedirectResponse
65
    {
66
        $moduleID = $request->input('module');
67
        $version  = $request->input('version');
68
69
        $this->modulesInstaller->install($moduleID, $version);
70
71
        Artisan::call('module:enable ' . $moduleID);
72
        Artisan::call('module:migrate ' . $moduleID);
73
74
        return redirect(route('modules.marketplace'))->with('success', __('modules.install_success_msg'));
75
    }
76
77
    public function enable(ModuleActionRequest $request): RedirectResponse
78
    {
79
        $moduleID = $request->input('module');
80
81
        Artisan::call('module:enable ' . $moduleID);
82
83
        return redirect(route('modules'))->with('success', __('modules.enable_success_msg'));
84
    }
85
86
    public function disable(ModuleActionRequest $request): RedirectResponse
87
    {
88
        $moduleID = $request->input('module');
89
90
        Artisan::call('module:disable ' . $moduleID);
91
92
        return redirect(route('modules'))->with('success', __('modules.disable_success_msg'));
93
    }
94
95
    public function destroy(string $moduleId): RedirectResponse
96
    {
97
        $this->laravelModulesRepository->delete($moduleId);
98
99
        return redirect(route('modules'))->with('success', __('modules.remove_success_msg'));
100
    }
101
102
    public function migrate(): RedirectResponse
103
    {
104
        Artisan::call('migrate');
105
        Artisan::call('module:migrate');
106
107
        return redirect(route('modules'))->with('success', __('modules.migrate_success_msg'));
108
    }
109
}
110