1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
include_once('conf/conf.php'); |
4
|
|
|
|
5
|
|
|
/* images path for file browser */ |
6
|
|
|
|
7
|
|
|
$get_path = parse_url($_GET['images_path']); |
8
|
|
|
$img_dir = $get_path['path']; // ex : '/dir/img/' with or without slashes |
9
|
|
|
$current_path = parse_url($_SERVER['HTTP_REFERER']); |
10
|
|
|
$img_path = ''; // default |
11
|
|
|
if (preg_match('`^/`', $img_dir)) { // absolute url sended |
12
|
|
|
$img_path = $img_dir; |
13
|
|
|
if (!preg_match('`/$`', $img_dir)) { // add final slash if needed |
14
|
|
|
$img_path .= '/'; |
15
|
|
|
} |
16
|
|
|
} |
17
|
|
|
$root = rtrim($_SERVER['DOCUMENT_ROOT'], '/'); // remove final slash if needed |
18
|
|
|
if (!is_file($root . $img_path . 'secure.php')) { |
19
|
|
|
$security_msg = '<body><div class="container"><p> </p><p class="alert alert-danger">Your images dir is not authorized.</p><p class="text-center">Please create an empty file named <strong><i>secure.php</i></strong> and save it into <strong><i>' |
20
|
|
|
. $img_path |
21
|
|
|
. '</i></strong> to allow access.</p></div><body>'; |
22
|
|
|
} |
23
|
|
|
|
24
|
|
|
if (isset($_GET['imgSrc'])) { |
25
|
|
|
$imgSrc = preg_replace('/\r|\n/', '', urldecode($_GET['imgSrc'])); |
26
|
|
|
$imgAlt = preg_replace('/\r|\n/', '', urldecode($_GET['imgAlt'])); |
27
|
|
|
$imgWidth = preg_replace('/\r|\n/', '', urldecode($_GET['imgWidth'])); |
28
|
|
|
$imgHeight = preg_replace('/\r|\n/', '', urldecode($_GET['imgHeight'])); |
29
|
|
|
$imgStyle = preg_replace('/\r|\n/', '', urldecode($_GET['imgStyle'])); |
30
|
|
|
$imgResponsive = preg_replace('/\r|\n/', '', urldecode($_GET['imgResponsive'])); |
31
|
|
|
$imgCode = build_image(); |
32
|
|
|
} else { |
33
|
|
|
$imgSrc = str_replace('bootstrap-image.php', '', $_SERVER['SCRIPT_NAME']) . 'img/tinymce-bootstrap-plugin-small-preview.png'; |
34
|
|
|
$imgAlt = ''; |
35
|
|
|
$imgWidth = ''; |
36
|
|
|
$imgHeight = ''; |
37
|
|
|
$imgStyle = ''; |
38
|
|
|
$imgResponsive = 'true'; |
39
|
|
|
$imgCode = build_image(); |
40
|
|
|
} |
41
|
|
|
|
42
|
|
|
function build_image() |
43
|
|
|
{ |
44
|
|
|
global $imgSrc; |
45
|
|
|
global $imgAlt; |
46
|
|
|
global $imgWidth; |
47
|
|
|
global $imgHeight; |
48
|
|
|
global $imgStyle; |
49
|
|
|
global $imgResponsive; |
50
|
|
|
if (@getimagesize($imgSrc) || @getimagesize($_SERVER['DOCUMENT_ROOT'] . $imgSrc)) { |
51
|
|
|
$info = new SplFileInfo($imgSrc); |
52
|
|
|
if (preg_match('`jpg|jpeg|png|gif`', strtolower($info))) { |
53
|
|
|
$img = '<img src="' . $imgSrc . '"'; |
54
|
|
|
if (!empty($imgWidth)) { |
55
|
|
|
$img .= ' width="' . $imgWidth . '"'; |
56
|
|
|
} |
57
|
|
|
if (!empty($imgHeight)) { |
58
|
|
|
$img .= ' height="' . $imgHeight . '"'; |
59
|
|
|
} |
60
|
|
|
$imgClass = ''; |
61
|
|
|
if (!empty($imgStyle)) { |
62
|
|
|
$imgClass .= $imgStyle; |
63
|
|
|
} |
64
|
|
|
if ('false' !== $imgResponsive) { |
65
|
|
|
if (empty($imgClass)) { |
66
|
|
|
$imgClass = 'img-responsive'; |
67
|
|
|
} else { |
68
|
|
|
$imgClass .= ' img-responsive'; |
69
|
|
|
} |
70
|
|
|
} |
71
|
|
|
if (!empty($imgClass)) { |
72
|
|
|
$img .= ' class="' . $imgClass . '"'; |
73
|
|
|
} |
74
|
|
|
$img .= ' alt="' . $imgAlt . '"'; |
75
|
|
|
$img .= ' />'; |
76
|
|
|
|
77
|
|
|
return $img; |
78
|
|
|
} |
79
|
|
|
} else { |
80
|
|
|
return false; |
81
|
|
|
} |
82
|
|
|
} |
83
|
|
|
|
84
|
|
|
?> |
85
|
|
|
<!DOCTYPE html> |
86
|
|
|
<html lang="fr"> |
87
|
|
|
<head> |
88
|
|
|
<link rel="stylesheet" href="<?php echo $bootstrap_css_path; ?>"> |
89
|
|
|
<link rel="stylesheet" href="css/plugin.min.css"> |
90
|
|
|
<link href='jquery-file-tree/jqueryFileTree.css' rel='stylesheet' type='text/css'> |
91
|
|
|
<link href="<?php echo PRISM_CSS; ?>" type="text/css" rel="stylesheet"/> |
92
|
|
|
</head> |
93
|
|
|
<?php |
94
|
|
|
if (isset($security_msg)) { |
95
|
|
|
exit($security_msg); |
96
|
|
|
} |
97
|
|
|
?> |
98
|
|
|
<body> |
99
|
|
|
<div class="container"> |
100
|
|
|
<div class="row margin-bottom-md"> |
101
|
|
|
<div class="choice-title"> |
102
|
|
|
<span><?php echo IMAGE; ?></span> |
103
|
|
|
</div> |
104
|
|
|
<div class="col-sm-6 text-center margin-bottom-md"> |
105
|
|
|
<button type="button" class="btn btn-primary" id="browseBtn"><?php echo BROWSE; ?></button> |
106
|
|
|
</div> |
107
|
|
|
<div class="col-sm-6 text-center" id="thumb-div"> |
108
|
|
|
<?php echo $imgCode; ?> |
109
|
|
|
</div> |
110
|
|
|
</div> |
111
|
|
|
<div class="row margin-bottom-md"> |
112
|
|
|
<div class="choice-title"> |
113
|
|
|
<span><?php echo IMAGE_STYLE; ?></span> |
114
|
|
|
</div> |
115
|
|
|
<div class="col-md-12"> |
116
|
|
|
<div class="text-center"> |
117
|
|
|
<div class="choice selector select-style"> |
118
|
|
|
<img src="<?php echo $imgSrc; ?>" class="" data-attr="none"><br><br> |
119
|
|
|
<label>none</label> |
120
|
|
|
</div> |
121
|
|
|
<div class="choice selector select-style"> |
122
|
|
|
<img src="<?php echo $imgSrc; ?>" class="img-rounded"><br><br> |
123
|
|
|
<label>rounded</label> |
124
|
|
|
</div> |
125
|
|
|
<div class="choice selector select-style"> |
126
|
|
|
<img src="<?php echo $imgSrc; ?>" class="img-circle"><br><br> |
127
|
|
|
<label>circle</label> |
128
|
|
|
</div> |
129
|
|
|
<div class="choice selector select-style"> |
130
|
|
|
<img src="<?php echo $imgSrc; ?>" class="img-thumbnail"><br><br> |
131
|
|
|
<label>thumbnail</label> |
132
|
|
|
</div> |
133
|
|
|
</div> |
134
|
|
|
</div> |
135
|
|
|
</div> |
136
|
|
|
<div class="row"> |
137
|
|
|
<div class="choice-title"> |
138
|
|
|
<span><?php echo OTHERS; ?></span> |
139
|
|
|
</div> |
140
|
|
|
<div class="text-center col-xs-10 col-xs-offset-1"> |
141
|
|
|
<div class="form-horizontal col-sm-4"> |
142
|
|
|
<div class="form-group"> |
143
|
|
|
<label class="col-xs-6 text-right"><?php echo RESPONSIVE; ?> : </label> |
144
|
|
|
<div class="btn-group btn-toggle col-xs-6" id="responsive"> |
145
|
|
|
<button class="btn btn-sm btn-success active" data-attr="false"><?php echo NO; ?></button> |
146
|
|
|
<button class="btn btn-sm btn-default" data-attr="true"><?php echo YES; ?></button> |
147
|
|
|
</div> |
148
|
|
|
</div> |
149
|
|
|
</div> |
150
|
|
|
<div class="form-horizontal col-sm-4"> |
151
|
|
|
<div class="form-group"> |
152
|
|
|
<label class="col-xs-6 text-right" id="width-label"><?php echo WIDTH; ?> :</label> |
153
|
|
|
<div class="input-group col-xs-6"> |
154
|
|
|
<input type="text" class="form-control" name="img-width" id="img-width" value="<?php echo $imgWidth; ?>"> |
155
|
|
|
<span class="input-group-addon">px</span> |
156
|
|
|
</div> |
157
|
|
|
</div> |
158
|
|
|
</div> |
159
|
|
|
<div class="form-horizontal col-sm-4"> |
160
|
|
|
<div class="form-group"> |
161
|
|
|
<label class="col-xs-6 text-right" id="height-label"><?php echo HEIGHT; ?> :</label> |
162
|
|
|
<div class="input-group col-xs-6"> |
163
|
|
|
<input type="text" class="form-control" name="img-height" id="img-height" value="<?php echo $imgHeight; ?>"> |
164
|
|
|
<span class="input-group-addon">px</span> |
165
|
|
|
</div> |
166
|
|
|
</div> |
167
|
|
|
</div> |
168
|
|
|
<div class="form-horizontal col-sm-8 col-sm-offset-2"> |
169
|
|
|
<div class="form-group"> |
170
|
|
|
<label class="col-sm-4 col-xs-6 text-right" id="alt-label"><?php echo ALT_TEXT; ?> :</label> |
171
|
|
|
<div class="col-sm-8 col-xs-6"> |
172
|
|
|
<input type="text" class="form-control" name="img-alt" value="<?php echo $imgAlt; ?>"> |
173
|
|
|
</div> |
174
|
|
|
</div> |
175
|
|
|
</div> |
176
|
|
|
</div> |
177
|
|
|
</div> |
178
|
|
|
<div class="row" id="preview"> |
179
|
|
|
<div id="preview-title" class="margin-bottom-md"> |
180
|
|
|
<span class="btn-primary"><?php echo PREVIEW; ?></span> |
181
|
|
|
</div> |
182
|
|
|
<div class="col-sm-12 margin-bottom-md center-img text-center test-icon-wrapper" id="test-wrapper"> |
183
|
|
|
<?php echo $imgCode; ?> |
184
|
|
|
</div> |
185
|
|
|
</div> |
186
|
|
|
<div class="row"> |
187
|
|
|
<div id="code-title"> |
188
|
|
|
<a href="#" id="code-slide-link">code <i class="glyphicon glyphicon-arrow-up"></i></a> |
189
|
|
|
</div> |
190
|
|
|
<div class="col-sm-12 text-center" id="code-wrapper"> |
191
|
|
|
<pre><?php |
192
|
|
|
echo htmlspecialchars($imgCode, ENT_QUOTES | ENT_HTML5); |
193
|
|
|
?></pre> |
194
|
|
|
</div> |
195
|
|
|
</div> |
196
|
|
|
</div> |
197
|
|
|
<script type="text/javascript" src="<?php echo JQUERY_JS ?>"></script> |
198
|
|
|
<script type="text/javascript" src="<?php echo BOOTSTRAP_JS ?>"></script> |
199
|
|
|
<script type="text/javascript" src="js/utils.min.js"></script> |
200
|
|
|
<script type="text/javascript" src="js/jquery.htmlClean.min.js"></script> |
201
|
|
|
<script type="text/javascript" src="jquery-file-tree/jqueryFileTree.js"></script> |
202
|
|
|
<script type="text/javascript" src="<?php echo PRISM_JS; ?>"></script> |
203
|
|
|
<script type="text/javascript"> |
204
|
|
|
var imgSrc = '<?php echo $imgSrc; ?>'; |
205
|
|
|
var imgAlt = '<?php echo $imgAlt; ?>'; |
206
|
|
|
var imgWidth = '<?php echo $imgWidth; ?>'; |
207
|
|
|
var imgHeight = '<?php echo $imgHeight; ?>'; |
208
|
|
|
var imgStyle = '<?php echo $imgStyle; ?>'; |
209
|
|
|
var imgResponsive = <?php echo $imgResponsive; ?>; |
210
|
|
|
var imgCode = '<?php echo $imgCode; ?>'; |
211
|
|
|
var imgPath = '<?php echo $img_path; ?>'; |
212
|
|
|
$.noConflict(); |
213
|
|
|
jQuery(document).ready(function ($) { |
214
|
|
|
|
215
|
|
|
makeResponsive(); |
216
|
|
|
|
217
|
|
|
/* file browser */ |
218
|
|
|
|
219
|
|
|
$('#file-tree-wrapper').hide(); |
220
|
|
|
$('#browseBtn').on('click', function () { |
221
|
|
|
$('#file-tree-content').fileTree({root: imgPath}, function (file) { |
222
|
|
|
openFile(file); |
223
|
|
|
}); |
224
|
|
|
$('#file-tree-wrapper').fadeIn(500); |
225
|
|
|
}); |
226
|
|
|
$('#file-tree-wrapper').find('.btn-default').on('click', function () { |
227
|
|
|
$('#file-tree-wrapper').fadeOut(500); |
228
|
|
|
}); |
229
|
|
|
|
230
|
|
|
/* image style */ |
231
|
|
|
|
232
|
|
|
$('.selector.select-style').each(function (event, element) { |
233
|
|
|
|
234
|
|
|
/* set style on load */ |
235
|
|
|
|
236
|
|
|
if (imgStyle === '') { |
237
|
|
|
if ($(element).find('img').attr('data-attr') == "none") { |
238
|
|
|
$(element).addClass('active'); |
239
|
|
|
} |
240
|
|
|
} else if ($(element).find('img').hasClass(imgStyle)) { |
241
|
|
|
$(element).addClass('active'); |
242
|
|
|
} |
243
|
|
|
|
244
|
|
|
$(element).on('click', function (event) { |
245
|
|
|
$('.selector.select-style').removeClass('active'); |
246
|
|
|
imgStyle = $(this).find('img').attr('class'); |
247
|
|
|
$(this).addClass('active'); |
248
|
|
|
$('#test-wrapper').find('img').removeClass('img-rounded').removeClass('img-circle').removeClass('img-thumbnail').addClass(imgStyle); |
249
|
|
|
updateCode(); |
250
|
|
|
}); |
251
|
|
|
}); |
252
|
|
|
|
253
|
|
|
$('#responsive').on('click', changeImgResponsive); |
254
|
|
|
|
255
|
|
|
/* on load */ |
256
|
|
|
|
257
|
|
|
updateCode(); |
258
|
|
|
|
259
|
|
|
function changeImgResponsive() { |
260
|
|
|
var checked = toggleBtn(this); |
261
|
|
|
if (checked) { |
262
|
|
|
imgResponsive = true; |
263
|
|
|
$('#test-wrapper').find('img').addClass('img-responsive'); |
264
|
|
|
} else { |
265
|
|
|
imgResponsive = false; |
266
|
|
|
$('#test-wrapper').find('img').removeClass('img-responsive'); |
267
|
|
|
} |
268
|
|
|
updateCode(); |
269
|
|
|
} |
270
|
|
|
|
271
|
|
|
/* change image responsive (enabled/disabled) */ |
272
|
|
|
|
273
|
|
|
if (imgResponsive) { // on load |
274
|
|
|
$('#responsive').trigger('click'); |
275
|
|
|
} |
276
|
|
|
|
277
|
|
|
/* image width / height */ |
278
|
|
|
|
279
|
|
|
$('#img-width').on('keyup', function () { |
280
|
|
|
changeImgSize($(this).val(), 'width'); |
281
|
|
|
}); |
282
|
|
|
$('#img-height').on('keyup', function () { |
283
|
|
|
changeImgSize($(this).val(), 'height'); |
284
|
|
|
}); |
285
|
|
|
|
286
|
|
|
/* alt text */ |
287
|
|
|
|
288
|
|
|
$('input[name="img-alt"]').on('keyup', changeImgAlt); |
289
|
|
|
|
290
|
|
|
function changeImgAlt() { |
291
|
|
|
imgAlt = $('input[name="img-alt"]').prop('value'); |
292
|
|
|
$('#test-wrapper').find('img').attr('alt', imgAlt); |
293
|
|
|
updateCode(); |
294
|
|
|
} |
295
|
|
|
|
296
|
|
|
/** |
297
|
|
|
* changeImgSize |
298
|
|
|
* @param int val |
299
|
|
|
* @param string widthHeight 'width' or 'height' |
300
|
|
|
* @return void |
301
|
|
|
*/ |
302
|
|
|
function changeImgSize(val, widthHeight) { |
303
|
|
|
if (val % 1 === 0) { // check if val is an integer |
304
|
|
|
$('#test-wrapper').find('img').attr(widthHeight, val); |
305
|
|
|
} else { |
306
|
|
|
$('#test-wrapper').find('img').removeAttr(widthHeight); |
307
|
|
|
} |
308
|
|
|
updateCode(); |
309
|
|
|
} |
310
|
|
|
|
311
|
|
|
function openFile(file) { |
312
|
|
|
var extension = file.substr((file.lastIndexOf('.') + 1)).toLowerCase(); |
313
|
|
|
switch (extension) { |
314
|
|
|
case 'jpg': |
315
|
|
|
case 'jpeg': |
316
|
|
|
case 'png': |
317
|
|
|
case 'gif': |
318
|
|
|
$('#image-file-preview').html('<img src="' + file + '" alt="">'); |
319
|
|
|
$('#file-tree-wrapper').find('.btn-primary').removeAttr('disabled').on('click', function () { |
320
|
|
|
imgSrc = file; |
321
|
|
|
var img = $('<img>'); |
322
|
|
|
img.attr('src', imgSrc).attr('alt', imgAlt); |
323
|
|
|
if (imgWidth !== '') { |
324
|
|
|
img.attr('width', imgWidth); |
325
|
|
|
} |
326
|
|
|
if (imgHeight !== '') { |
327
|
|
|
img.attr('width', imgHeight); |
328
|
|
|
} |
329
|
|
|
if (imgStyle !== '') { |
330
|
|
|
img.addClass(imgStyle); |
331
|
|
|
} |
332
|
|
|
if (imgResponsive) { |
333
|
|
|
img.addClass('img-responsive'); |
334
|
|
|
} |
335
|
|
|
$('#thumb-div').html($('#image-file-preview').html()); |
336
|
|
|
$('#test-wrapper').html(img); |
337
|
|
|
updateCode(); |
338
|
|
|
$('#file-tree-wrapper').fadeOut(500); |
339
|
|
|
$('#image-file-preview').find('.btn-primary').attr('disabled'); |
340
|
|
|
}); |
341
|
|
|
break; |
342
|
|
|
default: |
343
|
|
|
$('#image-file-preview').html('<p class="alert alert-danger alert-dismissable"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button><?php echo PLEASE_CHOOSE_AN_IMAGE ?></p>'); |
344
|
|
|
$('#image-file-preview').find('.btn-primary').attr('disabled'); |
345
|
|
|
break; |
346
|
|
|
} |
347
|
|
|
} |
348
|
|
|
}); |
349
|
|
|
</script> |
350
|
|
|
<div id="file-tree-wrapper"> |
351
|
|
|
<div id="file-tree"> |
352
|
|
|
<div id="file-tree-content"></div> |
353
|
|
|
<p></p> |
354
|
|
|
<div class="row"> |
355
|
|
|
<div class="choice-title margin-bottom-md"> |
356
|
|
|
<span class="btn-primary"><?php echo PREVIEW; ?></span> |
357
|
|
|
</div> |
358
|
|
|
<div class="col-md-12"> |
359
|
|
|
<div id="image-file-preview"></div> |
360
|
|
|
<div class="btn-group pull-right"> |
361
|
|
|
<button type="button" class="btn btn-primary" disabled="disabled"><?php echo OK; ?></button> |
362
|
|
|
<button type="button" class="btn btn-default"><?php echo CANCEL; ?></button> |
363
|
|
|
</div> |
364
|
|
|
</div> |
365
|
|
|
</div> |
366
|
|
|
</div> |
367
|
|
|
</div> |
368
|
|
|
</body> |
369
|
|
|
</html> |
370
|
|
|
|