PageRenderTime 78ms CodeModel.GetById 27ms RepoModel.GetById 0ms app.codeStats 0ms

/tags/skeleditor/spip_200/exec/skeleditor.php

https://bitbucket.org/pombredanne/spip-zone-treemap
PHP | 201 lines | 155 code | 23 blank | 23 comment | 54 complexity | 55de19920597786cbb3b424fae3098a4 MD5 | raw file
  1. <?php
  2. if (!defined("_ECRIRE_INC_VERSION")) return;
  3. include_spip('inc/presentation');
  4. include_spip('skeleditor_fonctions');
  5. function exec_skeleditor(){
  6. global $spip_lang_right;
  7. $img_extension = array("jpg","png","gif","ico","bmp");
  8. $listed_extension = array("htm","html","xml","svg","php","php3","php4","py","sh","sql","css","rdf","txt","nfo","log","js","as","csv");
  9. // check rights
  10. global $connect_statut;
  11. global $connect_toutes_rubriques;
  12. if ($connect_statut != '0minirezo' OR !$connect_toutes_rubriques) {
  13. $commencer_page = charger_fonction('commencer_page', 'inc');
  14. echo $commencer_page(_T("skeleditor:editer_skel"),_T("skeleditor:editer_skel"),_T("skeleditor:editer_skel"));
  15. echo _T('avis_non_acces_page');
  16. fin_page();
  17. exit;
  18. }
  19. // globals
  20. $dossier_squelettes = reset(get_spip_path());
  21. if (@is_readable(_DIR_SESSIONS."charger_plugins_fonctions.php")){ // utile ?
  22. // chargement optimise precompile
  23. include_once(_DIR_SESSIONS."charger_plugins_fonctions.php");
  24. }
  25. $files_editable = parse_path($dossier_squelettes,array_merge($listed_extension,$img_extension));
  26. $files_editable = sort_directory_first($files_editable,$dossier_squelettes); // utile ?
  27. $path_list = array_keys(array_flip(array_map('dirname',$files_editable)));
  28. // ---------------------------------------------------------------------------
  29. // operation ?
  30. // ---------------------------------------------------------------------------
  31. $log = "";
  32. $safe_flag = false;
  33. // POST request ?
  34. if (isset($_POST['editor'])) { // save file ?
  35. $editor = $_POST['editor'];
  36. $editor = str_replace("&lt;/textarea","</textarea",$editor); // exception: textarea closing tag
  37. if (isset($_GET['f'])){
  38. $file_name = $_GET['f'];
  39. } else $file_name = "";
  40. if (is_writable($file_name) && check_file_allowed($file_name,$files_editable)) {
  41. if (!$handle = fopen($file_name, 'w')) {
  42. $log = "<span style='color:red'>"._T("skeleditor:erreur_ouverture_fichier")."</span>";
  43. } else if (fwrite($handle, $editor) === FALSE) {
  44. $log = "<span style='color:red'>"._T("skeleditor:erreur_ecriture_fichier")."</span>";
  45. } else {
  46. $log = "<span style='color:green'>"._T("skeleditor:fichier_sauvegarde_date").date('H:i')."</span>";
  47. fclose($handle);
  48. }
  49. } else {
  50. $log = "<span style='color:red'>"._T("skeleditor:erreur_edition_ecriture")."</span>";
  51. }
  52. }
  53. // FILES request ?
  54. if (isset($_FILES['upf'])) { // upload file ?
  55. $tmp_name = $_FILES['upf']['tmp_name'];
  56. if (isset($_POST['target'])) {
  57. $target = ($_POST['target'])."/".$_FILES['upf']['name']; // security
  58. if (check_file_allowed($target,$files_editable,true)) { // security
  59. $_GET['f'] = $target;
  60. $_GET['operation'] = 'preview';
  61. if (file_exists($target)) {
  62. $log = "<span style='color:red'>"._T('skeleditor:erreur_overwrite')."</span>";
  63. } else {
  64. $ok = @copy($tmp_name, $target);
  65. if (!$ok) $ok = @move_uploaded_file($tmp_name, $target);
  66. if (!$ok) $log = "<span style='color:red'>"._T('skeleditor:erreur_droits')."</span>";
  67. else $log = "<span style='color:green'>"._T('skeleditor:fichier_upload_ok')."</span>";
  68. }
  69. } else {
  70. $log = "<span style='color:red'>"._T('skeleditor:erreur_sansgene')."</span>";
  71. }
  72. }
  73. }
  74. // GET request ?
  75. $operation = "";
  76. if (isset($_GET['f'])) {
  77. $file_name = $_GET['f'];
  78. // check security first
  79. if (isset($_GET['target'])) { // exception: new file
  80. $target = $_GET['target'];
  81. $file_name = $target."/".$file_name;
  82. $safe_flag = check_file_allowed($file_name,$files_editable,true);
  83. } else if (isset($_FILES['upf'])) { // exception: upload file
  84. $safe_flag = check_file_allowed($file_name,$files_editable,true);
  85. } else {
  86. $safe_flag = check_file_allowed($file_name,$files_editable);
  87. }
  88. if (isset($_GET['operation']) && $safe_flag) { // any operation on file ?
  89. $operation = $_GET['operation'];
  90. if ($operation=="delete") { // delete the file
  91. @unlink($file_name);
  92. } else if ($operation=="download") { // download the file
  93. if ($file_tmp = @file("$file_name")) {
  94. $file_name_nopath = basename($file_name);
  95. $file_str = implode ('',$file_tmp);
  96. //header("Content-type: text/plain"); // text/plain or binary ....
  97. header("Content-Disposition: attachment; filename=\"$file_name_nopath\"");
  98. echo $file_str;
  99. exit;
  100. }
  101. } else if ($operation=="new") { // add new file
  102. if (isset($_GET['target'])) {
  103. // FIXME: check if allowed extension ?
  104. if (is_file($file_name)) { // security : ovewrite ?
  105. $log = "<span style='color:red'>"._T("skeleditor:erreur_overwrite")."</span>";
  106. } else {
  107. if (!$handle = fopen($file_name, 'w')) {
  108. $log = "<span style='color:red'>"._T("skeleditor:erreur_droits")."</span>";
  109. } else if (fwrite($handle, "...") === FALSE) {
  110. $log = "<span style='color:red'>"._T("skeleditor:erreur_droits")."</span>";
  111. } else {
  112. $log = "<span style='color:green'>"._T("skeleditor:fichier_sauvegarde_date").date('H:i')."</span>";
  113. fclose($handle);
  114. }
  115. }
  116. }
  117. }
  118. // refresh file list after operation
  119. $files_editable = parse_path($dossier_squelettes,array_merge($listed_extension,$img_extension));
  120. }
  121. } else {
  122. $file_name = "";
  123. }
  124. // ---------------------------------------------------------------------------
  125. // HTML output
  126. // ---------------------------------------------------------------------------
  127. $commencer_page = charger_fonction('commencer_page', 'inc');
  128. $out = $commencer_page(_T("skeleditor:editer_skel"),_T("skeleditor:editer_skel"),_T("skeleditor:editer_skel"));
  129. $out .= gros_titre(_T('skeleditor:editer_skel'),'',false);
  130. $out .= debut_gauche('', true);
  131. $out .= debut_boite_info(true)._T('skeleditor:skeleditor_description')."<p>"._T("skeleditor:skeleditor_dossier")." <strong>$dossier_squelettes</strong></p>".skeleditor_afficher_dir_skel($files_editable,$file_name,$img_extension).skeleditor_addfile($path_list).skeleditor_uploadfile($path_list);
  132. $out .= fin_boite_info(true);
  133. $out .= debut_droite('', true);
  134. // something to do ?
  135. if ($file_name!="") {
  136. if ($safe_flag) {
  137. $out .= "<div>"._T("skeleditor:fichier")."<strong>$file_name</strong> $log</div>\n"; // add extra infos on file: size ? date ? ...
  138. if ($operation=="delete") {
  139. $out .= "<p style='color:green'>"._T("skeleditor:fichier_efface_ok")."</p>\n";
  140. } else {
  141. // tools bar
  142. $out .= "<div id='skel_toolbar' style='width:100%;text-align:right;'>\n";
  143. $out .= "<img src='"._DIR_PLUGIN_SKELEDITOR."spip_200/img_pack/action_dl.png' alt='download' /><a href=\"?exec=skeleditor&amp;f=".urlencode($file_name)."&amp;operation=download\">"._T("skeleditor:telecharger")."</a>";
  144. $out .= "<img src='"._DIR_PLUGIN_SKELEDITOR."spip_200/img_pack/action_del.png' alt='delete' /><a href=\"?exec=skeleditor&amp;f=".urlencode($file_name)."&amp;operation=delete\" onclick=\"javascript:return confirm('"._T("skeleditor:effacer_confirme")."');\">"._T("skeleditor:effacer")."</a>";
  145. $out .= "</div>\n";
  146. // img or text ?
  147. $extension = strtolower(substr($file_name, strrpos($file_name,".")+1));
  148. if (in_array($extension,$img_extension)) { // display file as img
  149. $out .= "<div style='border:1px solid #333;padding:20px;background:#eee'><img src='$file_name' alt='picture' /></div>\n";
  150. list($width, $height) = @getimagesize($file_name);
  151. $out .= "<small>$width x $height pixels</small>\n";
  152. } else { // edit file as text
  153. if ($file_tmp = @file("$file_name")) {
  154. $file_str = implode ('',$file_tmp);
  155. // FIXME pour l'instant on n'affiche plus le debug de boucle
  156. // if (($extension=='html') && (_request(debug)!='true')) $out .= skel_parser($file_str); // experimental
  157. $file_str = str_replace("&","&amp;",$file_str); // preserve html entities
  158. $file_str = str_replace("</textarea","&lt;/textarea",$file_str); // exception: textarea closing tag
  159. //$out .= generer_url_post_ecrire('skeleditor',"retour=skeleditor&f=".urlencode($file_name));
  160. $out .= "<form method='post' operation='?exec=skeleditor&f=".urlencode($file_name)."'>"; //FIX temporaire --> tout integrer ds CVT
  161. $out .= "<textarea name='editor' cols='80' rows='50'>$file_str</textarea>\n";
  162. $out .= "<div style='text-align:$spip_lang_right'><input type='submit' name='operation' value='"._T("skeleditor:sauver")."' class='fondo'></div>";
  163. $out .= "</form>\n";
  164. } else {
  165. $out .= "<p style='color:red'>"._T("skeleditor:erreur_ouvert_ecrit")."</p>\n";
  166. }
  167. }
  168. }
  169. } else { // security failure
  170. $out .= "<div style='color:red'>"._T('skeleditor:erreur_sansgene')."</div>\n";
  171. }
  172. } else {
  173. $out .= "<p>"._T("skeleditor:fichier_choix")."</p>\n";
  174. }
  175. // pied
  176. echo $out, fin_gauche(), fin_page();
  177. }
  178. ?>