-
Notifications
You must be signed in to change notification settings - Fork 76
/
BaseController.php
123 lines (104 loc) · 3.29 KB
/
BaseController.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<?php
/**
* Date: 09.12.2014
* Time: 17:20
*
* This file is part of the MihailDev project.
*
* (c) MihailDev project <http://github.com/mihaildev/>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace mihaildev\elfinder;
use Yii;
use yii\filters\AccessControl;
use yii\helpers\ArrayHelper;
use yii\helpers\Json;
use yii\helpers\Url;
use yii\web\Controller;
use yii\web\JsExpression;
/**
* Class BaseController
*
* @package mihaildev\elfinder
*/
class BaseController extends Controller{
public $access = ['@'];
public $user = 'user';
public $managerOptions = [];
public $connectOptions = [];
public $plugin = [];
public function behaviors()
{
return [
'access' => [
'user' => $this->user,
'class' => AccessControl::className(),
'rules' => [
[
'allow' => true,
'roles' => $this->access,
],
],
],
];
}
public function getOptions(){
return $this->connectOptions;
}
public function actionConnect(){
return $this->renderFile(__DIR__."/views/connect.php", ['options'=>$this->getOptions(), 'plugin' => $this->plugin]);
}
public function getManagerOptions(){
$options = [
'url'=> Url::toRoute('connect'),
'customData' => [
Yii::$app->request->csrfParam => Yii::$app->request->csrfToken
],
'resizable' => false
];
if(isset($_GET['CKEditor'])){
$options['getFileCallback'] = new JsExpression('function(file){ '.
'window.opener.CKEDITOR.tools.callFunction('.Json::encode($_GET['CKEditorFuncNum']).', file.url); '.
'window.close(); }');
$options['lang'] = $_GET['langCode'];
}
if(isset($_GET['tinymce'])){
$options['getFileCallback'] = new JsExpression('function(file, fm) { '.
'parent.tinymce.activeEditor.windowManager.getParams().oninsert(file, fm);'.
'parent.tinymce.activeEditor.windowManager.close();}');
}
if(isset($_GET['filter'])){
if(is_array($_GET['filter']))
$options['onlyMimes'] = $_GET['filter'];
else
$options['onlyMimes'] = [$_GET['filter']];
}
if(isset($_GET['lang']))
$options['lang'] = $_GET['lang'];
if(isset($_GET['callback'])){
if(isset($_GET['multiple']))
$options['commandsOptions']['getfile']['multiple'] = true;
$options['getFileCallback'] = new JsExpression('function(file){ '.
'if (window!=window.top) {var parent = window.parent;}else{var parent = window.opener;}'.
'if(parent.mihaildev.elFinder.callFunction('.Json::encode($_GET['callback']).', file))'.
'window.close(); }');
}
if(!isset($options['lang']))
$options['lang'] = ElFinder::getSupportedLanguage(Yii::$app->language);
if(!empty($this->disabledCommands))
$options['commands'] = new JsExpression('ElFinderGetCommands('.Json::encode($this->disabledCommands).')');
if(isset($this->managerOptions['handlers'])) {
$handlers = [];
foreach ($this->managerOptions['handlers'] as $event => $js) {
$handlers[$event] = new JsExpression($js);
}
$this->managerOptions['handlers'] = $handlers;
}
return ArrayHelper::merge($options, $this->managerOptions);
}
public function actionManager(){
return $this->renderFile(__DIR__."/views/manager.php", ['options'=>$this->getManagerOptions()]);
}
}