PageRenderTime 71ms CodeModel.GetById 31ms RepoModel.GetById 1ms app.codeStats 0ms

/e107_handlers/tiny_mce/plugins/ibrowser/ibrowser.php

https://github.com/e107/e107
PHP | 516 lines | 393 code | 86 blank | 37 comment | 54 complexity | 7745a960c684722db8f85a8c7e7c417e MD5 | raw file
  1. <?php
  2. // ================================================
  3. // tinymce PHP WYSIWYG editor control
  4. // ================================================
  5. // Image library dialog
  6. // ================================================
  7. // Developed: j-cons.com, mail@j-cons.com
  8. // Copyright: j-cons (c)2004 All rights reserved.
  9. // ------------------------------------------------
  10. // www.j-cons.com
  11. // ================================================
  12. // $Revision: 11346 Date: 2004/10/04
  13. // ================================================
  14. //
  15. // $URL: https://e107.svn.sourceforge.net/svnroot/e107/trunk/e107_0.7/e107_handlers/tiny_mce/plugins/ibrowser/ibrowser.php $
  16. // $Revision: 12106 $
  17. // $Id: ibrowser.php 12106 2011-03-15 04:16:33Z e107coders $
  18. // +----------------------------------------------------------------------------+
  19. // Major Re-work by CaMer0n
  20. if(!defined('e_TOKEN_FREEZE'))
  21. {
  22. define('e_TOKEN_FREEZE', true);
  23. }
  24. // unset $tinyMCE_imglib_include
  25. require_once("../../../../class2.php");
  26. if (!defined('e107_INIT')) { exit; }
  27. unset($tinyMCE_imglib_include);
  28. // include image library config settings
  29. include 'config.php';
  30. // $request_uri = urldecode(empty($_POST['request_uri'])?(empty($_GET['request_uri'])?'':$_GET['request_uri']):$_POST['request_uri']);
  31. // if set include file specified in $tinyMCE_imglib_include
  32. if (!empty($tinyMCE_imglib_include))
  33. {
  34. include $tinyMCE_imglib_include;
  35. }
  36. $imglib = isset($_POST['lib'])?$_POST['lib']:'';
  37. if (empty($imglib) && isset($_GET['lib'])) $imglib = $_GET['lib'];
  38. $value_found = false;
  39. // callback function for preventing listing of non-library directory
  40. function is_array_value($value, $key, $_imglib)
  41. {
  42. global $value_found;
  43. if (is_array($value)) array_walk($value, 'is_array_value',$_imglib);
  44. if ($value == $_imglib){
  45. $value_found=true;
  46. }
  47. }
  48. array_walk($tinyMCE_imglibs, 'is_array_value',$imglib);
  49. if (!$value_found || empty($imglib))
  50. {
  51. $imglib = $tinyMCE_imglibs[0]['value'];
  52. }
  53. $lib_options = liboptions($tinyMCE_imglibs,'',$imglib);
  54. $img = isset($_POST['imglist'])? $_POST['imglist']:'';
  55. $preview = e_IMAGE."generic/blank.gif";
  56. $errors = array();
  57. if(is_readable("langs/".e_LANGUAGE.".php"))
  58. {
  59. include_once("langs/".e_LANGUAGE.".php");
  60. }
  61. else
  62. {
  63. include_once("langs/English.php");
  64. }
  65. $_root = e_BASE;
  66. $d = @dir(e_BASE.$imglib);
  67. echo "
  68. <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
  69. <html>
  70. <head>
  71. <title>".$lang_ibrowser_title."</title>
  72. <script type=\"text/javascript\" src=\"../../tiny_mce_popup.js\"></script>
  73. <meta http-equiv=\"Pragma\" content=\"no-cache\" />
  74. <meta http-equiv=\"Content-Type\" content=\"text/html; charset=". CHARSET."\" />
  75. <script type=\"text/javascript\">
  76. //<![CDATA[
  77. ";
  78. ?>
  79. // click ok - select picture or save changes
  80. function selectClick() {
  81. // if (validateParams()) {
  82. if (document.forms[0].src.value !='') {
  83. var src = document.forms[0].src.value;
  84. var alt = document.forms[0].alt.value;
  85. var border = document.forms[0].border.value;
  86. var width = document.forms[0].width.value;
  87. var height = document.forms[0].height.value;
  88. var margleft = document.forms[0].margin_left.value;
  89. var margright = document.forms[0].margin_right.value;
  90. var margtop = document.forms[0].margin_top.value;
  91. var margbottom = document.forms[0].margin_bottom.value;
  92. var cssfloat = document.forms[0].align.options[document.forms[0].align.selectedIndex].value;
  93. var css_style = "";
  94. css_style = 'width:' + width + 'px; height:' + height + 'px; border:' + border + 'px solid black; ';
  95. css_style = (cssfloat) ? css_style + 'float: ' + cssfloat + '; ' : css_style;
  96. css_style = (margleft != 0) ? css_style + 'margin-left:' + margleft + 'px; ' : css_style;
  97. css_style = (margright != 0) ? css_style + 'margin-right:' + margright + 'px; ' : css_style;
  98. css_style = (margtop != 0) ? css_style + 'margin-top:' + margtop + 'px; ' : css_style;
  99. css_style = (margbottom != 0) ? css_style + 'margin-bottom:' + margbottom + 'px; ' : css_style;
  100. var html = '<img src=\''+ src +'\' alt=\''+ alt +'\' style=\'' + css_style + '\' />';
  101. // alert(html);
  102. tinyMCE.execCommand('mceInsertContent',false,html);
  103. tinyMCEPopup.close();
  104. } else {
  105. alert(tinyMCE.getLang('lang_ibrowser_error')+ ' : '+ tinyMCE.getLang('lang_ibrowser_errornoimg'));}
  106. }
  107. // }
  108. function validateParams() { // validate input values
  109. // check numeric values for attributes
  110. if (isNaN(parseInt(document.getElementById("width").value)) && document.getElementById("width").value != '') {
  111. alert(tinyMCE.getLang('lang_ibrowser_error')+ ' : '+ tinyMCE.getLang('lang_ibrowser_error_width_nan'));
  112. document.getElementById("width").focus();
  113. return false;}
  114. if (isNaN(parseInt(document.getElementById("height").value)) && document.getElementById("height").value != '') {
  115. alert(tinyMCE.getLang('lang_ibrowser_error')+ ' : '+ tinyMCE.getLang('lang_ibrowser_error_height_nan'));
  116. document.getElementById("height").focus();
  117. return false;}
  118. if (isNaN(parseInt(document.getElementById("border").value)) && document.getElementById("border").value != '') {
  119. alert(tinyMCE.getLang('lang_ibrowser_error')+ ' : '+ tinyMCE.getLang('lang_ibrowser_error_border_nan'));
  120. document.getElementById("border").focus();
  121. return false;}
  122. if (isNaN(parseInt(document.getElementById("hspace").value)) && document.getElementById("hspace").value != '') {
  123. alert(tinyMCE.getLang('lang_ibrowser_error')+ ' : '+ tinyMCE.getLang('lang_ibrowser_error_hspace_nan'));
  124. document.getElementById("hspace").focus();
  125. return false;}
  126. if (isNaN(parseInt(document.getElementById("vspace").value)) && document.getElementById("vspace").value != '') {
  127. alert(tinyMCE.getLang('lang_ibrowser_error')+ ' : '+ tinyMCE.getLang('lang_ibrowser_error_vspace_nan'));
  128. document.getElementById("vspace").focus();
  129. return false;}
  130. return true;
  131. }
  132. function deleteClick() // delete image
  133. {
  134. if (document.libbrowser.imglist.selectedIndex>=0)
  135. {
  136. if (confirm(tinyMCE.getLang('lang_ibrowser_confirmdelete')))
  137. {
  138. document.libbrowser.lib_action.value = 'delete';
  139. document.libbrowser.submit();
  140. }
  141. }
  142. }
  143. function selectChange(obj) // set picture attributes on change
  144. {
  145. var formObj = document.forms[0];
  146. var splitvar = obj.options[obj.selectedIndex].value.split("|");
  147. formObj.src.value = '<?php echo $tinyMCE_base_url.$imglib?>'+splitvar[3];
  148. formObj.width.value = splitvar[0];
  149. formObj.height.value = splitvar[1];
  150. formObj.size.value = splitvar[2];
  151. formObj.alt.value = splitvar[3];
  152. owidth = eval(formObj.width.value);
  153. oheight = eval(formObj.height.value);
  154. updateStyle();
  155. }
  156. function init() // init functions
  157. {
  158. var formObj = document.forms[0], nl = formObj.elements, ed = tinyMCEPopup.editor, dom = ed.dom, n = ed.selection.getNode();
  159. if (n.nodeName == 'IMG') // if existing image (image properties)
  160. {
  161. for (var i=0; i<formObj.align.options.length; i++)
  162. {
  163. if (document.forms[0].align.options[i].value == n.style.cssFloat)
  164. document.forms[0].align.options.selectedIndex = i;
  165. }
  166. formObj.src.value = dom.getAttrib(n, 'src');
  167. formObj.alt.value = dom.getAttrib(n, 'alt');
  168. formObj.border.value = n.style.borderLeftWidth.replace('px','');
  169. formObj.width.value = n.style.width.replace('px','');
  170. formObj.height.value = n.style.height.replace('px','');
  171. formObj.margin_left.value = n.style.marginLeft.replace('px','');
  172. formObj.margin_right.value = n.style.marginRight.replace('px','');
  173. formObj.margin_top.value = n.style.marginTop.replace('px','');
  174. formObj.margin_bottom.value = n.style.marginBottom.replace('px','');
  175. formObj.size.value = 'n/a';
  176. owidth = eval(formObj.width.value);
  177. oheight = eval(formObj.height.value);
  178. document.getElementById('imgpreview').src = formObj.src.value;
  179. // alert(document.getElementById('imgpreview').src);
  180. updateStyle();
  181. }
  182. window.focus();
  183. }
  184. function updateStyle() // updates style settings on preview
  185. {
  186. document.getElementById('wrap').style.marginLeft = document.getElementById('margin_left').value + 'px';
  187. document.getElementById('wrap').style.marginRight = document.getElementById('margin_right').value + 'px';
  188. document.getElementById('wrap').style.marginTop = document.getElementById('margin_top').value + 'px';
  189. document.getElementById('wrap').style.marginBottom = document.getElementById('margin_bottom').value + 'px';
  190. document.getElementById('wrap').style.borderWidth = document.getElementById('border').value + 'px';
  191. document.getElementById('wrap').alt = document.getElementById('alt').value;
  192. var AlignBox = document.getElementById("align");
  193. if(AlignBox.options[AlignBox.selectedIndex].value)
  194. {
  195. document.getElementById('wrap').style.cssFloat = AlignBox.options[AlignBox.selectedIndex].value;
  196. }
  197. }
  198. // change picture dimensions
  199. var oheight; // original width
  200. var owidth; // original height
  201. function changeDim(sel) {
  202. var formObj = document.forms[0];
  203. if (formObj.src.value!=''){
  204. f=oheight/owidth;
  205. if (sel==0){
  206. formObj.width.value = Math.round(formObj.height.value/f);
  207. } else {
  208. formObj.height.value= Math.round(formObj.width.value*f);}
  209. }
  210. }
  211. function resetDim() {
  212. var formObj = document.forms[0];
  213. formObj.width.value = owidth;
  214. formObj.height.value = oheight;
  215. }
  216. function show_image(obj) {
  217. var formObj = document.forms[0];
  218. var splitvar = obj.options[obj.selectedIndex].value.split("|");
  219. formObj.src.value = splitvar[3];
  220. // alert('<?php echo $tinyMCE_base_url.$imglib?>' + formObj.src.value);
  221. if (splitvar[3]) imgpreview.location.href = '<?php echo $tinyMCE_base_url.$imglib?>' + formObj.src.value;
  222. }
  223. // ]]>
  224. </script>
  225. <?php
  226. echo "</head>
  227. <body onload='init();'>
  228. <script type='text/javascript'>
  229. window.name = 'imglibrary';
  230. </script>
  231. <form id=\"libbrowser\" method=\"post\" action=\"ibrowser.php\" enctype=\"multipart/form-data\" target=\"imglibrary\">
  232. <div>
  233. <input type=\"hidden\" name=\"lib_action\" value=\"\" />
  234. <fieldset style= \"padding: 5px; margin-top: -5px;\">
  235. <legend>".$lang_ibrowser_img_sel."</legend>
  236. <table style='width:100%;border:0px' cellspacing=\"0\" cellpadding=\"0\">
  237. <tr>
  238. <td><table style='width:100%;border:0px' cellpadding=\"2\" cellspacing=\"0\">
  239. <tr>
  240. <td style='width:210px'><strong>".$lang_ibrowser_library.":</strong></td>
  241. <td style='width:5px'>&nbsp;</td>
  242. <td ><strong>".$lang_ibrowser_preview.":</strong></td>
  243. </tr>
  244. <tr>
  245. <td><select name=\"lib\" size=\"1\" style=\"width: 100%;\" onchange=\"this.form.submit();\">
  246. ".$lib_options."
  247. </select></td>
  248. <td>&nbsp;</td>
  249. <td style='border:0px;text-align:left;vertical-align:top' rowspan=\"3\"><iframe name=\"imgpreview\" id=\"imgpreview\" class=\"previewWindow\" src=\"".$preview."\" style=\"border:0px;width: 100%; height: 220px;overflow:auto\" ></iframe>
  250. </td>
  251. </tr>
  252. <tr>
  253. <td><strong>".$lang_ibrowser_images.":</strong></td>
  254. <td>&nbsp;</td>
  255. </tr>
  256. <tr>
  257. <td>
  258. <select name=\"imglist\" size=\"15\" style=\"width: 100%;\"
  259. onchange=\"show_image(this);selectChange(this);\" ondblclick=\"selectClick();\">\n";
  260. if ($d)
  261. {
  262. $i = 0;
  263. while (false !== ($entry = $d->read()))
  264. {
  265. $ext = strtolower(substr(strrchr($entry,'.'), 1));
  266. if (is_file($_root.$imglib.$entry) && in_array($ext,$tinyMCE_valid_imgs))
  267. {
  268. $arr_tinyMCE_image_files[$i][file_name] = $entry;
  269. $i++;
  270. }
  271. }
  272. $d->close();
  273. // sort the list of image filenames alphabetically.
  274. sort($arr_tinyMCE_image_files);
  275. for($k=0; $k<count($arr_tinyMCE_image_files); $k++)
  276. {
  277. $entry = $arr_tinyMCE_image_files[$k][file_name];
  278. $size = getimagesize($_root.$imglib.$entry);
  279. $fsize = filesize($_root.$imglib.$entry);
  280. $sel = ($entry == $img)? "selected='selected'" : "";
  281. echo "<option value='".$size[0]."|".$size[1]."|". filesize_h($fsize,2)."|". $entry."' $sel >". $entry ."</option>\n";
  282. }
  283. }
  284. else
  285. {
  286. $errors[] = '{$lang_ibrowser_errornodir}';
  287. }
  288. echo " </select></td>
  289. <td>&nbsp;</td>
  290. </tr>
  291. <tr>
  292. <td colspan=\"3\"><table style='width:100%;border:0px' cellspacing=\"0\" cellpadding=\"0\">
  293. <tr>
  294. <td style='width:40%'>";
  295. if ($tinyMCE_img_delete_allowed)
  296. {
  297. echo "<input type=\"button\" value=\"".$lang_ibrowser_delete."\" class=\"bt\" onclick=\"deleteClick();\" />";
  298. }
  299. echo "</td>
  300. <td align=\"right\"><input type=\"button\" name=\"selectbt\" value=\"{$lang_ibrowser_select}\" class=\"bt\" onclick=\"selectClick();\" />
  301. <input type=\"button\" value=\"".$lang_ibrowser_cancel."\" class=\"bt\" onclick=\"tinyMCEPopup.close();\" /></td>
  302. </tr>
  303. </table></td>
  304. </tr>
  305. </table></td>
  306. </tr>
  307. </table>
  308. </fieldset>
  309. <fieldset style= \"padding: 5px; margin-top: 10px;\">
  310. <legend>".$lang_ibrowser_img_info."</legend>
  311. <table style='width:440px;border:0px' cellspacing=\"0\" cellpadding=\"0\">
  312. <tr>
  313. <td><table style='width:440px;border:0px' cellpadding=\"2\" cellspacing=\"0\">
  314. <tr>
  315. <td style='width:80px'>".$lang_ibrowser_src.":</td>
  316. <td colspan=\"5\"><input name=\"src\" type=\"text\" id=\"src\" value=\"\" style=\"width: 100%;\" /></td>
  317. </tr>
  318. <tr>
  319. <td>".$lang_ibrowser_alt.":</td>
  320. <td colspan=\"5\"><input name=\"alt\" type=\"text\" id=\"alt\" value=\"\" style=\"width: 100%;\" onchange=\"updateStyle()\" /></td>
  321. </tr>
  322. <tr>
  323. <td>".$lang_ibrowser_align.":</td>
  324. <td colspan=\"3\">
  325. <select id='align' name='align' style=\"width: 100%;\" onchange=\"updateStyle()\">
  326. <option value=\"none\">".$lang_insert_image_align_default."</option>
  327. <option value=\"left\">".$lang_insert_image_align_left."</option>
  328. <option value=\"right\">".$lang_insert_image_align_right."</option>
  329. </select>
  330. </td>
  331. <td style='width:5%'>&nbsp;</td>
  332. <td rowspan=\"8\" style='text-align:left;vertical-align:top;width:210px;overflow:hidden'>
  333. <div id=\"stylepreview\" style=\"padding:10px; width: 200px; height:100%; overflow:hidden; background-color:#ffffff; font-size:8px\" class=\"previewWindow\">
  334. <p><img id=\"wrap\" src=\"images/textflow.gif\" width=\"45\" height=\"45\" alt=\"\" style=\"border:0px solid black; float:none; margin-left:0px; margin-right:0px; margin-top:0px; margin-bottom:0px\" />Lorem
  335. ipsum, Dolor sit amet, consectetuer adipiscing loreum ipsum
  336. edipiscing elit, sed diam nonummy nibh euismod tincidunt ut
  337. laoreet dolore magna aliquam erat volutpat.Loreum ipsum edipiscing
  338. elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
  339. magna aliquam erat volutpat. Ut wisi enim ad minim veniam,
  340. quis nostrud exercitation ullamcorper suscipit. Lorem ipsum,
  341. Dolor sit amet, consectetuer adipiscing loreum ipsum edipiscing
  342. elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore
  343. magna aliquam erat volutpat.</p>
  344. </div>
  345. </td>
  346. </tr>
  347. <tr>
  348. <td>".$lang_ibrowser_size.":</td>
  349. <td colspan=\"3\"><input name=\"size\" type=\"text\" id=\"size\" value=\"\" readonly=\"readonly\" style=\"width: 100%;\" /></td>
  350. <td>&nbsp;</td>
  351. </tr>
  352. <tr>
  353. <td>".$lang_ibrowser_height.":</td>
  354. <td style='width:40%'><input name=\"height\" type=\"text\" id=\"height\" value=\"\" size=\"5\" maxlength=\"4\" style=\"text-align: right;\" onchange=\"changeDim(0)\" /></td>
  355. <td style='width:25%' rowspan=\"2\" align=\"left\" valign=\"middle\">
  356. <a href=\"#\" onclick=\"resetDim();\" >
  357. <img src=\"images/constrain.gif\" alt=\"".$lang_ibrowser_reset."\" width=\"22\" height=\"29\" style='border:0px' />
  358. </a>
  359. </td>
  360. <td rowspan=\"2\">&nbsp;</td>
  361. <td>&nbsp;</td>
  362. </tr>
  363. <tr>
  364. <td>".$lang_ibrowser_width.":</td>
  365. <td><input name=\"width\" type=\"text\" id=\"width\" value=\"\" size=\"5\" maxlength=\"4\" style=\"text-align: right;\" onchange=\"changeDim(1)\" /></td>
  366. <td>&nbsp;</td>
  367. </tr>
  368. <tr>
  369. <td>".$lang_ibrowser_border.":</td>
  370. <td colspan=\"3\">
  371. <input name=\"border\" type=\"text\" id=\"border\" value=\"0\" size=\"5\" maxlength=\"4\" style=\"text-align: right;\" onchange=\"updateStyle()\" />px
  372. </td>
  373. <td>&nbsp;</td>
  374. </tr>
  375. <tr>
  376. <td>".$lang_ibrowser_marginl.":</td>
  377. <td colspan=\"3\"><input name=\"margin_left\" type=\"text\" id=\"margin_left\" value=\"0\" size=\"5\" maxlength=\"4\" style=\"text-align: right;\" onchange=\"updateStyle()\" />px
  378. </td>
  379. <td>&nbsp;</td>
  380. </tr>
  381. <tr>
  382. <td>".$lang_ibrowser_marginr.":</td>
  383. <td colspan=\"3\"><input name=\"margin_right\" type=\"text\" id=\"margin_right\" value=\"0\" size=\"5\" maxlength=\"4\" style=\"text-align: right;\" onchange=\"updateStyle()\" />px
  384. </td>
  385. <td>&nbsp;</td>
  386. </tr>
  387. <tr>
  388. <td>".$lang_ibrowser_margint.":</td>
  389. <td colspan=\"3\"><input name=\"margin_top\" type=\"text\" id=\"margin_top\" value=\"0\" size=\"5\" maxlength=\"4\" style=\"text-align: right;\" onchange=\"updateStyle()\" />px
  390. </td>
  391. <td>&nbsp;</td>
  392. </tr>
  393. <tr>
  394. <td>".$lang_ibrowser_marginb.":</td>
  395. <td colspan=\"3\"><input name=\"margin_bottom\" type=\"text\" id=\"margin_bottom\" value=\"0\" size=\"5\" maxlength=\"4\" style=\"text-align: right;\" onchange=\"updateStyle()\" />px
  396. </td>
  397. <td>&nbsp;</td>
  398. </tr>
  399. </table></td>
  400. </tr>
  401. </table>
  402. </fieldset>
  403. </div>
  404. </form>
  405. </body>
  406. </html>";
  407. function liboptions($arr, $prefix = '', $sel = '')
  408. {
  409. $buf = '';
  410. foreach($arr as $lib)
  411. {
  412. $buf .= '<option value="'.$lib['value'].'"'.(($lib['value'] == $sel)?' selected="selected"':'').'>'.$prefix.$lib['text'].'</option>'."\n";
  413. }
  414. return $buf;
  415. }
  416. // Return the human readable size of a file
  417. // @param int $size a file size
  418. // @param int $dec a number of decimal places
  419. function filesize_h($size, $dec = 1)
  420. {
  421. $sizes = array('byte(s)', 'kb', 'mb', 'gb');
  422. $count = count($sizes);
  423. $i = 0;
  424. while ($size >= 1024 && ($i < $count - 1)) {
  425. $size /= 1024;
  426. $i++;
  427. }
  428. return round($size, $dec) . ' ' . $sizes[$i];
  429. }
  430. ?>