Code Duplication    Length = 120-124 lines in 2 locations

Apps/Controller/Admin/Application.php 1 location

@@ 18-137 (lines=120) @@
15
 * Class Application. View and manage system applications.
16
 * @package Apps\Controller\Admin
17
 */
18
class Application extends AdminController
19
{
20
    public $type = 'app';
21
22
    /**
23
     * Application constructor.
24
     */
25
    public function __construct()
26
    {
27
        // prevent version checks
28
        parent::__construct(false);
29
    }
30
31
    /**
32
     * List of all installed applications
33
     * @return string
34
     * @throws \Ffcms\Core\Exception\NativeException
35
     * @throws \Ffcms\Core\Exception\SyntaxException
36
     */
37
    public function actionIndex()
38
    {
39
        return $this->view->render('index', [
40
            'apps' => $this->applications
41
        ]);
42
    }
43
    
44
    /**
45
     * Show installation for of applications
46
     * @return string
47
     * @throws \Ffcms\Core\Exception\NativeException
48
     * @throws \Ffcms\Core\Exception\SyntaxException
49
     */
50
    public function actionInstall()
51
    {
52
        $model = new FormInstall($this->applications, 'app');
53
54
        // check if model is sended
55
        if ($model->send()) {
56
            // validate app name
57
            if ($model->validate()) {
58
                // try to run ::install method from remoute controller
59
                if ($model->make()) {
60
                        App::$Session->getFlashBag()->add('success', __('Application "%app%" is successful installed!', ['app' => $model->sysname]));
61
                    $this->response->redirect('application/index');
62
                } else {
63
                    App::$Session->getFlashBag()->add('error', __('During the installation process an error has occurred! Please contact with application developer.'));
64
                }
65
            } else {
66
                App::$Session->getFlashBag()->add('error', __('Probably, app or widget with the same name is always used! Try to solve this conflict.'));
67
            }
68
        }
69
70
        return $this->view->render('install', [
71
            'model' => $model
72
        ]);
73
    }
74
75
    /**
76
     * Show and process update form for apps
77
     * @param string $sys_name
78
     * @return string
79
     * @throws \Ffcms\Core\Exception\SyntaxException
80
     * @throws \Ffcms\Core\Exception\NativeException
81
     * @throws NotFoundException
82
     */
83
    public function actionUpdate($sys_name)
84
    {
85
        // get controller name and try to find app in db
86
        $controller = ucfirst(Str::lowerCase($sys_name));
87
        $search = \Apps\ActiveRecord\App::getItem('app', $controller);
88
89
        // check what we got
90
        if ($search === null || (int)$search->id < 1) {
91
            throw new NotFoundException('App is not founded');
92
        }
93
94
        // init model and make update with notification
95
        $model = new FormUpdate($search);
96
        if ($model->send() && $model->validate()) {
97
            $model->make();
98
            App::$Session->getFlashBag()->add('success', __('Application %s% is successful updated to %v% version', ['s' => $sys_name, 'v' => $model->scriptVersion]));
99
            $this->response->redirect('application/index');
100
        }
101
102
        // render response
103
        return $this->view->render('update', [
104
            'model' => $model
105
        ]);
106
    }
107
108
    /**
109
     * Allow turn on/off applications
110
     * @param $controllerName
111
     * @return string
112
     * @throws \Ffcms\Core\Exception\NativeException
113
     * @throws ForbiddenException
114
     * @throws \Ffcms\Core\Exception\SyntaxException
115
     */
116
    public function actionTurn($controllerName)
117
    {
118
        $controllerName = ucfirst(Str::lowerCase($controllerName));
119
120
        $search = \Apps\ActiveRecord\App::where('sys_name', '=', $controllerName)->where('type', '=', 'app')->first();
121
122
        if ($search === null || (int)$search->id < 1) {
123
            throw new ForbiddenException('App is not founded');
124
        }
125
126
        $model = new FormTurn($search);
127
        if ($model->send()) {
128
            $model->update();
129
            App::$Session->getFlashBag()->add('success', __('Application status was changed'));
130
        }
131
132
        return $this->view->render('turn', [
133
            'app' => $search,
134
            'model' => $model
135
        ]);
136
    }
137
}

Apps/Controller/Admin/Widget.php 1 location

@@ 19-142 (lines=124) @@
16
 * Class Widget. Control installed and not-installed widgets.
17
 * @package Apps\Controller\Admin
18
 */
19
class Widget extends AdminController
20
{
21
    public $type = 'widget';
22
23
    /**
24
     * Widget constructor. Disable installation checking for this controller
25
     */
26
    public function __construct()
27
    {
28
        parent::__construct(false);
29
    }
30
31
    /**
32
     * Show all installed widgets
33
     * @return string
34
     * @throws \Ffcms\Core\Exception\NativeException
35
     * @throws \Ffcms\Core\Exception\SyntaxException
36
     */
37
    public function actionIndex()
38
    {
39
        return $this->view->render('index', [
40
            'widgets' => $this->widgets
41
        ]);
42
    }
43
44
    /**
45
     * Show installation form for widget
46
     * @return string
47
     * @throws \Ffcms\Core\Exception\NativeException
48
     * @throws \Ffcms\Core\Exception\SyntaxException
49
     */
50
    public function actionInstall()
51
    {
52
        $model = new FormInstall($this->applications, 'widget');
53
54
        // check if model is sended
55
        if ($model->send()) {
56
            // validate app name
57
            if ($model->validate()) {
58
                // try to run ::install method from remoute controller
59
                if ($model->make()) {
60
                    App::$Session->getFlashBag()->add('success', __('Widget "%widget%" is successful installed!', ['widget' => $model->sysname]));
61
                    $this->response->redirect('widget/index');
62
                } else {
63
                    App::$Session->getFlashBag()->add('error', __('During the installation process an error has occurred! Please contact with widget developer.'));
64
                }
65
            } else {
66
                App::$Session->getFlashBag()->add('error', __('Probably, app or widget with the same name is always used! Try to solve this conflict.'));
67
            }
68
        }
69
70
        return $this->view->render('install', [
71
            'model' => $model
72
        ]);
73
    }
74
75
    /**
76
     * Run widget update - display submit form & callback execution
77
     * @param string $sys_name
78
     * @return string
79
     * @throws \Ffcms\Core\Exception\NativeException
80
     * @throws NotFoundException
81
     * @throws \Ffcms\Core\Exception\SyntaxException
82
     */
83
    public function actionUpdate($sys_name)
84
    {
85
        // get controller name and try to find app in db
86
        $controller = ucfirst(Str::lowerCase($sys_name));
87
        $search = \Apps\ActiveRecord\App::getItem('widget', $controller);
88
89
        // check what we got
90
        if ($search === null || (int)$search->id < 1) {
91
            throw new NotFoundException('Widget is not founded');
92
        }
93
94
        // init model and make update with notification
95
        $model = new FormUpdate($search);
96
97
        if ($model->send() && $model->validate()) {
98
            $model->make();
99
            App::$Session->getFlashBag()->add('success', __('Widget %w% is successful updated to %v% version', ['w' => $sys_name, 'v' => $model->scriptVersion]));
100
            $this->response->redirect('application/index');
101
        }
102
103
        // render response
104
        return $this->view->render('update', [
105
            'model' => $model
106
        ]);
107
    }
108
109
    /**
110
     * Allow turn on/off widget
111
     * @param string $controllerName
112
     * @return string
113
     * @throws \Ffcms\Core\Exception\NativeException
114
     * @throws ForbiddenException
115
     * @throws \Ffcms\Core\Exception\SyntaxException
116
     */
117
    public function actionTurn($controllerName)
118
    {
119
        // get controller name & find object in db
120
        $controllerName = ucfirst(Str::lowerCase($controllerName));
121
        $record = \Apps\ActiveRecord\App::where('sys_name', '=', $controllerName)->where('type', '=', 'widget')->first();
122
123
        // check if widget admin controller exists
124
        if ($record === null || (int)$record->id < 1) {
125
            throw new ForbiddenException('Widget is not founded');
126
        }
127
128
        // initialize turn on/off model
129
        $model = new FormTurn($record);
130
        if ($model->send()) {
131
            $model->update();
132
            App::$Session->getFlashBag()->add('success', __('Widget status was changed'));
133
        }
134
135
        // render view
136
        return $this->view->render('turn', [
137
            'widget' => $record,
138
            'model' => $model
139
        ]);
140
    }
141
142
}