forked from zxbodya/yii-elfinder
/
ImageFileInput.php
executable file
·120 lines (111 loc) · 4.83 KB
/
ImageFileInput.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
<?php
class ImageFileInput extends CInputWidget
{
public $settings = array();
public $connectorRoute = false;
private $assetsDir;
public function init()
{
$dir = dirname(__FILE__) . '/assets';
$this->assetsDir = Yii::app()->assetManager->publish($dir);
$cs = Yii::app()->getClientScript();
if(Yii::app()->getRequest()->enableCsrfValidation){
$csrfTokenName = Yii::app()->request->csrfTokenName;
$csrfToken = Yii::app()->request->csrfToken;
Yii::app()->clientScript->registerMetaTag($csrfToken, 'csrf-token');
Yii::app()->clientScript->registerMetaTag($csrfTokenName, 'csrf-param');
}
$cs->registerCssFile($cs->getCoreScriptUrl() . '/jui/css/base/jquery-ui.css');
$cs->registerCoreScript('jquery');
$cs->registerCoreScript('jquery.ui');
$cs->registerCssFile($this->assetsDir . '/css/elfinder.css');
if (YII_DEBUG) {
$cs->registerScriptFile($this->assetsDir . '/js/elfinder.full.js');
} else {
$cs->registerScriptFile($this->assetsDir . '/js/elfinder.min.js');
}
$langs = 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');
$lang = Yii::app()->language;
if (!in_array($lang, $langs)) {
if (strpos($lang, '_')) {
$lang = substr($lang, 0, strpos($lang, '_'));
if (!in_array($lang, $langs)) $lang = false;
} else {
$lang = false;
}
}
if ($lang !== false)
$cs->registerScriptFile($this->assetsDir . '/js/i18n/elfinder.' . $lang . '.js');
if (empty($this->connectorRoute))
throw new CException('$connectorRoute must be set!');
$this->settings['url'] = Yii::app()->createUrl($this->connectorRoute);
$this->settings['lang'] = Yii::app()->language;
}
public function run()
{
list($name, $id) = $this->resolveNameID();
if (isset($this->htmlOptions['id']))
$id = $this->htmlOptions['id'];
else
$this->htmlOptions['id'] = $id;
if (isset($this->htmlOptions['name']))
$name = $this->htmlOptions['name'];
else
$this->htmlOptions['name'] = $name;
$contHtmlOptions = $this->htmlOptions;
$contHtmlOptions['id'] = $id . 'container';
echo CHtml::openTag('div', $contHtmlOptions);
$inputOptions = array('id' => $id);
if ($this->hasModel()) {
echo CHtml::activeHiddenField($this->model, $this->attribute, $inputOptions);
$imgPath = $this->model->{$this->attribute};
} else {
echo CHtml::hiddenField($name, $this->value, $inputOptions);
$imgPath = $this->value;
}
if(!@getimagesize($imgPath)){
$imgPath = $this->assetsDir . '/images/no-photo.gif';
}
echo CHtml::image($imgPath, 'preview', array('id' => 'image-preview-'.$id, 'style' => 'max-width: 120px; max-height: 120px; display: block; margin-bottom: 10px;'));
echo CHtml::button('Browse', array('id' => $id . 'browse', 'class' => 'btn'));
echo CHtml::closeTag('div');
$settings = array_merge(array(
'places' => "",
'rememberLastDir' => false,),
$this->settings
);
$settings['dialog'] = array(
'zIndex' => 400001,
'width' => 900,
'modal' => true,
'title' => "Files",
);
$settings['editorCallback'] = 'js:function(url) {
$(\'#\'+aFieldId).attr(\'value\',url);
$(\'#image-preview-\'+aFieldId).attr(\'src\',url);
}';
$settings['closeOnEditorCallback'] = true;
$connectorUrl = CJavaScript::encode($this->settings['url']);
$settings = CJavaScript::encode($settings);
$script = <<<EOD
window.elfinderBrowse = function(field_id, connector) {
var aFieldId = field_id, aWin = this;
if($("#elFinderBrowser").length == 0) {
$("body").append($("<div/>").attr("id", "elFinderBrowser"));
var settings = $settings;
settings["url"] = connector;
$("#elFinderBrowser").elfinder(settings);
}
else {
$("#elFinderBrowser").elfinder("open", connector);
}
}
EOD;
$cs = Yii::app()->getClientScript();
$cs->registerScript('ServerFileInput#global', $script);
$js = //'$("#'.$id.'").focus(function(){window.elfinderBrowse("'.$name.'")});'.
'$("#' . $id . 'browse").click(function(){window.elfinderBrowse("' . $id . '", '.$connectorUrl.')});';
$cs->registerScript('ServerFileInput#' . $id, $js);
}
}