PageRenderTime 46ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 1ms

/system/php/modules/object_actions.php

https://github.com/loopByte/wiode
PHP | 812 lines | 576 code | 109 blank | 127 comment | 107 complexity | 44b825a7c55418466ad51e3334c454bc MD5 | raw file
Possible License(s): GPL-3.0, GPL-2.0, BSD-3-Clause, BSD-2-Clause, Apache-2.0
  1. <?php
  2. /*
  3. * This file is part of the WIODE Web IDE Application, developed and
  4. * distributed by Kent Safranski and the WIODE team.
  5. * <http://www.wiode.org>
  6. *
  7. * This program is free software: you can redistribute it and/or modify
  8. * it under the terms of the GNU General Public License as published by
  9. * the Free Software Foundation, either version 3 of the License, or
  10. * (at your option) any later version.
  11. *
  12. * This program is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. * GNU General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU General Public License
  18. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  19. */
  20. if(!$api_call){
  21. // Load Config File & Check Token ########################################################
  22. function changeDir($up_n){
  23. $split = explode("/",$_SERVER['SCRIPT_FILENAME']); array_pop($split);
  24. for ($i=1; $i<=$up_n; $i++){ array_pop($split); } return implode("/",$split);
  25. }
  26. require_once(changeDir(3)."/config.php");
  27. require_once(changeDir(1)."/check_token.php");
  28. // #######################################################################################
  29. }
  30. // Set reloader for file manager
  31. $reload = false;
  32. // Set load file
  33. $loadfile = false;
  34. $loadNonEditable = false;
  35. // Set duplicate object
  36. $duplicateObject = false;
  37. // Set rename object
  38. $renameObject = false;
  39. // Set delete object
  40. $deleteObject = false;
  41. // Set create object
  42. $createObject = false;
  43. // Set close file
  44. $closeFile = false;
  45. // Set view file
  46. $viewfile = false;
  47. // Get action type
  48. $action = htmlspecialchars($_GET['action']);
  49. $obj_extension = "";
  50. // Get object data
  51. $obj_id = mysql_real_escape_string($_GET['id']);
  52. if($obj_id=='root'){
  53. // Project root
  54. $obj_name = "";
  55. if($api_call){
  56. $obj_project = $_GET['project'];
  57. }else{
  58. $obj_project = mysql_real_escape_string($_SESSION['curproject']);
  59. }
  60. $rs = mysql_query("SELECT prj_name FROM wiode_projects WHERE prj_id=$obj_project");
  61. $row = mysql_fetch_array($rs);
  62. $obj_type = 0;
  63. $obj_path = $site['absroot'] . "/" . $row['prj_name'] . "/";
  64. }else{
  65. $rs = mysql_query("SELECT * FROM wiode_objects WHERE obj_id=$obj_id");
  66. $row = mysql_fetch_array($rs);
  67. $obj_project = $row['obj_project'];
  68. $obj_name = stripslashes($row['obj_name']);
  69. $obj_type = $row['obj_type'];
  70. $obj_parent = $row['obj_parent'];
  71. $obj_path = getPath($site,$obj_id,"");
  72. $obj_url = getPath($site,$obj_id,"",1);
  73. $obj_extension = "";
  74. if($obj_type==2){ $obj_extension = getExt($obj_name); }
  75. $rs = mysql_query("SELECT prj_name FROM wiode_projects WHERE prj_id=$obj_project");
  76. $row = mysql_fetch_array($rs);
  77. $prj_name = $row['prj_name'];
  78. }
  79. switch ($action){
  80. // Rescan a directory ###############################################################
  81. case 'rescan':
  82. scanDirectory($obj_project, $obj_id, $obj_path);
  83. echo("<script type=\"text/javascript\">$(function(){ reload(); });</script>");
  84. break;
  85. // Set 'Open' Value #################################################################
  86. case 'setopenval':
  87. $rs = mysql_query("SELECT * FROM wiode_user_state WHERE ust_obj_id=" . $obj_id);
  88. if(mysql_num_rows($rs)==0){
  89. // Set to open (create entry)
  90. $rs = mysql_query("INSERT INTO wiode_user_state (ust_usr_id, ust_obj_type, ust_obj_id) VALUES (" . mysql_real_escape_string($_SESSION['auth']) . ", 1, " . $obj_id . ")");
  91. }else{
  92. // Set to closed (delete entry)
  93. $row = mysql_fetch_array($rs);
  94. $rs = mysql_query("DELETE FROM wiode_user_state WHERE ust_id=" . $row['ust_id']);
  95. }
  96. break;
  97. // Duplicate Object #################################################################
  98. case 'duplicate':
  99. if(!isset($_GET['dp'])){
  100. ?>
  101. <p>Source Object:</p>
  102. <input type="text" value="<?php echo(str_replace($site['absroot'],"",$obj_path)); ?>" readonly="readonly" />
  103. <p>Destination Project:</p>
  104. <select id="dup_proj" onchange="loadFolderStack(this.value);">
  105. <?php
  106. if($obj_id!="root"){
  107. $rs = mysql_query("SELECT * FROM wiode_projects WHERE prj_status=0 ORDER BY prj_name");
  108. }else{
  109. $rs = mysql_query("SELECT * FROM wiode_projects WHERE prj_status=0 AND prj_id!=" . mysql_real_escape_string($_SESSION['curproject']) . " ORDER BY prj_name");
  110. }
  111. while($row=mysql_fetch_array($rs)){
  112. $selected = "";
  113. if($_SESSION['curproject']==$row['prj_id']){ $selected = "selected=\"selected\""; }
  114. echo("<option $selected value=\"" . htmlspecialchars($row['prj_id']) . "\">" . htmlspecialchars($row['prj_name']) . "</option>");
  115. }
  116. ?>
  117. </select>
  118. <p>Destination Folder:</p>
  119. <div id="dup_dest"></div>
  120. <input type="text" readonly="readonly" id="dup_dest_display" />
  121. <input type="button" class="bold" value="Build Copy" onclick="duplicateObject();" />
  122. <input type="button" value="Cancel" onclick="unloadModal();" />
  123. <?php
  124. }else{
  125. $dest_proj = mysql_real_escape_string($_GET['dp']);
  126. $dest_dir = mysql_real_escape_string($_GET['dd']);
  127. if($dest_dir==0){
  128. // Copy to project root
  129. $rs = mysql_query("SELECT * FROM wiode_projects WHERE prj_id=$dest_proj");
  130. $row = mysql_fetch_array($rs);
  131. $dest_path = $site['absroot'] . "/" . $row['prj_name'];
  132. //$obj_name = "";
  133. }else{
  134. $dest_path = getPath($site,$dest_dir,"");
  135. }
  136. $obj_path = rtrim($obj_path,"/");
  137. $dest_path_raw = $dest_path . "/" . $obj_name;
  138. $i = 0;
  139. $ext = getExt($obj_name);
  140. $raw_name = str_replace(".$ext","",$obj_name);
  141. // Root-to-root copy
  142. if($_GET['id']=='root' && $_GET['dd']==0){
  143. $dest_path = str_replace("//","/",$dest_path);
  144. }else{
  145. // Append (i) for duplicates
  146. if(file_exists($dest_path_raw)){
  147. $file_break = ""; if($obj_type==2){ $file_break = "."; }
  148. while(file_exists($dest_path_raw)){
  149. $i++;
  150. $raw_name = str_replace("($i)","",$raw_name);
  151. $new_name = $raw_name . "($i)" . $file_break . $ext;
  152. $dest_path_raw = $dest_path . "/" . $raw_name . "($i)" . $file_break . $ext;
  153. }
  154. $dest_path = $dest_path_raw;
  155. }else{
  156. $dest_path = $dest_path . "/" . $obj_name;
  157. $new_name = $obj_name;
  158. }
  159. }
  160. // Proceed with copy
  161. $GLOBALS['scriptDomDup']="";
  162. function createDupDomObject($obj_type,$obj_id,$obj_name,$obj_parent){
  163. if($obj_parent==0){ $obj_parent="root"; }
  164. if($obj_type==1){
  165. // Create folder
  166. $GLOBALS['scriptDomDup'] .= "var obj = '<li class=\"folder collapsed\"><span rel=\"" . $obj_id . "\" title=\"" . $obj_name . "\">" . shortenString($obj_name, 25) . "</span></li>';";
  167. }else{
  168. // Create file
  169. $obj_ext = getExt($obj_name);
  170. $GLOBALS['scriptDomDup'] .= "var obj = '<li class=\"file ext_" . $obj_ext . "\"><span rel=\"" . $obj_id . "\" title=\"" . $obj_name . "\">" . shortenString($obj_name, 25) . "</span></li>';";
  171. }
  172. $GLOBALS['scriptDomDup'] .= "var parent = $('#file_manager li span[rel=\"" . $obj_parent . "\"]').parent('li'); if(parent.children('ul').size()>0){ parent.children('ul:first').append(obj); }else{ parent.append('<ul>'+obj+'</ul>'); }";
  173. }
  174. if($obj_type==2){
  175. // Copy file
  176. @copy($obj_path,$dest_path);
  177. // Insert into db
  178. $rs = mysql_query("INSERT INTO wiode_objects (obj_project,obj_name,obj_type,obj_parent) VALUES (" . mysql_real_escape_string($_GET['dp']) . ",'" . mysql_real_escape_string($new_name) . "',2,$dest_dir)");
  179. // Create DOM object
  180. if($_SESSION['curproject']==$_GET['dp']){ createDupDomObject(2,mysql_insert_id(),$new_name,$dest_dir); }
  181. }else{
  182. // Copy directory
  183. function recurse_copy($src,$dst,$parent) {
  184. $dir = opendir($src);
  185. @mkdir($dst);
  186. // Insert into db
  187. $new_name = end(explode("/",$dst));
  188. $rs = mysql_query("INSERT INTO wiode_objects (obj_project,obj_name,obj_type,obj_parent) VALUES (" . mysql_real_escape_string($_GET['dp']) . ",'" . mysql_real_escape_string($new_name) . "',1,$parent)");
  189. // Create DOM object
  190. if($_SESSION['curproject']==$_GET['dp']){ createDupDomObject(1,mysql_insert_id(),$new_name,$parent); }
  191. $parent = mysql_insert_id();
  192. // Traverse
  193. while(false !== ($file = readdir($dir))) {
  194. if (( $file != '.' ) && ( $file != '..' )) {
  195. if (is_dir($src . '/' . $file)) {
  196. // Move to next
  197. recurse_copy($src . '/' . $file,$dst . '/' . $file,$parent);
  198. }
  199. else {
  200. // Insert into db
  201. $rs = mysql_query("INSERT INTO wiode_objects (obj_project,obj_name,obj_type,obj_parent) VALUES (" . mysql_real_escape_string($_GET['dp']) . ",'" . mysql_real_escape_string($file) . "',2,$parent)");
  202. // Create DOM object
  203. if($_SESSION['curproject']==$_GET['dp']){ createDupDomObject(2,mysql_insert_id(),$file,$parent); }
  204. @copy($src . '/' . $file,$dst . '/' . $file);
  205. }
  206. }
  207. }
  208. closedir($dir);
  209. }
  210. recurse_copy($obj_path,$dest_path,$dest_dir);
  211. }
  212. ?>
  213. <p>Copy Procedure Complete.</p>
  214. <?php
  215. $duplicateObject = true;
  216. }
  217. break;
  218. // Rename Object ####################################################################
  219. case 'rename':
  220. // Define form
  221. $renameForm = "<p>Rename the object:</p>";
  222. $renameForm .= "<input type=\"text\" id=\"obj_rename\" class=\"obj_name\" value=\"" . $obj_name . "\" autofocus=\"autofocus\" />";
  223. $renameForm .= "<input type=\"button\" class=\"bold\" value=\"Rename\" onclick=\"renameObject();\" />";
  224. $renameForm .= "<input type=\"button\" value=\"Cancel\" onclick=\"unloadModal();\" />";
  225. if(!isset($_GET['name'])){
  226. // Show rename form
  227. echo($renameForm);
  228. }else{
  229. // Prevents trying to rename root (API)
  230. if($obj_id!=0){
  231. // Process rename
  232. $obj_new_name = mysql_real_escape_string(urldecode($_GET['name']));
  233. $obj_new_path = str_replace($obj_name,$obj_new_name,$obj_path);
  234. if(!file_exists($obj_new_path)){
  235. if(!$api_call){ echo("<p>Renaming Object...</p>"); }
  236. // Update data
  237. $rs = mysql_query("UPDATE wiode_objects SET obj_name='$obj_new_name' WHERE obj_id=$obj_id");
  238. // Modify file
  239. rename($obj_path,$obj_new_path);
  240. $renameObject = true;
  241. if($api_call){ echo('pass'); }
  242. }else{
  243. // Display error and rename form
  244. $type_def = strtolower($objType[$obj_type]);
  245. if($api_call){
  246. echo("fail");
  247. }else{
  248. echo("<p class=\"inline_error\">A $type_def with the name suppied already exists.</p>$renameForm");
  249. }
  250. }
  251. }else{
  252. echo("fail");
  253. }
  254. }
  255. break;
  256. // Delete Object ####################################################################
  257. case 'delete':
  258. if(!isset($_GET['confirmed'])){
  259. // Show confirmation prompt
  260. ?>
  261. <p>Are you sure you want to delete the <?php echo($objType[$obj_type] . " \"" . $obj_name . "\""); ?> from the project? This action cannot be undone.</p>
  262. <input type="button" id="obj_delete_btn" class="bold" value="Confirm" autofocus="autofocus" onclick="loadModalContent('system/php/modules/object_actions.php?action=delete&id=<?php echo($obj_id); ?>&confirmed=y');" />
  263. <input type="button" value="Cancel" onclick="unloadModal();" />
  264. <script>$(function(){ $('#obj_delete_btn').focus(); });</script>
  265. <?php
  266. }else{
  267. if(!$api_call){ echo("<p>Deleting Object(s)...</p>"); }
  268. // Loop through to create delete array
  269. $objects = array();
  270. function createDelArray($project, $parent, $site){
  271. global $objects;
  272. $rs = mysql_query("SELECT obj_id FROM wiode_objects WHERE obj_project=" . mysql_real_escape_string($project) . " AND obj_parent=" . mysql_real_escape_string($parent));
  273. if(mysql_num_rows($rs)!=0){
  274. while($row = mysql_fetch_array($rs)){
  275. // Add to array
  276. array_push($objects,$row['obj_id']);
  277. // Recurse
  278. createDelArray($project,$row['obj_id'], $site);
  279. }
  280. }
  281. }
  282. // Recursively remove all files and folders
  283. function rrmdir($dir) {
  284. if (is_dir($dir)) {
  285. $objects = scandir($dir);
  286. foreach ($objects as $object) {
  287. if ($object != "." && $object != "..") { if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink($dir."/".$object); }
  288. } reset($objects); rmdir($dir);
  289. }
  290. }
  291. // Process delete
  292. if($obj_type==1){ // IS FOLDER
  293. // Create array of all objects
  294. createDelArray($obj_project,$obj_id,$site);
  295. // Delete sub-objects from DB
  296. foreach($objects as $v){
  297. mysql_query("DELETE FROM wiode_objects WHERE obj_id=" . mysql_real_escape_string($v));
  298. }
  299. // Delete top-level object from DB
  300. $rs = mysql_query("DELETE FROM wiode_objects WHERE obj_id=$obj_id");
  301. rrmdir($obj_path);
  302. }else{ // SINGLE FILE
  303. // Remove file
  304. unlink($obj_path);
  305. // Delete object from DB
  306. $rs = mysql_query("DELETE FROM wiode_objects WHERE obj_id=$obj_id");
  307. }
  308. $deleteObject = true;
  309. }
  310. break;
  311. // Create Object ####################################################################
  312. case 'create':
  313. $obj_name = "";
  314. $obj_type = 2;
  315. // Define form
  316. function buildCreateForm($t,$n){
  317. $select_file = ""; $select_folder = "";
  318. if($t==2){ $select_file = "selected=\"selected\""; } else { $select_folder = "selected=\"selected\""; }
  319. $createForm = "<p>Type of Object:</p>";
  320. $createForm .= "<select id=\"obj_type\">";
  321. $createForm .= "<option $select_file value=\"2\">File</option>";
  322. $createForm .= "<option $select_folder value=\"1\">Folder</option>";
  323. $createForm .= "</select>";
  324. $createForm .= "<p>Object Name:</p>";
  325. $createForm .= "<input type=\"text\" id=\"obj_create\" class=\"obj_name\" value=\"" . $n . "\" autofocus=\"autofocus\" />";
  326. $createForm .= "<input type=\"button\" class=\"bold\" value=\"Create\" onclick=\"createObject();\" />";
  327. $createForm .= "<input type=\"button\" value=\"Cancel\" onclick=\"unloadModal();\" />";
  328. return $createForm;
  329. }
  330. if(!isset($_GET['name'])){
  331. // Show object creation form
  332. echo(buildCreateForm($obj_type,$obj_name));
  333. }else{
  334. $write_to_db = false;
  335. $obj_type = $_GET['type'];
  336. $obj_name = urldecode($_GET['name']);
  337. $obj_new_path = $obj_path . "/" . $obj_name;
  338. if($obj_type==1){
  339. // Create folder
  340. if(!file_exists($obj_new_path)){ mkdir($obj_new_path, 0777, true); $write_to_db = true; }
  341. }else{
  342. // Create file
  343. if(!file_exists($obj_new_path)){
  344. $obj_ext = getExt($obj_name);
  345. $content = "";
  346. $fh = fopen($obj_new_path, 'w') or die("Error creating file.");
  347. fwrite($fh, $content);
  348. fclose($fh);
  349. $write_to_db = true;
  350. }
  351. }
  352. // Root level?
  353. if($obj_id=='root'){ $obj_parent_id=0; }else{ $obj_parent_id=$obj_id; }
  354. // Safe SQL
  355. $obj_name = mysql_real_escape_string($obj_name);
  356. // Insert into database
  357. if($write_to_db==true){ // Ensure the file didn't already exist
  358. if(!$api_call){ echo("<p>Creating Object...</p>"); }
  359. $rs = mysql_query("INSERT INTO wiode_objects (obj_project,obj_name,obj_type,obj_parent) VALUES ($obj_project,'" . mysql_real_escape_string($obj_name) . "'," . mysql_real_escape_string($obj_type) . "," . mysql_real_escape_string($obj_parent_id) . ")");
  360. $obj_new_id = mysql_insert_id();
  361. $createObject = true;
  362. if($api_call){ echo(mysql_insert_id()); }
  363. }else{
  364. // Display error and create form
  365. if($api_call){
  366. echo("fail");
  367. }else{
  368. $type_def = strtolower($objType[$obj_type]);
  369. echo("<p class=\"inline_error\">A $type_def with the name supplied already exists.</p>" . buildCreateForm($obj_type,$obj_name));
  370. }
  371. }
  372. if(!$api_call){
  373. // Make sure the folder that is having the create function applied to is 'open'
  374. if($obj_id!=0){
  375. $rs = mysql_query("SELECT ust_id FROM wiode_user_state WHERE ust_obj_id=$obj_id");
  376. if(mysql_num_rows($rs)==0){
  377. // Set to open (create entry)
  378. $rs = mysql_query("INSERT INTO wiode_user_state (ust_usr_id, ust_obj_type, ust_obj_id) VALUES (" . mysql_real_escape_string($_SESSION['auth']) . ", 1, $obj_id)");
  379. }
  380. }
  381. }
  382. }
  383. break;
  384. // Upload Objects ###################################################################
  385. case 'upload':
  386. echo("<div class=\"upload_note\">CTRL+Click selects multiple files</div><input id=\"file_upload\" name=\"file_upload\" type=\"file\" />");
  387. echo("<input type=\"button\" value=\"Cancel\" onclick=\"unloadModal();\" />");
  388. // Make sure the folder that is having the create function applied to is 'open'
  389. if($obj_id!=0){
  390. $rs = mysql_query("SELECT ust_id FROM wiode_user_state WHERE ust_obj_id=$obj_id");
  391. if(mysql_num_rows($rs)==0){
  392. // Set to open (create entry)
  393. $rs = mysql_query("INSERT INTO wiode_user_state (ust_usr_id, ust_obj_type, ust_obj_id) VALUES (" . mysql_real_escape_string($_SESSION['auth']) . ", 1, $obj_id)");
  394. }
  395. }
  396. break;
  397. // Load File Into Editor ############################################################
  398. case 'load':
  399. $createRestorePoint = false;
  400. if(in_array(strtolower(getExt($obj_name)), $arrEditable)){
  401. $loadfile = true;
  402. if(empty($_GET['savestate'])){
  403. $rs = mysql_query("INSERT INTO wiode_user_state (ust_usr_id,ust_obj_type,ust_obj_id,ust_obj_project) VALUES (" . mysql_real_escape_string($_SESSION['auth']) . ",2,$obj_id,$obj_project)");
  404. }
  405. // Check for restore point(s)
  406. $rs = mysql_query("SELECT hst_id FROM wiode_object_history WHERE hst_obj_id=$obj_id");
  407. if(mysql_num_rows($rs)==0){
  408. // Check file (no need to create restore for new/blank files)
  409. $code = file_get_contents($obj_path);
  410. if($code!=""){
  411. // Create starting restore point
  412. $createRestorePoint = true;
  413. }
  414. }
  415. }else{
  416. $loadNonEditable = true;
  417. }
  418. break;
  419. // Save file ########################################################################
  420. case 'save':
  421. // Save current file
  422. if($api_call){ $usr_id = 0; }else{ $usr_id = mysql_real_escape_string($_SESSION['auth']); }
  423. $code = $_POST['code'];
  424. $hst_notes = mysql_real_escape_string("");
  425. if(!empty($_POST['hstnotes'])){ $hst_notes = $_POST['hstnotes']; }
  426. if($api_call){ if(isset($_POST['notes'])){ $hst_notes = mysql_real_escape_string($_POST['notes']); } }
  427. // Save file
  428. $fh = fopen($obj_path, 'w') or die("can't open file");
  429. if(get_magic_quotes_gpc()){ $code = stripslashes($code); }
  430. fwrite($fh, $code);
  431. fclose($fh);
  432. // Ensure history table exists
  433. $sql="SELECT * FROM wiode_object_history LIMIT 1";
  434. $result=@mysql_query($sql);
  435. if(!$result){ mysql_query('CREATE TABLE `wiode_object_history` (`hst_id` int(11) unsigned NOT NULL AUTO_INCREMENT, `hst_obj_id` int(11) NOT NULL, `hst_usr_id` int(11) NOT NULL, `hst_data` longtext, `hst_datetime` datetime, `hst_notes` longtext, PRIMARY KEY (`hst_id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;');}
  436. // Save to history
  437. if(isset($_SESSION['auth']) || isset($hst_notes)){
  438. $rs = mysql_query("INSERT INTO wiode_object_history (hst_obj_id,hst_usr_id,hst_data,hst_datetime,hst_notes) VALUES ($obj_id,$usr_id,'".mysql_real_escape_string($code)."',UTC_TIMESTAMP(),'" . mysql_real_escape_string($hst_notes) . "')");
  439. }
  440. break;
  441. // Close file #######################################################################
  442. case 'close':
  443. $closeFile = true;
  444. $rs = mysql_query("DELETE FROM wiode_user_state WHERE ust_usr_id=" . mysql_real_escape_string($_SESSION['auth']) . " AND ust_obj_id=$obj_id");
  445. break;
  446. // View file in browser #############################################################
  447. case 'view':
  448. $viewfile = true;
  449. break;
  450. // Default - do nothing (error trap) ################################################
  451. default:
  452. break;
  453. }
  454. // BEGIN JAVASCRIPT ACTIONS #############################################################
  455. // ######################################################################################
  456. // ######################################################################################
  457. if(!$api_call){
  458. // Reload file manager ##################################################################
  459. if($reload==true){
  460. ?>
  461. <script type="text/javascript">$(function(){ reload(); });</script>
  462. <?php
  463. }
  464. // Duplicate Object(s) ##################################################################
  465. if($duplicateObject==true){
  466. ?>
  467. <script type="text/javascript">
  468. $(function(){ <?php echo($GLOBALS['scriptDomDup']); ?> unloadModal(); });
  469. </script>
  470. <?php
  471. }
  472. // Rename Object ########################################################################
  473. if($renameObject==true){
  474. ?>
  475. <script type="text/javascript">
  476. $(function(){
  477. var obj = $('#file_manager li span[rel="<?php echo($obj_id); ?>"]');
  478. var new_name = '<?php echo($obj_new_name); ?>';
  479. var new_ext = new_name.split('.').pop();
  480. // Modify name
  481. obj.attr('title',new_name);
  482. obj.html('<?php echo(shortenString($obj_new_name,15)); ?>');
  483. // If this is a file rename...
  484. if(obj.parent('li').hasClass('file')){
  485. // Modify extension
  486. obj.parent('li').removeClass('ext_<?php echo($obj_extension); ?>');
  487. obj.parent('li').addClass('ext_'+new_ext);
  488. // Modify open tab
  489. <?php
  490. $dispPath = str_replace($site['absroot'],"",$obj_new_path);
  491. $dispPath = str_replace($prj_name."/","",$dispPath);
  492. ?>
  493. $('#tab_bar li#tab<?php echo($obj_id); ?>').attr('title','<?php echo($dispPath); ?>');
  494. $('#tab_bar li#tab<?php echo($obj_id); ?>').html('<span><?php echo(shortenString($obj_new_name,15)); ?></span><a rel="<?php echo($obj_id); ?>" class="close">X</a>');
  495. }
  496. // Close Modal
  497. unloadModal();
  498. });
  499. </script>
  500. <?php
  501. }
  502. // Delete Object ########################################################################
  503. if($deleteObject==true){
  504. ?>
  505. <script type="text/javascript">
  506. $(function(){
  507. var obj = $('#file_manager li span[rel="<?php echo($obj_id); ?>"]').parent('li');
  508. obj.children('ul').remove();
  509. obj.remove();
  510. unloadModal();
  511. });
  512. </script>
  513. <?php
  514. }
  515. // Create Object #######################################################################
  516. if($createObject==true){
  517. ?>
  518. <script type="text/javascript">
  519. $(function(){
  520. <?php
  521. if($obj_type==1){
  522. // Create folder
  523. echo("var obj = '<li class=\"folder expanded\"><span rel=\"" . $obj_new_id . "\" title=\"" . $obj_name . "\">" . shortenString($obj_name, 25) . "</span></li>';");
  524. }else{
  525. // Create file
  526. echo("var obj = '<li class=\"file ext_" . $obj_ext . "\"><span rel=\"" . $obj_new_id . "\" title=\"" . $obj_name . "\">" . shortenString($obj_name, 25) . "</span></li>';");
  527. }
  528. ?>
  529. var parent = $('#file_manager li span[rel="<?php echo($obj_id); ?>"]').parent('li');
  530. if(parent.children('ul').size()>0){
  531. // Parent folder has children
  532. parent.children('ul:first').append(obj);
  533. }else{
  534. // This is the first child element
  535. parent.append('<ul>'+obj+'</ul>');
  536. }
  537. unloadModal();
  538. });
  539. </script>
  540. <?php
  541. }
  542. // Load a file ##########################################################################
  543. if($loadfile==true){
  544. ?>
  545. <script type="text/javascript">
  546. $(function(){
  547. // Tab
  548. <?php
  549. $dispPath = str_replace($site['absroot'],"",$obj_path);
  550. $dispPath = str_replace($prj_name."/","",$dispPath);
  551. ?>
  552. $('#tab_bar li.active').removeClass('active');
  553. $('#tab_bar').append('<li class="active" id="tab<?php echo($obj_id); ?>" rel="<?php echo($dispPath); ?>" title="<?php echo($dispPath); ?>"><span><?php echo(shortenString($obj_name,15)); ?><span><a rel="<?php echo($obj_id); ?>" class="close">X</a></li>');
  554. $("#tab_bar").sortable({ axis: 'x', placeholder: 'placeholder', opacity: 0.6, tolerance: 'pointer' });
  555. $("#tab_bar").disableSelection();
  556. // Cur_Object
  557. $('#cur_object').val('<?php echo($obj_id); ?>');
  558. $('#file_manager li span.active').removeClass('active');
  559. $('#file_manager li span[rel="<?php echo($obj_id); ?>"]').addClass('active');
  560. // Workspace
  561. $('.editor').hide();
  562. $('#workspace').append('<div class="editor" id="editor<?php echo($obj_id); ?>"></div>');
  563. $('#editor<?php echo($obj_id); ?>').load('system/php/modules/editor.php?id=<?php echo($obj_id); ?>&ref=<?php echo(date('his')); ?>', function(){
  564. // Create initial restore point?
  565. <?php if($createRestorePoint==true){ ?>
  566. setTimeout("saveFile();",500);
  567. <?php } ?>
  568. });
  569. // Rebind tooltips
  570. initTabTooltips();
  571. // Check tab scroller
  572. scrolltabShowHide();
  573. });
  574. </script>
  575. <?php
  576. }
  577. // Load non-editable object (pop-up) ####################################################
  578. if($loadNonEditable==true && $obj_extension!=""){
  579. ?>
  580. <script type="text/javascript">
  581. $(function(){ popup('<?php echo($obj_url); ?>','non_editable',500,500); });
  582. </script>
  583. <?php
  584. }
  585. // View file in new window ##############################################################
  586. if($viewfile==true){
  587. ?>
  588. <script type="text/javascript">
  589. var viewerwidth = $(window).width()-100;
  590. var viewerheight = $(window).height()-100;
  591. $('#modal').css({ 'width' : viewerwidth+'px', 'height' : viewerheight+'px', 'top' : '50px', 'left' : '50px', 'margin':'0' });
  592. // Set title
  593. $('#modal_title span').html('File Viewer: <?php echo(str_replace($site['absroot'],"",$obj_path)); ?>&nbsp;(<a onclick="unloadModal();" href="<?php echo($obj_url); ?>" target="_blank">New Window</a>)');
  594. // Set close event
  595. $('#modal_title a.close_modal').click(function(){ unloadModal(); });
  596. // Show modal/overlay and load script
  597. $('#modal, #modal_overlay').fadeIn(200);
  598. $('#modal_content').html('<iframe style="border: 1px solid #999; background: #fff; height:'+(viewerheight-65)+'px;" width="100%" src="<?php echo($obj_url); ?>"></iframe>');
  599. $('#modal').draggable({ handle: '#modal_title', iframeFix: true });
  600. </script>
  601. <?php
  602. }
  603. // Close a file #########################################################################
  604. if($closeFile==true){
  605. ?>
  606. <script type="text/javascript">
  607. $(function(){
  608. $('#tab<?php echo($obj_id); ?>').remove();
  609. $('#editor<?php echo($obj_id); ?>').remove();
  610. $('#cur_object').val('0');
  611. $('#file_manager li span[rel="<?php echo($obj_id); ?>"]').removeClass('active');
  612. scrolltabShowHide();
  613. });
  614. </script>
  615. <?php
  616. }
  617. // All other scripts ####################################################################
  618. ?>
  619. <script type="text/javascript">
  620. // Special character validation #####################################################
  621. $(function(){
  622. $(".obj_name").keypress(function(e){
  623. var code = e.which || e.keyCode;
  624. // 65 - 90 for A-Z and 97 - 122 for a-z 95 for _ 45 for - 46 for .
  625. if (!((code >= 65 && code <= 90) || (code >= 97 && code <= 122) || (code >= 37 && code <= 40) || (code >= 48 && code <= 57) ||
  626. (code >= 96 && code <= 105) || code == 95 || code == 46 || code == 45)){
  627. e.preventDefault();
  628. }
  629. });
  630. $('#file_upload').uploadify({
  631. 'uploader' : 'system/uploader/uploadify.swf',
  632. 'script' : 'system/uploader/uploadify.php?session=<?php echo(session_id());?>',
  633. 'cancelImg' : 'system/uploader/cancel.png',
  634. 'buttonImg' : 'system/uploader/btn_select_files.png',
  635. 'folder' : '<?php echo($obj_path); ?>',
  636. 'auto' : true,
  637. 'multi' : true,
  638. 'onComplete': function(event, ID, fileObj, response, data) {
  639. $.get('system/uploader/post_upload_handler.php?project=<?php echo($obj_project); ?>&parent=<?php echo($obj_id); ?>&name='+fileObj.name, function(data){
  640. var parent = $('#file_manager li span[rel="<?php echo($obj_id); ?>"]').parent('li');
  641. if(data!="stop"){
  642. if(parent.hasClass('expanded') || parent.hasClass('root')){
  643. if(parent.children('ul').size()>0){
  644. // Parent folder has children
  645. parent.children('ul:first').append(data);
  646. }else{
  647. // This is the first child element
  648. parent.append('<ul>'+data+'</ul>');
  649. }
  650. }
  651. }
  652. });
  653. },
  654. 'onAllComplete' : function(event,data) { unloadModal(); }
  655. });
  656. loadFolderStack($('#dup_proj').val());
  657. });
  658. // Duplicate functions ##############################################################
  659. function loadFolderStack(i){
  660. $('#dup_dest').html('<p>Loading Folders...</p>');
  661. $('#dup_dest').load('system/php/modules/folder_selector.php?p='+i+'&f=0&e=<?php echo($obj_id); ?>');
  662. }
  663. function duplicateObject(){
  664. loadModalContent('system/php/modules/object_actions.php?action=duplicate&id=<?php echo($obj_id); ?>&dp='+$('#dup_proj').val()+'&dd='+$('#dup_dir').val());
  665. }
  666. // Rename functions #################################################################
  667. $('#obj_rename').keypress(function(e){
  668. var code = (e.keyCode ? e.keyCode : e.which);
  669. if(code == 13) { renameObject(); }
  670. });
  671. function renameObject(){
  672. loadModalContent('system/php/modules/object_actions.php?action=rename&id=<?php echo($obj_id); ?>&name='+$('#obj_rename').val());
  673. }
  674. // Create functions #################################################################
  675. $('#obj_create').keypress(function(e){
  676. var code = (e.keyCode ? e.keyCode : e.which);
  677. if(code == 13) { createObject(); }
  678. });
  679. function createObject(){
  680. if($('#obj_create').val()!=""){
  681. loadModalContent('system/php/modules/object_actions.php?action=create&id=<?php echo($obj_id); ?>&name='+$('#obj_create').val()+'&type='+$('#obj_type').val());
  682. }
  683. }
  684. // Reloader
  685. function reload(){ loadFileManager(); unloadModal(); }
  686. </script>
  687. <div class="clear"></div>
  688. <?php } ?>