ElFinder.php
2.99 KB
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
<?php
/**
* Date: 22.01.14
* Time: 23:44
*/
namespace mihaildev\elfinder;
use Yii;
use yii\base\Widget as BaseWidjet;
use yii\helpers\ArrayHelper;
use yii\helpers\Html;
use yii\helpers\Json;
/**
* Class Widget
* @package mihaildev\elfinder
*/
class ElFinder extends BaseWidjet{
public $language;
public $filter;
public $callbackFunction;
public $path;// work with PathController
public $containerOptions = [];
public $frameOptions = [];
public $controller = 'elfinder';
public static function getManagerUrl($controller, $params = [])
{
$params[0] = '/'.$controller."/manager";
return Yii::$app->urlManager->createUrl($params);
}
public static function ckeditorOptions($controller, $options = []){
if(is_array($controller)){
$id = $controller[0];
unset($controller[0]);
$params = $controller;
}else{
$id = $controller;
$params = [];
}
return ArrayHelper::merge([
'filebrowserBrowseUrl' => self::getManagerUrl($id, $params),
'filebrowserImageBrowseUrl' => self::getManagerUrl($id, ArrayHelper::merge($params, ['filter'=>'image'])),
'filebrowserFlashBrowseUrl' => self::getManagerUrl($id, ArrayHelper::merge($params, ['filter'=>'flash'])),
], $options);
}
public function init()
{
if(empty($this->language))
$this->language = self::getSupportedLanguage(Yii::$app->language);
$managerOptions = [];
if(!empty($this->filter))
$managerOptions['filter'] = $this->filter;
if(!empty($this->callbackFunction))
$managerOptions['callback'] = $this->id;
if(!empty($this->language))
$managerOptions['lang'] = $this->language;
if(!empty($this->path))
$managerOptions['path'] = $this->path;
$this->frameOptions['src'] = $this->getManagerUrl($this->controller, $managerOptions);
if(!isset($this->frameOptions['style'])){
$this->frameOptions['style'] = "width: 100%; height: 100%; border: 0;";
}
}
static function getSupportedLanguage($language)
{
$supportedLanguages = array('bg', 'jp', 'sk', 'cs', 'ko', 'th', 'de', 'lv', 'tr', 'el', 'nl', 'uk',
'es', 'no', 'vi', 'fr', 'pl', 'zh_CN', 'hr', 'pt_BR', 'zh_TW', 'hu', 'ro', 'it', 'ru', 'en');
if(!in_array($language, $supportedLanguages)){
if (strpos($language, '-')){
$language = str_replace('-', '_', $language);
if(!in_array($language, $supportedLanguages)) {
$language = substr($language, 0, strpos($language, '_'));
if (!in_array($language, $supportedLanguages))
$language = false;
}
} else {
$language = false;
}
}
return $language;
}
public function run()
{
$container = 'div';
if(isset($this->containerOptions['tag'])){
$container = $this->containerOptions['tag'];
unset($this->containerOptions['tag']);
}
echo Html::tag($container, Html::tag('iframe','', $this->frameOptions), $this->containerOptions);
if(!empty($this->callbackFunction)){
AssetsCallBack::register($this->getView());
$this->getView()->registerJs("mihaildev.elFinder.register(".Json::encode($this->id).",".Json::encode($this->callbackFunction).");");
}
}
}