XCloner – Backup and Restore - Version 2.1.2

Version Description

Added Amazon S3 cron storage support

=

Download this release

Release Info

Developer xcloner
Plugin Icon 128x128 XCloner – Backup and Restore
Version 2.1.2
Comparing to
See all releases

Code changes from version 2.1 to 2.1.2

Files changed (94) hide show
  1. admin.cloner.html.php +281 -189
  2. browser/files_xml.php +11 -11
  3. classes/S3.php +1365 -0
  4. {trunk/administrator/backups → classes}/index.html +0 -0
  5. cloner.config.php +4 -1
  6. cloner.cron.php +59 -19
  7. cloner.functions.php +17 -3
  8. common.php +7 -5
  9. language/english.php +12 -2
  10. readme.txt +5 -3
  11. restore/XCloner.php +4 -1
  12. trunk/admin.cloner.html.php +0 -1784
  13. trunk/admin.cloner.php +0 -191
  14. trunk/admin.xcloner.php +0 -10
  15. trunk/administrator/backups/.excl +0 -0
  16. trunk/administrator/index.html +0 -0
  17. trunk/browser/file.gif +0 -0
  18. trunk/browser/filebrowser.css +0 -34
  19. trunk/browser/files_inpage.php +0 -18
  20. trunk/browser/files_xml.php +0 -264
  21. trunk/browser/folder.gif +0 -0
  22. trunk/browser/timer.gif +0 -0
  23. trunk/browser/xmlhttp.js +0 -154
  24. trunk/cloner.config.php +0 -90
  25. trunk/cloner.cron.php +0 -411
  26. trunk/cloner.functions.php +0 -1946
  27. trunk/common.php +0 -64
  28. trunk/configs/index.html +0 -0
  29. trunk/css/dtree.css +0 -34
  30. trunk/css/main.css +0 -686
  31. trunk/css/tabber.css +0 -109
  32. trunk/images/about.png +0 -0
  33. trunk/images/actions.gif +0 -0
  34. trunk/images/actions.png +0 -0
  35. trunk/images/backup.png +0 -0
  36. trunk/images/css.png +0 -0
  37. trunk/images/editions.png +0 -0
  38. trunk/images/editionssm.png +0 -0
  39. trunk/images/empty.gif +0 -0
  40. trunk/images/filesave.png +0 -0
  41. trunk/images/folder.png +0 -0
  42. trunk/images/forum.png +0 -0
  43. trunk/images/gen_settings.png +0 -0
  44. trunk/images/help.png +0 -0
  45. trunk/images/helpsm.png +0 -0
  46. trunk/images/join.gif +0 -0
  47. trunk/images/joinbottom.gif +0 -0
  48. trunk/images/keep_icon.gif +0 -0
  49. trunk/images/lang.png +0 -0
  50. trunk/images/lhelp.png +0 -0
  51. trunk/images/line.gif +0 -0
  52. trunk/images/logo.gif +0 -0
  53. trunk/images/logo.png +0 -0
  54. trunk/images/minus.gif +0 -0
  55. trunk/images/minusbottom.gif +0 -0
  56. trunk/images/nolines_minus.gif +0 -0
  57. trunk/images/nolines_plus.gif +0 -0
  58. trunk/images/page.gif +0 -0
  59. trunk/images/plus.gif +0 -0
  60. trunk/images/plusbottom.gif +0 -0
  61. trunk/images/publish_x.png +0 -0
  62. trunk/images/settings.png +0 -0
  63. trunk/images/support.png +0 -0
  64. trunk/images/templatessm.png +0 -0
  65. trunk/images/website.png +0 -0
  66. trunk/images/wizard.png +0 -0
  67. trunk/images/wizardsm.png +0 -0
  68. trunk/images/wizardsm_restore.gif +0 -0
  69. trunk/images/wizardsm_restore.png +0 -0
  70. trunk/images/xcloner.png +0 -0
  71. trunk/index.php +0 -3
  72. trunk/index2.php +0 -3
  73. trunk/install.xcloner.php +0 -33
  74. trunk/javascript/dtree.js +0 -672
  75. trunk/javascript/tabber.js +0 -512
  76. trunk/language/deutsch.php +0 -410
  77. trunk/language/dutch.php +0 -304
  78. trunk/language/english.php +0 -402
  79. trunk/language/index.html +0 -4
  80. trunk/license.txt +0 -2
  81. trunk/readme.txt +0 -80
  82. trunk/recursive.php +0 -118
  83. trunk/restore/TAR.php +0 -1821
  84. trunk/restore/XCloner.php +0 -2219
  85. trunk/screenshot-1.png +0 -0
  86. trunk/screenshot-2.png +0 -0
  87. trunk/screenshot-3.png +0 -0
  88. trunk/screenshot-4.png +0 -0
  89. trunk/screenshot-5.png +0 -0
  90. trunk/toolbar.cloner.html.php +0 -85
  91. trunk/toolbar.cloner.php +0 -69
  92. trunk/xcloner.php +0 -43
  93. trunk/xcloner_j1.5.xml +0 -115
  94. xcloner.php +1 -1
admin.cloner.html.php CHANGED
@@ -4,7 +4,7 @@
4
  * Oficial website: http://www.joomlaplug.com/
5
  * -------------------------------------------
6
  * Creator: Liuta Romulus Ovidiu
7
- * License: All Rights Reserved
8
  * Email: admin@joomlaplug.com
9
  * Revision: 1.0
10
  * Date: July 2007
@@ -12,37 +12,37 @@
12
 
13
 
14
  /** ensure this file is being included by a parent file */
15
- defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );
16
 
17
  if($_COOKIE['auth_clone'] != 1)
18
  setcookie('auth_clone', '1');
19
 
20
  class mosTabs{
21
-
22
  function mosTabs($int){
23
-
24
  echo "<div class=\"tabber\">";
25
-
26
  }
27
-
28
  function startTab($name, $class){
29
-
30
  echo "<div class=\"tabbertab\" title=\"$name\">";
31
-
32
-
33
  }
34
-
35
  function endTab(){
36
-
37
  echo "</div>";
38
-
39
  }
40
-
41
  function endPane(){
42
-
43
  echo "</div>";
44
  }
45
-
46
  }
47
 
48
  /**
@@ -60,6 +60,7 @@ function header(){
60
  <head>
61
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
62
  <title>XCloner Backup and Restore</title>
 
63
 
64
  <link rel="stylesheet" href="css/tabber.css" TYPE="text/css" MEDIA="screen">
65
  <link rel="styleSheet" href="css/dtree.css" type="text/css" />
@@ -145,12 +146,39 @@ document.write(d);
145
 
146
  //-->
147
  </script></div> </td></tr></table>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
148
  </td><td valign='top' align='left' style="padding-left: 20px;">
149
 
150
-
151
  <?php
152
  if($_REQUEST['mosmsg']!="")
153
-
154
  echo "<center><h2>".$_REQUEST['mosmsg']."</h2></center>";
155
 
156
  }
@@ -161,7 +189,7 @@ function footer(){
161
  </td></tr></table>
162
  <hr><br /><br />
163
  <center>
164
- <p>Powered by <a href='http://www.xcloner.com' target='_blank'>XCloner.com</a>. All rights reserved!</p></center>
165
 
166
  </td></tr></table>
167
 
@@ -216,7 +244,7 @@ function _FDefault(){
216
  </a>
217
  </div>
218
  </div>
219
-
220
  <div style="float:left;">
221
  <div class="icon">
222
 
@@ -243,7 +271,7 @@ function _FDefault(){
243
 
244
  /*The basic authentification form*/
245
  function Login(){
246
-
247
  ?>
248
  <center><br />
249
  <form action="index2.php" method="post" name="adminForm">
@@ -251,26 +279,26 @@ function Login(){
251
  <table align='center' cellpadding='10' cellspacing='20'>
252
  <tr ><td colspan='2' align='center'><b>Authentification Area:</b></td></tr>
253
  <tr><td>Username:</td><td><input type='text' size='30' name='username'></td></tr>
254
- <tr><td>Password:</td><td><input type='password' size='30' name='password'></td></tr>
255
-
256
  <tr><td colspan='2'><?php echo LM_LOGIN_TEXT;?></td></tr>
257
-
258
  </table>
259
  </td></tr>
260
-
261
-
262
-
263
  </table>
264
-
265
  <input type="hidden" name="option" value="com_cloner" />
266
  <input type="hidden" name="task" value="lang" />
267
  <input type="hidden" name="boxchecked" value="0" />
268
  <input type="hidden" name="hidemainmenu" value="0" />
269
-
270
  </form>
271
  </center>
272
  <?php
273
-
274
  }
275
 
276
  function Cron(){
@@ -285,21 +313,21 @@ function Cron(){
285
  <?php echo LM_CRON_SUB?>
286
  <br /><b>For Joomla:</b>
287
  <span style='background: #eeeeee'>
288
- /usr/bin/php /path_to_backup_dir/cloner.cron.php
289
  <br />
290
- or
291
  <br />
292
- links http://link_to_backup_dir/cloner.cron.php
293
  <br />
294
  or
295
  <br />
296
- lynx -source http://link_to_backup_dir/cloner.cron.php
297
  </span>
298
 
299
  For <b>Running Multiple Crons</b>, you need to first create a custom configuration file in the XCloner Configuration -> Cron tab
300
  and then replace "cloner.cron.php" with "cloner.cron.php?config=myconfig.php", only use 'links' or 'lynx' options to run the cronjob
301
 
302
- If you would like to use the <b>php SSH command</b> for running Multiple Crons, you will need to replace
303
  the "cloner.cron.php" with <b>"cloner.cron.php myconfig.php"</b> in the command line.
304
 
305
  <?php echo LM_CRON_HELP?>
@@ -313,7 +341,7 @@ the "cloner.cron.php" with <b>"cloner.cron.php myconfig.php"</b> in the command
313
 
314
  function Translator_Edit_DEFAULT($option, $content, $file, $lang){
315
  global $_CONFIG;
316
- ?>
317
  <form action="index2.php" method="post" name="adminForm">
318
  <table class="adminlist">
319
  <tr>
@@ -321,17 +349,17 @@ function Translator_Edit_DEFAULT($option, $content, $file, $lang){
321
  </tr>
322
 
323
  <tr>
324
-
325
  <td><textarea name='def_content' cols='100' rows='30'><?php echo $content;?></textarea></td>
326
-
327
- </tr>
328
 
329
  <input type="hidden" name="option" value="com_cloner" />
330
  <input type="hidden" name="language" value="<?php echo $lang?>" />
331
  <input type="hidden" name="task" value="lang" />
332
  <input type="hidden" name="boxchecked" value="0" />
333
  <input type="hidden" name="hidemainmenu" value="0" />
334
- </form>
335
 
336
  <?php
337
 
@@ -339,7 +367,7 @@ function Translator_Edit_DEFAULT($option, $content, $file, $lang){
339
 
340
  function Translator_Add($option){
341
  global $_CONFIG;
342
- ?>
343
  <form action="index2.php" method="post" name="adminForm">
344
  <table class="adminlist">
345
  <tr>
@@ -347,30 +375,30 @@ function Translator_Add($option){
347
  </tr>
348
 
349
  <tr>
350
-
351
  <td><input size='40' type=text name='lname' value=''></td>
352
-
353
- </tr>
354
 
355
  <input type="hidden" name="option" value="com_cloner" />
356
  <input type="hidden" name="language" value="<?php echo $lang?>" />
357
  <input type="hidden" name="task" value="add_lang_new" />
358
  <input type="hidden" name="boxchecked" value="0" />
359
  <input type="hidden" name="hidemainmenu" value="0" />
360
- </form>
361
- <?php
362
  }
363
 
364
  function Translator_Edit($option, $data, $def_data, $file, $lang){
365
  global $_CONFIG;
366
- ?>
367
-
368
  <form action="index2.php" method="post" name="adminForm">
369
  <table class="adminlist">
370
  <tr>
371
  <th align="left"><?php echo LM_LANG_EDIT_FILE?> <input type=text name='lfile' size=100 value='<?php echo $file?>'><br />
372
  <font color='red'><?php echo LM_LANG_EDIT_FILE_SUB?></font>
373
-
374
  <script language="javascript" type="text/javascript">
375
  function submitbutton(pressbutton) {
376
  var form = document.adminForm;
@@ -403,7 +431,7 @@ function Translator_Edit($option, $data, $def_data, $file, $lang){
403
  if($i++ %2 == 0)
404
  $bgcolor = '#eeeeee';
405
  else
406
- $bgcolor = '#dddddd';
407
  ?>
408
  <table class="adminlist">
409
  <tr>
@@ -412,34 +440,34 @@ function Translator_Edit($option, $data, $def_data, $file, $lang){
412
  </tr>
413
  <tr bgcolor="<?php echo $bgcolor?>">
414
  <td><textarea cols=65 rows=3 ><?php echo stripslashes($def_data[$key])?></textarea></td>
415
-
416
- <td bgcolor='<?php if( trim(str_replace(array("\n","\r"," "),array("","",""),$def_data[$key])) !=
417
- trim(str_replace(array("\n","\r"," "),array("","",""),$value)))
418
- echo 'green';
419
- else
420
  echo 'red';?>'>
421
  <textarea cols=65 rows=3 name=lang[<?php echo $key?>]><?php echo stripslashes($value)?></textarea></td>
422
  </tr>
423
-
424
- <?php
425
  }
426
- ?>
427
 
428
  <input type="hidden" name="option" value="com_cloner" />
429
  <input type="hidden" name="language" value="<?php echo $lang?>" />
430
  <input type="hidden" name="task" value="lang" />
431
  <input type="hidden" name="boxchecked" value="0" />
432
  <input type="hidden" name="hidemainmenu" value="0" />
433
- </form>
434
-
435
- <?php
436
  }
437
 
438
  function Translator($option, $lang_arr){
439
- global $_CONFIG;
 
 
440
 
441
- ?>
442
-
443
  <form action="index2.php" method="post" name="adminForm">
444
  <table class="adminlist">
445
  <tr>
@@ -452,11 +480,11 @@ function Translator($option, $lang_arr){
452
  </th>
453
  </tr>
454
  <?php
455
-
456
  for($i=0; $i<sizeof($lang_arr); $i++){
457
-
458
- ?>
459
-
460
  <tr>
461
  <td width="5" align="left"><?php echo ($i+1);?></td>
462
  <td width="5" align="left">
@@ -467,17 +495,17 @@ function Translator($option, $lang_arr){
467
  <a href="index2.php?option=<?php echo $option;?>&task=edit_lang&langx=<?php echo $lang_arr[$i];?>"><?php echo ucfirst($lang_arr[$i])?>
468
  </td>
469
  </tr>
470
- <?php
471
-
472
  }
473
- ?>
474
 
475
  <input type="hidden" name="option" value="com_cloner" />
476
  <input type="hidden" name="task" value="lang" />
477
  <input type="hidden" name="boxchecked" value="0" />
478
  <input type="hidden" name="hidemainmenu" value="0" />
479
- </form>
480
- <?php
481
  }
482
 
483
  function showBackups( &$files, &$sizes, $path, $option ) {
@@ -574,8 +602,8 @@ function showBackups( &$files, &$sizes, $path, $option ) {
574
  $tabs->startTab(LM_TAB_GENERAL,"config-general-tab");
575
  ?>
576
  <table class='adminform'>
577
-
578
-
579
  <tr>
580
  <th colspan='2'>
581
  <?php echo LM_CONFIG_BSETTINGS?>
@@ -642,7 +670,7 @@ function showBackups( &$files, &$sizes, $path, $option ) {
642
  <?php echo LM_CRON_DB_BACKUP_SUB?>
643
  </td>
644
  </tr>
645
-
646
  <tr>
647
  <td>
648
  <?php echo LM_CONFIG_SYSTEM_MBACKUP?>
@@ -653,15 +681,15 @@ function showBackups( &$files, &$sizes, $path, $option ) {
653
  <br />
654
  <?php echo LM_CONFIG_SYSTEM_MBACKUP_SUB?>
655
  </td>
656
- </tr>
657
-
658
  <tr>
659
  <th colspan='2'>
660
  <?php echo LM_CONFIG_BSETTINGS_SERVER?>
661
  </th>
662
  </tr>
663
-
664
-
665
  <tr >
666
  <td>
667
  <?php echo LM_CONFIG_MEM?>
@@ -677,7 +705,7 @@ function showBackups( &$files, &$sizes, $path, $option ) {
677
  <?php echo LM_TAR_PATH;?> <br /><input size='50' type=text name=tarpath value='<?php echo $_CONFIG[tarpath]?>'><br />
678
  <?php echo LM_TAR_PATH_SUB;?>
679
  </td></tr>
680
-
681
  </table>
682
 
683
  </td></tr>
@@ -686,7 +714,7 @@ function showBackups( &$files, &$sizes, $path, $option ) {
686
  <?php echo LM_ACTIVE?> <input type=checkbox value=1 name='sql_mem' <?php if($_CONFIG[sql_mem]==1) echo 'checked';?>>
687
  </td><td align='left'>
688
  <?php echo LM_MYSQLDUMP_PATH;?> <br /><input type=text size='50' name='sqldump' value='<?php echo $_CONFIG[sqldump]?>'>
689
-
690
  </td></tr>
691
  </table>
692
 
@@ -718,8 +746,8 @@ function showBackups( &$files, &$sizes, $path, $option ) {
718
  $tabs->startTab(LM_TAB_MYSQL,"config-mysql-tab");
719
  ?>
720
  <table class='adminform'>
721
-
722
-
723
  <tr>
724
  <th colspan='2'>
725
  <?php echo LM_CONFIG_MYSQL?>
@@ -735,7 +763,7 @@ function showBackups( &$files, &$sizes, $path, $option ) {
735
  <br /><?php echo LM_CONFIG_MYSQLH_SUB?>
736
  </td>
737
  </tr>
738
-
739
  <tr>
740
  <td>
741
  <?php echo LM_CONFIG_MYSQLU?>
@@ -745,7 +773,7 @@ function showBackups( &$files, &$sizes, $path, $option ) {
745
  <br /><?php echo LM_CONFIG_MYSQLU_SUB?>
746
  </td>
747
  </tr>
748
-
749
  <tr>
750
  <td>
751
  <?php echo LM_CONFIG_MYSQLP?>
@@ -755,7 +783,7 @@ function showBackups( &$files, &$sizes, $path, $option ) {
755
  <br /><?php echo LM_CONFIG_MYSQLP_SUB?>
756
  </td>
757
  </tr>
758
-
759
  <tr>
760
  <td>
761
  <?php echo LM_CONFIG_MYSQLD?>
@@ -785,8 +813,8 @@ function showBackups( &$files, &$sizes, $path, $option ) {
785
  $tabs->startTab(LM_TAB_AUTH,"config-mysql-tab");
786
  ?>
787
  <table class='adminform'>
788
-
789
-
790
  <tr>
791
  <th colspan='2'>
792
  <?php echo LM_CONFIG_AUTH?>
@@ -802,7 +830,7 @@ function showBackups( &$files, &$sizes, $path, $option ) {
802
  <br /><?php echo LM_CONFIG_AUTH_USER_SUB?>
803
  </td>
804
  </tr>
805
-
806
  <tr>
807
  <td>
808
  <?php echo LM_CONFIG_AUTH_PASS?>
@@ -812,10 +840,10 @@ function showBackups( &$files, &$sizes, $path, $option ) {
812
  <br /><?php echo LM_CONFIG_AUTH_PASS_SUB?>
813
  </td>
814
  </tr>
815
-
816
 
817
  </table>
818
- <?
819
  $tabs->endTab();
820
  $tabs->startTab(LM_TAB_SYSTEM,"config-system-tab");
821
  ?>
@@ -825,7 +853,7 @@ function showBackups( &$files, &$sizes, $path, $option ) {
825
  <?php echo LM_CONFIG_DISPLAY?>
826
  </th>
827
  </tr>
828
-
829
  <tr>
830
  <td width='200'>
831
  <?php echo LM_CONFIG_SYSTEM_LANG?>
@@ -845,8 +873,8 @@ function showBackups( &$files, &$sizes, $path, $option ) {
845
  <br /><?php echo LM_CONFIG_SYSTEM_LANG_SUB?>
846
  </td>
847
  </tr>
848
-
849
-
850
  <!--<tr>
851
  <td width='200'>
852
  <?php echo LM_CONFIG_SYSTEM_DOWNLOAD?>
@@ -859,8 +887,8 @@ function showBackups( &$files, &$sizes, $path, $option ) {
859
  <br /><?php echo LM_CONFIG_SYSTEM_DOWNLOAD_SUB?>
860
  </td>
861
  </tr>-->
862
-
863
-
864
  <tr>
865
  <th colspan='2'>
866
  <?php echo LM_CONFIG_SYSTEM?>
@@ -887,32 +915,32 @@ function showBackups( &$files, &$sizes, $path, $option ) {
887
  Secure <input type=radio size=50 value=1 name='secure_ftp' <?php if($_CONFIG[secure_ftp]==1) echo 'checked';?>>
888
  </td>
889
  </tr>
890
-
891
  <th colspan='2'>
892
  <?php echo LM_CONFIG_MANUAL?>
893
  </th>
894
  </tr>
895
-
896
  <tr>
897
  <td>
898
  <?php echo LM_CONFIG_MANUAL_FILES;?>
899
  </td>
900
  <td>
901
  <input type=text size=20 name='backup_refresh_number' value=<?php echo $_CONFIG[backup_refresh_number];?>>
902
-
903
  </td>
904
  </tr>
905
-
906
  <tr>
907
  <td>
908
  <?php echo LM_CONFIG_MANUAL_REFRESH;?>
909
  </td>
910
  <td>
911
  <input type=text size=20 name='refresh_time' value=<?php echo $_CONFIG[refresh_time];?>> seconds
912
-
913
  </td>
914
  </tr>
915
-
916
  </table>
917
  <?php
918
  $tabs->endTab();
@@ -924,7 +952,7 @@ function showBackups( &$files, &$sizes, $path, $option ) {
924
  <?php echo LM_CRON_SETTINGS_M?> - all configs are saved in configs/
925
  </th>
926
  </tr>
927
-
928
  <tr>
929
  <td>
930
  <?php echo LM_CRON_MCRON?>
@@ -934,26 +962,26 @@ function showBackups( &$files, &$sizes, $path, $option ) {
934
  <?php echo LM_CRON_MCRON_SUB?>
935
  </td>
936
  </tr>
937
-
938
  <tr>
939
  <td>
940
  <?php echo LM_CRON_MCRON_AVAIL?>
941
  </td>
942
  <td>
943
  <?php
944
-
945
  if ($handle = @opendir($_CONFIG['multiple_config_dir'])) {
946
 
947
  while (false !== ($file = readdir($handle))) {
948
  if( ($file!=".") && ($file!="..") &&($file!="") && (strstr($file, '.php'))){
949
  $fcron = "cloner.cron.php?config=$file";
950
-
951
  echo "<b>$fcron</b>";
952
-
953
  echo " - <a href='$fcron' target='_blank'>execute cron</a>";
954
-
955
- echo " | <a href='index2.php?option=com_cloner&task=cron_delete&fconfig=$file'>delete config</a>";
956
-
957
  echo "\n<br />";
958
  }
959
  }
@@ -963,13 +991,13 @@ function showBackups( &$files, &$sizes, $path, $option ) {
963
  ?>
964
  </td>
965
  </tr>
966
-
967
  <tr>
968
  <th colspan='2'>
969
  <?php echo LM_CRON_SETTINGS?>
970
  </th>
971
  </tr>
972
-
973
  <tr>
974
  <td>
975
  <?php echo LM_CRON_SEMAIL?>
@@ -979,7 +1007,7 @@ function showBackups( &$files, &$sizes, $path, $option ) {
979
  <?php echo LM_CRON_SEMAIL_SUB?>
980
  </td>
981
  </tr>
982
-
983
  <tr>
984
  <td width='200'>
985
  <?php echo LM_CRON_MODE?>
@@ -994,7 +1022,9 @@ function showBackups( &$files, &$sizes, $path, $option ) {
994
  <?php echo LM_CRON_MODE_INFO?>
995
  </td>
996
  </tr>
997
- <tr>
 
 
998
  <td>
999
  <?php echo LM_CRON_TYPE?>
1000
  </td>
@@ -1008,7 +1038,7 @@ function showBackups( &$files, &$sizes, $path, $option ) {
1008
  <?php echo LM_CRON_TYPE_INFO?>
1009
  </td>
1010
  </tr>
1011
-
1012
  <tr>
1013
  <td>
1014
  <?php echo LM_CRON_BNAME?>
@@ -1018,8 +1048,8 @@ function showBackups( &$files, &$sizes, $path, $option ) {
1018
  <?php echo LM_CRON_BNAME_SUB?>
1019
  </td>
1020
  </tr>
1021
-
1022
-
1023
  <tr>
1024
  <td>
1025
  <?php echo LM_CRON_IP?>
@@ -1029,7 +1059,7 @@ function showBackups( &$files, &$sizes, $path, $option ) {
1029
  <?php echo LM_CRON_IP_SUB?>
1030
  </td>
1031
  </tr>
1032
-
1033
  </table>
1034
  <table class='adminform'>
1035
  <tr>
@@ -1079,6 +1109,65 @@ function showBackups( &$files, &$sizes, $path, $option ) {
1079
  </td>
1080
  </tr>
1081
  </table>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1082
  <table class='adminform'>
1083
  <tr>
1084
  <th colspan='2'>
@@ -1097,7 +1186,7 @@ function showBackups( &$files, &$sizes, $path, $option ) {
1097
 
1098
 
1099
  </table>
1100
-
1101
  <table class='adminform'>
1102
  <tr>
1103
  <th colspan='2'>
@@ -1113,10 +1202,10 @@ function showBackups( &$files, &$sizes, $path, $option ) {
1113
  <input type=checkbox name='cron_sql_drop' value='1' <?php if($_CONFIG[cron_sql_drop]) echo "checked";?> >
1114
  </td>
1115
  </tr>
1116
-
1117
- <?php
1118
  if((abs($_CONFIG[system_mdatabases])==0) && ($_CONFIG[enable_db_backup]==1)){
1119
- ?>
1120
  <tr><td valign='top'>
1121
  <?php echo LM_DATABASE_INCLUDE_DATABASES?>
1122
  </td><td>
@@ -1127,19 +1216,19 @@ function showBackups( &$files, &$sizes, $path, $option ) {
1127
 
1128
  $query = @mysql_query("SHOW databases");
1129
  while($row = @mysql_fetch_array($query)){
1130
-
1131
  $table = $row[0];
1132
-
1133
  if($table != $_CONFIG['mysql_database'])
1134
-
1135
  if(in_array($table, $curent_dbs)){
1136
-
1137
  echo "<option value='".$table."' selected>$table</option>";
1138
-
1139
  }else{
1140
-
1141
  echo "<option value='".$table."'>$table</option>";
1142
-
1143
  }
1144
  }
1145
  ?>
@@ -1149,7 +1238,7 @@ function showBackups( &$files, &$sizes, $path, $option ) {
1149
  <?php
1150
  }
1151
  ?>
1152
-
1153
  <tr><th colspan=2>
1154
  <?php echo LM_CRON_DELETE_FILES?>
1155
  </th></tr>
@@ -1170,7 +1259,7 @@ function showBackups( &$files, &$sizes, $path, $option ) {
1170
  </td>
1171
  </tr>
1172
  </table>
1173
-
1174
  <table class='adminform'>
1175
  <tr>
1176
  <th colspan='2'>
@@ -1198,7 +1287,7 @@ function showBackups( &$files, &$sizes, $path, $option ) {
1198
  <?php echo LM_CONFIG_INFO_PHP?>
1199
  </th>
1200
  </tr>
1201
-
1202
  <tr>
1203
  <td width='200'>
1204
  <?php echo LM_CONFIG_INFO_T_SAFEMODE?>
@@ -1206,25 +1295,25 @@ function showBackups( &$files, &$sizes, $path, $option ) {
1206
  <td>
1207
  <b><?php $val = (ini_get('safe_mode') != "")? ini_get('safe_mode'):"Off";
1208
  echo HTML_cloner::get_color($val, 'On');
1209
- ?></b>
1210
  <br />
1211
  <?php echo LM_CONFIG_INFO_SAFEMODE?>
1212
  </td>
1213
  </tr>
1214
-
1215
  <tr>
1216
  <td width='200'>
1217
  <?php echo LM_CONFIG_INFO_T_MTIME?>
1218
  </td>
1219
  <td>
1220
  <b><?php echo (ini_get('max_execution_time') != "")? ini_get('max_execution_time'):"no value";
1221
-
1222
- ?></b>
1223
  <br />
1224
  <?php echo LM_CONFIG_INFO_TIME?>
1225
  </td>
1226
  </tr>
1227
-
1228
  <tr>
1229
  <td width='200'>
1230
  <?php echo LM_CONFIG_INFO_T_MEML?>
@@ -1235,7 +1324,7 @@ function showBackups( &$files, &$sizes, $path, $option ) {
1235
  <?php echo LM_CONFIG_INFO_MEMORY?>
1236
  </td>
1237
  </tr>
1238
-
1239
  <tr>
1240
  <td width='200'>
1241
  <?php echo LM_CONFIG_INFO_T_BDIR?>
@@ -1248,17 +1337,20 @@ function showBackups( &$files, &$sizes, $path, $option ) {
1248
  <?php echo LM_CONFIG_INFO_BASEDIR?>
1249
  </td>
1250
  </tr>
1251
-
1252
  <tr>
1253
  <td width='200'>
1254
  <?php echo LM_CONFIG_INFO_T_EXEC?>
1255
  </td>
1256
  <td>
1257
- <b><?php
 
1258
  $out = "";
1259
  if(function_exists("exec")){
 
1260
  $out = @exec("ls -al");
1261
  }
 
1262
  $val = ($out != "")? "ENABLED":"<font color='red'>DISABLED</font>";
1263
  echo HTML_cloner::get_color($val, 'DISABLED');
1264
  ?> </b>
@@ -1266,26 +1358,26 @@ function showBackups( &$files, &$sizes, $path, $option ) {
1266
  <?php echo LM_CONFIG_INFO_EXEC?>
1267
  </td>
1268
  </tr>
1269
-
1270
  <tr>
1271
  <th colspan='2'>
1272
  <?php echo LM_CONFIG_INFO_PATHS?>
1273
  </td>
1274
  <td>
1275
  </tr>
1276
-
1277
  <tr>
1278
  <td width='200'>
1279
  <?php echo LM_CONFIG_INFO_ROOT_BPATH_TMP?>
1280
  </td>
1281
  <td>
1282
- <b><?php $tmp_dir = $_CONFIG['backup_path']."/administrator/backups";
1283
  echo (@is_writeable( $tmp_dir ))? $tmp_dir . " is <font color=green>writeable</font>":$tmp_dir. " <font color=red>incorrect or unreadable</font>";?></b>
1284
  <br />
1285
  <?php echo LM_CONFIG_INFO_ROOT_PATH_TMP_SUB?>
1286
  </td>
1287
  </tr>
1288
-
1289
  <tr>
1290
  <td width='200'>
1291
  <?php echo LM_CONFIG_INFO_ROOT_BPATH?>
@@ -1296,28 +1388,28 @@ function showBackups( &$files, &$sizes, $path, $option ) {
1296
  <?php echo LM_CONFIG_INFO_ROOT_PATH_SUB?>
1297
  </td>
1298
  </tr>
1299
-
1300
-
1301
  <tr>
1302
  <td width='200'>
1303
  <?php echo LM_CONFIG_INFO_T_BPATH?>
1304
  </td>
1305
  <td>
1306
- <b><?php echo (@is_writeable($_CONFIG['clonerPath']) )? $_CONFIG['clonerPath'] . " is <font color=green>writeable</font>":$_CONFIG['clonerPath']. " <font color=red>unwriteable</font>";?></b>
1307
  <br />
1308
  <?php echo LM_CONFIG_INFO_BPATH?>
1309
  </td>
1310
  </tr>
1311
-
1312
-
1313
  <tr>
1314
  <td width='200'>
1315
  <?php echo LM_CONFIG_INFO_T_TAR?>
1316
  </td>
1317
  <td>
1318
- <b><?php
1319
- if(function_exists("exec")){
1320
- $info_tar_path = explode(" ", @exec("whereis tar"));
1321
  }
1322
  echo ($info_tar_path['1'] != "")? $info_tar_path['1']:"unable to determine";
1323
  ?> </b>
@@ -1325,16 +1417,16 @@ function showBackups( &$files, &$sizes, $path, $option ) {
1325
  <?php echo LM_CONFIG_INFO_TAR?>
1326
  </td>
1327
  </tr>
1328
-
1329
-
1330
  <tr>
1331
  <td width='200'>
1332
  <?php echo LM_CONFIG_INFO_T_MSQL?>
1333
  </td>
1334
  <td>
1335
- <b><?php
1336
- if(function_exists("exec")){
1337
- $info_msql_path = explode(" ", @exec("whereis mysqldump"));
1338
  }
1339
  echo ($info_msql_path['1'] != "")? $info_msql_path['1']:"unable to determine";
1340
  ?> </b>
@@ -1342,8 +1434,8 @@ function showBackups( &$files, &$sizes, $path, $option ) {
1342
  <?php echo LM_CONFIG_INFO_MSQL?>
1343
  </td>
1344
  </tr>
1345
-
1346
-
1347
  </table>
1348
  <?php
1349
  $tabs->endTab();
@@ -1356,19 +1448,19 @@ function showBackups( &$files, &$sizes, $path, $option ) {
1356
 
1357
  <?php
1358
  }
1359
-
1360
  function get_color($val, $comp){
1361
-
1362
  if(!stristr($val, $comp))
1363
  echo "<span style='color:green'>$val</span>";
1364
  else
1365
- echo "<span style='color:red'>$val</span>";
1366
-
1367
  }
1368
-
1369
  function TransferForm($option, $files){
1370
  global $baDownloadPath, $mosConfig_absolute_path, $clonerPath, $task;
1371
-
1372
  ?>
1373
  <form action="index2.php" method="GET" name="adminForm">
1374
  <script language="javascript" type="text/javascript">
@@ -1380,7 +1472,7 @@ function showBackups( &$files, &$sizes, $path, $option ) {
1380
  submitform( pressbutton );
1381
  return;
1382
  }
1383
-
1384
  submitform( pressbutton );
1385
 
1386
  }
@@ -1396,7 +1488,7 @@ function showBackups( &$files, &$sizes, $path, $option ) {
1396
  <b>Transfer <?php echo $file;?> details:</b>
1397
  <br /><b>Attempting to
1398
  <?php echo (($_REQUEST[task]=='move')||($_REQUEST[task2]=='move'))?'Move':'Clone';?> backup(s):</b><br /><?php echo implode("<br />",$files)?>
1399
-
1400
  </td></tr>
1401
  <tr><td colspan='2'><?php echo LM_CLONE_FORM_TOP?></td></tr>
1402
  <?php
@@ -1477,7 +1569,7 @@ function showBackups( &$files, &$sizes, $path, $option ) {
1477
  if($_CONFIG['enable_db_backup']){
1478
  $tabs->startTab(LM_TAB_G_DATABASE,"users-databse-options-tab");
1479
  ?>
1480
-
1481
 
1482
  <table class="adminform">
1483
  <tr>
@@ -1492,7 +1584,7 @@ function showBackups( &$files, &$sizes, $path, $option ) {
1492
  <td><input type="checkbox" id="dbbackup_drop" name="dbbackup_drop" value="1" />&nbsp;<?php echo "Add DROP SYNTAX"; ?></td>
1493
  </tr>
1494
  <tr>
1495
- <td><?php echo "Mysql Compatibility"; ?> &nbsp;
1496
  <select name='dbbackup_comp'>
1497
  <option value=''>Default</option>
1498
  <option value='MYSQL40'>MYSQL40</option>
@@ -1510,18 +1602,18 @@ function showBackups( &$files, &$sizes, $path, $option ) {
1510
 
1511
  $query = mysql_query("SHOW tables");
1512
  while($row = mysql_fetch_array($query)){
1513
-
1514
  echo "<option value='".$row[0]."'>$row[0]</option>";
1515
-
1516
  }
1517
  ?>
1518
  </select>
1519
  </td></tr>
1520
-
1521
- <?php
1522
  if(abs($_CONFIG[system_mdatabases])==0){
1523
- ?>
1524
-
1525
  <tr><th colspan=2>
1526
  <?php echo LM_DATABASE_INCLUDE_DATABASES?>
1527
  </th></tr>
@@ -1530,22 +1622,22 @@ function showBackups( &$files, &$sizes, $path, $option ) {
1530
  <?php
1531
 
1532
  $query = mysql_query("SHOW databases");
1533
-
1534
  while($row = mysql_fetch_array($query)){
1535
-
1536
  echo "<option value='".$row[0]."'>$row[0]</option>";
1537
-
1538
  }
1539
-
1540
  ?>
1541
  </select><br />
1542
  <?php echo LM_DATABASE_INCLUDE_DATABASES_SUB?>
1543
  </td></tr>
1544
-
1545
  <?php
1546
  }
1547
  ?>
1548
-
1549
  </table>
1550
  <?php
1551
  $tabs->endTab();
@@ -1581,18 +1673,18 @@ function showBackups( &$files, &$sizes, $path, $option ) {
1581
  <link href="browser/filebrowser.css" rel="stylesheet" type="text/css">
1582
 
1583
  <script type="text/javascript" src="browser/xmlhttp.js"></script>
1584
-
1585
 
1586
  <div id="browser">
1587
  <?php require_once("browser/files_inpage.php"); ?>
1588
  </div>
1589
  <script>do_browser()</script>
1590
-
1591
  </td></tr>
1592
  <?php
1593
  }
1594
  ?>
1595
-
1596
  </table>
1597
  <?php
1598
  $tabs->endTab();
@@ -1651,7 +1743,7 @@ function showBackups( &$files, &$sizes, $path, $option ) {
1651
  </form>
1652
  <?php
1653
  }
1654
-
1655
  function generateBackup_text( $archiveName, $archiveSize, $originalSize, $d, $f, $databaseResult, $option ) {
1656
  // ----------------------------------------------------------
1657
  // Presentation of the final report screen in text mode
@@ -1668,7 +1760,7 @@ function showBackups( &$files, &$sizes, $path, $option ) {
1668
  <?php
1669
  $content = ob_get_contents();
1670
  ob_end_clean();
1671
-
1672
  return $content;
1673
  }
1674
 
@@ -1740,8 +1832,8 @@ function showBackups( &$files, &$sizes, $path, $option ) {
1740
  </form>
1741
  <?php
1742
  }
1743
-
1744
-
1745
  function Rename($files, $option){
1746
  global $_CONFIG;
1747
 
@@ -1752,7 +1844,7 @@ function showBackups( &$files, &$sizes, $path, $option ) {
1752
  <?php echo LM_RENAME_TOP?>
1753
  </th></tr>
1754
  <?php
1755
-
1756
  foreach($files as $key=>$file){
1757
  echo "<tr>
1758
  <td >
4
  * Oficial website: http://www.joomlaplug.com/
5
  * -------------------------------------------
6
  * Creator: Liuta Romulus Ovidiu
7
+ * License: GNU/GPL
8
  * Email: admin@joomlaplug.com
9
  * Revision: 1.0
10
  * Date: July 2007
12
 
13
 
14
  /** ensure this file is being included by a parent file */
15
+ defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );
16
 
17
  if($_COOKIE['auth_clone'] != 1)
18
  setcookie('auth_clone', '1');
19
 
20
  class mosTabs{
21
+
22
  function mosTabs($int){
23
+
24
  echo "<div class=\"tabber\">";
25
+
26
  }
27
+
28
  function startTab($name, $class){
29
+
30
  echo "<div class=\"tabbertab\" title=\"$name\">";
31
+
32
+
33
  }
34
+
35
  function endTab(){
36
+
37
  echo "</div>";
38
+
39
  }
40
+
41
  function endPane(){
42
+
43
  echo "</div>";
44
  }
45
+
46
  }
47
 
48
  /**
60
  <head>
61
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
62
  <title>XCloner Backup and Restore</title>
63
+ <META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
64
 
65
  <link rel="stylesheet" href="css/tabber.css" TYPE="text/css" MEDIA="screen">
66
  <link rel="styleSheet" href="css/dtree.css" type="text/css" />
146
 
147
  //-->
148
  </script></div> </td></tr></table>
149
+
150
+ <!--XCloner Ads -->
151
+ <br />
152
+ <table width='100%' cellpadding='5' height='100%' class='menu_table'><tr><td>
153
+ <center>
154
+
155
+ <script type='text/javascript'><!--//<![CDATA[
156
+ var m3_u = (location.protocol=='https:'?'https://www.xcloner.com/ads/www/delivery/ajs.php':'http://www.xcloner.com/ads/www/delivery/ajs.php');
157
+ var m3_r = Math.floor(Math.random()*99999999999);
158
+ if (!document.MAX_used) document.MAX_used = ',';
159
+ document.write ("<scr"+"ipt type='text/javascript' src='"+m3_u);
160
+ document.write ("?campaignid=3");
161
+ document.write ('&amp;cb=' + m3_r);
162
+ if (document.MAX_used != ',') document.write ("&amp;exclude=" + document.MAX_used);
163
+ document.write (document.charset ? '&amp;charset='+document.charset : (document.characterSet ? '&amp;charset='+document.characterSet : ''));
164
+ document.write ("&amp;loc=" + escape(window.location));
165
+ if (document.referrer) document.write ("&amp;referer=" + escape(document.referrer));
166
+ if (document.context) document.write ("&context=" + escape(document.context));
167
+ if (document.mmm_fo) document.write ("&amp;mmm_fo=1");
168
+ document.write ("'><\/scr"+"ipt>");
169
+ //]]>--></script><noscript><a href='http://www.xcloner.com/ads/www/delivery/ck.php?n=a6255e1e&amp;cb=1675675575' target='_blank'><img src='http://www.xcloner.com/ads/www/delivery/avw.php?campaignid=3&amp;cb=1675675575&amp;n=a6255e1e' border='0' alt='' /></a></noscript>
170
+
171
+ </center>
172
+ </td></td></table>
173
+ <!-- END Ads -->
174
+
175
+
176
  </td><td valign='top' align='left' style="padding-left: 20px;">
177
 
178
+
179
  <?php
180
  if($_REQUEST['mosmsg']!="")
181
+
182
  echo "<center><h2>".$_REQUEST['mosmsg']."</h2></center>";
183
 
184
  }
189
  </td></tr></table>
190
  <hr><br /><br />
191
  <center>
192
+ <p>Powered by <a href='http://www.xcloner.com' target='_blank'>XCloner</a>. All rights reserved!</p></center>
193
 
194
  </td></tr></table>
195
 
244
  </a>
245
  </div>
246
  </div>
247
+
248
  <div style="float:left;">
249
  <div class="icon">
250
 
271
 
272
  /*The basic authentification form*/
273
  function Login(){
274
+
275
  ?>
276
  <center><br />
277
  <form action="index2.php" method="post" name="adminForm">
279
  <table align='center' cellpadding='10' cellspacing='20'>
280
  <tr ><td colspan='2' align='center'><b>Authentification Area:</b></td></tr>
281
  <tr><td>Username:</td><td><input type='text' size='30' name='username'></td></tr>
282
+ <tr><td>Password:</td><td><input type='password' size='30' name='password'></td></tr>
283
+
284
  <tr><td colspan='2'><?php echo LM_LOGIN_TEXT;?></td></tr>
285
+
286
  </table>
287
  </td></tr>
288
+
289
+
290
+
291
  </table>
292
+
293
  <input type="hidden" name="option" value="com_cloner" />
294
  <input type="hidden" name="task" value="lang" />
295
  <input type="hidden" name="boxchecked" value="0" />
296
  <input type="hidden" name="hidemainmenu" value="0" />
297
+
298
  </form>
299
  </center>
300
  <?php
301
+
302
  }
303
 
304
  function Cron(){
313
  <?php echo LM_CRON_SUB?>
314
  <br /><b>For Joomla:</b>
315
  <span style='background: #eeeeee'>
316
+ /usr/bin/php <?php echo dirname(__FILE__);?>/cloner.cron.php
317
  <br />
318
+ or
319
  <br />
320
+ links http://link_to_xcloner_dir/cloner.cron.php
321
  <br />
322
  or
323
  <br />
324
+ lynx -source http://link_to_xcloner_dir/cloner.cron.php
325
  </span>
326
 
327
  For <b>Running Multiple Crons</b>, you need to first create a custom configuration file in the XCloner Configuration -> Cron tab
328
  and then replace "cloner.cron.php" with "cloner.cron.php?config=myconfig.php", only use 'links' or 'lynx' options to run the cronjob
329
 
330
+ If you would like to use the <b>php SSH command</b> for running Multiple Crons, you will need to replace
331
  the "cloner.cron.php" with <b>"cloner.cron.php myconfig.php"</b> in the command line.
332
 
333
  <?php echo LM_CRON_HELP?>
341
 
342
  function Translator_Edit_DEFAULT($option, $content, $file, $lang){
343
  global $_CONFIG;
344
+ ?>
345
  <form action="index2.php" method="post" name="adminForm">
346
  <table class="adminlist">
347
  <tr>
349
  </tr>
350
 
351
  <tr>
352
+
353
  <td><textarea name='def_content' cols='100' rows='30'><?php echo $content;?></textarea></td>
354
+
355
+ </tr>
356
 
357
  <input type="hidden" name="option" value="com_cloner" />
358
  <input type="hidden" name="language" value="<?php echo $lang?>" />
359
  <input type="hidden" name="task" value="lang" />
360
  <input type="hidden" name="boxchecked" value="0" />
361
  <input type="hidden" name="hidemainmenu" value="0" />
362
+ </form>
363
 
364
  <?php
365
 
367
 
368
  function Translator_Add($option){
369
  global $_CONFIG;
370
+ ?>
371
  <form action="index2.php" method="post" name="adminForm">
372
  <table class="adminlist">
373
  <tr>
375
  </tr>
376
 
377
  <tr>
378
+
379
  <td><input size='40' type=text name='lname' value=''></td>
380
+
381
+ </tr>
382
 
383
  <input type="hidden" name="option" value="com_cloner" />
384
  <input type="hidden" name="language" value="<?php echo $lang?>" />
385
  <input type="hidden" name="task" value="add_lang_new" />
386
  <input type="hidden" name="boxchecked" value="0" />
387
  <input type="hidden" name="hidemainmenu" value="0" />
388
+ </form>
389
+ <?php
390
  }
391
 
392
  function Translator_Edit($option, $data, $def_data, $file, $lang){
393
  global $_CONFIG;
394
+ ?>
395
+
396
  <form action="index2.php" method="post" name="adminForm">
397
  <table class="adminlist">
398
  <tr>
399
  <th align="left"><?php echo LM_LANG_EDIT_FILE?> <input type=text name='lfile' size=100 value='<?php echo $file?>'><br />
400
  <font color='red'><?php echo LM_LANG_EDIT_FILE_SUB?></font>
401
+
402
  <script language="javascript" type="text/javascript">
403
  function submitbutton(pressbutton) {
404
  var form = document.adminForm;
431
  if($i++ %2 == 0)
432
  $bgcolor = '#eeeeee';
433
  else
434
+ $bgcolor = '#dddddd';
435
  ?>
436
  <table class="adminlist">
437
  <tr>
440
  </tr>
441
  <tr bgcolor="<?php echo $bgcolor?>">
442
  <td><textarea cols=65 rows=3 ><?php echo stripslashes($def_data[$key])?></textarea></td>
443
+
444
+ <td bgcolor='<?php if( trim(str_replace(array("\n","\r"," "),array("","",""),$def_data[$key])) !=
445
+ trim(str_replace(array("\n","\r"," "),array("","",""),$value)))
446
+ echo 'green';
447
+ else
448
  echo 'red';?>'>
449
  <textarea cols=65 rows=3 name=lang[<?php echo $key?>]><?php echo stripslashes($value)?></textarea></td>
450
  </tr>
451
+
452
+ <?php
453
  }
454
+ ?>
455
 
456
  <input type="hidden" name="option" value="com_cloner" />
457
  <input type="hidden" name="language" value="<?php echo $lang?>" />
458
  <input type="hidden" name="task" value="lang" />
459
  <input type="hidden" name="boxchecked" value="0" />
460
  <input type="hidden" name="hidemainmenu" value="0" />
461
+ </form>
462
+
463
+ <?php
464
  }
465
 
466
  function Translator($option, $lang_arr){
467
+ global $_CONFIG;
468
+
469
+ ?>
470
 
 
 
471
  <form action="index2.php" method="post" name="adminForm">
472
  <table class="adminlist">
473
  <tr>
480
  </th>
481
  </tr>
482
  <?php
483
+
484
  for($i=0; $i<sizeof($lang_arr); $i++){
485
+
486
+ ?>
487
+
488
  <tr>
489
  <td width="5" align="left"><?php echo ($i+1);?></td>
490
  <td width="5" align="left">
495
  <a href="index2.php?option=<?php echo $option;?>&task=edit_lang&langx=<?php echo $lang_arr[$i];?>"><?php echo ucfirst($lang_arr[$i])?>
496
  </td>
497
  </tr>
498
+ <?php
499
+
500
  }
501
+ ?>
502
 
503
  <input type="hidden" name="option" value="com_cloner" />
504
  <input type="hidden" name="task" value="lang" />
505
  <input type="hidden" name="boxchecked" value="0" />
506
  <input type="hidden" name="hidemainmenu" value="0" />
507
+ </form>
508
+ <?php
509
  }
510
 
511
  function showBackups( &$files, &$sizes, $path, $option ) {
602
  $tabs->startTab(LM_TAB_GENERAL,"config-general-tab");
603
  ?>
604
  <table class='adminform'>
605
+
606
+
607
  <tr>
608
  <th colspan='2'>
609
  <?php echo LM_CONFIG_BSETTINGS?>
670
  <?php echo LM_CRON_DB_BACKUP_SUB?>
671
  </td>
672
  </tr>
673
+
674
  <tr>
675
  <td>
676
  <?php echo LM_CONFIG_SYSTEM_MBACKUP?>
681
  <br />
682
  <?php echo LM_CONFIG_SYSTEM_MBACKUP_SUB?>
683
  </td>
684
+ </tr>
685
+
686
  <tr>
687
  <th colspan='2'>
688
  <?php echo LM_CONFIG_BSETTINGS_SERVER?>
689
  </th>
690
  </tr>
691
+
692
+
693
  <tr >
694
  <td>
695
  <?php echo LM_CONFIG_MEM?>
705
  <?php echo LM_TAR_PATH;?> <br /><input size='50' type=text name=tarpath value='<?php echo $_CONFIG[tarpath]?>'><br />
706
  <?php echo LM_TAR_PATH_SUB;?>
707
  </td></tr>
708
+
709
  </table>
710
 
711
  </td></tr>
714
  <?php echo LM_ACTIVE?> <input type=checkbox value=1 name='sql_mem' <?php if($_CONFIG[sql_mem]==1) echo 'checked';?>>
715
  </td><td align='left'>
716
  <?php echo LM_MYSQLDUMP_PATH;?> <br /><input type=text size='50' name='sqldump' value='<?php echo $_CONFIG[sqldump]?>'>
717
+
718
  </td></tr>
719
  </table>
720
 
746
  $tabs->startTab(LM_TAB_MYSQL,"config-mysql-tab");
747
  ?>
748
  <table class='adminform'>
749
+
750
+
751
  <tr>
752
  <th colspan='2'>
753
  <?php echo LM_CONFIG_MYSQL?>
763
  <br /><?php echo LM_CONFIG_MYSQLH_SUB?>
764
  </td>
765
  </tr>
766
+
767
  <tr>
768
  <td>
769
  <?php echo LM_CONFIG_MYSQLU?>
773
  <br /><?php echo LM_CONFIG_MYSQLU_SUB?>
774
  </td>
775
  </tr>
776
+
777
  <tr>
778
  <td>
779
  <?php echo LM_CONFIG_MYSQLP?>
783
  <br /><?php echo LM_CONFIG_MYSQLP_SUB?>
784
  </td>
785
  </tr>
786
+
787
  <tr>
788
  <td>
789
  <?php echo LM_CONFIG_MYSQLD?>
813
  $tabs->startTab(LM_TAB_AUTH,"config-mysql-tab");
814
  ?>
815
  <table class='adminform'>
816
+
817
+
818
  <tr>
819
  <th colspan='2'>
820
  <?php echo LM_CONFIG_AUTH?>
830
  <br /><?php echo LM_CONFIG_AUTH_USER_SUB?>
831
  </td>
832
  </tr>
833
+
834
  <tr>
835
  <td>
836
  <?php echo LM_CONFIG_AUTH_PASS?>
840
  <br /><?php echo LM_CONFIG_AUTH_PASS_SUB?>
841
  </td>
842
  </tr>
843
+
844
 
845
  </table>
846
+ <?php
847
  $tabs->endTab();
848
  $tabs->startTab(LM_TAB_SYSTEM,"config-system-tab");
849
  ?>
853
  <?php echo LM_CONFIG_DISPLAY?>
854
  </th>
855
  </tr>
856
+
857
  <tr>
858
  <td width='200'>
859
  <?php echo LM_CONFIG_SYSTEM_LANG?>
873
  <br /><?php echo LM_CONFIG_SYSTEM_LANG_SUB?>
874
  </td>
875
  </tr>
876
+
877
+
878
  <!--<tr>
879
  <td width='200'>
880
  <?php echo LM_CONFIG_SYSTEM_DOWNLOAD?>
887
  <br /><?php echo LM_CONFIG_SYSTEM_DOWNLOAD_SUB?>
888
  </td>
889
  </tr>-->
890
+
891
+
892
  <tr>
893
  <th colspan='2'>
894
  <?php echo LM_CONFIG_SYSTEM?>
915
  Secure <input type=radio size=50 value=1 name='secure_ftp' <?php if($_CONFIG[secure_ftp]==1) echo 'checked';?>>
916
  </td>
917
  </tr>
918
+
919
  <th colspan='2'>
920
  <?php echo LM_CONFIG_MANUAL?>
921
  </th>
922
  </tr>
923
+
924
  <tr>
925
  <td>
926
  <?php echo LM_CONFIG_MANUAL_FILES;?>
927
  </td>
928
  <td>
929
  <input type=text size=20 name='backup_refresh_number' value=<?php echo $_CONFIG[backup_refresh_number];?>>
930
+
931
  </td>
932
  </tr>
933
+
934
  <tr>
935
  <td>
936
  <?php echo LM_CONFIG_MANUAL_REFRESH;?>
937
  </td>
938
  <td>
939
  <input type=text size=20 name='refresh_time' value=<?php echo $_CONFIG[refresh_time];?>> seconds
940
+
941
  </td>
942
  </tr>
943
+
944
  </table>
945
  <?php
946
  $tabs->endTab();
952
  <?php echo LM_CRON_SETTINGS_M?> - all configs are saved in configs/
953
  </th>
954
  </tr>
955
+
956
  <tr>
957
  <td>
958
  <?php echo LM_CRON_MCRON?>
962
  <?php echo LM_CRON_MCRON_SUB?>
963
  </td>
964
  </tr>
965
+
966
  <tr>
967
  <td>
968
  <?php echo LM_CRON_MCRON_AVAIL?>
969
  </td>
970
  <td>
971
  <?php
972
+
973
  if ($handle = @opendir($_CONFIG['multiple_config_dir'])) {
974
 
975
  while (false !== ($file = readdir($handle))) {
976
  if( ($file!=".") && ($file!="..") &&($file!="") && (strstr($file, '.php'))){
977
  $fcron = "cloner.cron.php?config=$file";
978
+
979
  echo "<b>$fcron</b>";
980
+
981
  echo " - <a href='$fcron' target='_blank'>execute cron</a>";
982
+
983
+ echo " | <a href='index2.php?option=com_cloner&task=cron_delete&fconfig=$file'>delete config</a>";
984
+
985
  echo "\n<br />";
986
  }
987
  }
991
  ?>
992
  </td>
993
  </tr>
994
+
995
  <tr>
996
  <th colspan='2'>
997
  <?php echo LM_CRON_SETTINGS?>
998
  </th>
999
  </tr>
1000
+
1001
  <tr>
1002
  <td>
1003
  <?php echo LM_CRON_SEMAIL?>
1007
  <?php echo LM_CRON_SEMAIL_SUB?>
1008
  </td>
1009
  </tr>
1010
+
1011
  <tr>
1012
  <td width='200'>
1013
  <?php echo LM_CRON_MODE?>
1022
  <?php echo LM_CRON_MODE_INFO?>
1023
  </td>
1024
  </tr>
1025
+
1026
+
1027
+ <tr>
1028
  <td>
1029
  <?php echo LM_CRON_TYPE?>
1030
  </td>
1038
  <?php echo LM_CRON_TYPE_INFO?>
1039
  </td>
1040
  </tr>
1041
+
1042
  <tr>
1043
  <td>
1044
  <?php echo LM_CRON_BNAME?>
1048
  <?php echo LM_CRON_BNAME_SUB?>
1049
  </td>
1050
  </tr>
1051
+
1052
+
1053
  <tr>
1054
  <td>
1055
  <?php echo LM_CRON_IP?>
1059
  <?php echo LM_CRON_IP_SUB?>
1060
  </td>
1061
  </tr>
1062
+
1063
  </table>
1064
  <table class='adminform'>
1065
  <tr>
1109
  </td>
1110
  </tr>
1111
  </table>
1112
+
1113
+ <table class='adminform'>
1114
+
1115
+ <tr><th colspan=2>
1116
+ <?php echo LM_AMAZON_S3?>
1117
+ </th></tr>
1118
+ <tr>
1119
+ <td width='200'>
1120
+ <?php echo LM_AMAZON_S3_ACTIVATE?>
1121
+ </td>
1122
+ <td>
1123
+ <input type=checkbox name='cron_amazon_active' <?php if($_CONFIG[cron_amazon_active]==1) echo "checked";?> value='1'>
1124
+ </td>
1125
+ </tr>
1126
+
1127
+ <tr>
1128
+ <td width='200'>
1129
+ <?php echo LM_AMAZON_S3_AWSACCESSKEY;?>
1130
+ </td>
1131
+ <td>
1132
+ <input type=text size=50 name='cron_amazon_awsAccessKey' value="<?php echo $_CONFIG['cron_amazon_awsAccessKey'];?>">
1133
+ </td>
1134
+ </tr>
1135
+
1136
+ <tr>
1137
+ <td width='200'>
1138
+ <?php echo LM_AMAZON_S3_AWSSECRETKEY;?>
1139
+ </td>
1140
+ <td>
1141
+ <input type=text size=50 name='cron_amazon_awsSecretKey' value="<?php echo $_CONFIG['cron_amazon_awsSecretKey'];?>">
1142
+ </td>
1143
+ </tr>
1144
+
1145
+ <tr>
1146
+ <td width='200'>
1147
+ <?php echo LM_AMAZON_S3_BUCKET;?>
1148
+ </td>
1149
+ <td>
1150
+ <input type=text size=50 name='cron_amazon_bucket' value="<?php echo $_CONFIG['cron_amazon_bucket'];?>">
1151
+ </td>
1152
+ </tr>
1153
+
1154
+ <tr>
1155
+ <td width='200'>
1156
+ <?php echo LM_AMAZON_S3_DIRNAME;?>
1157
+ </td>
1158
+ <td>
1159
+ <input type=text size=50 name='cron_amazon_dirname' value="<?php echo $_CONFIG['cron_amazon_dirname'];?>">
1160
+ </td>
1161
+ </tr>
1162
+
1163
+ <td>
1164
+
1165
+ </td>
1166
+ </tr>
1167
+
1168
+ </table>
1169
+
1170
+
1171
  <table class='adminform'>
1172
  <tr>
1173
  <th colspan='2'>
1186
 
1187
 
1188
  </table>
1189
+
1190
  <table class='adminform'>
1191
  <tr>
1192
  <th colspan='2'>
1202
  <input type=checkbox name='cron_sql_drop' value='1' <?php if($_CONFIG[cron_sql_drop]) echo "checked";?> >
1203
  </td>
1204
  </tr>
1205
+
1206
+ <?php
1207
  if((abs($_CONFIG[system_mdatabases])==0) && ($_CONFIG[enable_db_backup]==1)){
1208
+ ?>
1209
  <tr><td valign='top'>
1210
  <?php echo LM_DATABASE_INCLUDE_DATABASES?>
1211
  </td><td>
1216
 
1217
  $query = @mysql_query("SHOW databases");
1218
  while($row = @mysql_fetch_array($query)){
1219
+
1220
  $table = $row[0];
1221
+
1222
  if($table != $_CONFIG['mysql_database'])
1223
+
1224
  if(in_array($table, $curent_dbs)){
1225
+
1226
  echo "<option value='".$table."' selected>$table</option>";
1227
+
1228
  }else{
1229
+
1230
  echo "<option value='".$table."'>$table</option>";
1231
+
1232
  }
1233
  }
1234
  ?>
1238
  <?php
1239
  }
1240
  ?>
1241
+
1242
  <tr><th colspan=2>
1243
  <?php echo LM_CRON_DELETE_FILES?>
1244
  </th></tr>
1259
  </td>
1260
  </tr>
1261
  </table>
1262
+
1263
  <table class='adminform'>
1264
  <tr>
1265
  <th colspan='2'>
1287
  <?php echo LM_CONFIG_INFO_PHP?>
1288
  </th>
1289
  </tr>
1290
+
1291
  <tr>
1292
  <td width='200'>
1293
  <?php echo LM_CONFIG_INFO_T_SAFEMODE?>
1295
  <td>
1296
  <b><?php $val = (ini_get('safe_mode') != "")? ini_get('safe_mode'):"Off";
1297
  echo HTML_cloner::get_color($val, 'On');
1298
+ ?></b>
1299
  <br />
1300
  <?php echo LM_CONFIG_INFO_SAFEMODE?>
1301
  </td>
1302
  </tr>
1303
+
1304
  <tr>
1305
  <td width='200'>
1306
  <?php echo LM_CONFIG_INFO_T_MTIME?>
1307
  </td>
1308
  <td>
1309
  <b><?php echo (ini_get('max_execution_time') != "")? ini_get('max_execution_time'):"no value";
1310
+
1311
+ ?></b>
1312
  <br />
1313
  <?php echo LM_CONFIG_INFO_TIME?>
1314
  </td>
1315
  </tr>
1316
+
1317
  <tr>
1318
  <td width='200'>
1319
  <?php echo LM_CONFIG_INFO_T_MEML?>
1324
  <?php echo LM_CONFIG_INFO_MEMORY?>
1325
  </td>
1326
  </tr>
1327
+
1328
  <tr>
1329
  <td width='200'>
1330
  <?php echo LM_CONFIG_INFO_T_BDIR?>
1337
  <?php echo LM_CONFIG_INFO_BASEDIR?>
1338
  </td>
1339
  </tr>
1340
+
1341
  <tr>
1342
  <td width='200'>
1343
  <?php echo LM_CONFIG_INFO_T_EXEC?>
1344
  </td>
1345
  <td>
1346
+ <b><?php
1347
+
1348
  $out = "";
1349
  if(function_exists("exec")){
1350
+
1351
  $out = @exec("ls -al");
1352
  }
1353
+
1354
  $val = ($out != "")? "ENABLED":"<font color='red'>DISABLED</font>";
1355
  echo HTML_cloner::get_color($val, 'DISABLED');
1356
  ?> </b>
1358
  <?php echo LM_CONFIG_INFO_EXEC?>
1359
  </td>
1360
  </tr>
1361
+
1362
  <tr>
1363
  <th colspan='2'>
1364
  <?php echo LM_CONFIG_INFO_PATHS?>
1365
  </td>
1366
  <td>
1367
  </tr>
1368
+
1369
  <tr>
1370
  <td width='200'>
1371
  <?php echo LM_CONFIG_INFO_ROOT_BPATH_TMP?>
1372
  </td>
1373
  <td>
1374
+ <b><?php $tmp_dir = realpath($_CONFIG['backup_path']."/administrator/backups");
1375
  echo (@is_writeable( $tmp_dir ))? $tmp_dir . " is <font color=green>writeable</font>":$tmp_dir. " <font color=red>incorrect or unreadable</font>";?></b>
1376
  <br />
1377
  <?php echo LM_CONFIG_INFO_ROOT_PATH_TMP_SUB?>
1378
  </td>
1379
  </tr>
1380
+
1381
  <tr>
1382
  <td width='200'>
1383
  <?php echo LM_CONFIG_INFO_ROOT_BPATH?>
1388
  <?php echo LM_CONFIG_INFO_ROOT_PATH_SUB?>
1389
  </td>
1390
  </tr>
1391
+
1392
+
1393
  <tr>
1394
  <td width='200'>
1395
  <?php echo LM_CONFIG_INFO_T_BPATH?>
1396
  </td>
1397
  <td>
1398
+ <b><?php echo (@is_writeable($_CONFIG['clonerPath']) )? $_CONFIG['clonerPath'] . " is <font color=green>writeable</font>":$_CONFIG['clonerPath']. " <font color=red>unwriteable</font>";?></b>
1399
  <br />
1400
  <?php echo LM_CONFIG_INFO_BPATH?>
1401
  </td>
1402
  </tr>
1403
+
1404
+
1405
  <tr>
1406
  <td width='200'>
1407
  <?php echo LM_CONFIG_INFO_T_TAR?>
1408
  </td>
1409
  <td>
1410
+ <b><?php
1411
+ if(function_exists('exec')){
1412
+ $info_tar_path = explode(" ", @exec("whereis tar"));
1413
  }
1414
  echo ($info_tar_path['1'] != "")? $info_tar_path['1']:"unable to determine";
1415
  ?> </b>
1417
  <?php echo LM_CONFIG_INFO_TAR?>
1418
  </td>
1419
  </tr>
1420
+
1421
+
1422
  <tr>
1423
  <td width='200'>
1424
  <?php echo LM_CONFIG_INFO_T_MSQL?>
1425
  </td>
1426
  <td>
1427
+ <b><?php
1428
+ if(function_exists('exec')){
1429
+ $info_msql_path = explode(" ", @exec("whereis mysqldump"));
1430
  }
1431
  echo ($info_msql_path['1'] != "")? $info_msql_path['1']:"unable to determine";
1432
  ?> </b>
1434
  <?php echo LM_CONFIG_INFO_MSQL?>
1435
  </td>
1436
  </tr>
1437
+
1438
+
1439
  </table>
1440
  <?php
1441
  $tabs->endTab();
1448
 
1449
  <?php
1450
  }
1451
+
1452
  function get_color($val, $comp){
1453
+
1454
  if(!stristr($val, $comp))
1455
  echo "<span style='color:green'>$val</span>";
1456
  else
1457
+ echo "<span style='color:red'>$val</span>";
1458
+
1459
  }
1460
+
1461
  function TransferForm($option, $files){
1462
  global $baDownloadPath, $mosConfig_absolute_path, $clonerPath, $task;
1463
+
1464
  ?>
1465
  <form action="index2.php" method="GET" name="adminForm">
1466
  <script language="javascript" type="text/javascript">
1472
  submitform( pressbutton );
1473
  return;
1474
  }
1475
+
1476
  submitform( pressbutton );
1477
 
1478
  }
1488
  <b>Transfer <?php echo $file;?> details:</b>
1489
  <br /><b>Attempting to
1490
  <?php echo (($_REQUEST[task]=='move')||($_REQUEST[task2]=='move'))?'Move':'Clone';?> backup(s):</b><br /><?php echo implode("<br />",$files)?>
1491
+
1492
  </td></tr>
1493
  <tr><td colspan='2'><?php echo LM_CLONE_FORM_TOP?></td></tr>
1494
  <?php
1569
  if($_CONFIG['enable_db_backup']){
1570
  $tabs->startTab(LM_TAB_G_DATABASE,"users-databse-options-tab");
1571
  ?>
1572
+
1573
 
1574
  <table class="adminform">
1575
  <tr>
1584
  <td><input type="checkbox" id="dbbackup_drop" name="dbbackup_drop" value="1" />&nbsp;<?php echo "Add DROP SYNTAX"; ?></td>
1585
  </tr>
1586
  <tr>
1587
+ <td><?php echo "Mysql Compatibility"; ?> &nbsp;
1588
  <select name='dbbackup_comp'>
1589
  <option value=''>Default</option>
1590
  <option value='MYSQL40'>MYSQL40</option>
1602
 
1603
  $query = mysql_query("SHOW tables");
1604
  while($row = mysql_fetch_array($query)){
1605
+
1606
  echo "<option value='".$row[0]."'>$row[0]</option>";
1607
+
1608
  }
1609
  ?>
1610
  </select>
1611
  </td></tr>
1612
+
1613
+ <?php
1614
  if(abs($_CONFIG[system_mdatabases])==0){
1615
+ ?>
1616
+
1617
  <tr><th colspan=2>
1618
  <?php echo LM_DATABASE_INCLUDE_DATABASES?>
1619
  </th></tr>
1622
  <?php
1623
 
1624
  $query = mysql_query("SHOW databases");
1625
+
1626
  while($row = mysql_fetch_array($query)){
1627
+
1628
  echo "<option value='".$row[0]."'>$row[0]</option>";
1629
+
1630
  }
1631
+
1632
  ?>
1633
  </select><br />
1634
  <?php echo LM_DATABASE_INCLUDE_DATABASES_SUB?>
1635
  </td></tr>
1636
+
1637
  <?php
1638
  }
1639
  ?>
1640
+
1641
  </table>
1642
  <?php
1643
  $tabs->endTab();
1673
  <link href="browser/filebrowser.css" rel="stylesheet" type="text/css">
1674
 
1675
  <script type="text/javascript" src="browser/xmlhttp.js"></script>
1676
+
1677
 
1678
  <div id="browser">
1679
  <?php require_once("browser/files_inpage.php"); ?>
1680
  </div>
1681
  <script>do_browser()</script>
1682
+
1683
  </td></tr>
1684
  <?php
1685
  }
1686
  ?>
1687
+
1688
  </table>
1689
  <?php
1690
  $tabs->endTab();
1743
  </form>
1744
  <?php
1745
  }
1746
+
1747
  function generateBackup_text( $archiveName, $archiveSize, $originalSize, $d, $f, $databaseResult, $option ) {
1748
  // ----------------------------------------------------------
1749
  // Presentation of the final report screen in text mode
1760
  <?php
1761
  $content = ob_get_contents();
1762
  ob_end_clean();
1763
+
1764
  return $content;
1765
  }
1766
 
1832
  </form>
1833
  <?php
1834
  }
1835
+
1836
+
1837
  function Rename($files, $option){
1838
  global $_CONFIG;
1839
 
1844
  <?php echo LM_RENAME_TOP?>
1845
  </th></tr>
1846
  <?php
1847
+
1848
  foreach($files as $key=>$file){
1849
  echo "<tr>
1850
  <td >
browser/files_xml.php CHANGED
@@ -1,19 +1,20 @@
1
  <?php
2
  /**
3
  * XCloner
4
- * Oficial website: http://www.joomlaplug.com/
5
  * -------------------------------------------
6
  * Creator: Liuta Romulus Ovidiu
7
- * License: All Rights Reserved
8
- * Email: admin@joomlaplug.com
9
  * Revision: 1.0
10
- * Date: July 2007
11
  **/
12
 
13
  header("Cache-Control: no-cache");
14
  header("Pragma: nocache");
15
  header("Content-Type: text/xml");
16
 
 
17
 
18
  ### testing the authenticity of access
19
  if($_COOKIE["auth_clone"] != 1){
@@ -21,8 +22,7 @@ if($_COOKIE["auth_clone"] != 1){
21
  exit;
22
  }
23
 
24
-
25
- @ini_set("error_reporting", "2");
26
  include("../cloner.config.php");
27
  include("../common.php");
28
 
@@ -40,7 +40,7 @@ $f_arr = array();
40
  $d_arr =array();
41
  $exclude = array();
42
  $_COOKIES = array();
43
- $exfile = $_CONFIG['backup_path']."/administrator/backups/.excl";
44
  $path = $_REQUEST['path'];
45
  $loc = $_REQUEST['dir'];
46
 
@@ -171,14 +171,14 @@ sort($exclude);
171
  sort($d_arr);
172
 
173
 
174
- echo "<directory location=\"$dir\">";
175
 
176
  foreach($d_arr as $file){
177
  if(in_array($dir."/".$file, $_COOKIES))
178
  $check = 'checked';
179
  else
180
  $check = '';
181
- echo "<folder check='$check'>$file</folder>";
182
 
183
  }
184
 
@@ -188,12 +188,12 @@ sort($exclude);
188
  else
189
  $check = '';
190
 
191
- echo "<file check='$check' link=\"#\">$file</file>";
192
 
193
  }
194
 
195
  foreach($exclude as $file)
196
- echo "<message>$file</message>";
197
 
198
  echo "</directory>";
199
 
1
  <?php
2
  /**
3
  * XCloner
4
+ * Oficial website: http://www.xcloner.com/
5
  * -------------------------------------------
6
  * Creator: Liuta Romulus Ovidiu
7
+ * License: GNU/GPL
8
+ * Email: admin@xcloner.com
9
  * Revision: 1.0
10
+ * Date: November 2010
11
  **/
12
 
13
  header("Cache-Control: no-cache");
14
  header("Pragma: nocache");
15
  header("Content-Type: text/xml");
16
 
17
+ error_reporting(2);
18
 
19
  ### testing the authenticity of access
20
  if($_COOKIE["auth_clone"] != 1){
22
  exit;
23
  }
24
 
25
+
 
26
  include("../cloner.config.php");
27
  include("../common.php");
28
 
40
  $d_arr =array();
41
  $exclude = array();
42
  $_COOKIES = array();
43
+ $exfile = realpath($_CONFIG['backup_path']."/administrator/backups")."/.excl";
44
  $path = $_REQUEST['path'];
45
  $loc = $_REQUEST['dir'];
46
 
171
  sort($d_arr);
172
 
173
 
174
+ echo "<directory location=\"".htmlspecialchars($dir)."\">";
175
 
176
  foreach($d_arr as $file){
177
  if(in_array($dir."/".$file, $_COOKIES))
178
  $check = 'checked';
179
  else
180
  $check = '';
181
+ echo "<folder check='$check'>".htmlspecialchars($file)."</folder>";
182
 
183
  }
184
 
188
  else
189
  $check = '';
190
 
191
+ echo "<file check='$check' link=\"#\">".htmlspecialchars($file)."</file>";
192
 
193
  }
194
 
195
  foreach($exclude as $file)
196
+ echo "<message>".str_replace("","",htmlspecialchars($file))."</message>";
197
 
198
  echo "</directory>";
199
 
classes/S3.php ADDED
@@ -0,0 +1,1365 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * $Id: S3.php 47 2009-07-20 01:25:40Z don.schonknecht $
4
+ *
5
+ * Copyright (c) 2008, Donovan Schönknecht. All rights reserved.
6
+ *
7
+ * Redistribution and use in source and binary forms, with or without
8
+ * modification, are permitted provided that the following conditions are met:
9
+ *
10
+ * - Redistributions of source code must retain the above copyright notice,
11
+ * this list of conditions and the following disclaimer.
12
+ * - Redistributions in binary form must reproduce the above copyright
13
+ * notice, this list of conditions and the following disclaimer in the
14
+ * documentation and/or other materials provided with the distribution.
15
+ *
16
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
20
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26
+ * POSSIBILITY OF SUCH DAMAGE.
27
+ *
28
+ * Amazon S3 is a trademark of Amazon.com, Inc. or its affiliates.
29
+ */
30
+
31
+ /**
32
+ * Amazon S3 PHP class
33
+ *
34
+ * @link http://undesigned.org.za/2007/10/22/amazon-s3-php-class
35
+ * @version 0.4.0
36
+ */
37
+ class S3 {
38
+ // ACL flags
39
+ const ACL_PRIVATE = 'private';
40
+ const ACL_PUBLIC_READ = 'public-read';
41
+ const ACL_PUBLIC_READ_WRITE = 'public-read-write';
42
+ const ACL_AUTHENTICATED_READ = 'authenticated-read';
43
+
44
+ public static $useSSL = true;
45
+
46
+ private static $__accessKey; // AWS Access key
47
+ private static $__secretKey; // AWS Secret key
48
+
49
+
50
+ /**
51
+ * Constructor - if you're not using the class statically
52
+ *
53
+ * @param string $accessKey Access key
54
+ * @param string $secretKey Secret key
55
+ * @param boolean $useSSL Enable SSL
56
+ * @return void
57
+ */
58
+ public function __construct($accessKey = null, $secretKey = null, $useSSL = true) {
59
+ if ($accessKey !== null && $secretKey !== null)
60
+ self::setAuth($accessKey, $secretKey);
61
+ self::$useSSL = $useSSL;
62
+ }
63
+
64
+
65
+ /**
66
+ * Set AWS access key and secret key
67
+ *
68
+ * @param string $accessKey Access key
69
+ * @param string $secretKey Secret key
70
+ * @return void
71
+ */
72
+ public static function setAuth($accessKey, $secretKey) {
73
+ self::$__accessKey = $accessKey;
74
+ self::$__secretKey = $secretKey;
75
+ }
76
+
77
+
78
+ /**
79
+ * Get a list of buckets
80
+ *
81
+ * @param boolean $detailed Returns detailed bucket list when true
82
+ * @return array | false
83
+ */
84
+ public static function listBuckets($detailed = false) {
85
+ $rest = new S3Request('GET', '', '');
86
+ $rest = $rest->getResponse();
87
+ if ($rest->error === false && $rest->code !== 200)
88
+ $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status');
89
+ if ($rest->error !== false) {
90
+ trigger_error(sprintf("S3::listBuckets(): [%s] %s", $rest->error['code'], $rest->error['message']), E_USER_WARNING);
91
+ return false;
92
+ }
93
+ $results = array();
94
+ if (!isset($rest->body->Buckets)) return $results;
95
+
96
+ if ($detailed) {
97
+ if (isset($rest->body->Owner, $rest->body->Owner->ID, $rest->body->Owner->DisplayName))
98
+ $results['owner'] = array(
99
+ 'id' => (string)$rest->body->Owner->ID, 'name' => (string)$rest->body->Owner->ID
100
+ );
101
+ $results['buckets'] = array();
102
+ foreach ($rest->body->Buckets->Bucket as $b)
103
+ $results['buckets'][] = array(
104
+ 'name' => (string)$b->Name, 'time' => strtotime((string)$b->CreationDate)
105
+ );
106
+ } else
107
+ foreach ($rest->body->Buckets->Bucket as $b) $results[] = (string)$b->Name;
108
+
109
+ return $results;
110
+ }
111
+
112
+
113
+ /*
114
+ * Get contents for a bucket
115
+ *
116
+ * If maxKeys is null this method will loop through truncated result sets
117
+ *
118
+ * @param string $bucket Bucket name
119
+ * @param string $prefix Prefix
120
+ * @param string $marker Marker (last file listed)
121
+ * @param string $maxKeys Max keys (maximum number of keys to return)
122
+ * @param string $delimiter Delimiter
123
+ * @param boolean $returnCommonPrefixes Set to true to return CommonPrefixes
124
+ * @return array | false
125
+ */
126
+ public static function getBucket($bucket, $prefix = null, $marker = null, $maxKeys = null, $delimiter = null, $returnCommonPrefixes = false) {
127
+ $rest = new S3Request('GET', $bucket, '');
128
+ if ($prefix !== null && $prefix !== '') $rest->setParameter('prefix', $prefix);
129
+ if ($marker !== null && $marker !== '') $rest->setParameter('marker', $marker);
130
+ if ($maxKeys !== null && $maxKeys !== '') $rest->setParameter('max-keys', $maxKeys);
131
+ if ($delimiter !== null && $delimiter !== '') $rest->setParameter('delimiter', $delimiter);
132
+ $response = $rest->getResponse();
133
+ if ($response->error === false && $response->code !== 200)
134
+ $response->error = array('code' => $response->code, 'message' => 'Unexpected HTTP status');
135
+ if ($response->error !== false) {
136
+ trigger_error(sprintf("S3::getBucket(): [%s] %s", $response->error['code'], $response->error['message']), E_USER_WARNING);
137
+ return false;
138
+ }
139
+
140
+ $results = array();
141
+
142
+ $nextMarker = null;
143
+ if (isset($response->body, $response->body->Contents))
144
+ foreach ($response->body->Contents as $c) {
145
+ $results[(string)$c->Key] = array(
146
+ 'name' => (string)$c->Key,
147
+ 'time' => strtotime((string)$c->LastModified),
148
+ 'size' => (int)$c->Size,
149
+ 'hash' => substr((string)$c->ETag, 1, -1)
150
+ );
151
+ $nextMarker = (string)$c->Key;
152
+ }
153
+
154
+ if ($returnCommonPrefixes && isset($response->body, $response->body->CommonPrefixes))
155
+ foreach ($response->body->CommonPrefixes as $c)
156
+ $results[(string)$c->Prefix] = array('prefix' => (string)$c->Prefix);
157
+
158
+ if (isset($response->body, $response->body->IsTruncated) &&
159
+ (string)$response->body->IsTruncated == 'false') return $results;
160
+
161
+ if (isset($response->body, $response->body->NextMarker))
162
+ $nextMarker = (string)$response->body->NextMarker;
163
+
164
+ // Loop through truncated results if maxKeys isn't specified
165
+ if ($maxKeys == null && $nextMarker !== null && (string)$response->body->IsTruncated == 'true')
166
+ do {
167
+ $rest = new S3Request('GET', $bucket, '');
168
+ if ($prefix !== null && $prefix !== '') $rest->setParameter('prefix', $prefix);
169
+ $rest->setParameter('marker', $nextMarker);
170
+ if ($delimiter !== null && $delimiter !== '') $rest->setParameter('delimiter', $delimiter);
171
+
172
+ if (($response = $rest->getResponse(true)) == false || $response->code !== 200) break;
173
+
174
+ if (isset($response->body, $response->body->Contents))
175
+ foreach ($response->body->Contents as $c) {
176
+ $results[(string)$c->Key] = array(
177
+ 'name' => (string)$c->Key,
178
+ 'time' => strtotime((string)$c->LastModified),
179
+ 'size' => (int)$c->Size,
180
+ 'hash' => substr((string)$c->ETag, 1, -1)
181
+ );
182
+ $nextMarker = (string)$c->Key;
183
+ }
184
+
185
+ if ($returnCommonPrefixes && isset($response->body, $response->body->CommonPrefixes))
186
+ foreach ($response->body->CommonPrefixes as $c)
187
+ $results[(string)$c->Prefix] = array('prefix' => (string)$c->Prefix);
188
+
189
+ if (isset($response->body, $response->body->NextMarker))
190
+ $nextMarker = (string)$response->body->NextMarker;
191
+
192
+ } while ($response !== false && (string)$response->body->IsTruncated == 'true');
193
+
194
+ return $results;
195
+ }
196
+
197
+
198
+ /**
199
+ * Put a bucket
200
+ *
201
+ * @param string $bucket Bucket name
202
+ * @param constant $acl ACL flag
203
+ * @param string $location Set as "EU" to create buckets hosted in Europe
204
+ * @return boolean
205
+ */
206
+ public static function putBucket($bucket, $acl = self::ACL_PRIVATE, $location = false) {
207
+ $rest = new S3Request('PUT', $bucket, '');
208
+ $rest->setAmzHeader('x-amz-acl', $acl);
209
+
210
+ if ($location !== false) {
211
+ $dom = new DOMDocument;
212
+ $createBucketConfiguration = $dom->createElement('CreateBucketConfiguration');
213
+ $locationConstraint = $dom->createElement('LocationConstraint', strtoupper($location));
214
+ $createBucketConfiguration->appendChild($locationConstraint);
215
+ $dom->appendChild($createBucketConfiguration);
216
+ $rest->data = $dom->saveXML();
217
+ $rest->size = strlen($rest->data);
218
+ $rest->setHeader('Content-Type', 'application/xml');
219
+ }
220
+ $rest = $rest->getResponse();
221
+
222
+ if ($rest->error === false && $rest->code !== 200)
223
+ $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status');
224
+ if ($rest->error !== false) {
225
+ trigger_error(sprintf("S3::putBucket({$bucket}, {$acl}, {$location}): [%s] %s",
226
+ $rest->error['code'], $rest->error['message']), E_USER_WARNING);
227
+ return false;
228
+ }
229
+ return true;
230
+ }
231
+
232
+
233
+ /**
234
+ * Delete an empty bucket
235
+ *
236
+ * @param string $bucket Bucket name
237
+ * @return boolean
238
+ */
239
+ public static function deleteBucket($bucket) {
240
+ $rest = new S3Request('DELETE', $bucket);
241
+ $rest = $rest->getResponse();
242
+ if ($rest->error === false && $rest->code !== 204)
243
+ $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status');
244
+ if ($rest->error !== false) {
245
+ trigger_error(sprintf("S3::deleteBucket({$bucket}): [%s] %s",
246
+ $rest->error['code'], $rest->error['message']), E_USER_WARNING);
247
+ return false;
248
+ }
249
+ return true;
250
+ }
251
+
252
+
253
+ /**
254
+ * Create input info array for putObject()
255
+ *
256
+ * @param string $file Input file
257
+ * @param mixed $md5sum Use MD5 hash (supply a string if you want to use your own)
258
+ * @return array | false
259
+ */
260
+ public static function inputFile($file, $md5sum = true) {
261
+ if (!file_exists($file) || !is_file($file) || !is_readable($file)) {
262
+ trigger_error('S3::inputFile(): Unable to open input file: '.$file, E_USER_WARNING);
263
+ return false;
264
+ }
265
+ return array('file' => $file, 'size' => filesize($file),
266
+ 'md5sum' => $md5sum !== false ? (is_string($md5sum) ? $md5sum :
267
+ base64_encode(md5_file($file, true))) : '');
268
+ }
269
+
270
+
271
+ /**
272
+ * Create input array info for putObject() with a resource
273
+ *
274
+ * @param string $resource Input resource to read from
275
+ * @param integer $bufferSize Input byte size
276
+ * @param string $md5sum MD5 hash to send (optional)
277
+ * @return array | false
278
+ */
279
+ public static function inputResource(&$resource, $bufferSize, $md5sum = '') {
280
+ if (!is_resource($resource) || $bufferSize < 0) {
281
+ trigger_error('S3::inputResource(): Invalid resource or buffer size', E_USER_WARNING);
282
+ return false;
283
+ }
284
+ $input = array('size' => $bufferSize, 'md5sum' => $md5sum);
285
+ $input['fp'] =& $resource;
286
+ return $input;
287
+ }
288
+
289
+
290
+ /**
291
+ * Put an object
292
+ *
293
+ * @param mixed $input Input data
294
+ * @param string $bucket Bucket name
295
+ * @param string $uri Object URI
296
+ * @param constant $acl ACL constant
297
+ * @param array $metaHeaders Array of x-amz-meta-* headers
298
+ * @param array $requestHeaders Array of request headers or content type as a string
299
+ * @return boolean
300
+ */
301
+ public static function putObject($input, $bucket, $uri, $acl = self::ACL_PRIVATE, $metaHeaders = array(), $requestHeaders = array()) {
302
+ if ($input === false) return false;
303
+ $rest = new S3Request('PUT', $bucket, $uri);
304
+
305
+ if (is_string($input)) $input = array(
306
+ 'data' => $input, 'size' => strlen($input),
307
+ 'md5sum' => base64_encode(md5($input, true))
308
+ );
309
+
310
+ // Data
311
+ if (isset($input['fp']))
312
+ $rest->fp =& $input['fp'];
313
+ elseif (isset($input['file']))
314
+ $rest->fp = @fopen($input['file'], 'rb');
315
+ elseif (isset($input['data']))
316
+ $rest->data = $input['data'];
317
+
318
+ // Content-Length (required)
319
+ if (isset($input['size']) && $input['size'] >= 0)
320
+ $rest->size = $input['size'];
321
+ else {
322
+ if (isset($input['file']))
323
+ $rest->size = filesize($input['file']);
324
+ elseif (isset($input['data']))
325
+ $rest->size = strlen($input['data']);
326
+ }
327
+
328
+ // Custom request headers (Content-Type, Content-Disposition, Content-Encoding)
329
+ if (is_array($requestHeaders))
330
+ foreach ($requestHeaders as $h => $v) $rest->setHeader($h, $v);
331
+ elseif (is_string($requestHeaders)) // Support for legacy contentType parameter
332
+ $input['type'] = $requestHeaders;
333
+
334
+ // Content-Type
335
+ if (!isset($input['type'])) {
336
+ if (isset($requestHeaders['Content-Type']))
337
+ $input['type'] =& $requestHeaders['Content-Type'];
338
+ elseif (isset($input['file']))
339
+ $input['type'] = self::__getMimeType($input['file']);
340
+ else
341
+ $input['type'] = 'application/octet-stream';
342
+ }
343
+
344
+ // We need to post with Content-Length and Content-Type, MD5 is optional
345
+ if ($rest->size >= 0 && ($rest->fp !== false || $rest->data !== false)) {
346
+ $rest->setHeader('Content-Type', $input['type']);
347
+ if (isset($input['md5sum'])) $rest->setHeader('Content-MD5', $input['md5sum']);
348
+
349
+ $rest->setAmzHeader('x-amz-acl', $acl);
350
+ foreach ($metaHeaders as $h => $v) $rest->setAmzHeader('x-amz-meta-'.$h, $v);
351
+ $rest->getResponse();
352
+ } else
353
+ $rest->response->error = array('code' => 0, 'message' => 'Missing input parameters');
354
+
355
+ if ($rest->response->error === false && $rest->response->code !== 200)
356
+ $rest->response->error = array('code' => $rest->response->code, 'message' => 'Unexpected HTTP status');
357
+ if ($rest->response->error !== false) {
358
+ trigger_error(sprintf("S3::putObject(): [%s] %s", $rest->response->error['code'], $rest->response->error['message']), E_USER_WARNING);
359
+ return false;
360
+ }
361
+ return true;
362
+ }
363
+
364
+
365
+ /**
366
+ * Put an object from a file (legacy function)
367
+ *
368
+ * @param string $file Input file path
369
+ * @param string $bucket Bucket name
370
+ * @param string $uri Object URI
371
+ * @param constant $acl ACL constant
372
+ * @param array $metaHeaders Array of x-amz-meta-* headers
373
+ * @param string $contentType Content type
374
+ * @return boolean
375
+ */
376
+ public static function putObjectFile($file, $bucket, $uri, $acl = self::ACL_PRIVATE, $metaHeaders = array(), $contentType = null) {
377
+ return self::putObject(self::inputFile($file), $bucket, $uri, $acl, $metaHeaders, $contentType);
378
+ }
379
+
380
+
381
+ /**
382
+ * Put an object from a string (legacy function)
383
+ *
384
+ * @param string $string Input data
385
+ * @param string $bucket Bucket name
386
+ * @param string $uri Object URI
387
+ * @param constant $acl ACL constant
388
+ * @param array $metaHeaders Array of x-amz-meta-* headers
389
+ * @param string $contentType Content type
390
+ * @return boolean
391
+ */
392
+ public static function putObjectString($string, $bucket, $uri, $acl = self::ACL_PRIVATE, $metaHeaders = array(), $contentType = 'text/plain') {
393
+ return self::putObject($string, $bucket, $uri, $acl, $metaHeaders, $contentType);
394
+ }
395
+
396
+
397
+ /**
398
+ * Get an object
399
+ *
400
+ * @param string $bucket Bucket name
401
+ * @param string $uri Object URI
402
+ * @param mixed $saveTo Filename or resource to write to
403
+ * @return mixed
404
+ */
405
+ public static function getObject($bucket, $uri, $saveTo = false) {
406
+ $rest = new S3Request('GET', $bucket, $uri);
407
+ if ($saveTo !== false) {
408
+ if (is_resource($saveTo))
409
+ $rest->fp =& $saveTo;
410
+ else
411
+ if (($rest->fp = @fopen($saveTo, 'wb')) !== false)
412
+ $rest->file = realpath($saveTo);
413
+ else
414
+ $rest->response->error = array('code' => 0, 'message' => 'Unable to open save file for writing: '.$saveTo);
415
+ }
416
+ if ($rest->response->error === false) $rest->getResponse();
417
+
418
+ if ($rest->response->error === false && $rest->response->code !== 200)
419
+ $rest->response->error = array('code' => $rest->response->code, 'message' => 'Unexpected HTTP status');
420
+ if ($rest->response->error !== false) {
421
+ trigger_error(sprintf("S3::getObject({$bucket}, {$uri}): [%s] %s",
422
+ $rest->response->error['code'], $rest->response->error['message']), E_USER_WARNING);
423
+ return false;
424
+ }
425
+ return $rest->response;
426
+ }
427
+
428
+
429
+ /**
430
+ * Get object information
431
+ *
432
+ * @param string $bucket Bucket name
433
+ * @param string $uri Object URI
434
+ * @param boolean $returnInfo Return response information
435
+ * @return mixed | false
436
+ */
437
+ public static function getObjectInfo($bucket, $uri, $returnInfo = true) {
438
+ $rest = new S3Request('HEAD', $bucket, $uri);
439
+ $rest = $rest->getResponse();
440
+ if ($rest->error === false && ($rest->code !== 200 && $rest->code !== 404))
441
+ $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status');
442
+ if ($rest->error !== false) {
443
+ trigger_error(sprintf("S3::getObjectInfo({$bucket}, {$uri}): [%s] %s",
444
+ $rest->error['code'], $rest->error['message']), E_USER_WARNING);
445
+ return false;
446
+ }
447
+ return $rest->code == 200 ? $returnInfo ? $rest->headers : true : false;
448
+ }
449
+
450
+
451
+ /**
452
+ * Copy an object
453
+ *
454
+ * @param string $bucket Source bucket name
455
+ * @param string $uri Source object URI
456
+ * @param string $bucket Destination bucket name
457
+ * @param string $uri Destination object URI
458
+ * @param constant $acl ACL constant
459
+ * @param array $metaHeaders Optional array of x-amz-meta-* headers
460
+ * @param array $requestHeaders Optional array of request headers (content type, disposition, etc.)
461
+ * @return mixed | false
462
+ */
463
+ public static function copyObject($srcBucket, $srcUri, $bucket, $uri, $acl = self::ACL_PRIVATE, $metaHeaders = array(), $requestHeaders = array()) {
464
+ $rest = new S3Request('PUT', $bucket, $uri);
465
+ $rest->setHeader('Content-Length', 0);
466
+ foreach ($requestHeaders as $h => $v) $rest->setHeader($h, $v);
467
+ foreach ($metaHeaders as $h => $v) $rest->setAmzHeader('x-amz-meta-'.$h, $v);
468
+ $rest->setAmzHeader('x-amz-acl', $acl);
469
+ $rest->setAmzHeader('x-amz-copy-source', sprintf('/%s/%s', $srcBucket, $srcUri));
470
+ if (sizeof($requestHeaders) > 0 || sizeof($metaHeaders) > 0)
471
+ $rest->setAmzHeader('x-amz-metadata-directive', 'REPLACE');
472
+ $rest = $rest->getResponse();
473
+ if ($rest->error === false && $rest->code !== 200)
474
+ $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status');
475
+ if ($rest->error !== false) {
476
+ trigger_error(sprintf("S3::copyObject({$srcBucket}, {$srcUri}, {$bucket}, {$uri}): [%s] %s",
477
+ $rest->error['code'], $rest->error['message']), E_USER_WARNING);
478
+ return false;
479
+ }
480
+ return isset($rest->body->LastModified, $rest->body->ETag) ? array(
481
+ 'time' => strtotime((string)$rest->body->LastModified),
482
+ 'hash' => substr((string)$rest->body->ETag, 1, -1)
483
+ ) : false;
484
+ }
485
+
486
+
487
+ /**
488
+ * Set logging for a bucket
489
+ *
490
+ * @param string $bucket Bucket name
491
+ * @param string $targetBucket Target bucket (where logs are stored)
492
+ * @param string $targetPrefix Log prefix (e,g; domain.com-)
493
+ * @return boolean
494
+ */
495
+ public static function setBucketLogging($bucket, $targetBucket, $targetPrefix = null) {
496
+ // The S3 log delivery group has to be added to the target bucket's ACP
497
+ if ($targetBucket !== null && ($acp = self::getAccessControlPolicy($targetBucket, '')) !== false) {
498
+ // Only add permissions to the target bucket when they do not exist
499
+ $aclWriteSet = false;
500
+ $aclReadSet = false;
501
+ foreach ($acp['acl'] as $acl)
502
+ if ($acl['type'] == 'Group' && $acl['uri'] == 'http://acs.amazonaws.com/groups/s3/LogDelivery') {
503
+ if ($acl['permission'] == 'WRITE') $aclWriteSet = true;
504
+ elseif ($acl['permission'] == 'READ_ACP') $aclReadSet = true;
505
+ }
506
+ if (!$aclWriteSet) $acp['acl'][] = array(
507
+ 'type' => 'Group', 'uri' => 'http://acs.amazonaws.com/groups/s3/LogDelivery', 'permission' => 'WRITE'
508
+ );
509
+ if (!$aclReadSet) $acp['acl'][] = array(
510
+ 'type' => 'Group', 'uri' => 'http://acs.amazonaws.com/groups/s3/LogDelivery', 'permission' => 'READ_ACP'
511
+ );
512
+ if (!$aclReadSet || !$aclWriteSet) self::setAccessControlPolicy($targetBucket, '', $acp);
513
+ }
514
+
515
+ $dom = new DOMDocument;
516
+ $bucketLoggingStatus = $dom->createElement('BucketLoggingStatus');
517
+ $bucketLoggingStatus->setAttribute('xmlns', 'http://s3.amazonaws.com/doc/2006-03-01/');
518
+ if ($targetBucket !== null) {
519
+ if ($targetPrefix == null) $targetPrefix = $bucket . '-';
520
+ $loggingEnabled = $dom->createElement('LoggingEnabled');
521
+ $loggingEnabled->appendChild($dom->createElement('TargetBucket', $targetBucket));
522
+ $loggingEnabled->appendChild($dom->createElement('TargetPrefix', $targetPrefix));
523
+ // TODO: Add TargetGrants?
524
+ $bucketLoggingStatus->appendChild($loggingEnabled);
525
+ }
526
+ $dom->appendChild($bucketLoggingStatus);
527
+
528
+ $rest = new S3Request('PUT', $bucket, '');
529
+ $rest->setParameter('logging', null);
530
+ $rest->data = $dom->saveXML();
531
+ $rest->size = strlen($rest->data);
532
+ $rest->setHeader('Content-Type', 'application/xml');
533
+ $rest = $rest->getResponse();
534
+ if ($rest->error === false && $rest->code !== 200)
535
+ $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status');
536
+ if ($rest->error !== false) {
537
+ trigger_error(sprintf("S3::setBucketLogging({$bucket}, {$uri}): [%s] %s",
538
+ $rest->error['code'], $rest->error['message']), E_USER_WARNING);
539
+ return false;
540
+ }
541
+ return true;
542
+ }
543
+
544
+
545
+ /**
546
+ * Get logging status for a bucket
547
+ *
548
+ * This will return false if logging is not enabled.
549
+ * Note: To enable logging, you also need to grant write access to the log group
550
+ *
551
+ * @param string $bucket Bucket name
552
+ * @return array | false
553
+ */
554
+ public static function getBucketLogging($bucket) {
555
+ $rest = new S3Request('GET', $bucket, '');
556
+ $rest->setParameter('logging', null);
557
+ $rest = $rest->getResponse();
558
+ if ($rest->error === false && $rest->code !== 200)
559
+ $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status');
560
+ if ($rest->error !== false) {
561
+ trigger_error(sprintf("S3::getBucketLogging({$bucket}): [%s] %s",
562
+ $rest->error['code'], $rest->error['message']), E_USER_WARNING);
563
+ return false;
564
+ }
565
+ if (!isset($rest->body->LoggingEnabled)) return false; // No logging
566
+ return array(
567
+ 'targetBucket' => (string)$rest->body->LoggingEnabled->TargetBucket,
568
+ 'targetPrefix' => (string)$rest->body->LoggingEnabled->TargetPrefix,
569
+ );
570
+ }
571
+
572
+
573
+ /**
574
+ * Disable bucket logging
575
+ *
576
+ * @param string $bucket Bucket name
577
+ * @return boolean
578
+ */
579
+ public static function disableBucketLogging($bucket) {
580
+ return self::setBucketLogging($bucket, null);
581
+ }
582
+
583
+
584
+ /**
585
+ * Get a bucket's location
586
+ *
587
+ * @param string $bucket Bucket name
588
+ * @return string | false
589
+ */
590
+ public static function getBucketLocation($bucket) {
591
+ $rest = new S3Request('GET', $bucket, '');
592
+ $rest->setParameter('location', null);
593
+ $rest = $rest->getResponse();
594
+ if ($rest->error === false && $rest->code !== 200)
595
+ $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status');
596
+ if ($rest->error !== false) {
597
+ trigger_error(sprintf("S3::getBucketLocation({$bucket}): [%s] %s",
598
+ $rest->error['code'], $rest->error['message']), E_USER_WARNING);
599
+ return false;
600
+ }
601
+ return (isset($rest->body[0]) && (string)$rest->body[0] !== '') ? (string)$rest->body[0] : 'US';
602
+ }
603
+
604
+
605
+ /**
606
+ * Set object or bucket Access Control Policy
607
+ *
608
+ * @param string $bucket Bucket name
609
+ * @param string $uri Object URI
610
+ * @param array $acp Access Control Policy Data (same as the data returned from getAccessControlPolicy)
611
+ * @return boolean
612
+ */
613
+ public static function setAccessControlPolicy($bucket, $uri = '', $acp = array()) {
614
+ $dom = new DOMDocument;
615
+ $dom->formatOutput = true;
616
+ $accessControlPolicy = $dom->createElement('AccessControlPolicy');
617
+ $accessControlList = $dom->createElement('AccessControlList');
618
+
619
+ // It seems the owner has to be passed along too
620
+ $owner = $dom->createElement('Owner');
621
+ $owner->appendChild($dom->createElement('ID', $acp['owner']['id']));
622
+ $owner->appendChild($dom->createElement('DisplayName', $acp['owner']['name']));
623
+ $accessControlPolicy->appendChild($owner);
624
+
625
+ foreach ($acp['acl'] as $g) {
626
+ $grant = $dom->createElement('Grant');
627
+ $grantee = $dom->createElement('Grantee');
628
+ $grantee->setAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance');
629
+ if (isset($g['id'])) { // CanonicalUser (DisplayName is omitted)
630
+ $grantee->setAttribute('xsi:type', 'CanonicalUser');
631
+ $grantee->appendChild($dom->createElement('ID', $g['id']));
632
+ } elseif (isset($g['email'])) { // AmazonCustomerByEmail
633
+ $grantee->setAttribute('xsi:type', 'AmazonCustomerByEmail');
634
+ $grantee->appendChild($dom->createElement('EmailAddress', $g['email']));
635
+ } elseif ($g['type'] == 'Group') { // Group
636
+ $grantee->setAttribute('xsi:type', 'Group');
637
+ $grantee->appendChild($dom->createElement('URI', $g['uri']));
638
+ }
639
+ $grant->appendChild($grantee);
640
+ $grant->appendChild($dom->createElement('Permission', $g['permission']));
641
+ $accessControlList->appendChild($grant);
642
+ }
643
+
644
+ $accessControlPolicy->appendChild($accessControlList);
645
+ $dom->appendChild($accessControlPolicy);
646
+
647
+ $rest = new S3Request('PUT', $bucket, $uri);
648
+ $rest->setParameter('acl', null);
649
+ $rest->data = $dom->saveXML();
650
+ $rest->size = strlen($rest->data);
651
+ $rest->setHeader('Content-Type', 'application/xml');
652
+ $rest = $rest->getResponse();
653
+ if ($rest->error === false && $rest->code !== 200)
654
+ $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status');
655
+ if ($rest->error !== false) {
656
+ trigger_error(sprintf("S3::setAccessControlPolicy({$bucket}, {$uri}): [%s] %s",
657
+ $rest->error['code'], $rest->error['message']), E_USER_WARNING);
658
+ return false;
659
+ }
660
+ return true;
661
+ }
662
+
663
+
664
+ /**
665
+ * Get object or bucket Access Control Policy
666
+ *
667
+ * @param string $bucket Bucket name
668
+ * @param string $uri Object URI
669
+ * @return mixed | false
670
+ */
671
+ public static function getAccessControlPolicy($bucket, $uri = '') {
672
+ $rest = new S3Request('GET', $bucket, $uri);
673
+ $rest->setParameter('acl', null);
674
+ $rest = $rest->getResponse();
675
+ if ($rest->error === false && $rest->code !== 200)
676
+ $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status');
677
+ if ($rest->error !== false) {
678
+ trigger_error(sprintf("S3::getAccessControlPolicy({$bucket}, {$uri}): [%s] %s",
679
+ $rest->error['code'], $rest->error['message']), E_USER_WARNING);
680
+ return false;
681
+ }
682
+
683
+ $acp = array();
684
+ if (isset($rest->body->Owner, $rest->body->Owner->ID, $rest->body->Owner->DisplayName)) {
685
+ $acp['owner'] = array(
686
+ 'id' => (string)$rest->body->Owner->ID, 'name' => (string)$rest->body->Owner->DisplayName
687
+ );
688
+ }
689
+ if (isset($rest->body->AccessControlList)) {
690
+ $acp['acl'] = array();
691
+ foreach ($rest->body->AccessControlList->Grant as $grant) {
692
+ foreach ($grant->Grantee as $grantee) {
693
+ if (isset($grantee->ID, $grantee->DisplayName)) // CanonicalUser
694
+ $acp['acl'][] = array(
695
+ 'type' => 'CanonicalUser',
696
+ 'id' => (string)$grantee->ID,
697
+ 'name' => (string)$grantee->DisplayName,
698
+ 'permission' => (string)$grant->Permission
699
+ );
700
+ elseif (isset($grantee->EmailAddress)) // AmazonCustomerByEmail
701
+ $acp['acl'][] = array(
702
+ 'type' => 'AmazonCustomerByEmail',
703
+ 'email' => (string)$grantee->EmailAddress,
704
+ 'permission' => (string)$grant->Permission
705
+ );
706
+ elseif (isset($grantee->URI)) // Group
707
+ $acp['acl'][] = array(
708
+ 'type' => 'Group',
709
+ 'uri' => (string)$grantee->URI,
710
+ 'permission' => (string)$grant->Permission
711
+ );
712
+ else continue;
713
+ }
714
+ }
715
+ }
716
+ return $acp;
717
+ }
718
+
719
+
720
+ /**
721
+ * Delete an object
722
+ *
723
+ * @param string $bucket Bucket name
724
+ * @param string $uri Object URI
725
+ * @return boolean
726
+ */
727
+ public static function deleteObject($bucket, $uri) {
728
+ $rest = new S3Request('DELETE', $bucket, $uri);
729
+ $rest = $rest->getResponse();
730
+ if ($rest->error === false && $rest->code !== 204)
731
+ $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status');
732
+ if ($rest->error !== false) {
733
+ trigger_error(sprintf("S3::deleteObject(): [%s] %s",
734
+ $rest->error['code'], $rest->error['message']), E_USER_WARNING);
735
+ return false;
736
+ }
737
+ return true;
738
+ }
739
+
740
+
741
+ /**
742
+ * Get a query string authenticated URL
743
+ *
744
+ * @param string $bucket Bucket name
745
+ * @param string $uri Object URI
746
+ * @param integer $lifetime Lifetime in seconds
747
+ * @param boolean $hostBucket Use the bucket name as the hostname
748
+ * @param boolean $https Use HTTPS ($hostBucket should be false for SSL verification)
749
+ * @return string
750
+ */
751
+ public static function getAuthenticatedURL($bucket, $uri, $lifetime, $hostBucket = false, $https = false) {
752
+ $expires = time() + $lifetime;
753
+ $uri = str_replace('%2F', '/', rawurlencode($uri)); // URI should be encoded (thanks Sean O'Dea)
754
+ return sprintf(($https ? 'https' : 'http').'://%s/%s?AWSAccessKeyId=%s&Expires=%u&Signature=%s',
755
+ $hostBucket ? $bucket : $bucket.'.s3.amazonaws.com', $uri, self::$__accessKey, $expires,
756
+ urlencode(self::__getHash("GET\n\n\n{$expires}\n/{$bucket}/{$uri}")));
757
+ }
758
+
759
+ /**
760
+ * Get upload POST parameters for form uploads
761
+ *
762
+ * @param string $bucket Bucket name
763
+ * @param string $uriPrefix Object URI prefix
764
+ * @param constant $acl ACL constant
765
+ * @param integer $lifetime Lifetime in seconds
766
+ * @param integer $maxFileSize Maximum filesize in bytes (default 5MB)
767
+ * @param string $successRedirect Redirect URL or 200 / 201 status code
768
+ * @param array $amzHeaders Array of x-amz-meta-* headers
769
+ * @param array $headers Array of request headers or content type as a string
770
+ * @param boolean $flashVars Includes additional "Filename" variable posted by Flash
771
+ * @return object
772
+ */
773
+ public static function getHttpUploadPostParams($bucket, $uriPrefix = '', $acl = self::ACL_PRIVATE, $lifetime = 3600, $maxFileSize = 5242880, $successRedirect = "201", $amzHeaders = array(), $headers = array(), $flashVars = false) {
774
+ // Create policy object
775
+ $policy = new stdClass;
776
+ $policy->expiration = gmdate('Y-m-d\TH:i:s\Z', (time() + $lifetime));
777
+ $policy->conditions = array();
778
+ $obj = new stdClass; $obj->bucket = $bucket; array_push($policy->conditions, $obj);
779
+ $obj = new stdClass; $obj->acl = $acl; array_push($policy->conditions, $obj);
780
+
781
+ $obj = new stdClass; // 200 for non-redirect uploads
782
+ if (is_numeric($successRedirect) && in_array((int)$successRedirect, array(200, 201)))
783
+ $obj->success_action_status = (string)$successRedirect;
784
+ else // URL
785
+ $obj->success_action_redirect = $successRedirect;
786
+ array_push($policy->conditions, $obj);
787
+
788
+ array_push($policy->conditions, array('starts-with', '$key', $uriPrefix));
789
+ if ($flashVars) array_push($policy->conditions, array('starts-with', '$Filename', ''));
790
+ foreach (array_keys($headers) as $headerKey)
791
+ array_push($policy->conditions, array('starts-with', '$'.$headerKey, ''));
792
+ foreach ($amzHeaders as $headerKey => $headerVal) {
793
+ $obj = new stdClass; $obj->{$headerKey} = (string)$headerVal; array_push($policy->conditions, $obj);
794
+ }
795
+ array_push($policy->conditions, array('content-length-range', 0, $maxFileSize));
796
+ $policy = base64_encode(str_replace('\/', '/', json_encode($policy)));
797
+
798
+ // Create parameters
799
+ $params = new stdClass;
800
+ $params->AWSAccessKeyId = self::$__accessKey;
801
+ $params->key = $uriPrefix.'${filename}';
802
+ $params->acl = $acl;
803
+ $params->policy = $policy; unset($policy);
804
+ $params->signature = self::__getHash($params->policy);
805
+ if (is_numeric($successRedirect) && in_array((int)$successRedirect, array(200, 201)))
806
+ $params->success_action_status = (string)$successRedirect;
807
+ else
808
+ $params->success_action_redirect = $successRedirect;
809
+ foreach ($headers as $headerKey => $headerVal) $params->{$headerKey} = (string)$headerVal;
810
+ foreach ($amzHeaders as $headerKey => $headerVal) $params->{$headerKey} = (string)$headerVal;
811
+ return $params;
812
+ }
813
+
814
+ /**
815
+ * Create a CloudFront distribution
816
+ *
817
+ * @param string $bucket Bucket name
818
+ * @param boolean $enabled Enabled (true/false)
819
+ * @param array $cnames Array containing CNAME aliases
820
+ * @param string $comment Use the bucket name as the hostname
821
+ * @return array | false
822
+ */
823
+ public static function createDistribution($bucket, $enabled = true, $cnames = array(), $comment = '') {
824
+ self::$useSSL = true; // CloudFront requires SSL
825
+ $rest = new S3Request('POST', '', '2008-06-30/distribution', 'cloudfront.amazonaws.com');
826
+ $rest->data = self::__getCloudFrontDistributionConfigXML($bucket.'.s3.amazonaws.com', $enabled, $comment, (string)microtime(true), $cnames);
827
+ $rest->size = strlen($rest->data);
828
+ $rest->setHeader('Content-Type', 'application/xml');
829
+ $rest = self::__getCloudFrontResponse($rest);
830
+
831
+ if ($rest->error === false && $rest->code !== 201)
832
+ $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status');
833
+ if ($rest->error !== false) {
834
+ trigger_error(sprintf("S3::createDistribution({$bucket}, ".(int)$enabled.", '$comment'): [%s] %s",
835
+ $rest->error['code'], $rest->error['message']), E_USER_WARNING);
836
+ return false;
837
+ } elseif ($rest->body instanceof SimpleXMLElement)
838
+ return self::__parseCloudFrontDistributionConfig($rest->body);
839
+ return false;
840
+ }
841
+
842
+
843
+ /**
844
+ * Get CloudFront distribution info
845
+ *
846
+ * @param string $distributionId Distribution ID from listDistributions()
847
+ * @return array | false
848
+ */
849
+ public static function getDistribution($distributionId) {
850
+ self::$useSSL = true; // CloudFront requires SSL
851
+ $rest = new S3Request('GET', '', '2008-06-30/distribution/'.$distributionId, 'cloudfront.amazonaws.com');
852
+ $rest = self::__getCloudFrontResponse($rest);
853
+
854
+ if ($rest->error === false && $rest->code !== 200)
855
+ $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status');
856
+ if ($rest->error !== false) {
857
+ trigger_error(sprintf("S3::getDistribution($distributionId): [%s] %s",
858
+ $rest->error['code'], $rest->error['message']), E_USER_WARNING);
859
+ return false;
860
+ } elseif ($rest->body instanceof SimpleXMLElement) {
861
+ $dist = self::__parseCloudFrontDistributionConfig($rest->body);
862
+ $dist['hash'] = $rest->headers['hash'];
863
+ return $dist;
864
+ }
865
+ return false;
866
+ }
867
+
868
+
869
+ /**
870
+ * Update a CloudFront distribution
871
+ *
872
+ * @param array $dist Distribution array info identical to output of getDistribution()
873
+ * @return array | false
874
+ */
875
+ public static function updateDistribution($dist) {
876
+ self::$useSSL = true; // CloudFront requires SSL
877
+ $rest = new S3Request('PUT', '', '2008-06-30/distribution/'.$dist['id'].'/config', 'cloudfront.amazonaws.com');
878
+ $rest->data = self::__getCloudFrontDistributionConfigXML($dist['origin'], $dist['enabled'], $dist['comment'], $dist['callerReference'], $dist['cnames']);
879
+ $rest->size = strlen($rest->data);
880
+ $rest->setHeader('If-Match', $dist['hash']);
881
+ $rest = self::__getCloudFrontResponse($rest);
882
+
883
+ if ($rest->error === false && $rest->code !== 200)
884
+ $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status');
885
+ if ($rest->error !== false) {
886
+ trigger_error(sprintf("S3::updateDistribution({$dist['id']}, ".(int)$enabled.", '$comment'): [%s] %s",
887
+ $rest->error['code'], $rest->error['message']), E_USER_WARNING);
888
+ return false;
889
+ } else {
890
+ $dist = self::__parseCloudFrontDistributionConfig($rest->body);
891
+ $dist['hash'] = $rest->headers['hash'];
892
+ return $dist;
893
+ }
894
+ return false;
895
+ }
896
+
897
+
898
+ /**
899
+ * Delete a CloudFront distribution
900
+ *
901
+ * @param array $dist Distribution array info identical to output of getDistribution()
902
+ * @return boolean
903
+ */
904
+ public static function deleteDistribution($dist) {
905
+ self::$useSSL = true; // CloudFront requires SSL
906
+ $rest = new S3Request('DELETE', '', '2008-06-30/distribution/'.$dist['id'], 'cloudfront.amazonaws.com');
907
+ $rest->setHeader('If-Match', $dist['hash']);
908
+ $rest = self::__getCloudFrontResponse($rest);
909
+
910
+ if ($rest->error === false && $rest->code !== 204)
911
+ $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status');
912
+ if ($rest->error !== false) {
913
+ trigger_error(sprintf("S3::deleteDistribution({$dist['id']}): [%s] %s",
914
+ $rest->error['code'], $rest->error['message']), E_USER_WARNING);
915
+ return false;
916
+ }
917
+ return true;
918
+ }
919
+
920
+
921
+ /**
922
+ * Get a list of CloudFront distributions
923
+ *
924
+ * @return array
925
+ */
926
+ public static function listDistributions() {
927
+ self::$useSSL = true; // CloudFront requires SSL
928
+ $rest = new S3Request('GET', '', '2008-06-30/distribution', 'cloudfront.amazonaws.com');
929
+ $rest = self::__getCloudFrontResponse($rest);
930
+
931
+ if ($rest->error === false && $rest->code !== 200)
932
+ $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status');
933
+ if ($rest->error !== false) {
934
+ trigger_error(sprintf("S3::listDistributions(): [%s] %s",
935
+ $rest->error['code'], $rest->error['message']), E_USER_WARNING);
936
+ return false;
937
+ } elseif ($rest->body instanceof SimpleXMLElement && isset($rest->body->DistributionSummary)) {
938
+ $list = array();
939
+ if (isset($rest->body->Marker, $rest->body->MaxItems, $rest->body->IsTruncated)) {
940
+ //$info['marker'] = (string)$rest->body->Marker;
941
+ //$info['maxItems'] = (int)$rest->body->MaxItems;
942
+ //$info['isTruncated'] = (string)$rest->body->IsTruncated == 'true' ? true : false;
943
+ }
944
+ foreach ($rest->body->DistributionSummary as $summary) {
945
+ $list[(string)$summary->Id] = self::__parseCloudFrontDistributionConfig($summary);
946
+ }
947
+ return $list;
948
+ }
949
+ return array();
950
+ }
951
+
952
+
953
+ /**
954
+ * Get a DistributionConfig DOMDocument
955
+ *
956
+ * @internal Used to create XML in createDistribution() and updateDistribution()
957
+ * @param string $bucket Origin bucket
958
+ * @param boolean $enabled Enabled (true/false)
959
+ * @param string $comment Comment to append
960
+ * @param string $callerReference Caller reference
961
+ * @param array $cnames Array of CNAME aliases
962
+ * @return string
963
+ */
964
+ private static function __getCloudFrontDistributionConfigXML($bucket, $enabled, $comment, $callerReference = '0', $cnames = array()) {
965
+ $dom = new DOMDocument('1.0', 'UTF-8');
966
+ $dom->formatOutput = true;
967
+ $distributionConfig = $dom->createElement('DistributionConfig');
968
+ $distributionConfig->setAttribute('xmlns', 'http://cloudfront.amazonaws.com/doc/2008-06-30/');
969
+ $distributionConfig->appendChild($dom->createElement('Origin', $bucket));
970
+ $distributionConfig->appendChild($dom->createElement('CallerReference', $callerReference));
971
+ foreach ($cnames as $cname)
972
+ $distributionConfig->appendChild($dom->createElement('CNAME', $cname));
973
+ if ($comment !== '') $distributionConfig->appendChild($dom->createElement('Comment', $comment));
974
+ $distributionConfig->appendChild($dom->createElement('Enabled', $enabled ? 'true' : 'false'));
975
+ $dom->appendChild($distributionConfig);
976
+ return $dom->saveXML();
977
+ }
978
+
979
+
980
+ /**
981
+ * Parse a CloudFront distribution config
982
+ *
983
+ * @internal Used to parse the CloudFront DistributionConfig node to an array
984
+ * @param object &$node DOMNode
985
+ * @return array
986
+ */
987
+ private static function __parseCloudFrontDistributionConfig(&$node) {
988
+ $dist = array();
989
+ if (isset($node->Id, $node->Status, $node->LastModifiedTime, $node->DomainName)) {
990
+ $dist['id'] = (string)$node->Id;
991
+ $dist['status'] = (string)$node->Status;
992
+ $dist['time'] = strtotime((string)$node->LastModifiedTime);
993
+ $dist['domain'] = (string)$node->DomainName;
994
+ }
995
+ if (isset($node->CallerReference))
996
+ $dist['callerReference'] = (string)$node->CallerReference;
997
+ if (isset($node->Comment))
998
+ $dist['comment'] = (string)$node->Comment;
999
+ if (isset($node->Enabled, $node->Origin)) {
1000
+ $dist['origin'] = (string)$node->Origin;
1001
+ $dist['enabled'] = (string)$node->Enabled == 'true' ? true : false;
1002
+ } elseif (isset($node->DistributionConfig)) {
1003
+ $dist = array_merge($dist, self::__parseCloudFrontDistributionConfig($node->DistributionConfig));
1004
+ }
1005
+ if (isset($node->CNAME)) {
1006
+ $dist['cnames'] = array();
1007
+ foreach ($node->CNAME as $cname) $dist['cnames'][(string)$cname] = (string)$cname;
1008
+ }
1009
+ return $dist;
1010
+ }
1011
+
1012
+
1013
+ /**
1014
+ * Grab CloudFront response
1015
+ *
1016
+ * @internal Used to parse the CloudFront S3Request::getResponse() output
1017
+ * @param object &$rest S3Request instance
1018
+ * @return object
1019
+ */
1020
+ private static function __getCloudFrontResponse(&$rest) {
1021
+ $rest->getResponse();
1022
+ if ($rest->response->error === false && isset($rest->response->body) &&
1023
+ is_string($rest->response->body) && substr($rest->response->body, 0, 5) == '<?xml') {
1024
+ $rest->response->body = simplexml_load_string($rest->response->body);
1025
+ // Grab CloudFront errors
1026
+ if (isset($rest->response->body->Error, $rest->response->body->Error->Code,
1027
+ $rest->response->body->Error->Message)) {
1028
+ $rest->response->error = array(
1029
+ 'code' => (string)$rest->response->body->Error->Code,
1030
+ 'message' => (string)$rest->response->body->Error->Message
1031
+ );
1032
+ unset($rest->response->body);
1033
+ }
1034
+ }
1035
+ return $rest->response;
1036
+ }
1037
+
1038
+
1039
+ /**
1040
+ * Get MIME type for file
1041
+ *
1042
+ * @internal Used to get mime types
1043
+ * @param string &$file File path
1044
+ * @return string
1045
+ */
1046
+ public static function __getMimeType(&$file) {
1047
+ $type = false;
1048
+ // Fileinfo documentation says fileinfo_open() will use the
1049
+ // MAGIC env var for the magic file
1050
+ if (extension_loaded('fileinfo') && isset($_ENV['MAGIC']) &&
1051
+ ($finfo = finfo_open(FILEINFO_MIME, $_ENV['MAGIC'])) !== false) {
1052
+ if (($type = finfo_file($finfo, $file)) !== false) {
1053
+ // Remove the charset and grab the last content-type
1054
+ $type = explode(' ', str_replace('; charset=', ';charset=', $type));
1055
+ $type = array_pop($type);
1056
+ $type = explode(';', $type);
1057
+ $type = trim(array_shift($type));
1058
+ }
1059
+ finfo_close($finfo);
1060
+
1061
+ // If anyone is still using mime_content_type()
1062
+ } elseif (function_exists('mime_content_type'))
1063
+ $type = trim(mime_content_type($file));
1064
+
1065
+ if ($type !== false && strlen($type) > 0) return $type;
1066
+
1067
+ // Otherwise do it the old fashioned way
1068
+ static $exts = array(
1069
+ 'jpg' => 'image/jpeg', 'gif' => 'image/gif', 'png' => 'image/png',
1070
+ 'tif' => 'image/tiff', 'tiff' => 'image/tiff', 'ico' => 'image/x-icon',
1071
+ 'swf' => 'application/x-shockwave-flash', 'pdf' => 'application/pdf',
1072
+ 'zip' => 'application/zip', 'gz' => 'application/x-gzip',
1073
+ 'tar' => 'application/x-tar', 'bz' => 'application/x-bzip',
1074
+ 'bz2' => 'application/x-bzip2', 'txt' => 'text/plain',
1075
+ 'asc' => 'text/plain', 'htm' => 'text/html', 'html' => 'text/html',
1076
+ 'css' => 'text/css', 'js' => 'text/javascript',
1077
+ 'xml' => 'text/xml', 'xsl' => 'application/xsl+xml',
1078
+ 'ogg' => 'application/ogg', 'mp3' => 'audio/mpeg', 'wav' => 'audio/x-wav',
1079
+ 'avi' => 'video/x-msvideo', 'mpg' => 'video/mpeg', 'mpeg' => 'video/mpeg',
1080
+ 'mov' => 'video/quicktime', 'flv' => 'video/x-flv', 'php' => 'text/x-php'
1081
+ );
1082
+ $ext = strtolower(pathInfo($file, PATHINFO_EXTENSION));
1083
+ return isset($exts[$ext]) ? $exts[$ext] : 'application/octet-stream';
1084
+ }
1085
+
1086
+
1087
+ /**
1088
+ * Generate the auth string: "AWS AccessKey:Signature"
1089
+ *
1090
+ * @internal Used by S3Request::getResponse()
1091
+ * @param string $string String to sign
1092
+ * @return string
1093
+ */
1094
+ public static function __getSignature($string) {
1095
+ return 'AWS '.self::$__accessKey.':'.self::__getHash($string);
1096
+ }
1097
+
1098
+
1099
+ /**
1100
+ * Creates a HMAC-SHA1 hash
1101
+ *
1102
+ * This uses the hash extension if loaded
1103
+ *
1104
+ * @internal Used by __getSignature()
1105
+ * @param string $string String to sign
1106
+ * @return string
1107
+ */
1108
+ private static function __getHash($string) {
1109
+ return base64_encode(extension_loaded('hash') ?
1110
+ hash_hmac('sha1', $string, self::$__secretKey, true) : pack('H*', sha1(
1111
+ (str_pad(self::$__secretKey, 64, chr(0x00)) ^ (str_repeat(chr(0x5c), 64))) .
1112
+ pack('H*', sha1((str_pad(self::$__secretKey, 64, chr(0x00)) ^
1113
+ (str_repeat(chr(0x36), 64))) . $string)))));
1114
+ }
1115
+
1116
+ }
1117
+
1118
+ final class S3Request {
1119
+ private $verb, $bucket, $uri, $resource = '', $parameters = array(),
1120
+ $amzHeaders = array(), $headers = array(
1121
+ 'Host' => '', 'Date' => '', 'Content-MD5' => '', 'Content-Type' => ''
1122
+ );
1123
+ public $fp = false, $size = 0, $data = false, $response;
1124
+
1125
+
1126
+ /**
1127
+ * Constructor
1128
+ *
1129
+ * @param string $verb Verb
1130
+ * @param string $bucket Bucket name
1131
+ * @param string $uri Object URI
1132
+ * @return mixed
1133
+ */
1134
+ function __construct($verb, $bucket = '', $uri = '', $defaultHost = 's3.amazonaws.com') {
1135
+ $this->verb = $verb;
1136
+ $this->bucket = strtolower($bucket);
1137
+ $this->uri = $uri !== '' ? '/'.str_replace('%2F', '/', rawurlencode($uri)) : '/';
1138
+
1139
+ if ($this->bucket !== '') {
1140
+ $this->headers['Host'] = $this->bucket.'.'.$defaultHost;
1141
+ $this->resource = '/'.$this->bucket.$this->uri;
1142
+ } else {
1143
+ $this->headers['Host'] = $defaultHost;
1144
+ //$this->resource = strlen($this->uri) > 1 ? '/'.$this->bucket.$this->uri : $this->uri;
1145
+ $this->resource = $this->uri;
1146
+ }
1147
+ $this->headers['Date'] = gmdate('D, d M Y H:i:s T');
1148
+
1149
+ $this->response = new STDClass;
1150
+ $this->response->error = false;
1151
+ }
1152
+
1153
+
1154
+ /**
1155
+ * Set request parameter
1156
+ *
1157
+ * @param string $key Key
1158
+ * @param string $value Value
1159
+ * @return void
1160
+ */
1161
+ public function setParameter($key, $value) {
1162
+ $this->parameters[$key] = $value;
1163
+ }
1164
+
1165
+
1166
+ /**
1167
+ * Set request header
1168
+ *
1169
+ * @param string $key Key
1170
+ * @param string $value Value
1171
+ * @return void
1172
+ */
1173
+ public function setHeader($key, $value) {
1174
+ $this->headers[$key] = $value;
1175
+ }
1176
+
1177
+
1178
+ /**
1179
+ * Set x-amz-meta-* header
1180
+ *
1181
+ * @param string $key Key
1182
+ * @param string $value Value
1183
+ * @return void
1184
+ */
1185
+ public function setAmzHeader($key, $value) {
1186
+ $this->amzHeaders[$key] = $value;
1187
+ }
1188
+
1189
+
1190
+ /**
1191
+ * Get the S3 response
1192
+ *
1193
+ * @return object | false
1194
+ */
1195
+ public function getResponse() {
1196
+ $query = '';
1197
+ if (sizeof($this->parameters) > 0) {
1198
+ $query = substr($this->uri, -1) !== '?' ? '?' : '&';
1199
+ foreach ($this->parameters as $var => $value)
1200
+ if ($value == null || $value == '') $query .= $var.'&';
1201
+ // Parameters should be encoded (thanks Sean O'Dea)
1202
+ else $query .= $var.'='.rawurlencode($value).'&';
1203
+ $query = substr($query, 0, -1);
1204
+ $this->uri .= $query;
1205
+
1206
+ if (array_key_exists('acl', $this->parameters) ||
1207
+ array_key_exists('location', $this->parameters) ||
1208
+ array_key_exists('torrent', $this->parameters) ||
1209
+ array_key_exists('logging', $this->parameters))
1210
+ $this->resource .= $query;
1211
+ }
1212
+ $url = ((S3::$useSSL && extension_loaded('openssl')) ?
1213
+ 'https://':'http://').$this->headers['Host'].$this->uri;
1214
+ //var_dump($this->bucket, $this->uri, $this->resource, $url);
1215
+
1216
+ // Basic setup
1217
+ $curl = curl_init();
1218
+ curl_setopt($curl, CURLOPT_USERAGENT, 'S3/php');
1219
+
1220
+ if (S3::$useSSL) {
1221
+ curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1);
1222
+ curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 1);
1223
+ }
1224
+
1225
+ curl_setopt($curl, CURLOPT_URL, $url);
1226
+
1227
+ // Headers
1228
+ $headers = array(); $amz = array();
1229
+ foreach ($this->amzHeaders as $header => $value)
1230
+ if (strlen($value) > 0) $headers[] = $header.': '.$value;
1231
+ foreach ($this->headers as $header => $value)
1232
+ if (strlen($value) > 0) $headers[] = $header.': '.$value;
1233
+
1234
+ // Collect AMZ headers for signature
1235
+ foreach ($this->amzHeaders as $header => $value)
1236
+ if (strlen($value) > 0) $amz[] = strtolower($header).':'.$value;
1237
+
1238
+ // AMZ headers must be sorted
1239
+ if (sizeof($amz) > 0) {
1240
+ sort($amz);
1241
+ $amz = "\n".implode("\n", $amz);
1242
+ } else $amz = '';
1243
+
1244
+ // Authorization string (CloudFront stringToSign should only contain a date)
1245
+ $headers[] = 'Authorization: ' . S3::__getSignature(
1246
+ $this->headers['Host'] == 'cloudfront.amazonaws.com' ? $this->headers['Date'] :
1247
+ $this->verb."\n".$this->headers['Content-MD5']."\n".
1248
+ $this->headers['Content-Type']."\n".$this->headers['Date'].$amz."\n".$this->resource
1249
+ );
1250
+
1251
+ curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
1252
+ curl_setopt($curl, CURLOPT_HEADER, false);
1253
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, false);
1254
+ curl_setopt($curl, CURLOPT_WRITEFUNCTION, array(&$this, '__responseWriteCallback'));
1255
+ curl_setopt($curl, CURLOPT_HEADERFUNCTION, array(&$this, '__responseHeaderCallback'));
1256
+ curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
1257
+
1258
+ // Request types
1259
+ switch ($this->verb) {
1260
+ case 'GET': break;
1261
+ case 'PUT': case 'POST': // POST only used for CloudFront
1262
+ if ($this->fp !== false) {
1263
+ curl_setopt($curl, CURLOPT_PUT, true);
1264
+ curl_setopt($curl, CURLOPT_INFILE, $this->fp);
1265
+ if ($this->size >= 0)
1266
+ curl_setopt($curl, CURLOPT_INFILESIZE, $this->size);
1267
+ } elseif ($this->data !== false) {
1268
+ curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $this->verb);
1269
+ curl_setopt($curl, CURLOPT_POSTFIELDS, $this->data);
1270
+ if ($this->size >= 0)
1271
+ curl_setopt($curl, CURLOPT_BUFFERSIZE, $this->size);
1272
+ } else
1273
+ curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $this->verb);
1274
+ break;
1275
+ case 'HEAD':
1276
+ curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'HEAD');
1277
+ curl_setopt($curl, CURLOPT_NOBODY, true);
1278
+ break;
1279
+ case 'DELETE':
1280
+ curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'DELETE');
1281
+ break;
1282
+ default: break;
1283
+ }
1284
+
1285
+ // Execute, grab errors
1286
+ if (curl_exec($curl))
1287
+ $this->response->code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
1288
+ else
1289
+ $this->response->error = array(
1290
+ 'code' => curl_errno($curl),
1291
+ 'message' => curl_error($curl),
1292
+ 'resource' => $this->resource
1293
+ );
1294
+
1295
+ @curl_close($curl);
1296
+
1297
+ // Parse body into XML
1298
+ if ($this->response->error === false && isset($this->response->headers['type']) &&
1299
+ $this->response->headers['type'] == 'application/xml' && isset($this->response->body)) {
1300
+ $this->response->body = simplexml_load_string($this->response->body);
1301
+
1302
+ // Grab S3 errors
1303
+ if (!in_array($this->response->code, array(200, 204)) &&
1304
+ isset($this->response->body->Code, $this->response->body->Message)) {
1305
+ $this->response->error = array(
1306
+ 'code' => (string)$this->response->body->Code,
1307
+ 'message' => (string)$this->response->body->Message
1308
+ );
1309
+ if (isset($this->response->body->Resource))
1310
+ $this->response->error['resource'] = (string)$this->response->body->Resource;
1311
+ unset($this->response->body);
1312
+ }
1313
+ }
1314
+
1315
+ // Clean up file resources
1316
+ if ($this->fp !== false && is_resource($this->fp)) fclose($this->fp);
1317
+
1318
+ return $this->response;
1319
+ }
1320
+
1321
+
1322
+ /**
1323
+ * CURL write callback
1324
+ *
1325
+ * @param resource &$curl CURL resource
1326
+ * @param string &$data Data
1327
+ * @return integer
1328
+ */
1329
+ private function __responseWriteCallback(&$curl, &$data) {
1330
+ if ($this->response->code == 200 && $this->fp !== false)
1331
+ return fwrite($this->fp, $data);
1332
+ else
1333
+ $this->response->body .= $data;
1334
+ return strlen($data);
1335
+ }
1336
+
1337
+
1338
+ /**
1339
+ * CURL header callback
1340
+ *
1341
+ * @param resource &$curl CURL resource
1342
+ * @param string &$data Data
1343
+ * @return integer
1344
+ */
1345
+ private function __responseHeaderCallback(&$curl, &$data) {
1346
+ if (($strlen = strlen($data)) <= 2) return $strlen;
1347
+ if (substr($data, 0, 4) == 'HTTP')
1348
+ $this->response->code = (int)substr($data, 9, 3);
1349
+ else {
1350
+ list($header, $value) = explode(': ', trim($data), 2);
1351
+ if ($header == 'Last-Modified')
1352
+ $this->response->headers['time'] = strtotime($value);
1353
+ elseif ($header == 'Content-Length')
1354
+ $this->response->headers['size'] = (int)$value;
1355
+ elseif ($header == 'Content-Type')
1356
+ $this->response->headers['type'] = $value;
1357
+ elseif ($header == 'ETag')
1358
+ $this->response->headers['hash'] = $value{0} == '"' ? substr($value, 1, -1) : $value;
1359
+ elseif (preg_match('/^x-amz-meta-.*$/', $header))
1360
+ $this->response->headers[$header] = is_numeric($value) ? (int)$value : $value;
1361
+ }
1362
+ return $strlen;
1363
+ }
1364
+
1365
+ }
{trunk/administrator/backups → classes}/index.html RENAMED
File without changes
cloner.config.php CHANGED
@@ -83,7 +83,10 @@ if(@file_exists("../../../wp-config.php")){
83
  $script_dir = str_replace("wp-content/plugins/xcloner-backup-and-restore","", $script_dir);
84
 
85
  $_CONFIG['backup_path'] = $script_dir;
86
- $_CONFIG['clonerPath'] = $script_dir."/administrator/backups";
 
 
 
87
  $_CONFIG['mosConfig_live_site']=$_SERVER['HTTP_HOST'];
88
 
89
 
83
  $script_dir = str_replace("wp-content/plugins/xcloner-backup-and-restore","", $script_dir);
84
 
85
  $_CONFIG['backup_path'] = $script_dir;
86
+
87
+ $_CONFIG['clonerPath'] = realpath($script_dir."/administrator/backups");
88
+ $_CONFIG['clonerPath'] = str_replace("\\","/", $_CONFIG['clonerPath']);
89
+
90
  $_CONFIG['mosConfig_live_site']=$_SERVER['HTTP_HOST'];
91
 
92
 
cloner.cron.php CHANGED
@@ -1,11 +1,11 @@
1
  <?php
2
  /**
3
  * XCloner
4
- * Oficial website: http://www.joomlaplug.com/
5
  * -------------------------------------------
6
  * Creator: Liuta Romulus Ovidiu
7
- * License: All Rights Reserved
8
- * Email: admin@joomlaplug.com
9
  * Revision: 1.0
10
  * Date: July 2007
11
  **/
@@ -17,6 +17,8 @@ define( '_VALID_MOS', 1 );
17
 
18
  include_once("admin.cloner.html.php");
19
  include_once("cloner.functions.php");
 
 
20
  $script_dir = str_replace("\\","/",dirname(__FILE__));
21
  if(is_dir($script_dir)){
22
 
@@ -24,6 +26,16 @@ if(is_dir($script_dir)){
24
 
25
  }
26
 
 
 
 
 
 
 
 
 
 
 
27
 
28
  if($_REQUEST['config'] != ""){
29
 
@@ -53,17 +65,8 @@ logxx($smsg);
53
 
54
  logxx("Starting ".$script_dir."/cloner.cron.php");
55
 
56
- if($_REQUEST['config'] == ""){
57
-
58
- if($argv[1] != ""){
59
-
60
- $_REQUEST['config'] = $argv[1];
61
-
62
- }
63
 
64
 
65
- }
66
-
67
 
68
  # load language
69
  if($_CONFIG['select_lang']!="")
@@ -103,7 +106,7 @@ if($_CONFIG[cron_bname]!="")
103
  $_REQUEST['bname'] = $_CONFIG[cron_bname];
104
 
105
 
106
- function logxx($string){
107
 
108
  global $mail_log;
109
 
@@ -116,7 +119,7 @@ function logxx($string){
116
  }
117
 
118
  $clonerPath = $_CONFIG['clonerPath'];
119
- logxx("Starting JoomlaCloner for site $mosConfig_live_site at ".date("Y-m-d H:i"));
120
 
121
  $excludedFolders = array();
122
  $d_arr = array(); $d = 0;
@@ -260,14 +263,14 @@ elseif($_CONFIG['cron_send']==2){
260
  Source Filename: $source_file
261
  Server: $mosConfig_live_site
262
 
263
- Powered by http://www.joomlaplug.com - JoomlaCloner site backup solution for everybody!
264
  </pre>
265
 
266
  ";
267
 
268
- $ok = send_mail($mosConfig_mailfrom, "JoomlaCloner $msg", $message, $_CONFIG['cron_email_address'], $source_file);
269
 
270
- #echo mosMail( $mosConfig_mailfrom, $mosConfig_fromname, $_CONFIG['cron_email_address'], "JoomlaCloner $msg", $message, $mode, '', '' );
271
  if($ok)
272
  logxx("Mail sent to ".$_CONFIG['cron_email_address']);
273
  else
@@ -278,6 +281,43 @@ elseif($_CONFIG['cron_send']==2){
278
  logxx("Total backup size:".$bsize);
279
 
280
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
281
  ######## DELETING OLDER BACKUPS ##############################################
282
 
283
  if($_CONFIG['cron_file_delete_act']){
@@ -300,7 +340,7 @@ if(sizeof($logemail)>0){
300
 
301
  $email_subject = "cron log ".time();
302
 
303
- $headers ="From: \"Cronlog JoomlaCloner\" <nobody@noreply.com>\n";
304
 
305
  if(mail($email, $email_subject, strip_tags($mail_log), $headers)){
306
 
@@ -362,7 +402,7 @@ $fileatt_type = "application/octet-stream"; // File Type
362
  $fileatt_name = basename($fileatt); // Filename that will be used for the file as the attachment
363
  $data = "";
364
 
365
- $headers = "From: \"Cronbackup JoomlaCloner\" <".$email_from.">";
366
 
367
  if($fileatt != ""){
368
 
1
  <?php
2
  /**
3
  * XCloner
4
+ * Oficial website: http://www.xcloner.com/
5
  * -------------------------------------------
6
  * Creator: Liuta Romulus Ovidiu
7
+ * License: GNU/GPL
8
+ * Email: admin@xcloner.com
9
  * Revision: 1.0
10
  * Date: July 2007
11
  **/
17
 
18
  include_once("admin.cloner.html.php");
19
  include_once("cloner.functions.php");
20
+
21
+
22
  $script_dir = str_replace("\\","/",dirname(__FILE__));
23
  if(is_dir($script_dir)){
24
 
26
 
27
  }
28
 
29
+ if($_REQUEST['config'] == ""){
30
+
31
+ if($argv[1] != ""){
32
+
33
+ $_REQUEST['config'] = $argv[1];
34
+
35
+ }
36
+
37
+
38
+ }
39
 
40
  if($_REQUEST['config'] != ""){
41
 
65
 
66
  logxx("Starting ".$script_dir."/cloner.cron.php");
67
 
 
 
 
 
 
 
 
68
 
69
 
 
 
70
 
71
  # load language
72
  if($_CONFIG['select_lang']!="")
106
  $_REQUEST['bname'] = $_CONFIG[cron_bname];
107
 
108
 
109
+ function logxx($string = ""){
110
 
111
  global $mail_log;
112
 
119
  }
120
 
121
  $clonerPath = $_CONFIG['clonerPath'];
122
+ logxx("Starting XCloner for site $mosConfig_live_site at ".date("Y-m-d H:i"));
123
 
124
  $excludedFolders = array();
125
  $d_arr = array(); $d = 0;
263
  Source Filename: $source_file
264
  Server: $mosConfig_live_site
265
 
266
+ Powered by http://www.xcloner.com - Xcloner - Backup and Restore made easy!
267
  </pre>
268
 
269
  ";
270
 
271
+ $ok = send_mail($mosConfig_mailfrom, "XCloner $msg", $message, $_CONFIG['cron_email_address'], $source_file);
272
 
273
+ #echo mosMail( $mosConfig_mailfrom, $mosConfig_fromname, $_CONFIG['cron_email_address'], "XCloner $msg", $message, $mode, '', '' );
274
  if($ok)
275
  logxx("Mail sent to ".$_CONFIG['cron_email_address']);
276
  else
281
  logxx("Total backup size:".$bsize);
282
 
283
 
284
+ ####### STARING AMAZON S3 MODE
285
+ if($_CONFIG['cron_amazon_active']){
286
+
287
+ include_once("classes/S3.php");
288
+
289
+ logxx();
290
+
291
+ $s3 = new S3($_CONFIG['cron_amazon_awsAccessKey'], $_CONFIG['cron_amazon_awsSecretKey']);
292
+
293
+ logxx("AMAZON S3: Starting communication with the Amazon S3 server...");
294
+
295
+ $buckets = $s3->listBuckets();
296
+
297
+ if (($s3->putBucket($_CONFIG['cron_amazon_bucket'], "private")) || (@in_array($_CONFIG['cron_amazon_bucket'], $buckets))) {
298
+
299
+
300
+ if ($s3->putObjectFile($clonerPath."/".$file, $_CONFIG['cron_amazon_bucket'], $_CONFIG['cron_amazon_dirname']."/".baseName($file), "private")){
301
+
302
+ logxx("AMAZON S3: File copied to {".$_CONFIG['cron_amazon_bucket']."}/".$_CONFIG['cron_amazon_dirname']."/".$file);
303
+
304
+ }else {
305
+ logxx("AMAZON S3: Failed to copy file to {".$_CONFIG['cron_amazon_bucket']."}/".$_CONFIG['cron_amazon_dirname']."/".$file);exit;
306
+
307
+ }
308
+
309
+
310
+ }else{
311
+
312
+ logxx("AMAZON S3: Unable to create bucket ".$_CONFIG['cron_amazon_bucket']." (it may already exist and/or be owned by someone else)!");exit;
313
+ }
314
+
315
+
316
+
317
+ }
318
+ ###### END
319
+
320
+
321
  ######## DELETING OLDER BACKUPS ##############################################
322
 
323
  if($_CONFIG['cron_file_delete_act']){
340
 
341
  $email_subject = "cron log ".time();
342
 
343
+ $headers ="From: \"Cronlog XCloner\" <nobody@noreply.com>\n";
344
 
345
  if(mail($email, $email_subject, strip_tags($mail_log), $headers)){
346
 
402
  $fileatt_name = basename($fileatt); // Filename that will be used for the file as the attachment
403
  $data = "";
404
 
405
+ $headers = "From: \"Cronbackup XCloner\" <".$email_from.">";
406
 
407
  if($fileatt != ""){
408
 
cloner.functions.php CHANGED
@@ -33,12 +33,14 @@ function E_print($message){
33
  function mosRedirect($url, $msg=""){
34
 
35
 
36
- echo "<script>
37
 
38
- window.location = '$url&mosmsg=$msg';
39
 
40
  </script>";
41
 
 
 
42
  }
43
 
44
  function fdefault(){
@@ -158,7 +160,19 @@ function config($option){
158
 
159
  $cfg .= '$_CONFIG[\'system_mdatabases\']="'.$_REQUEST[system_mdatabases].'";'."\n";
160
 
161
- $cfg .= '$_CONFIG[\'add_backups_dir\']="'.$_REQUEST[add_backups_dir].'";'."\n";
 
 
 
 
 
 
 
 
 
 
 
 
162
 
163
  $cfg .= '?'.'>';
164
 
33
  function mosRedirect($url, $msg=""){
34
 
35
 
36
+ echo "<script type=\"text/javascript\">
37
 
38
+ window.location = \"$url&mosmsg=".urlencode($msg)."\";
39
 
40
  </script>";
41
 
42
+ exit;
43
+
44
  }
45
 
46
  function fdefault(){
160
 
161
  $cfg .= '$_CONFIG[\'system_mdatabases\']="'.$_REQUEST[system_mdatabases].'";'."\n";
162
 
163
+ $cfg .= '$_CONFIG[\'add_backups_dir\']="'.$_REQUEST[add_backups_dir].'";'."\n";
164
+
165
+
166
+ $cfg .= '$_CONFIG[\'cron_amazon_active\']="'.$_REQUEST[cron_amazon_active].'";'."\n";
167
+
168
+ $cfg .= '$_CONFIG[\'cron_amazon_awsAccessKey\']="'.$_REQUEST[cron_amazon_awsAccessKey].'";'."\n";
169
+
170
+ $cfg .= '$_CONFIG[\'cron_amazon_awsSecretKey\']="'.$_REQUEST[cron_amazon_awsSecretKey].'";'."\n";
171
+
172
+ $cfg .= '$_CONFIG[\'cron_amazon_bucket\']="'.$_REQUEST[cron_amazon_bucket].'";'."\n";
173
+
174
+ $cfg .= '$_CONFIG[\'cron_amazon_dirname\']="'.$_REQUEST[cron_amazon_dirname].'";'."\n";
175
+
176
 
177
  $cfg .= '?'.'>';
178
 
common.php CHANGED
@@ -17,11 +17,13 @@ if ((!extension_loaded('zlib')) &&(function_exists('ob_start'))) {
17
  ####################################
18
 
19
  $_CONFIG['multiple_config_dir'] = "configs";
20
- $strlen = strlen($_CONFIG['backup_path']);
21
- if((substr($_CONFIG['backup_path'], $strlen-1, $strlen) != '/') && (substr($_CONFIG['backup_path'], $strlen-1, $strlen) != '\\'))
22
- $_CONFIG['backup_path'] .= "/";
23
-
24
- $_CONFIG['backups_dir'] = $_CONFIG['backup_path']."/administrator/backups";#$_CONFIG['clonerPath'];#$_CONFIG['backup_path']."/backups";
 
 
25
  $_CONFIG['exfile'] = $_CONFIG['backups_dir']."/.excl";
26
  $_CONFIG['exfile_tar'] = $_CONFIG['backups_dir']."/.excl_tar";
27
  $_CONFIG['script_path'] = str_replace("\\","/",dirname(__FILE__));
17
  ####################################
18
 
19
  $_CONFIG['multiple_config_dir'] = "configs";
20
+
21
+ $_CONFIG['backup_path'] = realpath($_CONFIG['backup_path'])."/";
22
+ $_CONFIG['backups_dir'] = realpath($_CONFIG['backup_path'])."/administrator/backups";
23
+
24
+ $_CONFIG['backup_path'] = str_replace("\\","/", $_CONFIG['backup_path']);
25
+ $_CONFIG['backups_dir'] = str_replace("\\","/", $_CONFIG['backups_dir']);
26
+
27
  $_CONFIG['exfile'] = $_CONFIG['backups_dir']."/.excl";
28
  $_CONFIG['exfile_tar'] = $_CONFIG['backups_dir']."/.excl_tar";
29
  $_CONFIG['script_path'] = str_replace("\\","/",dirname(__FILE__));
language/english.php CHANGED
@@ -23,6 +23,16 @@ define("LM_FRONT_MSG_OK","We have uploaded the Package Restore Utility on your f
23
  define("LM_NOPAKCAGE_ERROR","There is no package selected, aborting...!");
24
 
25
  // --- BACKEND AREA---//
 
 
 
 
 
 
 
 
 
 
26
  define("LM_DATABASE_EXCLUDE_TABLES","Select tables to exclude from backup:");
27
  define("LM_CONFIG_SYSTEM_FOLDER","Folders display:");
28
  define("LM_CONFIG_SYSTEM_FOLDER_SUB","please select the mode you would like to select the exclude folders from 'Generate Backup' section");
@@ -237,7 +247,7 @@ define("LM_CONFIG_INFO_T_BPATH","Backup Path:");
237
  define ("LM_CONFIG_INFO_ROOT_BPATH","Backup Start Path");
238
  define("LM_CONFIG_INFO_ROOT_PATH_SUB","the backup start path needs to exist and be readable in order for XCloner to start the backup process");
239
  define("LM_CONFIG_INFO_ROOT_BPATH_TMP", "Temporary Folder");
240
- define("LM_CONFIG_INFO_ROOT_PATH_TMP_SUB","this path needs to be created and be writeable in order for XCloner to work properly");
241
 
242
 
243
  define("LM_CONFIG_INFO","This tab will show general system info and paths");
@@ -285,7 +295,7 @@ define("LM_COL_SIZE" , "Size of Set");
285
  define("LM_COL_DATE" , "Date of Backup");
286
  define("LM_COL_FOLDER" , "<b>Excluded Folders and/or files</b>");
287
 
288
- define("LM_DELETE_FILE_SUCCESS", "File(s) Deleted");
289
  define("LM_DOWNLOAD_TITLE", "Download this Backup Set");
290
 
291
 
23
  define("LM_NOPAKCAGE_ERROR","There is no package selected, aborting...!");
24
 
25
  // --- BACKEND AREA---//
26
+
27
+ //Amazon S3
28
+ define("LM_AMAZON_S3", "Amazon S3 Storage");
29
+ define("LM_AMAZON_S3_ACTIVATE", "Active:");
30
+ define("LM_AMAZON_S3_AWSACCESSKEY", "AWS Access Key:");
31
+ define("LM_AMAZON_S3_AWSSECRETKEY", "AWS Secret Key:");
32
+ define("LM_AMAZON_S3_BUCKET", "Bucket name:");
33
+ define("LM_AMAZON_S3_DIRNAME", "Upload Directory:");
34
+
35
+
36
  define("LM_DATABASE_EXCLUDE_TABLES","Select tables to exclude from backup:");
37
  define("LM_CONFIG_SYSTEM_FOLDER","Folders display:");
38
  define("LM_CONFIG_SYSTEM_FOLDER_SUB","please select the mode you would like to select the exclude folders from 'Generate Backup' section");
247
  define ("LM_CONFIG_INFO_ROOT_BPATH","Backup Start Path");
248
  define("LM_CONFIG_INFO_ROOT_PATH_SUB","the backup start path needs to exist and be readable in order for XCloner to start the backup process");
249
  define("LM_CONFIG_INFO_ROOT_BPATH_TMP", "Temporary Folder");
250
+ define("LM_CONFIG_INFO_ROOT_PATH_TMP_SUB","the path <i>[Backup Start Path/administrator/backups]</i> needs to be created and be writeable in order for XCloner to work properly");
251
 
252
 
253
  define("LM_CONFIG_INFO","This tab will show general system info and paths");
295
  define("LM_COL_DATE" , "Date of Backup");
296
  define("LM_COL_FOLDER" , "<b>Excluded Folders and/or files</b>");
297
 
298
+ define("LM_DELETE_FILE_SUCCESS", "Files Deleted");
299
  define("LM_DOWNLOAD_TITLE", "Download this Backup Set");
300
 
301
 
readme.txt CHANGED
@@ -1,10 +1,10 @@
1
- === XCloner ===
2
  Contributors: xcloner
3
  Donate link: http://www.xcloner.com/
4
- Tags: backup, restore, admin, plugin, database, full backup, cloner, xcloner, theme, files, upload
5
  Requires at least: 2.0.2
6
  Tested up to: 3.0.1
7
- Stable tag: 2.1.1
8
 
9
  XCloner is a full backup and restore plugin for Wordpress, it will backup and restore both files and database. www.xcloner.com
10
 
@@ -76,6 +76,8 @@ If the inside Clone option fails for some reason, you need to:
76
 
77
  = 2.1 =
78
  Initial release
 
 
79
 
80
  == Upgrade Notice ==
81
 
1
+ === XCloner - Backup and Restore===
2
  Contributors: xcloner
3
  Donate link: http://www.xcloner.com/
4
+ Tags: backup, restore, admin, plugin, database, full backup, cloner, xcloner, theme, files, upload, wordpress backup, backup plugin, database backup, database restore, site move, transfer, blog transfer
5
  Requires at least: 2.0.2
6
  Tested up to: 3.0.1
7
+ Stable tag: 2.1.2
8
 
9
  XCloner is a full backup and restore plugin for Wordpress, it will backup and restore both files and database. www.xcloner.com
10
 
76
 
77
  = 2.1 =
78
  Initial release
79
+ = 2.1.2 =
80
+ Added Amazon S3 cron storage support
81
 
82
  == Upgrade Notice ==
83
 
restore/XCloner.php CHANGED
@@ -152,6 +152,7 @@ $_CONFIG[owner] =$ownerinfo[name];
152
  <head>
153
 
154
  <title>XCloner - Your Clone Restore Utility</title>
 
155
 
156
  <style type="text/css" media="screen">
157
 
@@ -295,6 +296,8 @@ function step2($file=""){
295
 
296
  if($_REQUEST['charset_of_file']!="")
297
  mysql_query("SET NAMES ".$_REQUEST['charset_of_file']."");
 
 
298
 
299
 
300
 
@@ -1088,7 +1091,7 @@ function start() {
1088
 
1089
  $pdir = str_replace($_CONFIG['script_name'], "", $_SERVER["SCRIPT_FILENAME"]);
1090
 
1091
- $purl = $_SERVER['HTTP_HOST'].str_replace($_CONFIG['script_name'],"", $_SERVER['SCRIPT_NAME']);
1092
 
1093
  ?>
1094
 
152
  <head>
153
 
154
  <title>XCloner - Your Clone Restore Utility</title>
155
+ <META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
156
 
157
  <style type="text/css" media="screen">
158
 
296
 
297
  if($_REQUEST['charset_of_file']!="")
298
  mysql_query("SET NAMES ".$_REQUEST['charset_of_file']."");
299
+ else
300
+ mysql_query("SET NAMES utf8;");
301
 
302
 
303
 
1091
 
1092
  $pdir = str_replace($_CONFIG['script_name'], "", $_SERVER["SCRIPT_FILENAME"]);
1093
 
1094
+ $purl = $_SERVER['HTTP_HOST'].str_replace("/".$_CONFIG['script_name'],"", $_SERVER['SCRIPT_NAME']);
1095
 
1096
  ?>
1097
 
trunk/admin.cloner.html.php DELETED
@@ -1,1784 +0,0 @@
1
- <?php
2
- /**
3
- * XCloner
4
- * Oficial website: http://www.joomlaplug.com/
5
- * -------------------------------------------
6
- * Creator: Liuta Romulus Ovidiu
7
- * License: All Rights Reserved
8
- * Email: admin@joomlaplug.com
9
- * Revision: 1.0
10
- * Date: July 2007
11
- **/
12
-
13
-
14
- /** ensure this file is being included by a parent file */
15
- defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );
16
-
17
- if($_COOKIE['auth_clone'] != 1)
18
- setcookie('auth_clone', '1');
19
-
20
- class mosTabs{
21
-
22
- function mosTabs($int){
23
-
24
- echo "<div class=\"tabber\">";
25
-
26
- }
27
-
28
- function startTab($name, $class){
29
-
30
- echo "<div class=\"tabbertab\" title=\"$name\">";
31
-
32
-
33
- }
34
-
35
- function endTab(){
36
-
37
- echo "</div>";
38
-
39
- }
40
-
41
- function endPane(){
42
-
43
- echo "</div>";
44
- }
45
-
46
- }
47
-
48
- /**
49
- * @package Joomla
50
- * @subpackage JoomlaCloner
51
- */
52
- class HTML_cloner {
53
-
54
- function header(){
55
-
56
- global $mosConfig_live_site, $task;
57
-
58
- ?>
59
- <html lang="en">
60
- <head>
61
- <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
62
- <title>XCloner Backup and Restore</title>
63
-
64
- <link rel="stylesheet" href="css/tabber.css" TYPE="text/css" MEDIA="screen">
65
- <link rel="styleSheet" href="css/dtree.css" type="text/css" />
66
- <link rel="styleSheet" href="css/main.css" type="text/css" />
67
-
68
- <script type="text/javascript" src="javascript/tabber.js"></script>
69
- <script type="text/javascript" src="javascript/dtree.js"></script>
70
- <script type="text/javascript">
71
-
72
- /* Optional: Temporarily hide the "tabber" class so it does not "flash"
73
- on the page as plain HTML. After tabber runs, the class is changed
74
- to "tabberlive" and it will appear. */
75
-
76
- document.write('<style type="text/css">.tabber{display:none;}<\/style>');
77
- </script>
78
-
79
- </head>
80
- <body>
81
-
82
- <table width='100%' style="padding-left: 3px; padding-right: 4px;align:center;" bgcolor='#ffffff'>
83
- <tr><td align='right'>
84
-
85
- </td></tr>
86
-
87
- <tr><td align='center'>
88
-
89
- <table width='100%' border='1' bgcolor='white'>
90
- <tr>
91
- <td width='100%'>
92
- <table><tr><td>
93
- <img src="images/backup.png" align="middle">&nbsp;
94
- </td><td>
95
- <h2><?php echo LM_COM_TITLE.$_SERVER['HTTP_HOST']; ?></h2>
96
- <h1>Backup and Restore</h1>
97
- </td></tr></table>
98
- <td>
99
- <?php
100
- # Generating the buttons...
101
- require_once( "toolbar.cloner.php" );
102
- ?>
103
-
104
- </tr>
105
- </table>
106
- <br />
107
- <table width="100%" cellspacing='3' cellpadding="4" >
108
- <tr><td valign='top' width="160" >
109
- <table width='100%' cellpadding='5' height='100%' class='menu_table'><tr><td>
110
-
111
-
112
- <div class="dtree">
113
-
114
- <a href="javascript: d.openAll();"><?php echo LM_MENU_OPEN_ALL?></a> | <a href="javascript: d.closeAll();"><?php echo LM_MENU_CLOSE_ALL?>l</a><br />
115
- <br />
116
- <script type="text/javascript">
117
- <!--
118
-
119
- d = new dTree('d');
120
-
121
- d.add(0,-1,'&nbsp;<?php echo LM_MENU_CLONER;?>','index2.php?option=com_cloner','','','images/logo.gif');
122
-
123
- d.add(800,0,'&nbsp;<?php echo LM_MENU_ADMINISTRATION;?>','','','','images/actions.gif','images/actions.gif');
124
-
125
- d.add(801,800,'&nbsp;<?php echo LM_MENU_CONFIGURATION;?>','index2.php?option=com_cloner&task=config','','','images/gen_settings.png');
126
- d.add(802,800,'&nbsp;<?php echo LM_MENU_CRON;?>','index2.php?option=com_cloner&task=cron','','','images/templatessm.png');
127
- d.add(803,800,'&nbsp;<?php echo LM_MENU_LANG;?>','index2.php?option=com_cloner&task=lang','','','images/lang.png');
128
-
129
-
130
- d.add(840,0,'&nbsp;<?php echo LM_MENU_ACTIONS;?>','','','','images/actions.gif','images/actions.gif');
131
- d.add(841,840,'&nbsp;<?php echo LM_MENU_View_backups;?>','index2.php?option=com_cloner&task=view','','','images/editionssm.png');
132
- d.add(842,840,'&nbsp;<?php echo LM_MENU_Generate_backup;?>','index2.php?option=com_cloner&task=confirm','','','images/wizardsm.png');
133
- d.add(843,840,'&nbsp;<?php echo LM_MENU_Restore_backup;?>','index2.php?option=com_cloner&task=restore','','','images/wizardsm_restore.gif');
134
-
135
- d.add(830,0,'&nbsp;<?php echo LM_MENU_SUPPORT;?>','','','','images/support.png','images/support.png');
136
- d.add(831,830,'&nbsp;<?php echo LM_MENU_FORUM;?>','http://www.xcloner.com/support/forums/','','_blank','images/forum.png','images/forum.png');
137
- d.add(832,830,'&nbsp;<?php echo LM_MENU_WEBSITE;?>','http://www.xcloner.com','','_blank','images/website.png','images/website.png');
138
-
139
-
140
-
141
- d.add(820,0,'&nbsp;<?php echo LM_MENU_Documentation;?>','','','','images/help.png','images/help.png');
142
- d.add(821,820,'&nbsp;<?php echo LM_MENU_ABOUT;?>','index2.php?option=com_cloner&task=about','','','images/about.png','images/about.png');
143
-
144
- document.write(d);
145
-
146
- //-->
147
- </script></div> </td></tr></table>
148
- </td><td valign='top' align='left' style="padding-left: 20px;">
149
-
150
-
151
- <?php
152
- if($_REQUEST['mosmsg']!="")
153
-
154
- echo "<center><h2>".$_REQUEST['mosmsg']."</h2></center>";
155
-
156
- }
157
-
158
- function footer(){
159
-
160
- ?>
161
- </td></tr></table>
162
- <hr><br /><br />
163
- <center>
164
- <p>Powered by <a href='http://www.xcloner.com' target='_blank'>XCloner.com</a>. All rights reserved!</p></center>
165
-
166
- </td></tr></table>
167
-
168
- <?php
169
-
170
- }
171
-
172
- function _FDefault(){
173
- ?>
174
-
175
- <form action="index2.php" method="post" name="adminForm">
176
-
177
- <table class="adminform">
178
- <tr><th valign='top' >
179
- <?php echo LM_JOOMLAPLUG_CP?>
180
- </th>
181
- </table>
182
-
183
- <table class="adminform" >
184
- <tr><td >
185
- <div id="cpanel">
186
-
187
- <div style="float:left;">
188
- <div class="icon">
189
-
190
- <a href="index2.php?option=com_cloner&amp;task=config">
191
- <img src="images/settings.png"
192
- alt="Settings" align="middle" name="" border="0" />
193
- <span><?php echo LM_MAIN_Settings?></span>
194
- </a>
195
- </div>
196
- </div>
197
-
198
- <div style="float:left;">
199
- <div class="icon">
200
-
201
- <a href="index2.php?option=com_cloner&amp;task=view">
202
- <img src="images/editions.png"
203
- alt="View Backups" align="middle" name="" border="0" />
204
- <span><?php echo LM_MAIN_View_Backups?></span>
205
- </a>
206
- </div>
207
- </div>
208
-
209
- <div style="float:left;">
210
- <div class="icon">
211
-
212
- <a href="index2.php?option=com_cloner&amp;task=confirm">
213
- <img src="images/wizard.png"
214
- alt="MagaGenerate Backup" align="middle" name="" border="0" />
215
- <span><?php echo LM_MAIN_Generate_Backup?></span>
216
- </a>
217
- </div>
218
- </div>
219
-
220
- <div style="float:left;">
221
- <div class="icon">
222
-
223
- <a href="index2.php?option=com_cloner&amp;task=about">
224
- <img src="images/lhelp.png"
225
- alt="MagaGenerate Backup" align="middle" name="" border="0" />
226
- <span><?php echo LM_MAIN_Help?></span>
227
- </a>
228
- </div>
229
- </div>
230
-
231
-
232
-
233
-
234
- </div>
235
- </td></tr>
236
- </table>
237
- <input type="hidden" name="option" value="com_cloner" />
238
- <input type="hidden" name="task" value="lang" />
239
- </form>
240
-
241
- <?php
242
- }
243
-
244
- /*The basic authentification form*/
245
- function Login(){
246
-
247
- ?>
248
- <center><br />
249
- <form action="index2.php" method="post" name="adminForm">
250
- <table border='1' ><tr><td align='center'>
251
- <table align='center' cellpadding='10' cellspacing='20'>
252
- <tr ><td colspan='2' align='center'><b>Authentification Area:</b></td></tr>
253
- <tr><td>Username:</td><td><input type='text' size='30' name='username'></td></tr>
254
- <tr><td>Password:</td><td><input type='password' size='30' name='password'></td></tr>
255
-
256
- <tr><td colspan='2'><?php echo LM_LOGIN_TEXT;?></td></tr>
257
-
258
- </table>
259
- </td></tr>
260
-
261
-
262
-
263
- </table>
264
-
265
- <input type="hidden" name="option" value="com_cloner" />
266
- <input type="hidden" name="task" value="lang" />
267
- <input type="hidden" name="boxchecked" value="0" />
268
- <input type="hidden" name="hidemainmenu" value="0" />
269
-
270
- </form>
271
- </center>
272
- <?php
273
-
274
- }
275
-
276
- function Cron(){
277
- global $_CONFIG;
278
- ?>
279
- <table class='adminform'>
280
- <tr><th>
281
- <?php echo LM_CRON_TOP?>
282
- </th></tr>
283
- <tr><td>
284
- <pre>
285
- <?php echo LM_CRON_SUB?>
286
- <br /><b>For Joomla:</b>
287
- <span style='background: #eeeeee'>
288
- /usr/bin/php /path_to_backup_dir/cloner.cron.php
289
- <br />
290
- or
291
- <br />
292
- links http://link_to_backup_dir/cloner.cron.php
293
- <br />
294
- or
295
- <br />
296
- lynx -source http://link_to_backup_dir/cloner.cron.php
297
- </span>
298
-
299
- For <b>Running Multiple Crons</b>, you need to first create a custom configuration file in the XCloner Configuration -> Cron tab
300
- and then replace "cloner.cron.php" with "cloner.cron.php?config=myconfig.php", only use 'links' or 'lynx' options to run the cronjob
301
-
302
- If you would like to use the <b>php SSH command</b> for running Multiple Crons, you will need to replace
303
- the "cloner.cron.php" with <b>"cloner.cron.php myconfig.php"</b> in the command line.
304
-
305
- <?php echo LM_CRON_HELP?>
306
- </pre>
307
- </td></tr>
308
- </table>
309
-
310
- <?php
311
- }
312
-
313
-
314
- function Translator_Edit_DEFAULT($option, $content, $file, $lang){
315
- global $_CONFIG;
316
- ?>
317
- <form action="index2.php" method="post" name="adminForm">
318
- <table class="adminlist">
319
- <tr>
320
- <th align="left"><?php echo LM_LANG_EDIT_FILE?> <?php echo $file?></th>
321
- </tr>
322
-
323
- <tr>
324
-
325
- <td><textarea name='def_content' cols='100' rows='30'><?php echo $content;?></textarea></td>
326
-
327
- </tr>
328
-
329
- <input type="hidden" name="option" value="com_cloner" />
330
- <input type="hidden" name="language" value="<?php echo $lang?>" />
331
- <input type="hidden" name="task" value="lang" />
332
- <input type="hidden" name="boxchecked" value="0" />
333
- <input type="hidden" name="hidemainmenu" value="0" />
334
- </form>
335
-
336
- <?php
337
-
338
- }
339
-
340
- function Translator_Add($option){
341
- global $_CONFIG;
342
- ?>
343
- <form action="index2.php" method="post" name="adminForm">
344
- <table class="adminlist">
345
- <tr>
346
- <th align="left"><?php echo LM_LANG_NEW?></th>
347
- </tr>
348
-
349
- <tr>
350
-
351
- <td><input size='40' type=text name='lname' value=''></td>
352
-
353
- </tr>
354
-
355
- <input type="hidden" name="option" value="com_cloner" />
356
- <input type="hidden" name="language" value="<?php echo $lang?>" />
357
- <input type="hidden" name="task" value="add_lang_new" />
358
- <input type="hidden" name="boxchecked" value="0" />
359
- <input type="hidden" name="hidemainmenu" value="0" />
360
- </form>
361
- <?php
362
- }
363
-
364
- function Translator_Edit($option, $data, $def_data, $file, $lang){
365
- global $_CONFIG;
366
- ?>
367
-
368
- <form action="index2.php" method="post" name="adminForm">
369
- <table class="adminlist">
370
- <tr>
371
- <th align="left"><?php echo LM_LANG_EDIT_FILE?> <input type=text name='lfile' size=100 value='<?php echo $file?>'><br />
372
- <font color='red'><?php echo LM_LANG_EDIT_FILE_SUB?></font>
373
-
374
- <script language="javascript" type="text/javascript">
375
- function submitbutton(pressbutton) {
376
- var form = document.adminForm;
377
-
378
- if (pressbutton == 'save_lang_apply') {
379
- if(confirm('Before you continue please make sure you are still logged in, else press Cancel and then try again!')){
380
- submitform( pressbutton );
381
- }
382
- return;
383
- }
384
- else
385
- if (pressbutton == 'save_lang') {
386
- if(confirm('Before you continue please make sure you are still logged in, else press Cancel and then try again!')){
387
- submitform( pressbutton );
388
- }
389
- return;
390
- }
391
- else{
392
- submitform( pressbutton );
393
- }
394
- }
395
- </script>
396
-
397
- </th>
398
- </tr>
399
- </table>
400
- <?php
401
- foreach($data as $key=>$value)
402
- if($def_data[$key]!="") {
403
- if($i++ %2 == 0)
404
- $bgcolor = '#eeeeee';
405
- else
406
- $bgcolor = '#dddddd';
407
- ?>
408
- <table class="adminlist">
409
- <tr>
410
- <th width='50%' align="left">Default Variable <?php echo $key?></th>
411
- <th width='50%' align="left">Translation <?php echo $key?></th>
412
- </tr>
413
- <tr bgcolor="<?php echo $bgcolor?>">
414
- <td><textarea cols=65 rows=3 ><?php echo stripslashes($def_data[$key])?></textarea></td>
415
-
416
- <td bgcolor='<?php if( trim(str_replace(array("\n","\r"," "),array("","",""),$def_data[$key])) !=
417
- trim(str_replace(array("\n","\r"," "),array("","",""),$value)))
418
- echo 'green';
419
- else
420
- echo 'red';?>'>
421
- <textarea cols=65 rows=3 name=lang[<?php echo $key?>]><?php echo stripslashes($value)?></textarea></td>
422
- </tr>
423
-
424
- <?php
425
- }
426
- ?>
427
-
428
- <input type="hidden" name="option" value="com_cloner" />
429
- <input type="hidden" name="language" value="<?php echo $lang?>" />
430
- <input type="hidden" name="task" value="lang" />
431
- <input type="hidden" name="boxchecked" value="0" />
432
- <input type="hidden" name="hidemainmenu" value="0" />
433
- </form>
434
-
435
- <?php
436
- }
437
-
438
- function Translator($option, $lang_arr){
439
- global $_CONFIG;
440
-
441
- ?>
442
-
443
- <form action="index2.php" method="post" name="adminForm">
444
- <table class="adminlist">
445
- <tr>
446
- <th width="5" align="left">#</th>
447
- <th width="5" align="left">
448
- <input type="checkbox" name="toggle" value="" onClick="checkAll(<?php echo count( $lang_arr ); ?>);" />
449
- </th>
450
- <th align="left">
451
- <?php echo LM_LANG_NAME ?>
452
- </th>
453
- </tr>
454
- <?php
455
-
456
- for($i=0; $i<sizeof($lang_arr); $i++){
457
-
458
- ?>
459
-
460
- <tr>
461
- <td width="5" align="left"><?php echo ($i+1);?></td>
462
- <td width="5" align="left">
463
- <input type="checkbox" id="cb<?php echo $i ?>" name="cid[<?php echo $i?>]" value="<?php echo $i ?>" onclick="isChecked(this.checked);" />
464
- <input type="hidden" name="files[<?php echo $i?>]" value="<?php echo $lang_arr[$i] ?>" onclick="isChecked(this.checked);" />
465
- </td>
466
- <td align="left" >
467
- <a href="index2.php?option=<?php echo $option;?>&task=edit_lang&langx=<?php echo $lang_arr[$i];?>"><?php echo ucfirst($lang_arr[$i])?>
468
- </td>
469
- </tr>
470
- <?php
471
-
472
- }
473
- ?>
474
-
475
- <input type="hidden" name="option" value="com_cloner" />
476
- <input type="hidden" name="task" value="lang" />
477
- <input type="hidden" name="boxchecked" value="0" />
478
- <input type="hidden" name="hidemainmenu" value="0" />
479
- </form>
480
- <?php
481
- }
482
-
483
- function showBackups( &$files, &$sizes, $path, $option ) {
484
- // ----------------------------------------------------------
485
- // Presentation of the backup set list screen
486
- // ----------------------------------------------------------
487
- global $baDownloadPath, $_CONFIG;
488
-
489
- ?>
490
- <form action="index2.php" method="post" name="adminForm">
491
- <table class="adminlist">
492
- <tr>
493
- <th width="5">#</th>
494
- <th width="5">
495
- <input type="checkbox" name="toggle" value="" onClick="checkAll(<?php echo count( $files ); ?>);" />
496
- </th>
497
- <th width="33%" class="title">
498
- <?php echo LM_COL_FILENAME ?>
499
- </th>
500
- <th align="left" width="10%">
501
- <?php echo LM_COL_DOWNLOAD ?>
502
- </th>
503
- <th align="left" width="10%">
504
- <?php echo LM_COL_SIZE ?>
505
- </th>
506
- <th align="left" width="43%">
507
- <?php echo LM_COL_DATE ?>
508
- </th>
509
- </tr>
510
- <?php
511
- $k = 0;
512
- for ($i=0; $i <= (count( $files )-1); $i++) {
513
- $date = date ("D jS M Y H:i:s (\G\M\T O)", filemtime($path.'/'.$files[$i]));
514
- ?>
515
- <tr class="<?php echo "row$k"; ?>">
516
- <td>
517
- <?php echo $i+1; ?>
518
- </td>
519
- <td align="center">
520
- <input type="checkbox" id="cb<?php echo $i ?>" name="cid[<?php echo $i?>]" value="<?php echo $i ?>" onclick="isChecked(this.checked);" />
521
- <input type="hidden" name="files[<?php echo $i?>]" value="<?php echo $files[$i] ?>" onclick="isChecked(this.checked);" />
522
- </td>
523
- <td >
524
- <a target='_blank' href="<?php echo "index2.php?option=com_cloner&task=download&file=".'/'.urlencode($files[$i]); ?>"><?php echo $files[$i]; ?></a><input type="hidden" id="f<?php echo $i ?>" name="f<?php echo $i ?>" value="<?php echo $files[$i]; ?>" >
525
- </td>
526
- <td align="left">
527
- <a target='_blank' href="<?php echo "index2.php?option=com_cloner&task=download&file=".'/'.urlencode($files[$i]); ?>"><img src="images/filesave.png" border="0" alt="<?php echo LM_DOWNLOAD_TITLE ?>" title="<?php echo LM_DOWNLOAD_TITLE ?>"></a></td >
528
- <!--<td align="left">
529
- <?php
530
-
531
- $userfile = $_CONFIG['baDownloadPath']."/".$files[$i];
532
- $localfile = $_CONFIG['clonerPath']."/".$files[$i];
533
- if(@file_exists($userfile))
534
- echo "<a href=\"index2.php?option=com_cloner&task=action&action=delete&file=$files[$i]\">
535
- <img border='0' src='images/tick.png'></a>";
536
- else
537
- echo "<a href=\"index2.php?option=com_cloner&task=action&action=copy&file=$files[$i]\">
538
- <img border='0' src='images/publish_x.png'></a>";
539
- ?>
540
- </td>-->
541
- <td align="left">
542
- <?php echo $sizes[$i]; ?>
543
- </td >
544
- <td align="left">
545
- <?php echo $date; ?>
546
- </td>
547
- </tr>
548
- <?php
549
- $k = 1 - $k;
550
- }
551
- ?>
552
- </table>
553
-
554
- <input type="hidden" name="option" value="com_cloner" />
555
- <input type="hidden" name="task" value="" />
556
- <input type="hidden" name="boxchecked" value="0" />
557
- <input type="hidden" name="hidemainmenu" value="0" />
558
- </form>
559
- <br/>&nbsp;
560
- <?php
561
- }
562
-
563
- function Config($option){
564
- global $config_file,$_CONFIG, $lang_array, $database, $mosConfig_db;
565
- ?>
566
- <form name='adminForm' action='index2.php' method='POST'>
567
- <table class='adminform'>
568
- <tr><th colspan='2'>
569
- <?php echo LM_CONFIG_EDIT?> <?php echo $config_file?>
570
- </th></tr>
571
- </table>
572
- <?php
573
- $tabs = new mosTabs(1);
574
- $tabs->startTab(LM_TAB_GENERAL,"config-general-tab");
575
- ?>
576
- <table class='adminform'>
577
-
578
-
579
- <tr>
580
- <th colspan='2'>
581
- <?php echo LM_CONFIG_BSETTINGS?>
582
- </th>
583
- </tr>
584
-
585
- <tr>
586
- <td>
587
- <?php echo LM_CONFIG_UBPATH?>
588
- </td>
589
- <td>
590
- <input type=text size=50 name='backup_path' value='<?php echo $_CONFIG[backup_path]?>'>
591
- <br /><?php echo LM_CONFIG_UBPATH_SUB?>
592
- </td>
593
- </tr>
594
-
595
- <tr>
596
- <td width='250'>
597
- <?php echo LM_CONFIG_BPATH?>
598
- </td>
599
- <td>
600
- <input type=text size=50 name='clonerPath' value='<?php echo $_CONFIG[clonerPath]?>'>
601
- <br /><?php echo LM_CONFIG_BPATH_SUB?>
602
- </td>
603
- </tr>
604
-
605
-
606
- <tr>
607
- <th colspan='2'>
608
- <?php echo LM_CONFIG_BSETTINGS_OPTIONS?>
609
- </th>
610
- </tr>
611
-
612
- <tr>
613
- <td>
614
- <?php echo LM_CONFIG_MANUAL_BACKUP;?>
615
- </td>
616
- <td>
617
- <?php echo LM_YES?> <input type=radio size=50 value=1 name='backup_refresh' <?php if($_CONFIG[backup_refresh]==1) echo 'checked';?>>
618
- <?php echo LM_NO?> <input type=radio size=50 value=0 name='backup_refresh' <?php if($_CONFIG[backup_refresh]==0) echo 'checked';?>>
619
- <br><small><?php echo LM_CONFIG_MANUAL_BACKUP_SUB?></small>
620
- </td>
621
- </tr>
622
-
623
- <tr>
624
- <td>
625
- <?php echo LM_CRON_COMPRESS?>
626
- </td>
627
- <td>
628
- <?php echo LM_YES?> <input type=radio size=50 value=1 name='backup_compress' <?php if($_CONFIG[backup_compress]==1) echo 'checked';?>>
629
- <?php echo LM_NO?> <input type=radio size=50 value=0 name='backup_compress' <?php if($_CONFIG[backup_compress]==0) echo 'checked';?>>
630
- <br /> <small>set it to Yes in order to compress the files into smaller backups</small>
631
- </td>
632
- </tr>
633
-
634
- <tr>
635
- <td>
636
- <?php echo LM_CRON_DB_BACKUP?>
637
- </td>
638
- <td>
639
- Yes <input type=radio size=50 value=1 name='enable_db_backup' <?php if($_CONFIG[enable_db_backup]==1) echo 'checked';?>>
640
- No <input type=radio size=50 value=0 name='enable_db_backup' <?php if($_CONFIG[enable_db_backup]==0) echo 'checked';?>>
641
- <br />
642
- <?php echo LM_CRON_DB_BACKUP_SUB?>
643
- </td>
644
- </tr>
645
-
646
- <tr>
647
- <td>
648
- <?php echo LM_CONFIG_SYSTEM_MBACKUP?>
649
- </td>
650
- <td>
651
- Yes <input type=radio size=50 value=1 name='add_backups_dir' <?php if($_CONFIG[add_backups_dir]==1) echo 'checked';?>>
652
- No <input type=radio size=50 value=0 name='add_backups_dir' <?php if($_CONFIG[add_backups_dir]==0) echo 'checked';?>>
653
- <br />
654
- <?php echo LM_CONFIG_SYSTEM_MBACKUP_SUB?>
655
- </td>
656
- </tr>
657
-
658
- <tr>
659
- <th colspan='2'>
660
- <?php echo LM_CONFIG_BSETTINGS_SERVER?>
661
- </th>
662
- </tr>
663
-
664
-
665
- <tr >
666
- <td>
667
- <?php echo LM_CONFIG_MEM?>
668
- </td>
669
- <td align='left'>
670
- <table width='85%' cellpadding='0' cellspacing='2' border='1'>
671
- <tr bgcolor='#efefef'><td valign='middle'>
672
- <?php echo LM_ACTIVE;?> <input type=checkbox value=1 name='mem' <?php if($_CONFIG[mem]==1) echo 'checked';?>>
673
- </td><td align='left'>
674
-
675
- <table width='100%' cellpadding='0' cellspacing='0'>
676
- <tr><td>
677
- <?php echo LM_TAR_PATH;?> <br /><input size='50' type=text name=tarpath value='<?php echo $_CONFIG[tarpath]?>'><br />
678
- <?php echo LM_TAR_PATH_SUB;?>
679
- </td></tr>
680
-
681
- </table>
682
-
683
- </td></tr>
684
-
685
- <tr bgcolor='#dedede'><td>
686
- <?php echo LM_ACTIVE?> <input type=checkbox value=1 name='sql_mem' <?php if($_CONFIG[sql_mem]==1) echo 'checked';?>>
687
- </td><td align='left'>
688
- <?php echo LM_MYSQLDUMP_PATH;?> <br /><input type=text size='50' name='sqldump' value='<?php echo $_CONFIG[sqldump]?>'>
689
-
690
- </td></tr>
691
- </table>
692
-
693
- <?php echo LM_CONFIG_MEM_SUB?>
694
-
695
- </td>
696
- </tr>
697
-
698
- <tr>
699
- <th colspan='2'>
700
- <?php echo "License Management"?>
701
- </th>
702
- </tr>
703
- <tr>
704
- <td>
705
- <?php echo "License Code - optional*
706
- <br />*only for support purposes"?>
707
- </td>
708
- <td>
709
- <textarea cols=40 rows='7' name='license_code' ><?php echo $_CONFIG[license_code]?></textarea>
710
- <br />Copy/Paste the license code from <a target='_blank' href='http://www.xcloner.com/'>XCloner.com Members area</a>
711
- </td>
712
- </tr>
713
-
714
-
715
- </table>
716
- <?php
717
- $tabs->endTab();
718
- $tabs->startTab(LM_TAB_MYSQL,"config-mysql-tab");
719
- ?>
720
- <table class='adminform'>
721
-
722
-
723
- <tr>
724
- <th colspan='2'>
725
- <?php echo LM_CONFIG_MYSQL?>
726
- </th>
727
- </tr>
728
-
729
- <tr>
730
- <td>
731
- <?php echo LM_CONFIG_MYSQLH?>
732
- </td>
733
- <td>
734
- <input type=text size=50 name='mysql_host' value='<?php echo $_CONFIG[mysql_host]?>'>
735
- <br /><?php echo LM_CONFIG_MYSQLH_SUB?>
736
- </td>
737
- </tr>
738
-
739
- <tr>
740
- <td>
741
- <?php echo LM_CONFIG_MYSQLU?>
742
- </td>
743
- <td>
744
- <input type=text size=50 name='mysql_user' value='<?php echo $_CONFIG[mysql_user]?>'>
745
- <br /><?php echo LM_CONFIG_MYSQLU_SUB?>
746
- </td>
747
- </tr>
748
-
749
- <tr>
750
- <td>
751
- <?php echo LM_CONFIG_MYSQLP?>
752
- </td>
753
- <td>
754
- <input type=text size=50 name='mysql_pass' value='<?php echo $_CONFIG[mysql_pass]?>'>
755
- <br /><?php echo LM_CONFIG_MYSQLP_SUB?>
756
- </td>
757
- </tr>
758
-
759
- <tr>
760
- <td>
761
- <?php echo LM_CONFIG_MYSQLD?>
762
- </td>
763
- <td>
764
- <input type=text size=50 name='mysql_database' value='<?php echo $_CONFIG[mysql_database]?>'>
765
- <br /><?php echo LM_CONFIG_MYSQLD_SUB?>
766
- </td>
767
- </tr>
768
-
769
- <tr>
770
- <td width='200'>
771
- <?php echo LM_CONFIG_SYSTEM_MDATABASES?>
772
- </td>
773
- <td>
774
- <?php echo LM_YES?> <input type=radio name='system_mdatabases' value='0' <?php if(abs($_CONFIG[system_mdatabases])==0) echo "checked";?>>
775
- <?php echo LM_NO?> <input type=radio name='system_mdatabases' value='1' <?php if(abs($_CONFIG[system_mdatabases])==1) echo "checked";?>>
776
- <br>
777
-
778
- <br /><?php echo LM_CONFIG_SYSTEM_MDATABASES_SUB?>
779
- </td>
780
- </tr>
781
-
782
- </table>
783
- <?php
784
- $tabs->endTab();
785
- $tabs->startTab(LM_TAB_AUTH,"config-mysql-tab");
786
- ?>
787
- <table class='adminform'>
788
-
789
-
790
- <tr>
791
- <th colspan='2'>
792
- <?php echo LM_CONFIG_AUTH?>
793
- </th>
794
- </tr>
795
-
796
- <tr>
797
- <td>
798
- <?php echo LM_CONFIG_AUTH_USER?>
799
- </td>
800
- <td>
801
- <input type=text size=30 name='jcuser' value='<?php echo $_CONFIG[jcuser]?>'>
802
- <br /><?php echo LM_CONFIG_AUTH_USER_SUB?>
803
- </td>
804
- </tr>
805
-
806
- <tr>
807
- <td>
808
- <?php echo LM_CONFIG_AUTH_PASS?>
809
- </td>
810
- <td>
811
- <input type=text size=30 name='jcpass' value=''> <?php if($_CONFIG['jcpass'] == md5('admin')) echo "<font color=red>please change the default password 'admin'</font>"?>
812
- <br /><?php echo LM_CONFIG_AUTH_PASS_SUB?>
813
- </td>
814
- </tr>
815
-
816
-
817
- </table>
818
- <?
819
- $tabs->endTab();
820
- $tabs->startTab(LM_TAB_SYSTEM,"config-system-tab");
821
- ?>
822
- <table class='adminform'>
823
- <tr>
824
- <th colspan='2'>
825
- <?php echo LM_CONFIG_DISPLAY?>
826
- </th>
827
- </tr>
828
-
829
- <tr>
830
- <td width='200'>
831
- <?php echo LM_CONFIG_SYSTEM_LANG?>
832
- </td>
833
- <td>
834
- <select name='select_lang'>
835
- <option value=''><?php echo LM_CONFIG_SYSTEM_LANG_DEFAULT;?></option>
836
- <?php
837
- foreach($lang_array as $value)
838
- if($_CONFIG['select_lang'] == $value)
839
- echo "<option value='$value' selected>$value</option>\n";
840
- else
841
- echo "<option value='$value'>$value</option>\n";
842
- ?>
843
- </select>
844
- <br>
845
- <br /><?php echo LM_CONFIG_SYSTEM_LANG_SUB?>
846
- </td>
847
- </tr>
848
-
849
-
850
- <!--<tr>
851
- <td width='200'>
852
- <?php echo LM_CONFIG_SYSTEM_DOWNLOAD?>
853
- </td>
854
- <td>
855
- <?php echo LM_YES?> <input type=radio name='system_dlink' value='1' <?php if(abs($_CONFIG[system_dlink])==1) echo "checked";?>>
856
- <?php echo LM_NO?> <input type=radio name='system_dlink' value='0' <?php if(abs($_CONFIG[system_dlink])==0) echo "checked";?>>
857
- <br>
858
-
859
- <br /><?php echo LM_CONFIG_SYSTEM_DOWNLOAD_SUB?>
860
- </td>
861
- </tr>-->
862
-
863
-
864
- <tr>
865
- <th colspan='2'>
866
- <?php echo LM_CONFIG_SYSTEM?>
867
- </th>
868
- </tr>
869
-
870
- <tr>
871
- <td width='200'>
872
- <?php echo LM_CONFIG_SYSTEM_FTP?>
873
- </td>
874
- <td>
875
- Direct <input type=radio name='system_ftptransfer' value='0' <?php if(abs($_CONFIG[system_ftptransfer])==0) echo "checked";?>>
876
- Passive <input type=radio name='system_ftptransfer' value='1' <?php if(abs($_CONFIG[system_ftptransfer])==1) echo "checked";?>> <br>
877
-
878
- <br /><?php echo LM_CONFIG_SYSTEM_FTP_SUB?>
879
- </td>
880
- </tr>
881
- <tr>
882
- <td>
883
- <?php echo LM_FTP_TRANSFER_MORE?>
884
- </td>
885
- <td>
886
- Normal <input type=radio size=50 value=0 name='secure_ftp' <?php if($_CONFIG[secure_ftp]==0) echo 'checked';?>>
887
- Secure <input type=radio size=50 value=1 name='secure_ftp' <?php if($_CONFIG[secure_ftp]==1) echo 'checked';?>>
888
- </td>
889
- </tr>
890
-
891
- <th colspan='2'>
892
- <?php echo LM_CONFIG_MANUAL?>
893
- </th>
894
- </tr>
895
-
896
- <tr>
897
- <td>
898
- <?php echo LM_CONFIG_MANUAL_FILES;?>
899
- </td>
900
- <td>
901
- <input type=text size=20 name='backup_refresh_number' value=<?php echo $_CONFIG[backup_refresh_number];?>>
902
-
903
- </td>
904
- </tr>
905
-
906
- <tr>
907
- <td>
908
- <?php echo LM_CONFIG_MANUAL_REFRESH;?>
909
- </td>
910
- <td>
911
- <input type=text size=20 name='refresh_time' value=<?php echo $_CONFIG[refresh_time];?>> seconds
912
-
913
- </td>
914
- </tr>
915
-
916
- </table>
917
- <?php
918
- $tabs->endTab();
919
- $tabs->startTab(LM_TAB_CRON,"config-cron-tab");
920
- ?>
921
- <table class='adminform'>
922
- <tr>
923
- <th colspan='2'>
924
- <?php echo LM_CRON_SETTINGS_M?> - all configs are saved in configs/
925
- </th>
926
- </tr>
927
-
928
- <tr>
929
- <td>
930
- <?php echo LM_CRON_MCRON?>
931
- </td>
932
- <td>
933
- <input type=text size=30 value="<?php echo $_CONFIG[cron_save_as]?>" name='cron_save_as' >.php <br />
934
- <?php echo LM_CRON_MCRON_SUB?>
935
- </td>
936
- </tr>
937
-
938
- <tr>
939
- <td>
940
- <?php echo LM_CRON_MCRON_AVAIL?>
941
- </td>
942
- <td>
943
- <?php
944
-
945
- if ($handle = @opendir($_CONFIG['multiple_config_dir'])) {
946
-
947
- while (false !== ($file = readdir($handle))) {
948
- if( ($file!=".") && ($file!="..") &&($file!="") && (strstr($file, '.php'))){
949
- $fcron = "cloner.cron.php?config=$file";
950
-
951
- echo "<b>$fcron</b>";
952
-
953
- echo " - <a href='$fcron' target='_blank'>execute cron</a>";
954
-
955
- echo " | <a href='index2.php?option=com_cloner&task=cron_delete&fconfig=$file'>delete config</a>";
956
-
957
- echo "\n<br />";
958
- }
959
- }
960
-
961
- closedir($handle);
962
- }
963
- ?>
964
- </td>
965
- </tr>
966
-
967
- <tr>
968
- <th colspan='2'>
969
- <?php echo LM_CRON_SETTINGS?>
970
- </th>
971
- </tr>
972
-
973
- <tr>
974
- <td>
975
- <?php echo LM_CRON_SEMAIL?>
976
- </td>
977
- <td>
978
- <input type=text size=30 value="<?php echo $_CONFIG[cron_logemail]?>" name='cron_logemail' > <br />
979
- <?php echo LM_CRON_SEMAIL_SUB?>
980
- </td>
981
- </tr>
982
-
983
- <tr>
984
- <td width='200'>
985
- <?php echo LM_CRON_MODE?>
986
- </td>
987
- <td>
988
- <input type=radio size=50 value=0 name='cron_send' <?php if($_CONFIG[cron_send]==0) echo 'checked';?>>
989
- <?php echo LM_CONFIG_CRON_LOCAL?><br />
990
- <input type=radio size=50 value=1 name='cron_send' <?php if($_CONFIG[cron_send]==1) echo 'checked';?>>
991
- <?php echo LM_CONFIG_CRON_REMOTE?><br />
992
- <input type=radio size=50 value=2 name='cron_send' <?php if($_CONFIG[cron_send]==2) echo 'checked';?>>
993
- <?php echo LM_CONFIG_CRON_EMAIL?> <br />
994
- <?php echo LM_CRON_MODE_INFO?>
995
- </td>
996
- </tr>
997
- <tr>
998
- <td>
999
- <?php echo LM_CRON_TYPE?>
1000
- </td>
1001
- <td>
1002
- <input type=radio size=50 value=0 name='cron_btype' <?php if($_CONFIG[cron_btype]==0) echo 'checked';?>>
1003
- <?php echo LM_CONFIG_CRON_FULL?> <br />
1004
- <input type=radio size=50 value=1 name='cron_btype' <?php if($_CONFIG[cron_btype]==1) echo 'checked';?>>
1005
- <?php echo LM_CONFIG_CRON_FILES?><br />
1006
- <input type=radio size=50 value=2 name='cron_btype' <?php if($_CONFIG[cron_btype]==2) echo 'checked';?>>
1007
- <?php echo LM_CONFIG_CRON_DATABASE?> <br />
1008
- <?php echo LM_CRON_TYPE_INFO?>
1009
- </td>
1010
- </tr>
1011
-
1012
- <tr>
1013
- <td>
1014
- <?php echo LM_CRON_BNAME?>
1015
- </td>
1016
- <td>
1017
- <input type=text size=50 value="<?php echo $_CONFIG[cron_bname]?>" name='cron_bname' > <br />
1018
- <?php echo LM_CRON_BNAME_SUB?>
1019
- </td>
1020
- </tr>
1021
-
1022
-
1023
- <tr>
1024
- <td>
1025
- <?php echo LM_CRON_IP?>
1026
- </td>
1027
- <td>
1028
- <textarea type=text size=50 name='cron_ip' cols='30' rows='5'><?php echo $_CONFIG[cron_ip]?></textarea> <br />
1029
- <?php echo LM_CRON_IP_SUB?>
1030
- </td>
1031
- </tr>
1032
-
1033
- </table>
1034
- <table class='adminform'>
1035
- <tr>
1036
- <th colspan='2'>
1037
- <?php echo LM_CRON_FTP_DETAILS?>
1038
- </th>
1039
- </tr>
1040
- </tr>
1041
- <tr>
1042
- <td width='200'>
1043
- <?php echo LM_CRON_FTP_SERVER?>
1044
- </td>
1045
- <td>
1046
- <input type=text size=50 name='cron_ftp_server' value='<?php echo $_CONFIG[cron_ftp_server]?>'>
1047
- </td>
1048
- </tr>
1049
- <tr>
1050
- <td>
1051
- <?php echo LM_CRON_FTP_USER?>
1052
- </td>
1053
- <td>
1054
- <input type=text size=50 name='cron_ftp_user' value='<?php echo $_CONFIG[cron_ftp_user]?>'>
1055
- </td>
1056
- </tr>
1057
- <tr>
1058
- <td>
1059
- <?php echo LM_CRON_FTP_PASS?>
1060
- </td>
1061
- <td>
1062
- <input type=text size=50 name='cron_ftp_pass' value='<?php echo $_CONFIG[cron_ftp_pass]?>'>
1063
- </td>
1064
- </tr>
1065
- <tr>
1066
- <td>
1067
- <?php echo LM_CRON_FTP_PATH?>
1068
- </td>
1069
- <td>
1070
- <input type=text size=50 name='cron_ftp_path' value='<?php echo $_CONFIG[cron_ftp_path]?>'>
1071
- </td>
1072
- </tr>
1073
- <tr>
1074
- <td>
1075
- <?php echo LM_CRON_FTP_DELB?>
1076
- </td>
1077
- <td>
1078
- <input type=checkbox name='cron_ftp_delb' <?php if($_CONFIG[cron_ftp_delb]==1) echo "checked";?> value='1'>
1079
- </td>
1080
- </tr>
1081
- </table>
1082
- <table class='adminform'>
1083
- <tr>
1084
- <th colspan='2'>
1085
- <?php echo LM_CRON_EMAIL_DETAILS?>
1086
- </th>
1087
- </tr>
1088
- </tr>
1089
- <tr>
1090
- <td width='200'>
1091
- <?php echo LM_CRON_EMAIL_ACCOUNT?>
1092
- </td>
1093
- <td>
1094
- <input type=text size=50 name='cron_email_address' value='<?php echo $_CONFIG[cron_email_address]?>'>
1095
- </td>
1096
- </tr>
1097
-
1098
-
1099
- </table>
1100
-
1101
- <table class='adminform'>
1102
- <tr>
1103
- <th colspan='2'>
1104
- <?php echo LM_CRON_MYSQL_DETAILS?>
1105
- </th>
1106
- </tr>
1107
- </tr>
1108
- <tr bgcolor='#ffffff'>
1109
- <td width='200'>
1110
- <?php echo LM_CRON_MYSQL_DROP?>
1111
- </td>
1112
- <td>
1113
- <input type=checkbox name='cron_sql_drop' value='1' <?php if($_CONFIG[cron_sql_drop]) echo "checked";?> >
1114
- </td>
1115
- </tr>
1116
-
1117
- <?php
1118
- if((abs($_CONFIG[system_mdatabases])==0) && ($_CONFIG[enable_db_backup]==1)){
1119
- ?>
1120
- <tr><td valign='top'>
1121
- <?php echo LM_DATABASE_INCLUDE_DATABASES?>
1122
- </td><td>
1123
- <select name='databases_incl[]' MULTIPLE SIZE=5>
1124
- <?php
1125
-
1126
- $curent_dbs = explode(",", $_CONFIG['databases_incl_list']);
1127
-
1128
- $query = @mysql_query("SHOW databases");
1129
- while($row = @mysql_fetch_array($query)){
1130
-
1131
- $table = $row[0];
1132
-
1133
- if($table != $_CONFIG['mysql_database'])
1134
-
1135
- if(in_array($table, $curent_dbs)){
1136
-
1137
- echo "<option value='".$table."' selected>$table</option>";
1138
-
1139
- }else{
1140
-
1141
- echo "<option value='".$table."'>$table</option>";
1142
-
1143
- }
1144
- }
1145
- ?>
1146
- </select><br />
1147
- <?php echo LM_DATABASE_INCLUDE_DATABASES_SUB?>
1148
- </td></tr>
1149
- <?php
1150
- }
1151
- ?>
1152
-
1153
- <tr><th colspan=2>
1154
- <?php echo LM_CRON_DELETE_FILES?>
1155
- </th></tr>
1156
- <tr>
1157
- <td width='200'>
1158
- <?php echo LM_CRON_DELETE_FILES_SUB_ACTIVE?>
1159
- </td>
1160
- <td>
1161
- <input type=checkbox name='cron_file_delete_act' <?php if ($_CONFIG['cron_file_delete_act'] == 1) echo 'checked';?> value='1'>
1162
- </td>
1163
- </tr>
1164
- <tr>
1165
- <td width='200'>
1166
- <?php echo LM_CRON_DELETE_FILES_SUB?>
1167
- </td>
1168
- <td>
1169
- <input size=5 name='cron_file_delete' value='<?php echo $_CONFIG[cron_file_delete]?>'> days:
1170
- </td>
1171
- </tr>
1172
- </table>
1173
-
1174
- <table class='adminform'>
1175
- <tr>
1176
- <th colspan='2'>
1177
- <?php echo LM_CRON_EXCLUDE?>
1178
- </th>
1179
- </tr>
1180
- </tr>
1181
- <tr>
1182
- <td width='200'>
1183
- <?php echo LM_CRON_EXCLUDE_DIR?>
1184
- </td>
1185
- <td>
1186
- <textarea cols=50 rows=5 name='cron_exclude'><?php echo $_CONFIG[cron_exclude]?></textarea>
1187
- </td>
1188
- </tr>
1189
-
1190
- </table>
1191
- <?php
1192
- $tabs->endTab();
1193
- $tabs->startTab(LM_TAB_INFO,"config-info-tab");
1194
- ?>
1195
- <table class='adminform'>
1196
- <tr>
1197
- <th colspan='2'>
1198
- <?php echo LM_CONFIG_INFO_PHP?>
1199
- </th>
1200
- </tr>
1201
-
1202
- <tr>
1203
- <td width='200'>
1204
- <?php echo LM_CONFIG_INFO_T_SAFEMODE?>
1205
- </td>
1206
- <td>
1207
- <b><?php $val = (ini_get('safe_mode') != "")? ini_get('safe_mode'):"Off";
1208
- echo HTML_cloner::get_color($val, 'On');
1209
- ?></b>
1210
- <br />
1211
- <?php echo LM_CONFIG_INFO_SAFEMODE?>
1212
- </td>
1213
- </tr>
1214
-
1215
- <tr>
1216
- <td width='200'>
1217
- <?php echo LM_CONFIG_INFO_T_MTIME?>
1218
- </td>
1219
- <td>
1220
- <b><?php echo (ini_get('max_execution_time') != "")? ini_get('max_execution_time'):"no value";
1221
-
1222
- ?></b>
1223
- <br />
1224
- <?php echo LM_CONFIG_INFO_TIME?>
1225
- </td>
1226
- </tr>
1227
-
1228
- <tr>
1229
- <td width='200'>
1230
- <?php echo LM_CONFIG_INFO_T_MEML?>
1231
- </td>
1232
- <td>
1233
- <b><?php echo (ini_get('memory_limit') != "")? ini_get('memory_limit'):"no value";?> </b>
1234
- <br />
1235
- <?php echo LM_CONFIG_INFO_MEMORY?>
1236
- </td>
1237
- </tr>
1238
-
1239
- <tr>
1240
- <td width='200'>
1241
- <?php echo LM_CONFIG_INFO_T_BDIR?>
1242
- </td>
1243
- <td>
1244
- <b><?php $val = (ini_get('open_basedir') != "")? ini_get('open_basedir'):"no value";
1245
- echo HTML_cloner::get_color($val, '/');
1246
- ?> </b>
1247
- <br />
1248
- <?php echo LM_CONFIG_INFO_BASEDIR?>
1249
- </td>
1250
- </tr>
1251
-
1252
- <tr>
1253
- <td width='200'>
1254
- <?php echo LM_CONFIG_INFO_T_EXEC?>
1255
- </td>
1256
- <td>
1257
- <b><?php
1258
- $out = @exec("ls -al");
1259
- $val = ($out != "")? "ENABLED":"<font color='red'>DISABLED</font>";
1260
- echo HTML_cloner::get_color($val, 'DISABLED');
1261
- ?> </b>
1262
- <br />
1263
- <?php echo LM_CONFIG_INFO_EXEC?>
1264
- </td>
1265
- </tr>
1266
-
1267
- <tr>
1268
- <th colspan='2'>
1269
- <?php echo LM_CONFIG_INFO_PATHS?>
1270
- </td>
1271
- <td>
1272
- </tr>
1273
-
1274
- <tr>
1275
- <td width='200'>
1276
- <?php echo LM_CONFIG_INFO_ROOT_BPATH_TMP?>
1277
- </td>
1278
- <td>
1279
- <b><?php $tmp_dir = $_CONFIG['backup_path']."/administrator/backups";
1280
- echo (@is_writeable( $tmp_dir ))? $tmp_dir . " is <font color=green>writeable</font>":$tmp_dir. " <font color=red>incorrect or unreadable</font>";?></b>
1281
- <br />
1282
- <?php echo LM_CONFIG_INFO_ROOT_PATH_TMP_SUB?>
1283
- </td>
1284
- </tr>
1285
-
1286
- <tr>
1287
- <td width='200'>
1288
- <?php echo LM_CONFIG_INFO_ROOT_BPATH?>
1289
- </td>
1290
- <td>
1291
- <b><?php echo (@is_readable($_CONFIG['backup_path']) )? $_CONFIG['backup_path'] . " is <font color=green>readable</font>":$_CONFIG['backup_path']. " <font color=red>incorrect or unreadable</font>";?></b>
1292
- <br />
1293
- <?php echo LM_CONFIG_INFO_ROOT_PATH_SUB?>
1294
- </td>
1295
- </tr>
1296
-
1297
-
1298
- <tr>
1299
- <td width='200'>
1300
- <?php echo LM_CONFIG_INFO_T_BPATH?>
1301
- </td>
1302
- <td>
1303
- <b><?php echo (@is_writeable($_CONFIG['clonerPath']) )? $_CONFIG['clonerPath'] . " is <font color=green>writeable</font>":$_CONFIG['clonerPath']. " <font color=red>unwriteable</font>";?></b>
1304
- <br />
1305
- <?php echo LM_CONFIG_INFO_BPATH?>
1306
- </td>
1307
- </tr>
1308
-
1309
-
1310
- <tr>
1311
- <td width='200'>
1312
- <?php echo LM_CONFIG_INFO_T_TAR?>
1313
- </td>
1314
- <td>
1315
- <b><?php
1316
- $info_tar_path = explode(" ", @exec("whereis tar"));
1317
- echo ($info_tar_path['1'] != "")? $info_tar_path['1']:"unable to determine";
1318
- ?> </b>
1319
- <br />
1320
- <?php echo LM_CONFIG_INFO_TAR?>
1321
- </td>
1322
- </tr>
1323
-
1324
- <!--<tr>
1325
- <td width='200'>
1326
- <?php echo LM_CONFIG_INFO_T_ZIP?>
1327
- </td>
1328
- <td>
1329
- <b><?php
1330
- $info_zip_path = explode(" ", @exec("whereis zip"));
1331
- echo ($info_zip_path['1'] != "")? $info_zip_path['1']:"unable to determine";
1332
- ?> </b>
1333
- <br />
1334
- <?php echo LM_CONFIG_INFO_ZIP?>
1335
- </td>
1336
- </tr>-->
1337
-
1338
- <tr>
1339
- <td width='200'>
1340
- <?php echo LM_CONFIG_INFO_T_MSQL?>
1341
- </td>
1342
- <td>
1343
- <b><?php
1344
- $info_msql_path = explode(" ", @exec("whereis mysqldump"));
1345
- echo ($info_msql_path['1'] != "")? $info_msql_path['1']:"unable to determine";
1346
- ?> </b>
1347
- <br />
1348
- <?php echo LM_CONFIG_INFO_MSQL?>
1349
- </td>
1350
- </tr>
1351
-
1352
-
1353
- </table>
1354
- <?php
1355
- $tabs->endTab();
1356
- $tabs->endPane();
1357
- ?>
1358
- <input type="hidden" name="option" value="com_cloner" />
1359
- <input type="hidden" name="task" value="config" />
1360
- <input type="hidden" name='action' value='save'>
1361
- </form>
1362
-
1363
- <?php
1364
- }
1365
-
1366
- function get_color($val, $comp){
1367
-
1368
- if(!stristr($val, $comp))
1369
- echo "<span style='color:green'>$val</span>";
1370
- else
1371
- echo "<span style='color:red'>$val</span>";
1372
-
1373
- }
1374
-
1375
- function TransferForm($option, $files){
1376
- global $baDownloadPath, $mosConfig_absolute_path, $clonerPath, $task;
1377
-
1378
- ?>
1379
- <form action="index2.php" method="GET" name="adminForm">
1380
- <script language="javascript" type="text/javascript">
1381
-
1382
-
1383
- function submitbutton(pressbutton) {
1384
- var form = document.adminForm;
1385
- if (pressbutton == 'cancel') {
1386
- submitform( pressbutton );
1387
- return;
1388
- }
1389
-
1390
- submitform( pressbutton );
1391
-
1392
- }
1393
-
1394
- function gotocontact( id ) {
1395
- var form = document.adminForm;
1396
- form.contact_id.value = id;
1397
- submitform( 'contact' );
1398
- }
1399
- </script>
1400
- <table class='adminform'>
1401
- <tr><td colspan='2'>
1402
- <b>Transfer <?php echo $file;?> details:</b>
1403
- <br /><b>Attempting to
1404
- <?php echo (($_REQUEST[task]=='move')||($_REQUEST[task2]=='move'))?'Move':'Clone';?> backup(s):</b><br /><?php echo implode("<br />",$files)?>
1405
-
1406
- </td></tr>
1407
- <tr><td colspan='2'><?php echo LM_CLONE_FORM_TOP?></td></tr>
1408
- <?php
1409
- if(($_REQUEST[task]=='move')||($_REQUEST[task2]=='move')){
1410
- }
1411
- else{
1412
-
1413
- ?>
1414
- <tr>
1415
- <td width='110'><b><?php echo LM_TRANSFER_URL?></b> </td>
1416
- <td><input type='text' size='30' name='ftp_url' value='<?php echo $_REQUEST[ftp_url]?>'></td>
1417
- </tr>
1418
- <tr>
1419
- <td colspan='2'><?php echo LM_TRANSFER_URL_SUB?></td>
1420
- </tr>
1421
- <?php } ?>
1422
- <tr>
1423
- <td width='110'><b><?php echo LM_TRANSFER_FTP_HOST?></b> </td>
1424
- <td><input type='text' size='30' name='ftp_server' value='<?php echo $_REQUEST[ftp_server]?>'></td>
1425
- </tr>
1426
- <tr>
1427
- <td colspan='2'><small><?php echo LM_TRANSFER_FTP_HOST_SUB?></small></td></tr>
1428
- <tr>
1429
- <td width='110'><b><?php echo LM_TRANSFER_FTP_USER?></b> </td>
1430
- <td><input type='text' size='30' name='ftp_user' value='<?php echo $_REQUEST[ftp_user]?>'></td>
1431
- </tr>
1432
- <tr>
1433
- <td colspan='2'><small><?php echo LM_TRANSFER_FTP_USER_SUB?></small></td></tr>
1434
- <tr>
1435
- <td width='110'><b><?php echo LM_TRANSFER_FTP_PASS?></b> </td>
1436
- <td><input type='text' size='30' name='ftp_pass' value='<?php echo $_REQUEST[ftp_pass]?>'></td>
1437
- </tr>
1438
- <tr>
1439
- <td colspan='2'><small><?php echo LM_TRANSFER_FTP_PASS_SUB?></small></td></tr>
1440
- <tr>
1441
- <td width='110'><b><?php echo LM_TRANSFER_FTP_DIR?></b> </td>
1442
- <td><input type='text' size='30' name='ftp_dir' value='<?php echo $_REQUEST[ftp_dir]?>'></td>
1443
- </tr>
1444
- <tr>
1445
- <td colspan='2'><small><?php echo LM_TRANSFER_FTP_DIR_SUB?></small></td></tr>
1446
-
1447
- <tr>
1448
- <td width='140'><b><?php echo LM_TRANSFER_FTP_INCT?></b> </td>
1449
- <td><input type='checkbox' name='ftp_inct' value='1' <?php if($_REQUEST[ftp_inct] ==1 ) echo "checked";?>></td>
1450
- </tr>
1451
- <tr>
1452
- <td colspan='2'><small><?php echo LM_TRANSFER_FTP_INCT_SUB?></small></td></tr>
1453
-
1454
- </table>
1455
- <input type="hidden" name="option" value="com_cloner" />
1456
- <input type="hidden" name="task" value="" />
1457
- <input type="hidden" name="task2" value="<?php if($_REQUEST[task2]!="") echo $_REQUEST[task2]; else echo $task;?>" />
1458
- <?php
1459
- foreach($files as $key=>$value)
1460
- {
1461
- ?>
1462
- <input type="hidden" name="files[<?php echo $key;?>]" value="<?php echo $value?>" />
1463
- <input type="hidden" name="cid[<?php echo $key;?>]" value="<?php echo $value?>" />
1464
- <?php
1465
- }
1466
- ?>
1467
- <input type="hidden" name="action" value="connect" />
1468
- <input type="hidden" name="hidemainmenu" value="0" />
1469
- </form>
1470
- <?php
1471
- }
1472
- function confirmBackups( &$folders, &$sizes, $path, $option ) {
1473
- // ----------------------------------------------------------
1474
- // Presentation of the confirmation screen
1475
- // ----------------------------------------------------------
1476
- global $baDownloadPath, $mosConfig_absolute_path, $clonerPath, $_CONFIG, $database, $mosConfig_db;
1477
-
1478
- ?>
1479
- <form action="index2.php" method="post" name="adminForm">
1480
- <?php
1481
- $tabs = new mosTabs(1);
1482
- #$tabs->startPane("BGeneratePane");
1483
- if($_CONFIG['enable_db_backup']){
1484
- $tabs->startTab(LM_TAB_G_DATABASE,"users-databse-options-tab");
1485
- ?>
1486
-
1487
-
1488
- <table class="adminform">
1489
- <tr>
1490
- <th colspan=2>
1491
- <b><?php echo LM_DATABASE_ARCHIVE; ?></b>
1492
- </th>
1493
- </tr>
1494
- <tr>
1495
- <td><input type="checkbox" id="dbbackup" name="dbbackup" checked value="1" />&nbsp;<?php echo LM_CONFIRM_DATABASE; ?></td>
1496
- </tr>
1497
- <tr>
1498
- <td><input type="checkbox" id="dbbackup_drop" name="dbbackup_drop" value="1" />&nbsp;<?php echo "Add DROP SYNTAX"; ?></td>
1499
- </tr>
1500
- <tr>
1501
- <td><?php echo "Mysql Compatibility"; ?> &nbsp;
1502
- <select name='dbbackup_comp'>
1503
- <option value=''>Default</option>
1504
- <option value='MYSQL40'>MYSQL40</option>
1505
- <option balue='MYSQL323'>MYSQL323</option>
1506
- </select>
1507
- </td>
1508
- </tr>
1509
- <tr><th colspan=2>
1510
- <?php echo LM_DATABASE_EXCLUDE_TABLES?>
1511
- </th></tr>
1512
- <tr><td>
1513
- <?php echo LM_DATABASE_CURRENT?> <b><?php echo $mosConfig_db;?></b><br />
1514
- <select name='excltables[]' MULTIPLE SIZE=15>
1515
- <?php
1516
-
1517
- $query = mysql_query("SHOW tables");
1518
- while($row = mysql_fetch_array($query)){
1519
-
1520
- echo "<option value='".$row[0]."'>$row[0]</option>";
1521
-
1522
- }
1523
- ?>
1524
- </select>
1525
- </td></tr>
1526
-
1527
- <?php
1528
- if(abs($_CONFIG[system_mdatabases])==0){
1529
- ?>
1530
-
1531
- <tr><th colspan=2>
1532
- <?php echo LM_DATABASE_INCLUDE_DATABASES?>
1533
- </th></tr>
1534
- <tr><td>
1535
- <select name='databases_incl[]' MULTIPLE SIZE=5>
1536
- <?php
1537
-
1538
- $query = mysql_query("SHOW databases");
1539
-
1540
- while($row = mysql_fetch_array($query)){
1541
-
1542
- echo "<option value='".$row[0]."'>$row[0]</option>";
1543
-
1544
- }
1545
-
1546
- ?>
1547
- </select><br />
1548
- <?php echo LM_DATABASE_INCLUDE_DATABASES_SUB?>
1549
- </td></tr>
1550
-
1551
- <?php
1552
- }
1553
- ?>
1554
-
1555
- </table>
1556
- <?php
1557
- $tabs->endTab();
1558
- }
1559
- $tabs->startTab(LM_TAB_G_FILES,"users-files-options-tab");
1560
- ?>
1561
- <table class="adminform">
1562
- <tr>
1563
- <th>
1564
- <b><?php echo LM_BACKUP_NAME; ?></b>
1565
- </th>
1566
- </tr>
1567
- <tr>
1568
- <td>
1569
- <input type=text name='bname' value='' size=40><br/>
1570
- <?php echo LM_BACKUP_NAME_SUB?>
1571
- </td>
1572
- </tr>
1573
-
1574
- <tr>
1575
- <td width="50%"><?php echo LM_CONFIRM_INSTRUCTIONS ?></td>
1576
- </tr>
1577
- </table>
1578
- <table class="adminlist" >
1579
- <tr>
1580
- <th width="200" valign='top' colspan='2' align='left'>
1581
-
1582
- <?php echo LM_COL_FOLDER ?>
1583
- <?php
1584
- {
1585
- ?>
1586
- <tr><td>
1587
- <link href="browser/filebrowser.css" rel="stylesheet" type="text/css">
1588
-
1589
- <script type="text/javascript" src="browser/xmlhttp.js"></script>
1590
-
1591
-
1592
- <div id="browser">
1593
- <?php require_once("browser/files_inpage.php"); ?>
1594
- </div>
1595
- <script>do_browser()</script>
1596
-
1597
- </td></tr>
1598
- <?php
1599
- }
1600
- ?>
1601
-
1602
- </table>
1603
- <?php
1604
- $tabs->endTab();
1605
- $tabs->endPane();
1606
- ?>
1607
- <input type="hidden" name="option" value="com_cloner" />
1608
- <input type="hidden" name="task" value="" />
1609
- <input type="hidden" name="boxchecked" value="0" />
1610
- <input type="hidden" name="hidemainmenu" value="0" />
1611
- </form>
1612
- <br/>&nbsp;
1613
- <?php
1614
- }
1615
-
1616
-
1617
- function generateBackup( $archiveName, $archiveSize, $originalSize, $d, $f, $databaseResult, $option ) {
1618
- // ----------------------------------------------------------
1619
- // Presentation of the final report screen
1620
- // ----------------------------------------------------------
1621
-
1622
-
1623
- ?>
1624
- <table cellpadding="4" cellspacing="0" border="0" width="100%">
1625
-
1626
- <table border="0" align="center" cellspacing="0" cellpadding="2" width="100%" class="adminform">
1627
- </tr>
1628
- <tr>
1629
- <td width="20%"><strong>&nbsp;</strong></td><td>&nbsp;</td>
1630
- </tr>
1631
- <tr>
1632
- <td><strong>&nbsp;<?php echo LM_ARCHIVE_NAME; ?></strong></td><td><?php echo $archiveName; ?></td>
1633
- </tr>
1634
- <tr>
1635
- <td><strong>&nbsp;<?php echo LM_NUMBER_FILES; ?></strong></td><td><?php echo $f; ?></td>
1636
- </tr>
1637
- <tr>
1638
- <td><strong>&nbsp;<?php echo LM_SIZE_ORIGINAL; ?></strong></td><td><?php echo $originalSize; ?></td>
1639
- </tr>
1640
- <tr>
1641
- <td><strong>&nbsp;<?php echo LM_SIZE_ARCHIVE; ?></strong></td><td><?php echo $archiveSize; ?></td>
1642
- </tr>
1643
- <tr>
1644
- <td><strong>&nbsp;<?php echo LM_DATABASE_ARCHIVE; ?></strong></td><td><?php echo $databaseResult; ?></td>
1645
- </tr>
1646
-
1647
-
1648
- <tr>
1649
- <td><strong>&nbsp;</strong></td><td>&nbsp;</td>
1650
- </tr>
1651
- </table>
1652
- <form action="index2.php" name="adminForm" method="post">
1653
- <input type=hidden name=files[1] value='<?php echo $archiveName?>'>
1654
- <input type=hidden name=cid[1] value='<?php echo $archiveName?>'>
1655
- <input type="hidden" name="option" value="<?php echo $option; ?>"/>
1656
- <input type="hidden" name="task" value=""/>
1657
- </form>
1658
- <?php
1659
- }
1660
-
1661
- function generateBackup_text( $archiveName, $archiveSize, $originalSize, $d, $f, $databaseResult, $option ) {
1662
- // ----------------------------------------------------------
1663
- // Presentation of the final report screen in text mode
1664
- // ----------------------------------------------------------
1665
-
1666
- ob_start();
1667
- ?>
1668
- <?php echo LM_ARCHIVE_NAME; ?>: <?php echo $archiveName."\r\n"; ?><br />
1669
- <?php echo LM_NUMBER_FILES; ?>: <?php echo $f."\r\n"; ?><br />
1670
- <?php echo LM_SIZE_ORIGINAL; ?>: <?php echo $originalSize."\r\n"; ?><br />
1671
- <?php echo LM_SIZE_ARCHIVE; ?>: <?php echo $archiveSize."\r\n"; ?><br />
1672
- <?php echo LM_DATABASE_ARCHIVE; ?>: <?php echo $databaseResult."\r\n"; ?><br />
1673
- ### END REPORT
1674
- <?php
1675
- $content = ob_get_contents();
1676
- ob_end_clean();
1677
-
1678
- return $content;
1679
- }
1680
-
1681
- function showHelp( $option ) {
1682
- ?>
1683
-
1684
- <table border="0" align="center" cellspacing="0" cellpadding="2" width="100%" class="adminform">
1685
- <tr><th>
1686
- <?php echo LM_CREDIT_TOP?>
1687
- </th></tr>
1688
- <tr>
1689
- <td>
1690
- <?php echo LM_CLONER_ABOUT?>
1691
- </td>
1692
- </tr>
1693
- </table>
1694
- <form action="index2.php" name="adminForm" method="post">
1695
- <input type="hidden" name="option" value="<?php echo $option; ?>"/>
1696
- <input type="hidden" name="task" value=""/>
1697
- </form>
1698
- <?php
1699
- }
1700
-
1701
- function Restore( $option ) {
1702
- // ----------------------------------------------------------
1703
- // Presentation of the Help Screem
1704
- // ----------------------------------------------------------
1705
-
1706
- ?>
1707
-
1708
-
1709
- <table border="0" align="center" cellspacing="0" cellpadding="2" width="100%" class="adminform">
1710
- <tr><th>
1711
- <?php echo LM_RESTORE_TOP?>
1712
- </th></tr>
1713
- <tr>
1714
- <td>
1715
- <?php echo LM_CLONER_RESTORE?>
1716
- </td>
1717
- </tr>
1718
- </table>
1719
- <form action="index2.php" name="adminForm" method="post">
1720
- <input type="hidden" name="option" value="<?php echo $option; ?>"/>
1721
- <input type="hidden" name="task" value=""/>
1722
- </form>
1723
- <?php
1724
- }
1725
- function showCredits( $option ) {
1726
- // ----------------------------------------------------------
1727
- // Presentation of the Help Screem
1728
- // ----------------------------------------------------------
1729
-
1730
- ?>
1731
-
1732
- <table border="0" align="center" cellspacing="0" cellpadding="2" width="100%" class="adminform">
1733
- <tr><th>
1734
- <?php echo LM_CREDIT_TOP?>
1735
- </th></tr>
1736
- <tr>
1737
- <td>
1738
-
1739
- <?echo LM_CLONER_CREDITS?>
1740
- </td>
1741
- </tr>
1742
- </table>
1743
- <form action="index2.php" name="adminForm" method="post">
1744
- <input type="hidden" name="option" value="<?php echo $option; ?>"/>
1745
- <input type="hidden" name="task" value=""/>
1746
- </form>
1747
- <?php
1748
- }
1749
-
1750
-
1751
- function Rename($files, $option){
1752
- global $_CONFIG;
1753
-
1754
- ?>
1755
- <form action="index2.php" method="post" name="adminForm">
1756
- <table border="0" align="center" cellspacing="0" cellpadding="2" width="100%" class="adminform">
1757
- <tr><th colspan='2'>
1758
- <?php echo LM_RENAME_TOP?>
1759
- </th></tr>
1760
- <?php
1761
-
1762
- foreach($files as $key=>$file){
1763
- echo "<tr>
1764
- <td >
1765
- ".LM_RENAME." <input type=hidden name='cfile[]' value='$file' ><b>$file</b>
1766
- </td>
1767
- <td align='left'>
1768
- ".LM_RENAME_TO." <input type=text name='dfile[]' value='$file' size=100>
1769
- </td>
1770
- </tr>";
1771
- }
1772
-
1773
- ?>
1774
- </table>
1775
- <form action="index2.php" name="adminForm" method="post">
1776
- <input type="hidden" name="option" value="<?php echo $option; ?>"/>
1777
- <input type="hidden" name="task" value="rename_save"/>
1778
- </form>
1779
-
1780
- <?php
1781
- }
1782
-
1783
- }
1784
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/admin.cloner.php DELETED
@@ -1,191 +0,0 @@
1
- <?php
2
- /**
3
- * XCloner
4
- * Oficial website: http://www.joomlaplug.com/
5
- * -------------------------------------------
6
- * Creator: Liuta Romulus Ovidiu
7
- * License: GNU/GPL
8
- * Email: admin@joomlaplug.com
9
- * Revision: 1.0
10
- * Date: July 2007
11
- **/
12
-
13
- @session_start();
14
-
15
- @set_time_limit("3600");
16
- @error_reporting(E_ALL^E_NOTICE);
17
-
18
- define("_VALID_MOS",1);
19
-
20
- #load configuration
21
- $config_file = "cloner.config.php";
22
- require_once($config_file);
23
- require_once ("restore/TAR.php");
24
- require_once( "cloner.functions.php" );
25
- require_once( "admin.cloner.html.php" );
26
- require_once( "common.php" );
27
-
28
-
29
- #Doing some basic authentification
30
- if((!isset($_SESSION['clone']))&&($task != 'dologin')){
31
-
32
- $task = 'login';
33
-
34
- HTML_cloner::header();
35
-
36
- HTML_cloner::Login();
37
-
38
- HTML_cloner::footer();
39
-
40
- exit;
41
-
42
- }elseif($task == 'dologin'){
43
-
44
- if(($_REQUEST['username'] == $_CONFIG['jcuser']) && (md5($_REQUEST['password']) == $_CONFIG['jcpass'])){
45
-
46
- if(function_exists('session_register')) {
47
- @session_register('clone');
48
- }
49
- $_SESSION['clone'] = 1;
50
-
51
- mosRedirect( 'index2.php?option='.$option, "Welcome to XCloner backend" );
52
-
53
- }else{
54
-
55
- mosRedirect( 'index2.php?option='.$option, "Incorrect username and/or password" );
56
-
57
- }
58
-
59
- }
60
-
61
-
62
-
63
- ############GLOBALS in effect
64
- $GLOBALS['lang_dir'] = $lang_dir;
65
- ############
66
- $lang_array = get_avalaible_langs();
67
-
68
-
69
- # retrieve row selection from forms
70
- $cid = $_REQUEST['cid'];
71
- if (!is_array( $cid )) {
72
- $cid = array(0);
73
- }
74
-
75
-
76
- if($task != 'download')
77
- HTML_cloner::header();
78
-
79
-
80
- ########### SETTING THE GLOBALS VARIABLES #########################
81
-
82
- $GLOBALS['joomla_compatible'] = $joomla_compatible;
83
-
84
- $GLOBALS['_CONFIG'] = $_CONFIG;
85
-
86
- $GLOBALS['clonerPath'] = $clonerPath;
87
-
88
- $GLOBALS['baDownloadPath'] = $baDownloadPath;
89
-
90
- $GLOBALS['config_file']=$config_file;
91
-
92
- $GLOBALS['lang_array'] = $lang_array;
93
-
94
- # process the workflow selection
95
- switch ($task) {
96
- case 'rename_save':
97
-
98
- case 'rename':
99
- clone_rename($option);
100
- break;
101
- case 'action':
102
- action($option);
103
- break;
104
-
105
-
106
- case 'cancel_lang':
107
- mosRedirect( 'index2.php?option='.$option."&task=lang" );
108
- break;
109
- case 'add_lang':
110
- case 'add_lang_new':
111
- translator_add($option, $task);
112
- break;
113
- case 'save_lang_apply':
114
- case 'save_lang':
115
- case 'edit_lang':
116
- translator_edit($option, $task);
117
- break;
118
-
119
-
120
- case 'del_lang':
121
- case 'lang':
122
- translator($option);
123
- break;
124
-
125
- case 'refresh':
126
- generateBackuprefresh( $cid, $option, $_REQUEST['backup'] );
127
- break;
128
-
129
- case 'generate':
130
- generateBackup( $cid, $option );
131
- break;
132
-
133
- case 'confirm':
134
- confirmBackup( $option );
135
- break;
136
- case 'download':
137
- downloadBackup($_REQUEST[file]);
138
- break;
139
- case 'cron':
140
- HTML_cloner::Cron();
141
- break;
142
- case 'about':
143
- case 'credits':
144
- showHelp( $option );
145
- break;
146
- case 'restore':
147
- HTML_cloner::Restore( $option );
148
- break;
149
-
150
- case 'cron_delete':
151
- if(unlink($_CONFIG['multiple_config_dir']."/".$_REQUEST['fconfig']))
152
- $msg = " was deleted";
153
- else
154
- $msg = " was not deleted, please delete it manually!";
155
-
156
- mosRedirect( 'index2.php?option='.$option."&task=config", $_REQUEST['fconfig'].$msg );
157
- break;
158
-
159
- case 'remove':
160
- deleteBackups( $cid, $option );
161
- break;
162
- case 'continue':
163
- case 'move':
164
- case 'clone':
165
- moveBackup( $option );
166
- break;
167
-
168
- case 'cancel':
169
- mosRedirect( 'index2.php?option='.$option );
170
- break;
171
- case 'config':
172
- config( $option );
173
- break;
174
- case 'rename_cancel':
175
- mosRedirect( 'index2.php?option='.$option."&task=view" );
176
- break;
177
- case 'show':
178
- case 'view':
179
- showBackups( $option );
180
- break;
181
- case 'logout':
182
- doLogout();
183
- break;
184
- default:
185
- fdefault();
186
- break;
187
- }
188
-
189
- HTML_cloner::footer();
190
-
191
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/admin.xcloner.php DELETED
@@ -1,10 +0,0 @@
1
- <?php
2
-
3
- // no direct access
4
- if(!defined( '_VALID_MOS' ) && !defined('_JEXEC'))
5
-
6
- die( 'Restricted access' );
7
-
8
- print "<iframe src='components/com_xcloner/index.php' width='100%' height='900' frameborder=0 marginWidth=0 frameSpacing=0 marginHeight=110 ></iframe>";
9
-
10
- ?>
 
 
 
 
 
 
 
 
 
 
trunk/administrator/backups/.excl DELETED
File without changes
trunk/administrator/index.html DELETED
File without changes
trunk/browser/file.gif DELETED
Binary file
trunk/browser/filebrowser.css DELETED
@@ -1,34 +0,0 @@
1
- body{
2
- font-family:Arial, Helvetica, sans-serif;
3
- font-size: 76%;
4
- }
5
- #browser{
6
- width: 90%;
7
- border: 1px solid #ddd;
8
- padding: 0.2em 1em;
9
- margin:1em;
10
- }
11
- .searching{
12
- background: #efefef url(components/com_cloner/browser/timer.gif) no-repeat 46% 46%;
13
- }
14
- #header {
15
- color: #FFFFFF;
16
- background-color: #3571CA;
17
- padding: 0.2em;
18
- }
19
- #content {
20
- padding: 0.2em;
21
- border: 1px solid #999999;
22
- }
23
- li.file {
24
- white-space: nowrap;
25
- }
26
- li.folder {
27
- white-space: nowrap;
28
- }
29
- li.folder a{
30
- font-size: 16px;
31
- color: #000000;
32
- background: #efefef;
33
-
34
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/browser/files_inpage.php DELETED
@@ -1,18 +0,0 @@
1
- <?php
2
- @ini_set("error_reporting", "2");
3
-
4
- $thisApp=$_SERVER['PHP_SELF'] . "?browse=true";
5
-
6
- if(isset($_GET['browse'])){
7
- $dir = isset($_GET['dir']) ? $_GET['dir'] : '/files';
8
- if(strpos($dir, "../")===true){
9
- exit;
10
- }
11
-
12
- }else{
13
-
14
- echo "Please wait... we are loading the folder structure";
15
-
16
- }
17
-
18
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/browser/files_xml.php DELETED
@@ -1,264 +0,0 @@
1
- <?php
2
- /**
3
- * XCloner
4
- * Oficial website: http://www.joomlaplug.com/
5
- * -------------------------------------------
6
- * Creator: Liuta Romulus Ovidiu
7
- * License: All Rights Reserved
8
- * Email: admin@joomlaplug.com
9
- * Revision: 1.0
10
- * Date: July 2007
11
- **/
12
-
13
- header("Cache-Control: no-cache");
14
- header("Pragma: nocache");
15
- header("Content-Type: text/xml");
16
-
17
-
18
- ### testing the authenticity of access
19
- if($_COOKIE["auth_clone"] != 1){
20
- echo "Access denied to this location!";
21
- exit;
22
- }
23
-
24
-
25
- @ini_set("error_reporting", "2");
26
- include("../cloner.config.php");
27
- include("../common.php");
28
-
29
-
30
- if((strlen($_REQUEST['dir']) < strlen($_CONFIG['backup_path']))&&($_REQUEST[dir] != ''))
31
-
32
- $dir = $_CONFIG['backup_path'];
33
-
34
- else
35
-
36
- $dir = ($_REQUEST['dir'] != '') ? $_REQUEST['dir'] : $_CONFIG['backup_path'];
37
-
38
- $fulldir = $dir;
39
- $f_arr = array();
40
- $d_arr =array();
41
- $exclude = array();
42
- $_COOKIES = array();
43
- $exfile = $_CONFIG['backup_path']."/administrator/backups/.excl";
44
- $path = $_REQUEST['path'];
45
- $loc = $_REQUEST['dir'];
46
-
47
- if(!is_dir($_CONFIG['backup_path'])){
48
-
49
- echo "<directory location=\"Error: Directory $_CONFIG[backup_path] does not exist!\"></directory>";
50
- exit;
51
-
52
- }elseif(!is_readable($_CONFIG['backup_path'])){
53
-
54
- echo "<directory location=\"Error: Directory $_CONFIG[backup_path] is not readable!\"></directory>";
55
- exit;
56
-
57
- }
58
-
59
-
60
- if($_REQUEST['act'] == "checkall"){
61
-
62
- check($loc, $exfile, 1);
63
-
64
- }
65
- elseif($_REQUEST['act'] == "uncheckall"){
66
-
67
- check($loc, $exfile, 0);
68
-
69
- }
70
-
71
- if($loc == "")
72
- $loc = "/";
73
-
74
-
75
- $data = "";
76
-
77
- if($fp = @fopen($exfile,"r")){
78
-
79
- while(!feof($fp)){
80
- $data .= fread($fp, 1024);
81
- }
82
- fclose($fp);
83
- }
84
- $_COOKIES = explode("\r\n", $data);
85
-
86
-
87
-
88
- $exc = 0;
89
-
90
- if($fp = @fopen($exfile,"w")){
91
-
92
- if(is_array($_COOKIES))
93
-
94
- foreach($_COOKIES as $key=>$value)
95
-
96
- if(trim($value!="")){
97
-
98
- if($value!=$path){
99
-
100
- fwrite($fp, $value."\r\n");
101
-
102
- }else{
103
-
104
- $exc = 1;
105
- }
106
- }
107
-
108
- if((!$exc)&&(trim($path)!=''))
109
-
110
- fwrite($fp, $path."\r\n");
111
-
112
- fclose($fp);
113
- }
114
-
115
-
116
- $data = "";
117
-
118
- if($fp = @fopen($exfile,"r")){
119
-
120
- while(!feof($fp)){
121
-
122
- $data .= fread($fp, 1024);
123
-
124
- }
125
-
126
- fclose($fp);
127
-
128
- }
129
- else{
130
-
131
- echo "<directory location=\"Error: Unable to write to file $exfile\"></directory>";
132
- exit;
133
-
134
- }
135
-
136
- $_COOKIES = explode("\r\n", $data);
137
-
138
-
139
- if(is_array($_COOKIES))
140
- foreach($_COOKIES as $key=>$value)
141
- if($value!='')
142
- {
143
-
144
- $exclude[] = $value;
145
-
146
-
147
- }
148
-
149
- sort($exclude);
150
-
151
- if (@is_dir($fulldir)){
152
-
153
- if ($root=@opendir($fulldir)){
154
- while ($file=@readdir($root)){
155
- if(@is_dir($fulldir."/".$file)){
156
- //is folder
157
- if($file=="." || $file==".."){continue;}
158
- else{
159
- $d_arr[] = $file;
160
- }
161
- }else{
162
- //is file
163
- $type=substr($file, strrpos($file, '.'));
164
- $f_arr[] = $file;
165
- }
166
- }
167
- }
168
-
169
- sort($f_arr);
170
-
171
- sort($d_arr);
172
-
173
-
174
- echo "<directory location=\"$dir\">";
175
-
176
- foreach($d_arr as $file){
177
- if(in_array($dir."/".$file, $_COOKIES))
178
- $check = 'checked';
179
- else
180
- $check = '';
181
- echo "<folder check='$check'>$file</folder>";
182
-
183
- }
184
-
185
- foreach($f_arr as $file){
186
- if(in_array($dir."/".$file, $_COOKIES))
187
- $check = 'checked';
188
- else
189
- $check = '';
190
-
191
- echo "<file check='$check' link=\"#\">$file</file>";
192
-
193
- }
194
-
195
- foreach($exclude as $file)
196
- echo "<message>$file</message>";
197
-
198
- echo "</directory>";
199
-
200
-
201
- }
202
-
203
- function check($loc, $exfile, $act ){
204
- global $_CONFIG;
205
-
206
- $fulldir = $loc;
207
- $flist = array();
208
- $_COOKIES = array();
209
- if (@is_dir($fulldir)){
210
-
211
- if ($root=@opendir($fulldir)){
212
-
213
- while ($file=readdir($root))
214
- if(($file!='.')&&($file != '..'))
215
- {
216
-
217
- $flist[] = $loc ."/". $file;
218
-
219
- }
220
- }
221
- }
222
-
223
- if($fp = @fopen($exfile,"r")){
224
-
225
- while(!feof($fp)){
226
- $data .= fread($fp, 1024);
227
- }
228
- fclose($fp);
229
- }
230
-
231
- $_COOKIES = explode("\r\n", $data);
232
-
233
-
234
-
235
- if($act == 1){
236
-
237
- $flist = @array_merge($_COOKIES, $flist);
238
-
239
- }
240
- else{
241
-
242
- $flist = @array_diff($_COOKIES, $flist);
243
-
244
- }
245
-
246
- $flist = @array_unique($flist);
247
-
248
- if($fp = @fopen($exfile,"w")){
249
-
250
- foreach($flist as $file){
251
-
252
- fwrite($fp, $file."\r\n");
253
-
254
- }
255
-
256
- fclose($fp);
257
- }
258
-
259
-
260
-
261
-
262
- }
263
-
264
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/browser/folder.gif DELETED
Binary file
trunk/browser/timer.gif DELETED
Binary file
trunk/browser/xmlhttp.js DELETED
@@ -1,154 +0,0 @@
1
- var request;
2
- var targetDiv;
3
- function loadXMLDoc(url) {
4
- // for Mozilla and othes who support XMLHttpRequest
5
- if (window.XMLHttpRequest) {
6
- request = new XMLHttpRequest();
7
- request.onreadystatechange = processXMLRequest;
8
- request.open("GET", url, true);
9
- request.send(null);
10
- // for Interweb Explorer
11
- } else if (window.ActiveXObject) {
12
- request = new ActiveXObject("Microsoft.XMLHTTP");
13
- if(request){
14
- request.onreadystatechange = processXMLRequest;
15
- request.open("GET", url, true);
16
- request.send();
17
- }
18
- } else{
19
- return false;
20
- }
21
- }
22
-
23
- function processXMLRequest() {
24
- // only if data is loaded
25
- if (request.readyState == 4) {
26
- // only if result of HTTP request was an OK
27
- if (request.status == 200 || request.readyState ==304) {
28
- useXML(request.responseXML);
29
- } else{
30
- targetDiv=document.getElementById("browser");
31
- targetDiv.innerHTML="Unable to load XML";
32
- }
33
- }
34
- }
35
-
36
- function do_browser(){
37
- targetDiv=document.getElementById("browser");
38
-
39
- if(loadXMLDoc("browser/files_xml.php")){
40
- targetDiv.className="searching";
41
- targetDiv.innerHTML="";
42
- }
43
- }
44
-
45
- function createCookie(name,value,days)
46
- {
47
- if (days)
48
- {
49
- var date = new Date();
50
- date.setTime(date.getTime()+(days*24*60*60*1000));
51
- var expires = "; expires="+date.toGMTString();
52
- }
53
- else var expires = "";
54
- document.cookie = name+"="+value+expires+"; path=/";
55
- }
56
-
57
- function readCookie(name)
58
- {
59
- var nameEQ = name + "=";
60
- var ca = document.cookie.split(';');
61
-
62
- for(var i=0;i < ca.length;i++)
63
- {
64
- var c = ca[i];
65
- while (c.charAt(0)==' ') c = c.substring(1,c.length);
66
- if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
67
- }
68
- return null;
69
- }
70
-
71
- function eraseCookie(name)
72
- {
73
- createCookie(name,"",-1);
74
- }
75
-
76
- function checkp(value, loc){
77
- if(readCookie('path_'+value)){
78
- eraseCookie('path_'+value);
79
- }
80
- else{
81
- createCookie('path_'+value,value,'1');
82
- }
83
-
84
-
85
-
86
-
87
- }
88
- function checkc(value){
89
- if(readCookie(value)){
90
- check = 'checked';
91
- }
92
- else{
93
- check = '';
94
- }
95
- return check;
96
- }
97
-
98
-
99
-
100
-
101
-
102
- function useXML(xmlInfo){
103
- targetDiv.className="";
104
- message = "";
105
-
106
- var infoTags=xmlInfo.getElementsByTagName("directory");
107
- var loc=infoTags[0].getAttribute("location");
108
- if(loc == "")
109
- loc1 = 'Path Root';
110
- else
111
- loc1 = loc;
112
-
113
- var newloc1="browser/files_xml.php?dir=" + loc ;
114
-
115
- var stringHTML="<p><b>" + loc1 +"</b> <br /><br /></p>";
116
-
117
- if(loc.indexOf("/")!=-1){
118
- var newfile="browser/files_xml.php?dir=" + loc.slice(0, loc.lastIndexOf("/"));
119
- stringHTML=stringHTML+"<p><a href=\"#\" onclick=\"loadXMLDoc('" + newfile +"')\">[Up a level]</a> <a href='#' onclick=\"loadXMLDoc('" + newloc1 +"&amp;act=checkall')\" >[check all]</a> <a href='#' onclick=\"loadXMLDoc('" + newloc1 +"&amp;act=uncheckall')\" >[uncheck all]</a></p><br />"
120
- }
121
- if(infoTags[0].hasChildNodes){
122
- stringHTML=stringHTML+"<ul>";
123
- for(node=infoTags[0].firstChild; node!=null; node=node.nextSibling){
124
-
125
- var newloc="browser/files_xml.php?dir=" + loc ;
126
- path = loc+"/"+node.firstChild.nodeValue;
127
-
128
- if(node.nodeName=="file"){
129
-
130
- stringHTML=stringHTML+"<li class=\"file\"><img src='browser/file.gif' border='0'><input type=checkbox "+node.getAttribute('check')+" onclick=\"loadXMLDoc('" + newloc +"&amp;path="+path+"')\" name=cid[] value='"+path+"'><a href=\"" +node.getAttribute('link')+ "\">"+node.firstChild.nodeValue+"</a></li>";
131
-
132
- }
133
- if(node.nodeName=="message"){
134
-
135
-
136
- message = message + "<a href='#' onclick=\"loadXMLDoc('" + newloc+"&amp;path="+node.firstChild.nodeValue+"')\">"+node.firstChild.nodeValue+"</a><br />";
137
-
138
- }
139
- if(node.nodeName=="folder"){
140
-
141
-
142
- var newfile="browser/files_xml.php?dir=" + loc + "/" + node.firstChild.nodeValue;
143
- stringHTML=stringHTML+"<li class=\"folder\"><img src='browser/folder.gif' border='0'><input type=checkbox "+node.getAttribute('check')+" onclick=\"loadXMLDoc('" + newloc +"&amp;path="+path+"')\" name=cid[] value='"+path+"'><a href='#' class=\"folder\" onclick=\"loadXMLDoc('" + newfile+"')\">"+node.firstChild.nodeValue+"</a></li>";
144
- }
145
- }
146
- stringHTML=stringHTML+"</ul>";
147
- }
148
- else{
149
- stringHTML=stringHTML+"<p>No files in this directory</p>";
150
- }
151
-
152
- //stringHTML = stringHTML+ "</form>";
153
- targetDiv.innerHTML= "<table align='right' width='200'><tr><td align='right'><b>" + "Excluded items list:" + "</b><br />"+ message+"</td></tr></table>" + stringHTML ;
154
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/cloner.config.php DELETED
@@ -1,90 +0,0 @@
1
- <?php
2
- $_CONFIG['license_code']="";
3
- $_CONFIG['backup_path']="./";
4
- $_CONFIG['clonerPath']="./";
5
- $_CONFIG['mysql_host']="localhost";
6
- $_CONFIG['mysql_user']="root";
7
- $_CONFIG['mysql_pass']="";
8
- $_CONFIG['mysql_database']="";
9
- $_CONFIG['select_folders']="";
10
- $_CONFIG['select_lang']="english";
11
- $_CONFIG['secure_ftp']="0";
12
- $_CONFIG['backup_compress']="";
13
- $_CONFIG['cron_logemail']="";
14
- $_CONFIG['cron_exclude']="";
15
- $_CONFIG['cron_send']="0";
16
- $_CONFIG['cron_btype']="0";
17
- $_CONFIG['cron_bname']="";
18
- $_CONFIG['cron_ip']="";
19
- $_CONFIG['cron_ftp_server']="";
20
- $_CONFIG['cron_ftp_user']="";
21
- $_CONFIG['cron_ftp_pass']="";
22
- $_CONFIG['cron_ftp_path']="";
23
- $_CONFIG['cron_ftp_delb']="";
24
- $_CONFIG['databases_incl_list']="";
25
- $_CONFIG['cron_sql_drop']="";
26
- $_CONFIG['cron_email_address']="";
27
- $_CONFIG['cron_file_delete']="";
28
- $_CONFIG['cron_file_delete_act']="";
29
- $_CONFIG['mem']="";
30
- $_CONFIG['backup_refresh']="1";
31
- $_CONFIG['refresh_time']="1";
32
- $_CONFIG['backup_refresh_number']="100";
33
- $_CONFIG['sql_mem']="";
34
- $_CONFIG['enable_db_backup']="1";
35
- $_CONFIG['zippath']="";
36
- $_CONFIG['tarpath']="tar";
37
- $_CONFIG['sqldump']="mysqldump --quote-names ";
38
- $_CONFIG['system_dlink']="";
39
- $_CONFIG['system_ftptransfer']="0";
40
- $_CONFIG['system_mdatabases']="0";
41
-
42
- ### Defaults
43
- $script_dir = str_replace("\\","/",dirname(__FILE__));
44
-
45
- $_CONFIG['jcuser'] = 'admin';
46
- $_CONFIG['jcpass'] = md5('admin');
47
- $_CONFIG['mem']="0";
48
- $_CONFIG['archive_type']="0";
49
- $_CONFIG['backup_refresh'] = "1";
50
- $_CONFIG['backup_path'] = $script_dir;
51
- $_CONFIG['clonerPath'] = $script_dir."/backups";
52
- $_CONFIG['enable_db_backup'] = '0';
53
-
54
- ###Wordpress specific configuration
55
-
56
- /*if(@include("../../../wp-config.php")){
57
-
58
- $_CONFIG["enable_db_backup"] = 1;
59
- $_CONFIG['mysql_host'] = DB_HOST;
60
- $_CONFIG['mysql_user'] = DB_USER;
61
- $_CONFIG['mysql_pass'] = DB_PASSWORD;
62
- $_CONFIG['mysql_database'] = DB_NAME;
63
-
64
-
65
- }*/
66
-
67
- if(@file_exists("../../../wp-config.php")){
68
-
69
- $content = file_get_contents("../../../wp-config.php");
70
- $content = str_replace("require_once","#require_once", $content);
71
- $content = str_replace(array("<?php","<?","?>"),array("","",""), $content);
72
- eval($content);
73
-
74
- $_CONFIG["enable_db_backup"] = 1;
75
- $_CONFIG['mysql_host'] = DB_HOST;
76
- $_CONFIG['mysql_user'] = DB_USER;
77
- $_CONFIG['mysql_pass'] = DB_PASSWORD;
78
- $_CONFIG['mysql_database'] = DB_NAME;
79
-
80
-
81
- }
82
-
83
- $script_dir = str_replace("wp-content/plugins/xcloner","", $script_dir);
84
-
85
- $_CONFIG['backup_path'] = $script_dir;
86
- $_CONFIG['clonerPath'] = $script_dir."/administrator/backups";
87
- $_CONFIG['mosConfig_live_site']=$_SERVER['HTTP_HOST'];
88
-
89
-
90
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/cloner.cron.php DELETED
@@ -1,411 +0,0 @@
1
- <?php
2
- /**
3
- * XCloner
4
- * Oficial website: http://www.joomlaplug.com/
5
- * -------------------------------------------
6
- * Creator: Liuta Romulus Ovidiu
7
- * License: All Rights Reserved
8
- * Email: admin@joomlaplug.com
9
- * Revision: 1.0
10
- * Date: July 2007
11
- **/
12
-
13
- // Set flag that this is a parent file
14
- @error_reporting(E_ALL^E_NOTICE);
15
- @set_time_limit('3600');
16
- define( '_VALID_MOS', 1 );
17
-
18
- include_once("admin.cloner.html.php");
19
- include_once("cloner.functions.php");
20
- $script_dir = str_replace("\\","/",dirname(__FILE__));
21
- if(is_dir($script_dir)){
22
-
23
- chdir($script_dir);
24
-
25
- }
26
-
27
-
28
- if($_REQUEST['config'] != ""){
29
-
30
- require_once( './configs/'.$_REQUEST['config'] );
31
-
32
- $smsg = "Using configs/".$_REQUEST['config']." as configuration file";
33
-
34
- }
35
- else{
36
-
37
- @require_once( './cloner.config.php' );
38
-
39
- $smsg = "Using default configuration file";
40
-
41
- }
42
-
43
- require_once("common.php");
44
- require_once("restore/TAR.php");
45
-
46
- $mosConfig_live_site = $_CONFIG['mosConfig_live_site'];
47
-
48
- logxx($smsg);
49
-
50
-
51
-
52
-
53
-
54
- logxx("Starting ".$script_dir."/cloner.cron.php");
55
-
56
- if($_REQUEST['config'] == ""){
57
-
58
- if($argv[1] != ""){
59
-
60
- $_REQUEST['config'] = $argv[1];
61
-
62
- }
63
-
64
-
65
- }
66
-
67
-
68
- # load language
69
- if($_CONFIG['select_lang']!="")
70
- $mosConfig_lang = $_CONFIG['select_lang'];
71
- if (file_exists( "language/".$mosConfig_lang.".php" )) {
72
- include_once( "language/".$mosConfig_lang.".php" );
73
- @include_once( "language/english.php" );
74
- }
75
- else{
76
- include_once( "language/english.php" );
77
- }
78
-
79
-
80
-
81
- ####### VERIFY IP ACCESS
82
- $ip_list = @explode("\r\n", $_CONFIG['cron_ip']);
83
- $ip_list[] = $_SERVER['SERVER_ADDR'];
84
- $curent_ip = $_SERVER["REMOTE_ADDR"];
85
-
86
- if(!in_array($curent_ip, $ip_list)){
87
-
88
- echo "Access Denied for ip $curent_ip!";
89
- exit;
90
-
91
- }
92
- #########################
93
-
94
- $access=1;
95
- $_REQUEST[cron_dbonly] = 0;
96
- $_REQUEST[cron_access] = 1;
97
- $_REQUEST['databases_incl'] = @explode(",",$_CONFIG[databases_incl_list]);
98
-
99
-
100
-
101
-
102
- if($_CONFIG[cron_bname]!="")
103
- $_REQUEST['bname'] = $_CONFIG[cron_bname];
104
-
105
-
106
- function logxx($string){
107
-
108
- global $mail_log;
109
-
110
- $return = "<b>$string</b><br />\r\n";
111
-
112
- $mail_log .= $return;
113
-
114
- echo $return;
115
- return;
116
- }
117
-
118
- $clonerPath = $_CONFIG['clonerPath'];
119
- logxx("Starting JoomlaCloner for site $mosConfig_live_site at ".date("Y-m-d H:i"));
120
-
121
- $excludedFolders = array();
122
- $d_arr = array(); $d = 0;
123
- $ds_arr = array();
124
- $f_arr = array(); $f = 0;
125
- $s_arr = array(); $s = 0;
126
- $d_arr[$d] = $_CONFIG['backup_path'];
127
- #logxx("Reading the file structure");
128
- #recurseFiles($d_arr, $ds_arr, $f_arr, $s_arr, $d, $f, $s, $excludefolders, '');
129
- #$excludedFolders = confirmBackup('nohtml');
130
- #logxx("Done");
131
-
132
-
133
-
134
- if($_CONFIG['cron_btype']==0){
135
- $_REQUEST[dbbackup] = 1;
136
-
137
- logxx("Creating a fullbackup");
138
- $msg = 'full backup';
139
- }
140
- if($_CONFIG['cron_btype']==1){
141
- $_REQUEST[dbbackup] = 0;
142
-
143
- logxx("Creating a files only backup");
144
- $msg = 'file backup';
145
- }
146
- if($_CONFIG['cron_btype']==2){
147
- $_REQUEST[dbbackup] = 1;
148
-
149
- #for ($i=0, $n=count($excludedFolders); $i < $n; $i++) {
150
- $_CONFIG['cron_exclude'] = $_CONFIG['backup_path'];
151
- $GLOBALS['_CONFIG'] = $_CONFIG;
152
- $_REQUEST[cron_dbonly] = 1;
153
- #}
154
-
155
- logxx("Creating an sql only backup");
156
- $msg = "database backup";
157
- }
158
-
159
-
160
- logxx("Generating Backup ...");
161
- $file = generateBackup( $excludedFolders, 'nohtml' );
162
- logxx("Backup Done");
163
-
164
- $source_file = $clonerPath."/".$file;
165
-
166
- logxx("Backup file: ".$source_file);
167
- $bsize = getFileSizeText(filesize($source_file));
168
-
169
- if($_CONFIG['cron_send']==1){
170
- ######################################STARTING FTP TRANSFER##################
171
-
172
- logxx("Starting ftp transfer:");
173
-
174
- $source_files[] = $source_file;
175
- $destination_files[] = $_CONFIG[cron_ftp_path]."/".$file;
176
-
177
-
178
-
179
- // set up basic connection details
180
- list($fhost, $fport) = explode(":",$_CONFIG[cron_ftp_server]);
181
- if($fport == "")
182
- $fport = '21';
183
-
184
- $ftp_timeout = '3600';
185
-
186
- // set up basic connection
187
- if(!$_CONFIG[secure_ftp]){
188
- $conn_id = ftp_connect($fhost, (int)$fport, (int)$ftp_timeout);
189
- $connect = "Normal";
190
- }
191
- else{
192
- $conn_id = ftp_ssl_connect($fhost, (int)$fport, (int)$ftp_timeout);
193
- $connect = "Secure";
194
- }
195
-
196
- //$conn_id = ftp_connect($_CONFIG[cron_ftp_server]) or die("Could not connect to the ftp server ".$_CONFIG[cron_ftp_server]);
197
-
198
- // login with username and password
199
- $login_result = ftp_login($conn_id, $_CONFIG[cron_ftp_user], $_CONFIG[cron_ftp_pass])
200
- or die("Authentification failed when connecting to the ftp server for user ".$_CONFIG[cron_ftp_user]." with pass".$_CONFIG[cron_ftp_pass]);
201
-
202
- // check connection
203
- if ((!$conn_id) || (!$login_result)) {
204
- echo "<b style='color:red'>FTP connection has failed!</b>";
205
- echo "<b style='color:red'>Attempted to connect to ".$_CONFIG[cron_ftp_server]." for user ".$_CONFIG[cron_ftp_user]."</b>";
206
- return;
207
- } else {
208
- #echo "Connected to $_REQUEST[ftp_server], for user $_REQUEST[ftp_user]";
209
- }
210
-
211
- if($_CONFIG['system_ftptransfer']==1)
212
- {
213
- // turn passive mode on
214
- @ftp_pasv($conn_id, true);
215
- $mode = "Passive";
216
- }
217
- else
218
- {
219
- // turn passive mode off
220
- @ftp_pasv($conn_id, false);
221
- $mode = "Active";
222
- }
223
- echo "Connected to $connect <b>$_CONFIG[cron_ftp_server] Mode: $mode</b><br />";
224
- for($i=0;$i<sizeof($source_files);$i++)
225
- {
226
- // upload the file
227
- $upload = ftp_put($conn_id, $destination_files[$i], $source_files[$i], FTP_BINARY);
228
-
229
- // check upload status
230
- if (!$upload) {
231
- echo "<b style='color:red'>FTP upload has failed for file $source_files[$i] ! Stopping ....<br /></b>";return;
232
- } else {
233
- echo "<b>Upload success from file <i>$source_files[$i]</i> <br />to <i>$destination_files[$i]</i> ...<br /></b>";
234
- }
235
-
236
- }
237
-
238
- // close the FTP stream
239
- ftp_close($conn_id);
240
-
241
- logxx("Ftp transfer finished succesfully!");
242
-
243
- if($_CONFIG[cron_ftp_delb]==1){
244
-
245
- @unlink($source_file);
246
- logxx("Backup succesfully deleted from the original server!");
247
- }
248
-
249
- ##############################################################################
250
- }
251
- elseif($_CONFIG['cron_send']==2){
252
- #######################################STARTING Email TRANSFER################
253
- logxx("Sending mail with backup");
254
-
255
- $date = date("Y-m-d H:i");
256
- $mode = '1';
257
- $message = "
258
- <pre>
259
- Attached is the backup generated on $date
260
- Source Filename: $source_file
261
- Server: $mosConfig_live_site
262
-
263
- Powered by http://www.joomlaplug.com - JoomlaCloner site backup solution for everybody!
264
- </pre>
265
-
266
- ";
267
-
268
- $ok = send_mail($mosConfig_mailfrom, "JoomlaCloner $msg", $message, $_CONFIG['cron_email_address'], $source_file);
269
-
270
- #echo mosMail( $mosConfig_mailfrom, $mosConfig_fromname, $_CONFIG['cron_email_address'], "JoomlaCloner $msg", $message, $mode, '', '' );
271
- if($ok)
272
- logxx("Mail sent to ".$_CONFIG['cron_email_address']);
273
- else
274
- logxx("There was an error in sending the mail cron to ".$_CONFIG['cron_email_address']);
275
-
276
- ##############################################################################
277
- }
278
- logxx("Total backup size:".$bsize);
279
-
280
-
281
- ######## DELETING OLDER BACKUPS ##############################################
282
-
283
- if($_CONFIG['cron_file_delete_act']){
284
-
285
- logxx("<br />\nDeleting older backups than ".$_CONFIG['cron_file_delete']." days: ");
286
- delete_older_backups($clonerPath);
287
-
288
- }
289
-
290
-
291
- ###################END OLDER BACKUPS
292
-
293
- $logemail = explode(";", $_CONFIG['cron_logemail']);
294
- if(sizeof($logemail)>0){
295
-
296
- for($i=0; $i<sizeof($logemail);$i++){
297
-
298
- $email = trim($logemail[$i]);
299
- if($email != ""){
300
-
301
- $email_subject = "cron log ".time();
302
-
303
- $headers ="From: \"Cronlog JoomlaCloner\" <nobody@noreply.com>\n";
304
-
305
- if(mail($email, $email_subject, strip_tags($mail_log), $headers)){
306
-
307
- logxx ("Notification Mail was sent to $email");
308
-
309
- }
310
-
311
-
312
- }
313
-
314
- }
315
-
316
- }
317
-
318
- logxx("<br />\n\nALL DONE! I will exit now from cron.");
319
- exit;
320
-
321
- ?>
322
- <?php
323
-
324
- function delete_older_backups($clonerPath){
325
- global $_CONFIG;
326
- # initialise list arrays, directories and files separately and array counters for them
327
- $d_arr = array(); $d = 0;
328
- $f_arr = array(); $f = 0;
329
- $s_arr = array(); $s = 0;
330
-
331
- # obtain the list of backup archive files
332
- getBackupFiles($d_arr, $f_arr, $s_arr, $d, $f);
333
-
334
- if(is_array($f_arr))
335
- foreach($f_arr as $file)
336
- if(($file!='.')&&($file != '..')){
337
-
338
- #logxx("Processing backup file $file");
339
- $cfile = $_CONFIG['clonerPath']."/".$file;
340
-
341
- $filemtime = filemtime($cfile) ;
342
-
343
- $ftime= $filemtime + $_CONFIG['cron_file_delete']*24*60*60;
344
-
345
- $ctime = time();
346
-
347
- if($ftime < $ctime){
348
-
349
- if(unlink($cfile))
350
- logxx("Deleted backup file $file created on ".date("Y-m-d", $filemtime));
351
- else
352
- logxx("Could not delete backup file $file, please delete it manually");
353
-
354
- }
355
-
356
- }
357
-
358
- }
359
-
360
- function send_mail($email_from, $email_subject, $email_txt, $email_to, $fileatt){
361
- $fileatt_type = "application/octet-stream"; // File Type
362
- $fileatt_name = basename($fileatt); // Filename that will be used for the file as the attachment
363
- $data = "";
364
-
365
- $headers = "From: \"Cronbackup JoomlaCloner\" <".$email_from.">";
366
-
367
- if($fileatt != ""){
368
-
369
- if($file = @fopen($fileatt,'rb')){
370
-
371
- $data = fread($file,filesize($fileatt));
372
-
373
- fclose($file);
374
-
375
- }
376
- else{
377
- logxx("Unable to open file $fileatt");
378
- }
379
-
380
- }
381
-
382
- $semi_rand = md5(time());
383
- $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
384
-
385
- $headers .= "\nMIME-Version: 1.0\n" .
386
- "Content-Type: multipart/mixed;\n" .
387
- " boundary=\"{$mime_boundary}\"";
388
-
389
- $email_message .= "This is a multi-part message in MIME format.\n\n" .
390
- "--{$mime_boundary}\n" .
391
- "Content-Type:text/html; charset=\"iso-8859-1\"\n" .
392
- "Content-Transfer-Encoding: 7bit\n\n" .
393
- $email_txt . "\n\n";
394
-
395
- $data = chunk_split(base64_encode($data));
396
-
397
- $email_message .= "--{$mime_boundary}\n" .
398
- "Content-Type: {$fileatt_type};\n" .
399
- " name=\"{$fileatt_name}\"\n" .
400
- //"Content-Disposition: attachment;\n" .
401
- //" filename=\"{$fileatt_name}\"\n" .
402
- "Content-Transfer-Encoding: base64\n\n" .
403
- $data . "\n\n" .
404
- "--{$mime_boundary}--\n";
405
-
406
- $ok = mail($email_to, $email_subject, $email_message, $headers);
407
-
408
- return $ok;
409
-
410
- }
411
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/cloner.functions.php DELETED
@@ -1,1946 +0,0 @@
1
- <?php
2
- /**
3
- * XCloner
4
- * Oficial website: http://www.joomlaplug.com/
5
- * -------------------------------------------
6
- * Creator: Liuta Romulus Ovidiu
7
- * License: GNU/GPL
8
- * Email: admin@joomlaplug.com
9
- * Revision: 1.0
10
- * Date: July 2007
11
- **/
12
-
13
- /*processing the Logout task*/
14
- function doLogout(){
15
-
16
- if(function_exists('session_unregister')) {
17
- @session_unregister('clone');
18
- }
19
-
20
- unset($_SESSION['clone']);
21
-
22
- mosRedirect("index.php?option=com_cloner","");
23
-
24
- }
25
- /*Error printing function*/
26
- function E_print($message){
27
-
28
- print "<center><font color='red' size='4'>$message</font></center>";
29
-
30
- }
31
-
32
- /*Simple redirect function*/
33
- function mosRedirect($url, $msg=""){
34
-
35
-
36
- echo "<script>
37
-
38
- window.location = '$url&mosmsg=$msg';
39
-
40
- </script>";
41
-
42
- }
43
-
44
- function fdefault(){
45
-
46
- HTML_cloner::_FDefault();
47
-
48
- }
49
-
50
- function config($option){
51
- global $mosConfig_absolute_path, $_CONFIG, $config_file;
52
-
53
-
54
- if(@$_REQUEST['action']=='save'){
55
- #print_r($_REQUEST);exit;
56
- $databases_incl_list = "";
57
- if(is_array($_REQUEST['databases_incl']))
58
- foreach($_REQUEST['databases_incl'] as $database){
59
-
60
- $databases_incl_list .= $database. ",";
61
-
62
- }
63
- if($fp = @fopen($config_file,'w')){
64
-
65
- $cfg = '<?'.'php'."\n";
66
-
67
- $cfg .= '$_CONFIG[\'license_code\']="'.$_REQUEST[license_code].'";'."\n";
68
-
69
- $cfg .= '$_CONFIG[\'backup_path\']="'.$_REQUEST[backup_path].'";'."\n";
70
-
71
- $cfg .= '$_CONFIG[\'clonerPath\']="'.$_REQUEST[clonerPath].'";'."\n";
72
-
73
- $cfg .= '$_CONFIG[\'jcuser\']="'.$_REQUEST[jcuser].'";'."\n";
74
-
75
- if($_REQUEST['jcpass'] == ''){
76
-
77
- $jcpass = $_CONFIG['jcpass'];
78
-
79
- }else{
80
-
81
- $jcpass = md5($_REQUEST['jcpass']);
82
-
83
- }
84
-
85
- $cfg .= '$_CONFIG[\'jcpass\']=\''.$jcpass.'\';'."\n";
86
-
87
- $cfg .= '$_CONFIG[\'mysql_host\']="'.$_REQUEST[mysql_host].'";'."\n";
88
-
89
- $cfg .= '$_CONFIG[\'mysql_user\']="'.$_REQUEST[mysql_user].'";'."\n";
90
-
91
- $cfg .= '$_CONFIG[\'mysql_pass\']=\''.$_REQUEST[mysql_pass].'\';'."\n";
92
-
93
- $cfg .= '$_CONFIG[\'mysql_database\']="'.$_REQUEST[mysql_database].'";'."\n";
94
-
95
- $cfg .= '$_CONFIG[\'select_folders\']="'.$_REQUEST[select_folders].'";'."\n";
96
-
97
- $cfg .= '$_CONFIG[\'select_lang\']="'.$_REQUEST[select_lang].'";'."\n";
98
-
99
- $cfg .= '$_CONFIG[\'secure_ftp\']="'.$_REQUEST[secure_ftp].'";'."\n";
100
-
101
- $cfg .= '$_CONFIG[\'backup_compress\']="'.$_REQUEST[backup_compress].'";'."\n";
102
-
103
- $cfg .= '$_CONFIG[\'cron_logemail\']="'.$_REQUEST[cron_logemail].'";'."\n";
104
-
105
- $cfg .= '$_CONFIG[\'cron_exclude\']="'.$_REQUEST[cron_exclude].'";'."\n";
106
-
107
- $cfg .= '$_CONFIG[\'cron_send\']="'.$_REQUEST[cron_send].'";'."\n";
108
-
109
- $cfg .= '$_CONFIG[\'cron_btype\']="'.$_REQUEST[cron_btype].'";'."\n";
110
-
111
- $cfg .= '$_CONFIG[\'cron_bname\']="'.$_REQUEST[cron_bname].'";'."\n";
112
-
113
- $cfg .= '$_CONFIG[\'cron_ip\']="'.$_REQUEST[cron_ip].'";'."\n";
114
-
115
- $cfg .= '$_CONFIG[\'cron_ftp_server\']="'.$_REQUEST[cron_ftp_server].'";'."\n";
116
-
117
- $cfg .= '$_CONFIG[\'cron_ftp_user\']="'.$_REQUEST[cron_ftp_user].'";'."\n";
118
-
119
- $cfg .= '$_CONFIG[\'cron_ftp_pass\']=\''.$_REQUEST[cron_ftp_pass].'\';'."\n";
120
-
121
- $cfg .= '$_CONFIG[\'cron_ftp_path\']="'.$_REQUEST[cron_ftp_path].'";'."\n";
122
-
123
- $cfg .= '$_CONFIG[\'cron_ftp_delb\']="'.$_REQUEST[cron_ftp_delb].'";'."\n";
124
-
125
- $cfg .= '$_CONFIG[\'databases_incl_list\']="'.$databases_incl_list.'";'."\n";
126
-
127
- $cfg .= '$_CONFIG[\'cron_sql_drop\']="'.$_REQUEST[cron_sql_drop].'";'."\n";
128
-
129
- $cfg .= '$_CONFIG[\'cron_email_address\']="'.$_REQUEST[cron_email_address].'";'."\n";
130
-
131
- $cfg .= '$_CONFIG[\'cron_file_delete\']="'.$_REQUEST[cron_file_delete].'";'."\n";
132
-
133
- $cfg .= '$_CONFIG[\'cron_file_delete_act\']="'.$_REQUEST[cron_file_delete_act].'";'."\n";
134
-
135
- $cfg .= '$_CONFIG[\'mem\']="'.$_REQUEST[mem].'";'."\n";
136
-
137
- $cfg .= '$_CONFIG[\'backup_refresh\']="'.$_REQUEST[backup_refresh].'";'."\n";
138
-
139
- $cfg .= '$_CONFIG[\'refresh_time\']="'.$_REQUEST[refresh_time].'";'."\n";
140
-
141
- $cfg .= '$_CONFIG[\'backup_refresh_number\']="'.$_REQUEST[backup_refresh_number].'";'."\n";
142
-
143
- $cfg .= '$_CONFIG[\'sql_mem\']="'.$_REQUEST[sql_mem].'";'."\n";
144
-
145
- $cfg .= '$_CONFIG[\'enable_db_backup\']="'.$_REQUEST[enable_db_backup].'";'."\n";
146
-
147
- $cfg .= '$_CONFIG[\'zippath\']="'.$_REQUEST[zippath].'";'."\n";
148
-
149
- $cfg .= '$_CONFIG[\'tarpath\']="'.$_REQUEST[tarpath].'";'."\n";
150
-
151
- $cfg .= '$_CONFIG[\'sqldump\']="'.$_REQUEST[sqldump].'";'."\n";
152
-
153
- $cfg .= '$_CONFIG[\'system_dlink\']="'.$_REQUEST[system_dlink].'";'."\n";
154
-
155
- $cfg .= '$_CONFIG[\'mosConfig_live_site\']="'.$_SERVER['HTTP_HOST'].'";'."\n";
156
-
157
- $cfg .= '$_CONFIG[\'system_ftptransfer\']="'.$_REQUEST[system_ftptransfer].'";'."\n";
158
-
159
- $cfg .= '$_CONFIG[\'system_mdatabases\']="'.$_REQUEST[system_mdatabases].'";'."\n";
160
-
161
- $cfg .= '$_CONFIG[\'add_backups_dir\']="'.$_REQUEST[add_backups_dir].'";'."\n";
162
-
163
- $cfg .= '?'.'>';
164
-
165
- fwrite($fp, $cfg);
166
-
167
- fclose($fp);
168
-
169
- $msg = LM_MSG_BACK_1;
170
-
171
- if($_REQUEST['cron_save_as'] != ""){
172
-
173
- $fcron = $_CONFIG['multiple_config_dir']."/".$_REQUEST['cron_save_as'].".php";
174
-
175
- if($fp = @fopen($fcron, "w")){
176
-
177
- fwrite($fp, $cfg);
178
-
179
- fclose($fp);
180
-
181
- }
182
- else{
183
-
184
- $msg = "Unable to save $fcron file, please make sure the folder is writeable!";
185
-
186
- }
187
-
188
- }
189
-
190
-
191
- mosRedirect( 'index2.php?option='.$option."&task=config" , $msg);
192
- }
193
- else
194
- {
195
- $msg ="<font color='red'>ERROR... Unable to write to $config_file, please change the permissions!</font>";
196
- E_print($msg);
197
- }
198
-
199
- }
200
- HTML_cloner::Config($option);
201
- }
202
-
203
- ### JoomlaCloner Language Manager
204
- function translator($option){
205
- global $mosConfig_absolute_path, $lang_array, $lang_dir;
206
-
207
- $langs = array();
208
- $cid = $_REQUEST['cid'];
209
- $files = $_REQUEST['files'];
210
-
211
- if(is_array($cid))
212
- foreach($cid as $value){
213
-
214
- $langs[] = $files[$value];
215
-
216
- }
217
-
218
- if($_REQUEST['task'] == 'del_lang'){
219
-
220
- foreach($langs as $lang){
221
-
222
- @unlink ($lang_dir."/".$lang.".php");
223
-
224
- }
225
-
226
- $msg = LM_LANG_MSG_DEL;
227
- mosRedirect( 'index2.php?option='.$option."&task=lang" , $msg);
228
-
229
- }
230
-
231
- HTML_cloner::Translator($option, $lang_array);
232
- }
233
-
234
- function translator_add($option, $task){
235
- global $_CONFIG, $lang_array, $lang_dir;
236
-
237
- if($task == 'add_lang_new') {
238
-
239
- $lfile = $lang_dir."/".strtolower($_REQUEST['lname']).".php";
240
-
241
- if(file_exists($lfile)){
242
-
243
- $msg = "Language ".$_REQUEST['lname']." already exists!";
244
- }
245
- else
246
- if($fp = @fopen($lfile, 'w')){
247
-
248
- fwrite($fp, "");
249
-
250
- fclose($fp);
251
-
252
- $msg = "Language ".ucfirst($_REQUEST['language'])." successfully added!";
253
-
254
- }
255
- else{
256
-
257
- $msg = "File $lfile could not be updated, please check it's permissions'!";
258
-
259
- }
260
-
261
- mosRedirect( 'index2.php?option='.$option."&task=lang" , $msg);
262
-
263
- }
264
-
265
-
266
- HTML_cloner::Translator_Add($option);
267
- }
268
- function translator_edit($option, $task){
269
- global $_CONFIG, $lang_array, $lang_dir;
270
-
271
- if(($task == 'save_lang')||($task == 'save_lang_apply')){
272
-
273
- $lfile = $lang_dir."/".$_REQUEST['language'].".php";
274
-
275
- if($_REQUEST['language'] == 'english'){
276
-
277
- if($fp = @fopen($lfile, 'w')){
278
-
279
- fwrite($fp, stripslashes($_REQUEST['def_content']));
280
-
281
- fclose($fp);
282
-
283
- $msg = "Language ".ucfirst($_REQUEST['language'])." successfully updated!";
284
-
285
- }
286
- else{
287
-
288
- $msg = "File $lfile could not be created, please check it's permissions'!";
289
-
290
- }
291
- if($task == 'save_lang_apply')
292
- mosRedirect( 'index2.php?option='.$option."&task=edit_lang&langx=".$_REQUEST['language'] , $msg);
293
- else
294
- mosRedirect( 'index2.php?option='.$option."&task=lang" , $msg);
295
-
296
- }
297
- else{
298
-
299
- $lfile = $_REQUEST['lfile'];
300
- $ldata = $_REQUEST['lang'];
301
-
302
- if($fp = @fopen($lfile, 'w')){
303
-
304
- fwrite($fp, "<"."?php\n");
305
- foreach($ldata as $key=>$value){
306
-
307
- fwrite($fp, "define(\"".$key."\",\"".stripslashes($value)."\");\n");
308
-
309
- }
310
-
311
- fwrite($fp, "?".">");
312
-
313
- fclose($fp);
314
-
315
- $msg = "Language ".ucfirst($_REQUEST['language'])." successfully updated!";
316
-
317
- }
318
- else{
319
-
320
- $msg = "File $lfile could not be updated, please check it's permissions'!";
321
-
322
- }
323
-
324
-
325
- }
326
- if($task == 'save_lang_apply')
327
- mosRedirect( 'index2.php?option='.$option."&task=edit_lang&langx=".$_REQUEST['language'] , $msg);
328
- else
329
- mosRedirect( 'index2.php?option='.$option."&task=lang" , $msg);
330
-
331
- }
332
-
333
- $content = "";
334
- $lang = "";
335
- $cid = $_REQUEST['cid'];
336
- $files = $_REQUEST['files'];
337
-
338
- if(is_array($cid))
339
- foreach($cid as $value){
340
-
341
- $lang = $files[$value];
342
-
343
- }
344
-
345
- if($_REQUEST['langx']){
346
-
347
- $lang = $_REQUEST['langx'];
348
-
349
- }
350
-
351
- if($fp = fopen($lang_dir."/english.php", 'r')){
352
-
353
- while(!feof($fp)){
354
-
355
- $content .= fread($fp, 1024);
356
-
357
- }
358
-
359
- fclose($fp);
360
-
361
- }
362
-
363
- $file = $lang_dir."/".$lang.".php";
364
- $dfile = $lang_dir."/english.php";
365
-
366
-
367
-
368
- if($lang == 'english') {
369
-
370
- HTML_cloner::Translator_Edit_DEFAULT($option, $content, $file, $lang);
371
-
372
- }
373
- else {
374
-
375
- $def_data = get_lang_data($dfile);
376
- $cur_data = get_lang_data($file);
377
-
378
- $data = array_merge($def_data, $cur_data);
379
-
380
- HTML_cloner::Translator_Edit($option, $data, $def_data, $file, $lang);
381
-
382
- }
383
-
384
- }
385
-
386
- function get_lang_data($file){
387
- global $_CONFIG;
388
-
389
- if($fp = fopen($file, 'r')){
390
-
391
- while(!feof($fp)){
392
-
393
- $content .= fread($fp, 1024);
394
-
395
- }
396
-
397
- fclose($fp);
398
-
399
- }
400
-
401
- $data = array();
402
-
403
- $tmp = explode("define(\"", $content);
404
- foreach($tmp as $key=>$value){
405
-
406
- $temp = explode("\",", $value);
407
-
408
- $tst = explode("\");", $temp[1]);
409
- $data[$temp[0]] = substr(trim($tst[0]), 1, strlen($tst[0]));
410
-
411
- }
412
-
413
- return $data;
414
-
415
- }
416
-
417
- function get_avalaible_langs(){
418
- global $_CONFIG, $lang_dir;
419
-
420
- $lang_arr = array();
421
-
422
- if ($handle = @opendir($lang_dir)) {
423
-
424
- /* This is the correct way to loop over the directory. */
425
- while (false !== ($file = readdir($handle)))
426
- if(($file != 'index.html') &&($file != '..')&&($file != '.'))
427
- {
428
- $lang_arr[] = str_replace(".php", "", $file);
429
- }
430
-
431
- closedir($handle);
432
-
433
- }
434
-
435
- return $lang_arr;
436
- }
437
-
438
- function showBackups( $option ) {
439
- // ----------------------------------------------------------
440
- // Generate a selectable list of the files in Backup Folder
441
- // ----------------------------------------------------------
442
- global $_CONFIG;
443
-
444
- if(!is_dir($_CONFIG['clonerPath'])){
445
- E_print( "Your backup directory ".$_CONFIG['clonerPath']." is not correct! Unable to continue...");
446
- return ;
447
- }
448
-
449
- # initialise list arrays, directories and files separately and array counters for them
450
- $d_arr = array(); $d = 0;
451
- $f_arr = array(); $f = 0;
452
- $s_arr = array(); $s = 0;
453
-
454
- # obtain the list of backup archive files
455
- getBackupFiles($d_arr, $f_arr, $s_arr, $d, $f);
456
-
457
- # load presentation layer
458
- HTML_cloner::showBackups( $f_arr, $s_arr, $_CONFIG['clonerPath'], $option );
459
- }
460
-
461
- function moveBackup($option){
462
- global $task;
463
- $files_out = array();
464
- if(is_array($_REQUEST[files]))
465
- {
466
-
467
- foreach($_REQUEST[files] as $key=>$value)
468
- if($_REQUEST[cid][$key]!="")
469
- $files_out[] = $value;
470
- }
471
-
472
- if($_REQUEST['action']=="connect"){
473
-
474
- $ret = start_connect($_REQUEST[files]);
475
-
476
- }
477
- if(!$ret)
478
- HTML_cloner::TransferForm($option, $files_out);
479
- }
480
-
481
- function start_connect($files){
482
- global $task, $_CONFIG;
483
-
484
-
485
- if(($_REQUEST[task]=='move')||($_REQUEST[task2]=='move')){
486
- }
487
- else{
488
- $source_file[0] = "restore/XCloner.php";
489
- $destination_file[0] = $_REQUEST[ftp_dir]."/XCloner.php";
490
-
491
- $source_file[1] = "restore/TAR.php";
492
- $destination_file[1] = $_REQUEST[ftp_dir]."/TAR.php";
493
-
494
- }
495
-
496
- foreach($files as $file){
497
- $source_file[] = $_CONFIG['clonerPath']."/".$file;
498
- $destination_file[] = $_REQUEST[ftp_dir]."/".$file;
499
- }
500
-
501
-
502
-
503
- list($fhost, $fport) = explode(":",$_REQUEST[ftp_server]);
504
- if($fport == "")
505
- $fport = '21';
506
-
507
- $ftp_timeout = '3600';
508
- // set up basic connection
509
- if(!$_CONFIG[secure_ftp]){
510
- $conn_id = ftp_connect($fhost, (int)$fport, (int)$ftp_timeout);
511
- $connect = "Normal";
512
- }
513
- else{
514
- $conn_id = ftp_ssl_connect($fhost, (int)$fport, (int)$ftp_timeout);
515
- $connect = "Secure";
516
- }
517
-
518
- // login with username and password
519
- $login_result = @ftp_login($conn_id, $_REQUEST[ftp_user], $_REQUEST[ftp_pass]);
520
-
521
- // check connection
522
- if ((!$conn_id) || (!$login_result)) {
523
- echo "<b style='color:red'>".LM_MSG_BACK_2."</b>";
524
- echo "<b style='color:red'>Attempted to connect to ".$_REQUEST[ftp_server]." for user ".$_REQUEST[ftp_user]."</b>";
525
- return;
526
- } else {
527
- #echo "Connected to $_REQUEST[ftp_server], for user $_REQUEST[ftp_user]";
528
- }
529
-
530
- if($_CONFIG[system_ftptransfer]==1)
531
- {
532
- // turn passive mode on
533
- @ftp_pasv($conn_id, true);
534
- $mode = "Passive";
535
- }
536
- else
537
- {
538
- // turn passive mode off
539
- @ftp_pasv($conn_id, false);
540
- $mode = "Active";
541
- }
542
-
543
- echo "Connected to $connect ftp server <b>$_REQUEST[ftp_server] - $mode Mode</b><br />";
544
- for($i=0;$i<sizeof($source_file);$i++)
545
- {
546
- echo "<br />Moving source file <b>".$source_file[$i]."</b>";
547
- // upload the file
548
- if(!$_REQUEST['ftp_inct']){
549
-
550
- $ret = ftp_put($conn_id, $destination_file[$i], $source_file[$i], FTP_BINARY);
551
-
552
- if ($ret) echo "<br /><b>Upload success to <i>$destination_file[$i]</i> ...<br /></b>";
553
- else {echo "<b style='color:red'>FTP upload has failed for file $destination_file[$i] ! Stopping ....<br /></b>";return;}
554
-
555
-
556
- }
557
-
558
- if($_REQUEST['ftp_inct']){
559
-
560
- $size = filesize($source_file[$i]);
561
- $dsize = ftp_size($conn_id, $destination_file[$i]);
562
- $perc = sprintf("%.2f", ($dsize*100)/$size);
563
-
564
- echo " - uploaded $perc% from $size bytes <br>";
565
- $ret = ftp_nb_put($conn_id, $destination_file[$i], $source_file[$i], FTP_BINARY , FTP_AUTORESUME);
566
-
567
-
568
-
569
- // check upload status
570
- if ($ret == FTP_FAILED ) {
571
- echo "<b style='color:red'>FTP upload has failed for file $destination_file[$i] ! Stopping ....<br /></b>";return;
572
-
573
- } else {
574
-
575
- $j = 1;
576
-
577
- while ($ret == FTP_MOREDATA) {
578
-
579
- // Do whatever you want
580
- #echo ". ";
581
-
582
-
583
- // Continue uploading...
584
- $ret = ftp_nb_continue($conn_id);
585
-
586
- if($j++ % 500 == 0){
587
-
588
- @ftp_close($conn_id);
589
-
590
- echo "<script>
591
- var sURL = unescape('".$_SERVER[REQUEST_URI]."');
592
-
593
- function refresh()
594
- {
595
- // This version of the refresh function will cause a new
596
- // entry in the visitor's history. It is provided for
597
- // those browsers that only support JavaScript 1.0.
598
- //
599
- window.location.href = sURL;
600
- }
601
-
602
- setTimeout( \"refresh()\", 2*1000 );
603
-
604
- </script>";
605
- return 1;
606
-
607
- break;
608
-
609
- }
610
-
611
- }
612
- if ($ret == FTP_FINISHED) {
613
- echo "<b>Upload success to <i>$destination_file[$i]</i> ...<br /></b>";
614
- }
615
-
616
- }
617
-
618
- }
619
-
620
- }
621
- // close the FTP stream
622
- @ftp_close($conn_id);
623
-
624
- $redurl = $_REQUEST[ftp_url]."/XCloner.php";
625
-
626
- if((substr($redurl, 0, 7)!= "http://") && (substr($redurl, 0, 8)!="https://") )
627
- $redurl = "http://".trim($redurl);
628
-
629
- if($_REQUEST['ftp_inct']){
630
-
631
- if($_REQUEST['refresh_done'] != 1){
632
- echo "<script>
633
- var sURL = unescape('".$_SERVER[REQUEST_URI]."&refresh_done=1');
634
-
635
- function refresh()
636
- {
637
- // This version of the refresh function will cause a new
638
- // entry in the visitor's history. It is provided for
639
- // those browsers that only support JavaScript 1.0.
640
- //
641
- window.location.href = sURL;
642
- }
643
-
644
- setTimeout( \"refresh()\", 2*1000 );
645
-
646
- </script>";
647
- return 1;
648
- }
649
-
650
- }
651
- else{
652
-
653
- $_REQUEST['refresh_done'] = 1;
654
-
655
- }
656
- if($_REQUEST['refresh_done'] == 1)
657
-
658
- if(($_REQUEST[task]=='move')||($_REQUEST[task2]=='move')){
659
- echo "<br><br><h2>".LM_MSG_BACK_3."</h2>"; return 1;
660
- }
661
- else{
662
- echo "<br><br><h2>".LM_MSG_BACK_4." <br /><a href='".$redurl."'>click here to continue...</a></h2>"; return 1;
663
- }
664
-
665
-
666
- return 0;
667
-
668
- }
669
- function copyls($source, $dest){
670
-
671
- $handle = fopen($dest, "a");
672
- if($handle){
673
- fclose($handle);
674
- return 1;
675
- }
676
- else{
677
- return 0;
678
- }
679
-
680
- }
681
-
682
- function action($option){
683
- global $_CONFIG;
684
-
685
- $userfile = $_CONFIG['baDownloadPath']."/".$_REQUEST[file];
686
- $localfile = $_CONFIG['clonerPath']."/".$_REQUEST[file];
687
-
688
-
689
- if($_REQUEST[action]=='delete'){
690
-
691
- if(@unlink($userfile))
692
- $msg = LM_MSG_BACK_5;
693
- else
694
- $msg = LM_MSG_BACK_6;
695
- }
696
- elseif($_REQUEST[action]=='copy'){
697
-
698
- if(@copyls($localfile, $userfile))
699
- $msg = LM_MSG_BACK_7;
700
- else
701
- $msg = LM_MSG_BACK_8;
702
- }
703
- mosRedirect( 'index2.php?option='.$option."&task=view" , $msg);
704
-
705
- }
706
-
707
- function clone_rename($option){
708
- global $_CONFIG;
709
-
710
- if($_REQUEST[task] == 'rename_save'){
711
- $files = $_REQUEST['cfile'];
712
- foreach($files as $key=>$value){
713
- @rename($_CONFIG[clonerPath]."/".$_REQUEST[cfile][$key],$_CONFIG[clonerPath]."/".$_REQUEST[dfile][$key]);
714
- @rename($_CONFIG[baDownloadPath]."/".$_REQUEST[cfile][$key],$_CONFIG[baDownloadPath]."/".$_REQUEST[dfile][$key]);
715
- }
716
-
717
- $msg = LM_MSG_BACK_9;
718
- mosRedirect( 'index2.php?option='.$option."&task=view" , $msg);
719
- }
720
-
721
- $files = array();
722
-
723
- foreach($_REQUEST[cid] as $key=>$value){
724
- $files[] = $_REQUEST[files][$key];
725
- }
726
-
727
-
728
-
729
- HTML_Cloner::Rename($files, $option);
730
-
731
- }
732
- function downloadBackup($file){
733
-
734
- global $_CONFIG;
735
-
736
- $file = $_CONFIG['clonerPath']."/$file";
737
-
738
- //First, see if the file exists
739
- if (!is_file($file)) { die("<b>404 File $file was not found!</b>"); }
740
-
741
- //File Info
742
- $len = filesize($file);
743
- $filename = basename($file);
744
- $file_extension = strtolower(substr(strrchr($filename,"."),1));
745
-
746
- //Setam Content-Type-urile pentru fisierul in cauza
747
- switch( $file_extension ) {
748
- case "pdf": $ctype="application/pdf"; break;
749
- case "exe": $ctype="application/octet-stream"; break;
750
- case "zip": $ctype="application/zip"; break;
751
- case "doc": $ctype="application/msword"; break;
752
- case "xls": $ctype="application/vnd.ms-excel"; break;
753
- case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
754
- case "gif": $ctype="image/gif"; break;
755
- case "png": $ctype="image/png"; break;
756
- case "jpeg":
757
- case "jpg": $ctype="image/jpg"; break;
758
- case "mp3": $ctype="audio/mpeg"; break;
759
- case "wav": $ctype="audio/x-wav"; break;
760
- case "mpeg":
761
- case "mpg":
762
- case "mpe": $ctype="video/mpeg"; break;
763
- case "mov": $ctype="video/quicktime"; break;
764
- case "avi": $ctype="video/x-msvideo"; break;
765
-
766
- default: $ctype="application/force-download";
767
- }
768
-
769
- //Writing Headers
770
- header("Pragma: public");
771
- header("Expires: 0");
772
- header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
773
- header("Cache-Control: public");
774
- header("Content-Description: File Transfer");
775
-
776
- //Content-Type-ul
777
- header("Content-Type: $ctype");
778
-
779
- //Force Download
780
- $header="Content-Disposition: attachment; filename=".$filename.";";
781
- header($header );
782
- header("Content-Transfer-Encoding: binary");
783
- header("Content-Length: ".$len);
784
- @readfile($file);
785
- exit;
786
- }
787
-
788
-
789
- function confirmBackup( $option ) {
790
- // ----------------------------------------------------------
791
- // Routine to display a confirmation screen prior to backup
792
- // containing the selectable folders and a confirmation for
793
- // backing up the database
794
- // ----------------------------------------------------------
795
- global $_CONFIG;
796
-
797
- if(!is_writeable($_CONFIG['clonerPath'])){
798
- E_print( "Your backup directory $_CONFIG[clonerPath] is not writeable or does not exists!");
799
- return;
800
- }
801
-
802
- # Initialise list arrays, directories and files separately and array counters for them
803
- $excludedFolders = array();
804
- $d_arr = array(); $d = 0;
805
- $ds_arr = array();
806
- $f_arr = array(); $f = 0;
807
- $s_arr = array(); $s = 0;
808
- $d_arr[$d] = $_CONFIG['backup_path'];
809
-
810
- #if($_CONFIG['select_folders']==0){
811
- # obtain the list of folders by recursing the mambo file store
812
- #recurseFiles($d_arr, $ds_arr, $f_arr, $s_arr, $d, $f, $s, $excludedFolders, '');
813
- #}
814
-
815
- if($_CONFIG['select_folders'] == 2)
816
- if($fp = @fopen($_CONFIG['exfile'], 'w')){
817
-
818
- $excl = explode("\r\n", $_CONFIG['cron_exclude']);
819
- foreach($excl as $value)
820
- if($value != ""){
821
-
822
- $value = str_replace($_CONFIG['backup_path'], "", $value);
823
- if($value [0] !='/')
824
- $value = '/'.$value;
825
-
826
- if((substr($value, strlen($value)-1, 1) == '/')&&(strlen($value)!=1))
827
- $value = substr($value, 0 , strlen($value)-1);
828
-
829
- fwrite($fp, $value."\r\n");
830
- }
831
- fclose($fp);
832
- }
833
-
834
- # load presentation layer
835
- if($option != 'nohtml')
836
- HTML_cloner::confirmBackups( $d_arr, $ds_arr, $_CONFIG['clonerPath'], $option );
837
- else
838
- return $d_arr;
839
- }
840
-
841
-
842
- function deleteBackups( $cid, $option ) {
843
- // ----------------------------------------------------------
844
- // Routine to delete the Backup Sets selected in the list
845
- // backup sets screen
846
- // ----------------------------------------------------------
847
- global $_CONFIG;
848
-
849
-
850
- # Cycle through all the selected Backups and Deleted them
851
- foreach ($cid as $key=>$value) {
852
-
853
- $file = $_CONFIG['clonerPath'].'/'. $_REQUEST['f'.$value];
854
-
855
-
856
- if ( unlink( $file ) ) {
857
- $msg .= $_REQUEST['f'.$value].' - '.LM_DELETE_FILE_SUCCESS;
858
- } else {
859
- $msg .= $_REQUEST['f'.$value].' - '.LM_DELETE_FILE_FAILED ;
860
- }
861
- }
862
-
863
- # redirect to list screen
864
- #$msg = _DELETE_FILE_SUCCESS;
865
- mosRedirect( 'index2.php?option='.$option."&task=view" , $msg );
866
- }
867
-
868
- function generateBackuprefresh($cid, $option, $backup_file){
869
-
870
- global $_CONFIG;
871
- global $databases_incl, $back_path, $sql_file, $perm_file, $htaccess;
872
-
873
- $perm_file = $_CONFIG['backups_dir']."/perm.txt";
874
-
875
-
876
- $lines = $_REQUEST['lines'];
877
-
878
- $fperm = fopen($perm_file,"r");
879
-
880
-
881
- $startf = (int)$_REQUEST['startf'];
882
-
883
- $endf = $startf + $_CONFIG['backup_refresh_number'];
884
-
885
- $excluded_cmd = "";
886
-
887
- if($fp = @fopen($_REQUEST['excl_manual'], "r")){
888
-
889
- while(!feof($fp))
890
- $excluded_cmd .= fread($fp, 1024);
891
-
892
- fclose($fp);
893
- }
894
-
895
-
896
- $url = "index2.php?option=com_cloner&task=refresh&startf=$endf&lines=$lines&backup=$backup_file&excl_manual=".$_REQUEST['excl_manual'];
897
-
898
-
899
- if($endf>=$lines)
900
- $endf = $lines;
901
- else
902
- echo "Continue link: <a href='$url'>click here&gt;&gt;</a><br />";
903
-
904
- if((int)$lines!=0)
905
- $percent = sprintf("%d",($endf*100)/(int)$lines);
906
-
907
-
908
- echo "Total process: $percent% out of $lines files<br />";
909
- echo "Processing files $startf to $endf for backup file $backup_file!<br />";
910
- echo "Current backup size: ".getFileSizeText(filesize($backup_file))."<br /><br />";
911
-
912
- chdir($_CONFIG['backup_path']);
913
-
914
- if($fperm){
915
- while ((!feof($fperm))&&($line < $endf)) {
916
-
917
- $line++;
918
-
919
- $buffer = explode("|", fgets($fperm, 4096));
920
-
921
- if(($line < $endf) && ($line >= $startf)){
922
-
923
-
924
- echo $inc_message = "<br />$line. ";
925
-
926
- if(($buffer[0]!="")&&(is_file($buffer[0]))){
927
-
928
- $file = $buffer[0];
929
-
930
- ### appending files
931
- echo $inc_message = "file - $file";
932
-
933
-
934
- if(!$_CONFIG['mem']){
935
- #### CREATE BACKUP USING TAR LIBRARIES
936
- $file_path_full = $buffer[0];
937
-
938
- {
939
-
940
- #$return = PclTarAddList($backup_file, array($file_path_full), '', $_CONFIG['backup_path'], "tar");
941
- $tar_object = new Archive_Tar($backup_file);
942
- $return = $tar_object->addModify(array($file_path_full), '', $_CONFIG['backup_path']);
943
-
944
- }
945
-
946
- #### END TAR #########################
947
- }
948
- else{
949
- #### CREATE BACKUP USING SERVER UTILITIES
950
-
951
- $file = str_replace(" ","\ ", $file);
952
-
953
- exec($_CONFIG[tarpath]." $excluded_cmd -".$_CONFIG['tarcompress']."vf $backup_file --update $file");
954
-
955
-
956
- #### END SERVER UTILITIES
957
- }
958
-
959
- }
960
- else{
961
-
962
- echo $inc_message = "directory - <b>".$buffer[0]."</b>";
963
-
964
- }
965
-
966
- }
967
-
968
- }
969
-
970
-
971
- #exit;
972
-
973
- echo "<br />New backup size: ".getFileSizeText(filesize($backup_file))."<br />";
974
-
975
-
976
- if($endf>=$lines){
977
-
978
- ## ALL DONE
979
- echo LM_MSG_BACK_11;
980
- @fclose($fperm);
981
-
982
-
983
- }
984
- else{
985
- ## REDIRECTING
986
- @fclose($fperm);
987
-
988
- echo "<br>All done, redirecting in ".$_CONFIG['refresh_time']." seconds, or <a href='$url'>click here </a>";
989
-
990
- echo "
991
- <script language='javascript'>
992
- function redirect(){
993
- window.location = '".$url."';
994
- }
995
-
996
- setTimeout(\"redirect()\",".$_CONFIG['refresh_time']."000);
997
-
998
- </script>";
999
-
1000
-
1001
- }
1002
-
1003
- }
1004
- else{
1005
-
1006
- echo "Unable to continue, could not open file $perm_file for reading!";
1007
-
1008
- }
1009
-
1010
- if($endf>=$lines){
1011
- $back_path = $_CONFIG['backups_dir'];
1012
- @unlink($back_path."/database-sql.sql");
1013
- @unlink($back_path."/perm.txt");
1014
- @unlink($back_path."/htaccess.txt");
1015
- @unlink($back_path."/.excl");
1016
- @unlink($back_path."/.excl_tar");
1017
- }
1018
- return;
1019
-
1020
- }
1021
-
1022
-
1023
- function generateBackup( $cid, $option ) {
1024
- // ----------------------------------------------------------
1025
- // Routine to generate recurse a folder structure and record
1026
- // the files, their sizes and parent folders
1027
- // ----------------------------------------------------------
1028
- global $_CONFIG;
1029
-
1030
-
1031
- # generate database backup if required
1032
-
1033
- if(!$_CONFIG['enable_db_backup']){
1034
-
1035
- $backupDatabase = 0;
1036
-
1037
- }else{
1038
-
1039
- $backupDatabase = $_REQUEST['dbbackup'];
1040
-
1041
- }
1042
-
1043
- if($_REQUEST[cron_access]){
1044
-
1045
- $_CONFIG['backup_refresh'] = 0;
1046
-
1047
- $_REQUEST['dbbackup_drop'] = $_CONFIG['cron_sql_drop'];
1048
-
1049
- if($_CONFIG[cron_btype] == '1')
1050
- $backupDatabase = 0;
1051
- }
1052
-
1053
-
1054
- if(!is_writeable($_CONFIG['clonerPath'])){
1055
- E_print( "Your backup directory ".$_CONFIG['clonerPath']." is not writeable or does not exists!");
1056
- return;
1057
- }
1058
- if(!is_writeable($_CONFIG['backups_dir'])){
1059
- E_print( "Required sql backup directory ".$_CONFIG['backups_dir']." is not writeable or does not exists!");
1060
- return;
1061
- }
1062
-
1063
-
1064
- # generate the backup set filename
1065
- #$urlinfo = parse_url($mosConfig_live_site);
1066
- #$domainname = strtolower(str_replace('.','_',$urlinfo[host]));
1067
- #$domainname= $_SERVER['HTTP_HOST'];
1068
- $domainname= $_CONFIG['mosConfig_live_site'];
1069
-
1070
-
1071
- if(($_CONFIG['mem']) && ($_CONFIG['backup_refresh'])){
1072
-
1073
- $f_ext = '.tar';
1074
- $_CONFIG['tarcompress'] = '';
1075
-
1076
- }elseif($_CONFIG['backup_compress']){
1077
-
1078
- $f_ext = '.tgz';
1079
- $_CONFIG['tarcompress'] = 'z';
1080
-
1081
- }else{
1082
-
1083
- $f_ext = '.tar';
1084
- $_CONFIG['tarcompress'] = '';
1085
- }
1086
-
1087
- /*if($_CONFIG['backup_refresh']){
1088
- $f_ext = ".tar";
1089
- }
1090
- elseif($_REQUEST[cron_dbonly]){
1091
- $f_ext = ".tar";
1092
- }
1093
- else{
1094
- $f_ext = ".tgz";
1095
- }*/
1096
-
1097
- if($_REQUEST['bname']==""){
1098
-
1099
- if($backupDatabase == 1){
1100
- if($_REQUEST['dbbackup_drop']){
1101
- $filename1 = 'backup_'.date("Y-m-d_H-i").'_'.$domainname.'-sql-drop'.$f_ext;
1102
- }
1103
- else{
1104
- $filename1 = 'backup_'.date("Y-m-d_H-i").'_'.$domainname.'-sql-nodrop'.$f_ext;
1105
- }
1106
- }
1107
- else
1108
- $filename1 = 'backup_'.date("Y-m-d_H-i").'_'.$domainname.'-nosql'.$f_ext;
1109
- }
1110
- else{
1111
- $filename1 = $_REQUEST['bname'].$f_ext;
1112
- }
1113
-
1114
- $sql_file = array();
1115
-
1116
- if ($backupDatabase == 1) {
1117
- $tables = array(); $tables[0] = 'all';
1118
- $excltables = $_REQUEST['excltables'];
1119
-
1120
- $sql_file[] = doBackup($tables, 'sql', 'local', 'both', $_SERVER['HTTP_USER_AGENT'], $_CONFIG['backups_dir'], $databaseResult, 'database' , $excltables, $_CONFIG['mysql_database']);
1121
-
1122
- $databaseResult = "<b>".$_CONFIG['mysql_database'].":</b> ".$databaseResult;
1123
- ############## ADD multiple databases #######################
1124
- $databases_incl = $_REQUEST['databases_incl'];
1125
-
1126
- if(is_array($databases_incl)){
1127
- foreach($databases_incl as $database_name)
1128
- if($database_name!=''){
1129
-
1130
- $excltables = "";
1131
- mysql_query("USE $database_name");
1132
-
1133
- $sql_file[] = doBackup($tables, 'sql', 'local', 'both', $_SERVER['HTTP_USER_AGENT'], $_CONFIG['backups_dir'], $databaseResult_incl, $database_name , $excltables, $database_name);
1134
-
1135
- $databaseResult .= "<br /> <b>$database_name:</b> ".$databaseResult_incl;
1136
-
1137
- }
1138
-
1139
- mysql_query("USE ".$_CONFIG['mysql_database']);
1140
-
1141
- }
1142
-
1143
-
1144
- } else {
1145
- $databaseResult = LM_DATABASE_EXCLUDED;
1146
- }
1147
-
1148
-
1149
- $excluded = array();
1150
-
1151
- $data = "";
1152
-
1153
- $excluded[] = $_CONFIG['backups_dir']."/".$filename1;
1154
-
1155
- if($_REQUEST['cron_access']){
1156
-
1157
- $data = $_CONFIG['cron_exclude'];
1158
-
1159
- }
1160
- elseif($_CONFIG[select_folders] == 1){
1161
-
1162
- $data = $_REQUEST['exluded'];
1163
-
1164
- }
1165
-
1166
- ##### START THE EXCLUSION FILTER
1167
- if(($fp = @fopen($_CONFIG['exfile'],"r"))&&(!$_REQUEST['cron_access'])){
1168
-
1169
- while(!feof($fp)){
1170
- $data .= fread($fp, 1024);
1171
- }
1172
- fclose($fp);
1173
- }
1174
-
1175
- if(sizeof($_REQUEST[cid])>0)
1176
- $data .=implode("\r\n", $_REQUEST[cid]);
1177
-
1178
- $_COOKIES = explode("\r\n", $data);
1179
-
1180
-
1181
- if(is_array($_COOKIES))
1182
- foreach($_COOKIES as $key=>$value)
1183
- if($value != ""){
1184
-
1185
- $value = str_replace($_CONFIG['backup_path'], "", $value);
1186
- if($value [0] !='/')
1187
- $value = '/'.$value;
1188
-
1189
- if((substr($value, strlen($value)-1, 1) == '/')&&(strlen($value)!=1))
1190
- $value = substr($value, 0 , strlen($value)-1);
1191
-
1192
- if(($value!="")&&($value!='/administrator/backups')){
1193
-
1194
- if(trim($value) != '/administrator')
1195
- $excluded[] = str_replace("//","/",$_CONFIG['backup_path']."/".$value);
1196
- else{
1197
- if ($handle = opendir($_CONFIG['backup_path'].'/administrator')) {
1198
- while (false !== ($file = readdir($handle))) {
1199
- if ($file != "." && $file != ".." && $file != "backups") {
1200
- $excluded[] = str_replace("//","/",$_CONFIG['backup_path']."/administrator/".$file);
1201
- }
1202
- }
1203
- closedir($handle);
1204
- }
1205
-
1206
- }
1207
-
1208
- }
1209
-
1210
- }
1211
- #### END EXCLUSION FILTER
1212
-
1213
- if(!$_CONFIG['add_backups_dir'])
1214
- {
1215
- # initialise list arrays, directories and files separately and array counters for them
1216
- $d_arr = array(); $d = 0;
1217
- $f_arr = array(); $f = 0;
1218
- $s_arr = array(); $s = 0;
1219
-
1220
- getBackupFiles($d_arr, $f_arr, $s_arr, $d, $f);;
1221
- $i = 0;
1222
- while($i<sizeof($f_arr)){
1223
-
1224
- $excluded[] = $_CONFIG['clonerPath']."/".$f_arr[$i];
1225
- $i++;
1226
-
1227
- }
1228
-
1229
- }
1230
- # obtain list of folders included in the backup
1231
- $includeFolder = array();
1232
-
1233
- #print_r($excluded);exit;
1234
-
1235
- #$includeFolder = confirmBackup('nohtml');
1236
-
1237
- #initialise list arrays, directories and files separately and array counters for them
1238
- $d_arr = array(); $d = 0;
1239
- $ds_arr = array();
1240
- $f_arr = array(); $f = 0;
1241
- $s_arr = array(); $s = 0;$mdir=0;
1242
-
1243
- $perm_file = $_CONFIG['backups_dir']."/perm.txt";
1244
- @unlink($perm_file);
1245
- $fperm = fopen($perm_file,"w");
1246
-
1247
- for($i=0; $i<sizeof($excluded); $i++ ){
1248
-
1249
- $excluded[$i] = str_replace("//", "/", $excluded[$i]);
1250
- }
1251
- #print_r($excluded);exit;
1252
- # obtain the list of files by recursing the mambo file store
1253
- recurseFiles($d_arr, $ds_arr, $f_arr, $s_arr, $d, $f, $s, $includeFolder, '', $excluded, $fperm);
1254
-
1255
- @fclose($fperm);
1256
-
1257
- @chmod($perm_file, 0777);
1258
-
1259
-
1260
- # format total archive size
1261
- $originalSize = getFileSizeText($s);
1262
-
1263
- # extend the file locations to include the full path
1264
-
1265
- for( $i=0; $i < count( $f_arr ); $i++ ) {
1266
-
1267
- if(!file_exists($f_arr[$i])){
1268
- unset($f_arr[$i]);
1269
- }
1270
-
1271
-
1272
- }
1273
-
1274
-
1275
-
1276
-
1277
- #if((file_exists($perm_file))&&(!in_array($perm_file, $f_arr)))
1278
- # $f_arr[] = $perm_file;
1279
-
1280
-
1281
- # add sql file to the backup
1282
-
1283
- if($_REQUEST[cron_access]){
1284
-
1285
- if(is_array($sql_file))
1286
- foreach($sql_file as $key=>$sqlfile)
1287
- if(($backupDatabase == 1)&&(!in_array($_CONFIG['backups_dir'].$sqlfile, $f_arr)))
1288
- $f_arr[] = $sqlfile;
1289
-
1290
- }
1291
-
1292
-
1293
-
1294
- $filename = $_CONFIG['clonerPath'].'/'.$filename1;
1295
-
1296
- $f_arr = array_unique($f_arr);
1297
-
1298
- # create the Zip file from the fileset array
1299
- @unlink($filename);
1300
-
1301
- $perm_lines = 0;
1302
-
1303
- $handle = @fopen($perm_file, "r");
1304
-
1305
- if ($handle) {
1306
-
1307
- while (!feof($handle)) {
1308
- fgets($handle, 4096);
1309
- $perm_lines++;
1310
- }
1311
-
1312
- fclose($handle);
1313
-
1314
- }
1315
-
1316
-
1317
- if(!$_CONFIG['mem']){
1318
- #### START TAR MANUAL MODE ############################################################
1319
-
1320
- if($_CONFIG['backup_refresh']){
1321
-
1322
- $f_arr = array($_CONFIG['backups_dir']."/index.html");
1323
-
1324
- }
1325
-
1326
-
1327
- if($_CONFIG['backup_refresh'])
1328
- $tar_type= "tar";
1329
- else
1330
- $tar_type= "tgz";
1331
-
1332
-
1333
- $tar_object = new Archive_Tar($filename, compression($tar_type));
1334
- #$tar_object->setErrorHandling(PEAR_ERROR_PRINT); // Optional error handling
1335
- $return = $tar_object->addModify($f_arr, '', $_CONFIG['backup_path']);
1336
-
1337
- if($return != 1){
1338
-
1339
- echo "Backup failed using tar mode, error code $return!";
1340
-
1341
- }
1342
-
1343
-
1344
-
1345
- if($_CONFIG['backup_refresh']){
1346
-
1347
- echo "Starting the manual backup process!<br />";
1348
- echo "Database backup: ".$databaseResult."<br /><br />";
1349
-
1350
- if(file_exists($filename))
1351
- {
1352
-
1353
- echo "Backup $filename created, we may continue!<br />";
1354
- #echo "Database backup: ".$databaseResult ."<br />";
1355
- echo "<a href='index2.php?option=com_cloner&lines=".$perm_lines."&task=refresh&backup=$filename&excl_manual=$excl_manual'>Please click here to continue!</a>";
1356
- return;
1357
-
1358
- }
1359
- else
1360
- {
1361
-
1362
- E_print( "Backup failed, please check your tar server utility support!");
1363
- return ;
1364
-
1365
- }
1366
-
1367
- }
1368
-
1369
-
1370
- #### END TAR MODE ############################################################
1371
- }
1372
- else{
1373
- #### CREATE BACKUP USING SERVER UTILITIES
1374
- $i=0;
1375
- chdir($_CONFIG['backup_path']);
1376
-
1377
- $excl_files = "";
1378
- while($i<sizeof($excluded)){
1379
- $file = $excluded[$i];
1380
- $file = str_replace($_CONFIG['backup_path'],"",$file);
1381
- $file = "##".$file;
1382
- $file = str_replace("##//","",$file);
1383
- $file = str_replace("##/","",$file);
1384
- $file = str_replace("##","",$file);
1385
-
1386
- $excl_files .= "/".$file."* ";
1387
-
1388
- $i++;
1389
- }
1390
-
1391
-
1392
- chdir($_CONFIG['backup_path']);
1393
-
1394
- $excl_cmd = "";
1395
-
1396
- if($fp = fopen($_CONFIG['exfile_tar'], "w")){
1397
- $i = 0;
1398
- while($i<sizeof($excluded)){
1399
- $file = $excluded[$i];
1400
- $file = str_replace($_CONFIG['backup_path'],"",$file);
1401
- $file = "##".$file;
1402
- $file = str_replace("##//","",$file);
1403
- $file = str_replace("##/","",$file);
1404
- $file = str_replace("##","",$file);
1405
-
1406
- $excl_cmd .= " --exclude=./".$file." ";
1407
-
1408
- $excl_files = "./".$file."\r\n";
1409
- fwrite($fp, $excl_files);
1410
- $i++;
1411
- }
1412
-
1413
- fclose($fp);
1414
- }
1415
-
1416
-
1417
-
1418
- if($_CONFIG['backup_refresh']){
1419
- ########## STARTING THE MANUAL BACKUP ######################################################
1420
-
1421
-
1422
- $exclude = $excl_cmd ." -X ".$_CONFIG['exfile_tar'];
1423
-
1424
- $excl_manual = $_CONFIG['exfile_tar']."_manual";
1425
-
1426
- if($fp = fopen($excl_manual, "w")){
1427
-
1428
- fwrite($fp, $exclude);
1429
-
1430
- fclose($fp);
1431
- }
1432
-
1433
-
1434
-
1435
- echo "Starting the manual backup process!<br />";
1436
- echo "Database backup: ".$databaseResult."<br /><br />";
1437
-
1438
- chdir($_CONFIG['backup_path']);
1439
-
1440
- #$filename = str_replace(".tgz",".tar",$filename);
1441
-
1442
- exec($_CONFIG[tarpath]." $exclude -c".$_CONFIG['tarcompress']."vf $filename ./administrator/backups/index.html");
1443
- exec($_CONFIG[tarpath]." -".$_CONFIG['tarcompress']."vf $filename --update ./administrator/backups/database-sql.sql");
1444
- exec($_CONFIG[tarpath]." -".$_CONFIG['tarcompress']."vf $filename --update ./administrator/backups/htaccess.txt");
1445
- exec($_CONFIG[tarpath]." -".$_CONFIG['tarcompress']."vf $filename --update ./administrator/backups/perm.txt");
1446
-
1447
- if(file_exists($filename))
1448
- {
1449
- echo "Backup $filename created, we may continue!<br />";
1450
- #echo "Database backup: ".$databaseResult."<br />" ;
1451
- echo "<a href='index2.php?option=com_cloner&lines=".$perm_lines."&task=refresh&backup=$filename&excl_manual=$excl_manual'>Please click here to continue!</a>";
1452
- return;
1453
- }
1454
- else{
1455
- E_print( "Backup failed, please check your tar server utility support!"); return ;
1456
- }
1457
-
1458
- return;
1459
-
1460
- }
1461
-
1462
-
1463
- if($_REQUEST[cron_dbonly]!=1){
1464
-
1465
- exec($_CONFIG[tarpath]." $excl_cmd "." -X ".$_CONFIG['exfile_tar']." -chv".$_CONFIG['tarcompress']."f $filename ./");
1466
-
1467
- }else{
1468
-
1469
- exec($_CONFIG[tarpath]." -".$_CONFIG['tarcompress']."cvf $filename ./administrator/backups/database-sql.sql");
1470
-
1471
- if(is_array($databases_incl)){
1472
- foreach($databases_incl as $database_name)
1473
- if($database_name!="") {
1474
- exec($_CONFIG[tarpath]." -".$_CONFIG['tarcompress']."vf $filename --update ./administrator/backups/".$database_name."-sql.sql");
1475
- }
1476
- }
1477
-
1478
- }
1479
-
1480
- #######END
1481
-
1482
-
1483
- chdir($_CONFIG['script_path']);
1484
- #### END
1485
- }
1486
-
1487
- if(!file_exists($filename)){
1488
- if($_CONFIG[archive_type]==1)
1489
- echo LM_MSG_BACK_12;
1490
- else
1491
- echo LM_MSG_BACK_13;
1492
- return;
1493
- }
1494
- # format the compressed size of the fileset
1495
- $archiveSize = getFileSizeText(filesize($filename));
1496
-
1497
-
1498
-
1499
- # load presentation layer
1500
- if($option!='nohtml'){
1501
-
1502
- HTML_cloner::generateBackup($filename1, $archiveSize, $originalSize, $mdir, $f, $databaseResult, $option );
1503
-
1504
- }else{
1505
-
1506
- logxx(HTML_cloner::generateBackup_text($filename1, $archiveSize, $originalSize, $mdir, $f, $databaseResult, $option ));
1507
-
1508
- }
1509
-
1510
- if(is_array($databases_incl)){
1511
- foreach($databases_incl as $database_name){
1512
- @unlink($_CONFIG['backups_dir']."/".$database_name."-sql.sql");
1513
- }
1514
- }
1515
- @unlink($_CONFIG['backups_dir']."/database-sql.sql");
1516
- @unlink($sql_file);
1517
- @unlink($perm_file);
1518
- @unlink($htaccess);
1519
- @unlink($_CONFIG['exfile']);
1520
- @unlink($_CONFIG['exfile_tar']);
1521
- return $filename1;
1522
-
1523
-
1524
- }
1525
-
1526
- function showHelp( $option ) {
1527
- // ----------------------------------------------------------
1528
- // Display the Help Screen
1529
- // ----------------------------------------------------------
1530
-
1531
- # load presentation layer
1532
- HTML_cloner::showHelp( $option );
1533
- }
1534
-
1535
-
1536
- function multidimsort(&$a)
1537
- {
1538
- sort($a);
1539
- $c = count($a);
1540
- for($i = 0; $i < $c; $i++)
1541
- if (is_array($a[$i]))
1542
- multidimsort($a[$i]);
1543
- }
1544
-
1545
- function compression($ext){
1546
-
1547
- switch ($ext){
1548
-
1549
- case 'tar': $compresion = 'false'; break;
1550
-
1551
- case 'tgz': $compresion = 'true'; break;
1552
-
1553
- default: $compresion = 'false'; break;
1554
-
1555
- }
1556
-
1557
- return $compression;
1558
- }
1559
-
1560
- function recurseFiles(&$d_arr, &$ds_arr, &$f_arr, &$s_arr, &$d, &$f, &$s, &$includedFolders, $path, $excluded=array(), $fperm = '') {
1561
- // ----------------------------------------------------------
1562
- // Routine to recurse a folder structure and record the files
1563
- // their sizes and parent folders
1564
- // ----------------------------------------------------------
1565
- global $mdir, $_CONFIG;
1566
-
1567
- $currentfullpath = $_CONFIG['backup_path'].$path;
1568
-
1569
- # Open possibly available directory
1570
- if((is_dir( $currentfullpath ) )&&(!is_link($currentfullpath))) {
1571
- if( $handle = @opendir( $currentfullpath ) ) {
1572
- while( false !== ( $file = readdir( $handle ) ) ) {
1573
- # Make sure we don't push parental directories or dotfiles (unix) into the arrays
1574
- if( ($file != "." && $file != "..") ) {
1575
- $exc =0;
1576
- $cfile = $currentfullpath . "/" . $file;
1577
- if(sizeof($excluded)!=0)
1578
- {
1579
- foreach($excluded as $key=>$value){
1580
-
1581
- if(($value!='')&&(!$exc)){
1582
- $cfile = str_replace("//", "/", $cfile);
1583
- if((strstr($cfile, $value)!='')||(strstr($cfile."/", $value)!='')){
1584
- $exc=1; break;
1585
- }
1586
- }
1587
- }
1588
- }
1589
- if(( @is_dir( $cfile ) ) && (!@is_link($currentfullpath))) {
1590
-
1591
- # Create array for directories
1592
- if(($fperm)&&(!$exc)){
1593
-
1594
- $perm = substr(sprintf('%o', fileperms($cfile)), -4);
1595
-
1596
- fwrite($fperm, str_replace($_CONFIG['backup_path'], "" , $cfile)."|".$perm."\n");
1597
-
1598
- }
1599
-
1600
- #$d_arr[++$d] = $cfile;
1601
-
1602
- if(!$exc)
1603
- recurseFiles($d_arr, $ds_arr, $f_arr, $s_arr, $d, $f, $s, $includedFolders, $path . "/" . $file, $excluded, $fperm);
1604
- } else {
1605
- #if ( in_array($currentfullpath, $includedFolders) )
1606
- {
1607
-
1608
- # Create array for files
1609
-
1610
- if(($fperm)&&(!$exc)){
1611
-
1612
- $perm = substr(sprintf('%o', @fileperms($cfile)), -4);
1613
-
1614
- #$sfile = sprintf("%.2f",get_filesize($cfile)/1024);
1615
-
1616
- fwrite($fperm, str_replace($_CONFIG['backup_path'], "" , $cfile)."|".$perm."\n");
1617
-
1618
- }
1619
- if(!$exc){
1620
-
1621
- #$s_arr[$f] = @filesize($cfile);
1622
-
1623
- if((!$_CONFIG['mem']) && ($_CONFIG['backup_refresh'] != 1 )){
1624
-
1625
- $f_arr[$f++] = $cfile;
1626
-
1627
- }else{
1628
-
1629
- $f++;
1630
-
1631
- }
1632
-
1633
-
1634
- $s += @filesize($cfile);
1635
-
1636
- }
1637
-
1638
-
1639
-
1640
- }
1641
- }
1642
- }
1643
- }
1644
- }
1645
- # Wrap things up if we're in a directory
1646
- #if( is_dir( $currentfullpath ) )
1647
- @closedir( $handle );
1648
- }
1649
- }
1650
-
1651
- function get_filesize($path){
1652
-
1653
- $sizeInBytes = filesize($path);
1654
- if (!$sizeInBytes) {
1655
- $command = "ls -l \"$path\" | cut -d \" \" -f 6";
1656
- $sizeInBytes = @exec($command);
1657
- }
1658
-
1659
- return $sizeInBytes;
1660
-
1661
- }
1662
-
1663
- function getBackupFiles(&$d_arr, &$f_arr, &$s_arr, &$d, &$f) {
1664
- // ----------------------------------------------------------
1665
- // Routine to list the existing backup files in the Component
1666
- // Backup folder
1667
- // ----------------------------------------------------------
1668
- global $_CONFIG;
1669
-
1670
- $path = $_CONFIG['clonerPath'];
1671
- # Open possibly available directory
1672
- if( is_dir( $path ) ) {
1673
- if( $handle = opendir( $path ) ) {
1674
- while( false !== ( $file = readdir( $handle ) ) ) {
1675
- # Make sure we don't push parental directories or dotfiles (unix) into the arrays
1676
- if( $file != "." && $file != ".." && $file[0] != "." ) {
1677
- if( is_dir( $path . "/" . $file ) )
1678
- # Create array for directories
1679
- $d_arr[$d++] = $file;
1680
- else
1681
- if ((strstr($file, '.zip' ))||(strstr($file, '.tgz' ))||(strstr($file, '.tar' ))) {
1682
- # Create array for files
1683
- $f_arr[$f++] = $file;
1684
- }
1685
- }
1686
- }
1687
- }
1688
- }
1689
-
1690
- # Wrap things up if we're in a directory
1691
- if( is_dir( $path ) )
1692
- closedir( $handle );
1693
- sort($f_arr);
1694
- # Print file list
1695
- for( $i=0; $i < count( $f_arr ); $i++ ) {
1696
- $s_arr[$i] = getFileSizeText(get_filesize( $path . "/" . $f_arr[$i] ));
1697
- }
1698
- }
1699
-
1700
-
1701
- function getFileSizeText($filesize) {
1702
- // ----------------------------------------------------------
1703
- // Routine to display a formatted version of a filesize
1704
- // ----------------------------------------------------------
1705
-
1706
- if( $filesize >= 1024 && $filesize < 1048576) {
1707
- # Size in kilobytes
1708
- return round( $filesize / 1024, 2 ) . " KB";
1709
- } elseif( $filesize >= 1048576 ) {
1710
- # Size in megabytes
1711
- return round( $filesize / 1024 / 1024, 2 ) . " MB";
1712
- } else {
1713
- # Size in bytes
1714
- return $filesize . " bytes";
1715
- }
1716
- }
1717
-
1718
- function doBackup( $tables, $OutType, $OutDest, $toBackUp, $UserAgent, $local_backup_path, &$databaseResult, $backupname, $excltables = array(), $dbname) {
1719
- global $database, $mosConfig_db, $mosConfig_sitename, $version,$option,$task, $mosConfig_dbprefix, $_CONFIG,$mosConfig_user,$mosConfig_password,$mosConfig_host;
1720
-
1721
-
1722
- if (!$tables[0])
1723
- {
1724
- $databaseResult = LM_DATABASE_MISSING_TABLES;
1725
- return;
1726
- }
1727
-
1728
-
1729
- /* Determine the mime type and file extension for the output file */
1730
-
1731
- if ($OutType == "zip") {
1732
- $filename = $backupname ."-sql". ".zip";
1733
-
1734
- } elseif ($OutType == "html") {
1735
- $filename = $backupname ."-sql". ".html";
1736
-
1737
- } else {
1738
- $filename = $backupname ."-sql". ".sql";
1739
-
1740
- };
1741
-
1742
-
1743
- $sqlfile = "$local_backup_path/$filename";
1744
- @unlink($sqlfile);
1745
- /* Store all the tables we want to back-up in variable $tables[] */
1746
-
1747
- if ($tables[0] == "all") {
1748
- array_pop($tables);
1749
- $query = mysql_query("SHOW tables");
1750
- while($row = mysql_fetch_array($query)){
1751
-
1752
- $tables_list[] = $row[0];
1753
-
1754
- }
1755
-
1756
-
1757
- $tables = array_merge($tables, $tables_list);
1758
- }
1759
- $newtables = array();
1760
-
1761
- #if(is_array($excltables))
1762
- foreach($tables as $key=>$value){
1763
- if(is_array($excltables)){
1764
- if(!in_array($value, $excltables))
1765
- $newtables[] = $value;
1766
- }
1767
- else
1768
- $newtables[] = $value;
1769
-
1770
- }
1771
-
1772
-
1773
- if(sizeof($tables) == sizeof($newtables))
1774
- $ex_dump = "";
1775
- else
1776
- $ex_dump = @implode(" ",$newtables);
1777
- $tables = $newtables;
1778
-
1779
- if($_REQUEST['dbbackup_drop']){
1780
- $drop = " --add-drop-table";
1781
- }
1782
- else{
1783
- $drop = "";
1784
- }
1785
-
1786
- if($_REQUEST['dbbackup_comp']){
1787
-
1788
- $drop .= " --compatible=".strtolower($_REQUEST['dbbackup_comp'])." ";
1789
-
1790
- }
1791
-
1792
- if($_CONFIG['sql_mem']){
1793
- exec ($_CONFIG[sqldump]." -h ".$_CONFIG['mysql_host']." -u ".$_CONFIG['mysql_user']." -p".$_CONFIG['mysql_pass']." ".$dbname." > ".$sqlfile ." $drop --allow-keywords ". $ex_dump);
1794
-
1795
- if(filesize($sqlfile))
1796
- $databaseResult = LM_DATABASE_BACKUP_COMPLETED.' ( '.getFileSizeText(filesize($sqlfile)).' )';
1797
- else
1798
- $databaseResult = LM_MSG_BACK_14;
1799
-
1800
- exec("chmod 777 $sqlfile");
1801
-
1802
- return $sqlfile;
1803
- }
1804
-
1805
- /*Added some default values for quotes and auto_increment problems*/
1806
- mysql_query("SET SQL_QUOTE_SHOW_CREATE=1;");
1807
- mysql_query("SET sql_mode = 0;");
1808
-
1809
- if($_REQUEST['dbbackup_comp'])
1810
- {
1811
-
1812
- mysql_query("SET sql_mode=".$_REQUEST['dbbackup_comp'].";");
1813
-
1814
- }
1815
-
1816
-
1817
- /* Store the "Create Tables" SQL in variable $CreateTable[$tblval] */
1818
- if ($toBackUp!="data")
1819
- {
1820
- foreach ($tables as $tblval)
1821
- {
1822
- $query = mysql_query("SHOW CREATE table `$tblval`");
1823
- $row = mysql_fetch_array($query);
1824
- $CreateTable[$tblval] = $row[1];
1825
- }
1826
- }
1827
-
1828
- /* Store all the FIELD TYPES being backed-up (text fields need to be delimited) in variable $FieldType*/
1829
- if ($toBackUp!="structure")
1830
- {
1831
- foreach ($tables as $tblval)
1832
- {
1833
- $query = mysql_query("SHOW FIELDS FROM $tblval");
1834
- while($row = mysql_fetch_row($query)){
1835
-
1836
- $fields[] = $row[0];
1837
-
1838
- }
1839
- foreach($fields as $field)
1840
- {
1841
- $FieldType[$tblval][$field->Field] = preg_replace("/[(0-9)]/",'', $field->Type);
1842
- }
1843
- }
1844
- }
1845
-
1846
-
1847
- if ($OutDest == "local") {
1848
-
1849
-
1850
-
1851
- $fp = fopen($sqlfile, "w");
1852
- if (!$fp) {
1853
- $databaseResult = LM_DATABASE_BACKUP_FAILED;
1854
- return ;
1855
- }
1856
- }
1857
-
1858
- /* Build the fancy header on the dump file */
1859
- $OutBuffer = "";
1860
- if ($OutType == 'html') {
1861
- } else {
1862
- $OutBuffer .= "#\n";
1863
- $OutBuffer .= "# Powered by XCloner Site Backup\n";
1864
- $OutBuffer .= "# http://www.joomlaplug.com\n";
1865
- $OutBuffer .= "#\n";
1866
- $OutBuffer .= "# Host: ".$_SERVER['HTTP_HOST']."\n";
1867
- $OutBuffer .= "# Generation Time: " . date("M j, Y \a\\t H:i") . "\n";
1868
- $OutBuffer .= "# Server version: " . getVersion() . "\n";
1869
- $OutBuffer .= "# PHP Version: " . phpversion() . "\n";
1870
- $OutBuffer .= "# Database : `" . $dbname . "`\n# --------------------------------------------------------\n";
1871
- }
1872
- fwrite($fp, $OutBuffer);
1873
- unset($OutBuffer);
1874
-
1875
- /* Okay, here's the meat & potatoes */
1876
- foreach ($tables as $tblval) {
1877
- if ($toBackUp != "data") {
1878
- if ($OutType == 'html') {
1879
- } else {
1880
- $OutBuffer .= "#\n# Table structure for table `$tblval`\n#\n";
1881
- if($_REQUEST['dbbackup_drop'])
1882
- $OutBuffer .= "#\nDROP table IF EXISTS $tblval;\n";
1883
-
1884
- $OutBuffer .= $CreateTable[$tblval].";\r\n";
1885
- }
1886
- }
1887
- fwrite($fp, $OutBuffer);
1888
- unset($OutBuffer);
1889
-
1890
-
1891
- if ($toBackUp != "structure") {
1892
-
1893
- $OutBuffer .= "#\n# Dumping data for table `$tblval`\n#\n";
1894
- $query = @mysql_query("SELECT * FROM $tblval");
1895
-
1896
- while($row = @mysql_fetch_array($query, MYSQL_ASSOC))
1897
- {
1898
-
1899
- $InsertDump = "INSERT INTO $tblval VALUES (";
1900
- $arr =$row;
1901
- foreach($arr as $key => $value)
1902
- {
1903
- $value = addslashes( $value );
1904
- $value = str_replace( "\n", '\r\n', $value );
1905
- $value = str_replace( "\r", '', $value );
1906
- #if (@preg_match ("/\b" . $FieldType[$tblval][$key] . "\b/i", "DATE TIME DATETIME CHAR VARCHAR TEXT TINYTEXT MEDIUMTEXT LONGTEXT BLOB TINYBLOB MEDIUMBLOB LONGBLOB ENUM SET"))
1907
- {
1908
- $InsertDump .= "'$value',";
1909
- }
1910
- /*else
1911
- {
1912
- $InsertDump .= "'$value',";
1913
- } */
1914
- }
1915
- $OutBuffer .= rtrim($InsertDump,',') . ");\n";
1916
- fwrite($fp, $OutBuffer);
1917
- unset($OutBuffer);
1918
- $i++;
1919
- }
1920
- }
1921
- }
1922
-
1923
- if ($OutDest == "local") {
1924
-
1925
-
1926
- #fwrite($fp, $OutBuffer);
1927
- fclose($fp);
1928
-
1929
- @chmod($sqlfile, 0777);
1930
-
1931
- $databaseResult = LM_DATABASE_BACKUP_COMPLETED.' ( '.getFileSizeText(filesize($sqlfile)).' )';
1932
- return $sqlfile;
1933
-
1934
- }
1935
- }
1936
-
1937
-
1938
- function getVersion(){
1939
-
1940
- $query = mysql_query("SELECT version()");
1941
- $row = mysql_fetch_array($query);
1942
- return $row[0];
1943
-
1944
- }
1945
-
1946
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/common.php DELETED
@@ -1,64 +0,0 @@
1
- <?php
2
- /**
3
- * XCloner
4
- * Oficial website: http://www.joomlaplug.com/
5
- * -------------------------------------------
6
- * Creator: Liuta Romulus Ovidiu
7
- * License: All Rights Reserved
8
- * Email: admin@joomlaplug.com
9
- * Revision: 1.0
10
- * Date: July 2007
11
- **/
12
- if ((!extension_loaded('zlib')) &&(function_exists('ob_start'))) {
13
- ob_end_clean();
14
- ob_start('ob_gzhandler');
15
- }
16
-
17
- ####################################
18
-
19
- $_CONFIG['multiple_config_dir'] = "configs";
20
- $strlen = strlen($_CONFIG['backup_path']);
21
- if((substr($_CONFIG['backup_path'], $strlen-1, $strlen) != '/') && (substr($_CONFIG['backup_path'], $strlen-1, $strlen) != '\\'))
22
- $_CONFIG['backup_path'] .= "/";
23
-
24
- $_CONFIG['backups_dir'] = $_CONFIG['backup_path']."/administrator/backups";#$_CONFIG['clonerPath'];#$_CONFIG['backup_path']."/backups";
25
- $_CONFIG['exfile'] = $_CONFIG['backups_dir']."/.excl";
26
- $_CONFIG['exfile_tar'] = $_CONFIG['backups_dir']."/.excl_tar";
27
- $_CONFIG['script_path'] = str_replace("\\","/",dirname(__FILE__));
28
-
29
- $lang_dir = "language";
30
-
31
- $task = $_REQUEST['task'];
32
- ####################################
33
-
34
-
35
- if($_CONFIG['enable_db_backup']){
36
-
37
- ### Connecting to the mysql server
38
- @mysql_connect($_CONFIG['mysql_host'], $_CONFIG['mysql_user'], $_CONFIG['mysql_pass']) or
39
- E_print("Could not connect: " . mysql_error());
40
- @mysql_select_db($_CONFIG['mysql_database']) or E_print("Unable to select database ".$_CONFIG['mysql_database']);
41
-
42
- }
43
-
44
-
45
- ### loading language
46
- if($_CONFIG['select_lang']!="")
47
-
48
- $mosConfig_lang = $_CONFIG['select_lang'];
49
-
50
- if (file_exists( "language/".$mosConfig_lang.".php" )) {
51
-
52
- include_once( "language/".$mosConfig_lang.".php" );
53
-
54
- @include_once( "language/english.php" );
55
-
56
- }
57
-
58
- else{
59
-
60
- include_once( "language/english.php" );
61
-
62
- }
63
-
64
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/configs/index.html DELETED
File without changes
trunk/css/dtree.css DELETED
@@ -1,34 +0,0 @@
1
- .dtree {
2
- font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
3
- font-size: 11px;
4
- color: #666;
5
- white-space: nowrap;
6
- }
7
- .dtree img {
8
- border: 0px;
9
- vertical-align: middle;
10
- }
11
- .dtree a {
12
- color: #333;
13
- text-decoration: none;
14
- }
15
- .dtree a.node, .dtree a.nodeSel {
16
- white-space: nowrap;
17
- padding: 1px 2px 1px 2px;
18
- }
19
- .dtree a.node:hover, .dtree a.nodeSel:hover {
20
- color: #333;
21
- text-decoration: underline;
22
- }
23
- .dtree a.nodeSel {
24
- background-color: #c0d2ec;
25
- }
26
-
27
- .menu_table {
28
- border-width: 1px 1px 1px 1px;
29
- border-spacing: 2px;
30
- border-style: outset outset outset outset;
31
- border-color: gray gray gray gray;
32
- border-collapse: separate;
33
- background-color: white;
34
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/css/main.css DELETED
@@ -1,686 +0,0 @@
1
- td.test a{
2
-
3
- color: white;
4
-
5
- }
6
-
7
- td.test a.hover{
8
-
9
- color: orange;
10
-
11
- }
12
-
13
-
14
- td.test {
15
-
16
- border: 2px solid gray;
17
-
18
- background: #a0a0a0;
19
-
20
- padding: 20px 30px 20px 20px;
21
-
22
- text-align:center;
23
-
24
- color: red;
25
-
26
- }
27
-
28
- td.test2 {
29
-
30
- border: 2px solid white;
31
-
32
- background: #dcdcdc;
33
-
34
- padding: 20px 30px 20px 20px;
35
-
36
- text-align:center;
37
-
38
- }
39
-
40
-
41
-
42
- /**
43
- * @version $Id: template_css.css 1594 2005-12-31 04:51:00Z stingrey $
44
- * @package Joomla
45
- * @copyright Copyright (C) 2005 Open Source Matters. All rights reserved.
46
- * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php
47
- * Joomla! is free software and parts of it may contain or be derived from works
48
- * licensed under the GNU General Public License or other free or open source
49
- * software licenses. See COPYRIGHT.php for copyright notices and details.
50
- */
51
-
52
- #wrapper {
53
- border: 0px;
54
- margin: 0px;
55
- margin-left: auto;
56
- margin-right: auto;
57
- padding: 0px;
58
- }
59
-
60
- #header {
61
- background-color: #FFF;
62
- background-position: right top;
63
- border-bottom: 4px solid #C64934;
64
- background: url(../images/header_bg.png);
65
- }
66
-
67
- #joomla {
68
- position: relative;
69
- width: 100%;
70
- background: url(../images/version.png) no-repeat;
71
- background-position: bottom right;
72
- margin: 0px;
73
- padding: 0px;
74
- }
75
-
76
- #wrapper1 div {
77
- border: 0px;
78
- margin: 0px;
79
- margin-left: auto;
80
- margin-right: auto;
81
- padding: 0px 5px 0px 5px;
82
- display: inline;
83
- }
84
-
85
- body {
86
- margin: 0px 0px 0px 0px;
87
- color : #333;
88
- background-color: #FFF;
89
- font-family: Arial, Helvetica, sans-serif;
90
- font-size: 12px;
91
- }
92
- a {
93
- color: #C64934;
94
- text-decoration: none;
95
- }
96
- a:hover {
97
- color : #30569D;
98
- text-decoration : underline;
99
- }
100
- a:active {
101
- color : #333333;
102
- text-decoration : underline;
103
- }
104
-
105
- table#toolbar {
106
- margin-right: 10px;
107
- }
108
-
109
- table#toolbar a.toolbar {
110
- color : #808080;
111
- text-decoration : none;
112
- display: block;
113
- border: 1px solid #DDD;
114
- width: 55px;
115
- padding: 2px 1px 2px 1px;
116
- }
117
- table#toolbar a.toolbar:hover {
118
- color : #C64934;
119
- border: 1px solid #c24733;
120
- background-color: #f1e8e6;
121
- padding: 3px 0px 1px 2px;
122
- }
123
- table#toolbar a.toolbar:active {
124
- color : #FF9900;
125
- }
126
- .pagenav {
127
- font-size : 10px;
128
- }
129
- a.pagenav {
130
- color : #808080;
131
- font-size : 10px;
132
- text-decoration : underline;
133
- }
134
- a.pagenav:hover {
135
- color : #FFF;
136
- font-size : 10px;
137
- }
138
- a.pagenav:active {
139
- color : #333;
140
- font-size : 10px;
141
- }
142
- .sectionname {
143
- color : #FF9900;
144
- font-family : Arial, Helvetica, sans-serif;
145
- font-size : 18px;
146
- font-weight: bold;
147
- }
148
- .button {
149
- border-top : solid 1px #d5d5d5;
150
- border-right : solid 1px #808080;
151
- border-bottom : solid 1px #808080;
152
- border-left : solid 1px #d5d5d5;
153
- color : #333;
154
- font-weight : bold;
155
- }
156
- .inputbox {
157
- z-index: -3;
158
- font-size: 11px;
159
- }
160
- .text_area {
161
- border : 1px solid #ccc;
162
- z-index: -3;
163
- font-size: 11px;
164
- }
165
- input, textarea, select {
166
- z-index : -3;
167
- font-size: 11px;
168
- }
169
- .small {
170
- color : #FF9900;
171
- font-family : Arial, Helvetica, sans-serif;
172
- font-size : 10px;
173
- text-decoration : none;
174
- }
175
- .smallgrey {
176
- color : #999;
177
- font-size : 10px;
178
- }
179
- .error {
180
- color : #C40000;
181
- font-size : 11px;
182
- font-weight : bold;
183
- }
184
- .contentheading, .componentheading, .moduleheading {
185
- font-size: 14px;
186
- font-weight: bold;
187
- }
188
- table.menubar {
189
- width: 100%;
190
-
191
- }
192
- td {
193
- font-size: 11px;
194
- }
195
- /* header block */
196
- table.adminheading {
197
- background-color: #FFF;
198
- font-family : Arial, Helvetica, sans-serif;
199
- margin: 0px;
200
- padding: 0px;
201
- border: 0px;
202
- width: 100%;
203
- border-collapse: collapse;
204
- color: #C64934;
205
- font-size : 18px;
206
- font-weight: bold;
207
- text-align: left;
208
- }
209
- table.adminheading th {
210
- background: url(../../../images/generic.png) no-repeat left;
211
- text-align: left;
212
- height: 50px;
213
- width: 99%;
214
- padding-left: 50px;
215
- border-bottom: 5px solid #fff;
216
- }
217
- table.adminheading th.checkin {
218
- background: url(../../../images/checkin.png) no-repeat left;
219
- }
220
- table.adminheading th.cpanel {
221
- background: url(../../../images/cpanel.png) no-repeat left;
222
- }
223
- table.adminheading th.config {
224
- background: url(../../../images/config.png) no-repeat left;
225
- }
226
- table.adminheading th.modules {
227
- background: url(../../../images/module.png) no-repeat left;
228
- }
229
- table.adminheading th.menus {
230
- background: url(../../../images/menu.png) no-repeat left;
231
- }
232
- table.adminheading th.trash {
233
- background: url(../../../images/trash.png) no-repeat left;
234
- }
235
- table.adminheading th.user {
236
- background: url(../../../images/user.png) no-repeat left;
237
- }
238
- table.adminheading th.inbox {
239
- background: url(../../../images/inbox.png) no-repeat left;
240
- }
241
- table.adminheading th.msgconfig {
242
- background: url(../../../images/message_config.png) no-repeat left;
243
- }
244
- table.adminheading th.langmanager {
245
- background: url(../../../images/langmanager.png) no-repeat left;
246
- }
247
- table.adminheading th.mediamanager {
248
- background: url(../../../images/mediamanager.png) no-repeat left;
249
- }
250
- table.adminheading th.impressions {
251
- background: url(../../../images/impressions.png) no-repeat left;
252
- }
253
- table.adminheading th.browser {
254
- background: url(../../../images/browser.png) no-repeat left;
255
- }
256
- table.adminheading th.searchtext {
257
- background: url(../../../images/searchtext.png) no-repeat left;
258
- }
259
- table.adminheading th.templates {
260
- background: url(../../../images/templatemanager.png) no-repeat left;
261
- }
262
- table.adminheading th.massemail {
263
- background: url(../../../images/massemail.png) no-repeat left;
264
- }
265
- table.adminheading th.frontpage {
266
- background: url(../../../images/frontpage.png) no-repeat left;
267
- }
268
- table.adminheading th.sections {
269
- background: url(../../../images/sections.png) no-repeat left;
270
- }
271
- table.adminheading th.edit {
272
- background: url(../../../images/addedit.png) no-repeat left;
273
- }
274
- table.adminheading th.categories {
275
- background: url(../../../images/categories.png) no-repeat left;
276
- }
277
- table.adminheading th.install {
278
- background: url(../../../images/install.png) no-repeat left;
279
- }
280
- table.adminheading th.dbbackup {
281
- background: url(../../../images/backup.png) no-repeat left;
282
- }
283
- table.adminheading th.dbrestore {
284
- background: url(../../../images/dbrestore.png) no-repeat left;
285
- }
286
- table.adminheading th.dbquery {
287
- background: url(../../../images/query.png) no-repeat left;
288
- }
289
- table.adminheading th.info {
290
- background: url(../../../images/systeminfo.png) no-repeat left;
291
- }
292
-
293
- table.adminheading td {
294
- color : #000;
295
- }
296
- /* standard list style table */
297
- table.adminlist {
298
- background-color: #FFFFFF;
299
- margin: 0px;
300
- padding: 0px;
301
- border: 1px solid #ddd;
302
- border-spacing: 0px;
303
- width: 100%;
304
- border-collapse: collapse;
305
- }
306
-
307
- table.adminlist th {
308
- margin: 0px;
309
- padding: 6px 4px 2px 4px;
310
- height: 25px;
311
- //background: url(../images/background.jpg);
312
- background-repeat: repeat;
313
- font-size: 11px;
314
- color: #000;
315
- }
316
- table.adminlist th.title {
317
- text-align: left;
318
- }
319
-
320
- table.adminlist th a:link, table.adminlist th a:visited {
321
- color: #c64934;
322
- text-decoration: none;
323
- }
324
-
325
- table.adminlist th a:hover {
326
- text-decoration: underline;
327
- }
328
-
329
- table.adminlist tr.row0 {
330
- background-color: #F9F9F9;
331
- }
332
- table.adminlist tr.row1 {
333
- background-color: #FFF;
334
- }
335
- table.adminlist td {
336
- border-bottom: 1px solid #e5e5e5;
337
- padding: 4px;
338
- }
339
- table.adminlist tr.row0:hover {
340
- background-color: #f1f1f1;
341
- }
342
- table.adminlist tr.row1:hover {
343
- background-color: #f1f1f1;
344
- }
345
- table.adminlist td.options {
346
- background-color: #ffffff;
347
- font-size: 8px;
348
- }
349
- select.options, input.options {
350
- font-size: 8px;
351
- font-weight: normal;
352
- border: 1px solid #999999;
353
- }
354
- /* standard form style table */
355
- table.adminform {
356
- background-color: #f9f9f9;
357
- border: solid 1px #d5d5d5;
358
- width: 100%;
359
- padding: 10px;
360
- border-collapse: collapse;
361
- }
362
- table.adminform tr.row0 {
363
- background-color: #f9f9f9;
364
- }
365
- table.adminform tr.row1 {
366
- background-color: #eeeeee;
367
- }
368
- table.adminform th {
369
- font-size: 11px;
370
- padding-top: 6px;
371
- padding-bottom: 2px;
372
- padding-left: 4px;
373
- padding-right: 4px;
374
- text-align: left;
375
- height: 25px;
376
- //background: url(../images/background.jpg);
377
- color: #000;
378
- background-repeat: repeat;
379
- }
380
- table.adminform td {
381
- padding: 3px;
382
- border: solid 1px #d5d5d5;
383
- text-align: left;
384
- }
385
- table.adminform td.editor {
386
- font-size: 9px;
387
- }
388
-
389
- table.cpanel td {
390
- text-align: center;
391
- }
392
-
393
- form {
394
- margin: 0px 0px 0px 0px;
395
- }
396
- /* Styles for dhtml tabbed-pages */
397
- .ontab {
398
- font-size: 12px;
399
- background-color: #ffae00;
400
- border: 1px solid #cccccc;
401
- width: 14%;
402
- text-align: center;
403
- cursor: pointer;
404
- font-weight: bold;
405
- color: #FFFFFF;
406
- }
407
- .offtab {
408
- font-size: 12px;
409
- background-color : #e5e5e5;
410
- border: 1px solid #cccccc;
411
- width: 14%;
412
- text-align: center;
413
- cursor: pointer;
414
- font-weight: normal;
415
- }
416
- .tabpadding {
417
- /*border-bottom: solid 1px #D5D5D5;*/
418
- }
419
- .tabheading {
420
- background-color: #FFAE00;
421
- color: #FFF;
422
- font-size: 10px;
423
- text-align: left;
424
- }
425
- .pagetext {
426
- visibility: hidden;
427
- display: none;
428
- position: relative;
429
- top: 0;
430
- }
431
- .menubackgr {
432
- background: #F1F3F5;
433
- border-bottom: 1px solid #cccccc;
434
-
435
- }
436
- .menudottedline {
437
- border-bottom: 1px solid #cccccc;
438
- border-top: 1px solid #ffffff;
439
- background-color: #F1F3F5;
440
- }
441
- .pathway {
442
- margin-left: 15px;
443
- }
444
- .adminheader {
445
- color : #c30;
446
- font-size : 24px;
447
- }
448
- /* Text passed with mosmsg url parameter */
449
- .message {
450
- font-family : "Trebuchet MS", Arial, Helvetica, sans-serif;
451
- font-weight: bold;
452
- font-size : 14px;
453
- color : #c30;
454
- text-align: center;
455
- }
456
-
457
- div.centermain {
458
- padding: 0 10px;
459
- }
460
-
461
- div.main {
462
- width: 99%;
463
- padding: 0;
464
- }
465
- .quote {
466
- margin: 4px;
467
- border: 1px solid #cccccc;
468
- background-color: #E9ECEF;
469
- padding: 10px;
470
- font-size: 12px;
471
- color: #254D78;
472
- }
473
-
474
-
475
- /* mod_quickicon */
476
-
477
- #cpanel { text-align: center; vertical-align: middle; }
478
-
479
- #cpanel div.icon { margin: 3px; }
480
- #cpanel div.icon a {
481
- display: block; float: left;
482
- height: 97px !important;
483
- height: 100px;
484
- width: 108px !important;
485
- width: 110px;
486
- vertical-align: middle;
487
- text-decoration : none;
488
- border: 1px solid #DDD;
489
- padding: 2px 5px 1px 5px;
490
- }
491
-
492
- #cpanel div.icon a:link { color : #808080; }
493
- #cpanel div.icon a:hover {
494
- color : #333;
495
- background-color: #f1e8e6;
496
- border: 1px solid #c24733;
497
- padding: 3px 4px 0px 6px;
498
- }
499
- #cpanel div.icon a:active { color : #808080; }
500
- #cpanel div.icon a:visited { color : #808080; }
501
-
502
- #cpanel div.icon img { margin-top: 13px; }
503
- #cpanel div.icon span { display: block; padding-top: 3px;}
504
-
505
- /* Tooltips */
506
- a.tooltip, a.tooltip:hover {
507
- color: black;
508
- text-decoration: none;
509
- border-bottom: 1px dashed #aaa;
510
- }
511
-
512
- a.tooltiplink {
513
- display: block;
514
- width: 100%;
515
- }
516
- a.tooltiplink:hover {
517
- text-decoration: none;
518
- }
519
-
520
- /* Fieldsets */
521
- fieldset {
522
- margin-bottom: 10px;
523
- border: 1px #ccc solid;
524
- padding: 5px;
525
- text-align: left;
526
- }
527
-
528
- fieldset p {
529
- margin: 10px 0px;
530
- }
531
-
532
- legend {
533
- color: #c24733;
534
- font-size: 1.1em;
535
- font-weight: bold;
536
- }
537
-
538
- /* Two Pane Formatting */
539
- #treecell {
540
- width: 20%;
541
- display: block;
542
- position: relative;
543
- float: left;
544
- margin: 0;
545
- padding: 2px;
546
- overflow: hidden;
547
- }
548
-
549
- .expander {
550
- float: right;
551
- }
552
-
553
- #datacell {
554
- width: 78%;
555
- display: block;
556
- float: left;
557
- margin: 0;
558
- padding: 2px 0px 0px 0px;
559
- }
560
-
561
- #datacellfull {
562
- width: 98%;
563
- display: block;
564
- float: left;
565
- margin: 0;
566
- padding: 2px;
567
- }
568
-
569
- #treecell fieldset {
570
- }
571
- #datacell fieldset {
572
- border: 1px #ccc solid;
573
- }
574
-
575
- span.editlinktip {
576
- text-decoration: none;
577
- border-bottom: 1px dashed #aaa;
578
- }
579
-
580
- table.paramlist td {
581
- height: 30px;
582
- }
583
-
584
- div.footer {
585
- clear: both;
586
- margin-top: 10px;
587
- }
588
-
589
-
590
-
591
-
592
- /* =GENERAL RULES */
593
-
594
- * {
595
- list-style:none;
596
- text-decoration:none;
597
- margin:0;
598
- padding:0;
599
- font-family:Verdana, Arial, Helvetica, sans-serif;
600
- }
601
-
602
-
603
- h1,h2,h3,h4,h5,h6 {
604
- font-weight:normal;
605
- }
606
-
607
- /* Clear floats */
608
- .clear {
609
- clear:both;
610
- }
611
-
612
- /* Link rules */
613
-
614
-
615
- /* -----------------------------------------------------------------------------*/
616
-
617
- /* Hacks */
618
-
619
- .clearfix:after {
620
- content:".";
621
- display:block;
622
- height:0;
623
- clear:both;
624
- visibility:hidden;
625
- }
626
-
627
- .clearfix {
628
- display:block;
629
- }
630
-
631
- /* Hides from IE-mac \*/
632
- * html .clearfix {height: 1%;}
633
- /* End hide from IE-mac */
634
- /*
635
- Theme Name: Flavor
636
- Theme URI: http://www.cssflavour.com
637
- Description: CSS Flavour Themes from DIT India
638
- Version: 1.0
639
- Author: Devdatt Gurjar
640
- Author URI: http://www.ditindia.com
641
- */
642
-
643
-
644
-
645
- /* =GENERAL RULES */
646
-
647
- * {
648
- list-style:none;
649
- text-decoration:none;
650
- margin:0;
651
- padding:0;
652
- font-family:Verdana, Arial, Helvetica, sans-serif;
653
- }
654
-
655
-
656
- h1,h2,h3,h4,h5,h6 {
657
- font-weight:normal;
658
- }
659
-
660
- /* Clear floats */
661
- .clear {
662
- clear:both;
663
- }
664
-
665
- /* Link rules */
666
-
667
-
668
- /* -----------------------------------------------------------------------------*/
669
-
670
- /* Hacks */
671
-
672
- .clearfix:after {
673
- content:".";
674
- display:block;
675
- height:0;
676
- clear:both;
677
- visibility:hidden;
678
- }
679
-
680
- .clearfix {
681
- display:block;
682
- }
683
-
684
- /* Hides from IE-mac \*/
685
- * html .clearfix {height: 1%;}
686
- /* End hide from IE-mac */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/css/tabber.css DELETED
@@ -1,109 +0,0 @@
1
- /* $Id: example.css,v 1.5 2006/03/27 02:44:36 pat Exp $ */
2
-
3
- /*--------------------------------------------------
4
- REQUIRED to hide the non-active tab content.
5
- But do not hide them in the print stylesheet!
6
- --------------------------------------------------*/
7
- .tabberlive .tabbertabhide {
8
- display:none;
9
- }
10
-
11
- /*--------------------------------------------------
12
- .tabber = before the tabber interface is set up
13
- .tabberlive = after the tabber interface is set up
14
- --------------------------------------------------*/
15
- .tabber {
16
- }
17
- .tabberlive {
18
- margin-top:1em;
19
- }
20
-
21
- /*--------------------------------------------------
22
- ul.tabbernav = the tab navigation list
23
- li.tabberactive = the active tab
24
- --------------------------------------------------*/
25
- ul.tabbernav
26
- {
27
- margin:0;
28
- padding: 3px 0;
29
- border-bottom: 1px solid #778;
30
- font: bold 12px Verdana, sans-serif;
31
- }
32
-
33
- ul.tabbernav li
34
- {
35
- list-style: none;
36
- margin: 0;
37
- display: inline;
38
- }
39
-
40
- ul.tabbernav li a
41
- {
42
- padding: 3px 0.5em;
43
- margin-left: 3px;
44
- border: 1px solid #778;
45
- border-bottom: none;
46
- background: #DDE;
47
- text-decoration: none;
48
- }
49
-
50
- ul.tabbernav li a:link { color: #448; }
51
- ul.tabbernav li a:visited { color: #667; }
52
-
53
- ul.tabbernav li a:hover
54
- {
55
- color: #000;
56
- background: #AAE;
57
- border-color: #227;
58
- }
59
-
60
- ul.tabbernav li.tabberactive a
61
- {
62
- background-color: #fff;
63
- border-bottom: 1px solid #fff;
64
- }
65
-
66
- ul.tabbernav li.tabberactive a:hover
67
- {
68
- color: #000;
69
- background: white;
70
- border-bottom: 1px solid white;
71
- }
72
-
73
- /*--------------------------------------------------
74
- .tabbertab = the tab content
75
- Add style only after the tabber interface is set up (.tabberlive)
76
- --------------------------------------------------*/
77
- .tabberlive .tabbertab {
78
- padding:5px;
79
- border:1px solid #aaa;
80
- border-top:0;
81
-
82
- /* If you don't want the tab size changing whenever a tab is changed
83
- you can set a fixed height */
84
-
85
- /* height:200px; */
86
-
87
- /* If you set a fix height set overflow to auto and you will get a
88
- scrollbar when necessary */
89
-
90
- /* overflow:auto; */
91
- }
92
-
93
- /* If desired, hide the heading since a heading is provided by the tab */
94
- .tabberlive .tabbertab h2 {
95
- display:none;
96
- }
97
- .tabberlive .tabbertab h3 {
98
- display:none;
99
- }
100
-
101
- /* Example of using an ID to set different styles for the tabs on the page */
102
- .tabberlive#tab1 {
103
- }
104
- .tabberlive#tab2 {
105
- }
106
- .tabberlive#tab2 .tabbertab {
107
- height:200px;
108
- overflow:auto;
109
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/images/about.png DELETED
Binary file
trunk/images/actions.gif DELETED
Binary file
trunk/images/actions.png DELETED
Binary file
trunk/images/backup.png DELETED
Binary file
trunk/images/css.png DELETED
Binary file
trunk/images/editions.png DELETED
Binary file
trunk/images/editionssm.png DELETED
Binary file
trunk/images/empty.gif DELETED
Binary file
trunk/images/filesave.png DELETED
Binary file
trunk/images/folder.png DELETED
Binary file
trunk/images/forum.png DELETED
Binary file
trunk/images/gen_settings.png DELETED
Binary file
trunk/images/help.png DELETED
Binary file
trunk/images/helpsm.png DELETED
Binary file
trunk/images/join.gif DELETED
Binary file
trunk/images/joinbottom.gif DELETED
Binary file
trunk/images/keep_icon.gif DELETED
Binary file
trunk/images/lang.png DELETED
Binary file
trunk/images/lhelp.png DELETED
Binary file
trunk/images/line.gif DELETED
Binary file
trunk/images/logo.gif DELETED
Binary file
trunk/images/logo.png DELETED
Binary file
trunk/images/minus.gif DELETED
Binary file
trunk/images/minusbottom.gif DELETED
Binary file
trunk/images/nolines_minus.gif DELETED
Binary file
trunk/images/nolines_plus.gif DELETED
Binary file
trunk/images/page.gif DELETED
Binary file
trunk/images/plus.gif DELETED
Binary file
trunk/images/plusbottom.gif DELETED
Binary file
trunk/images/publish_x.png DELETED
Binary file
trunk/images/settings.png DELETED
Binary file
trunk/images/support.png DELETED
Binary file
trunk/images/templatessm.png DELETED
Binary file
trunk/images/website.png DELETED
Binary file
trunk/images/wizard.png DELETED
Binary file
trunk/images/wizardsm.png DELETED
Binary file
trunk/images/wizardsm_restore.gif DELETED
Binary file
trunk/images/wizardsm_restore.png DELETED
Binary file
trunk/images/xcloner.png DELETED
Binary file
trunk/index.php DELETED
@@ -1,3 +0,0 @@
1
- <?php
2
- include "admin.cloner.php";
3
- ?>
 
 
 
trunk/index2.php DELETED
@@ -1,3 +0,0 @@
1
- <?php
2
- include "admin.cloner.php";
3
- ?>
 
 
 
trunk/install.xcloner.php DELETED
@@ -1,33 +0,0 @@
1
- <?php
2
- /**
3
- * @version $Id: install.xcloner.php 57 2007-07-08 18:05:52Z soeren $
4
- * @package XCloner
5
- * @copyright (C) 2005-2007 JoomlaPlug.com
6
- * @license JoomalPlug.com
7
- * @author Ovidiu
8
- */
9
- function com_install(){
10
- global $database;
11
-
12
- if( is_callable( array( 'JFactory', 'getDBO' ))) {
13
- $database = JFactory::getDBO();
14
- }
15
- $mypath = dirname(__FILE__);
16
-
17
- @chmod("components/com_xcloner/cloner.config.php", 0777);
18
- @mkdir("backups", 0777);
19
- @chmod("backups", 0777);
20
- @chmod("components/com_xcloner/configs", 0777);
21
- @chmod("components/com_xcloner/browser", 0755);
22
- @chmod("components/com_xcloner/", 0755);
23
- @chmod("components/com_xcloner/index.php", 0755);
24
- @chmod("components/com_xcloner/index2.php", 0755);
25
- @chmod("components/com_xcloner/cloner.cron.php", 0755);
26
-
27
- error_reporting( E_ALL ^ E_NOTICE );
28
-
29
- //add new admin menu images
30
- $database->setQuery("UPDATE #__components SET admin_menu_img = 'components/com_xcloner/images/xcloner.png' WHERE admin_menu_link = 'option=com_xcloner'");
31
- $database->query();
32
- }
33
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/javascript/dtree.js DELETED
@@ -1,672 +0,0 @@
1
-
2
- // Node object
3
-
4
- function Node(id, pid, name, url, title, target, icon, iconOpen, open) {
5
-
6
- this.id = id;
7
-
8
- this.pid = pid;
9
-
10
- this.name = name;
11
-
12
- this.url = url;
13
-
14
- this.title = title;
15
-
16
- this.target = target;
17
-
18
- this.icon = icon;
19
-
20
- this.iconOpen = iconOpen;
21
-
22
- this._io = open || false;
23
-
24
- this._is = false;
25
-
26
- this._ls = false;
27
-
28
- this._hc = false;
29
-
30
- this._ai = 0;
31
-
32
- this._p;
33
-
34
- };
35
-
36
-
37
-
38
- // Tree object
39
-
40
- function dTree(objName) {
41
-
42
- this.config = {
43
-
44
- target : null,
45
-
46
- folderLinks : true,
47
-
48
- useSelection : false,
49
-
50
- useCookies : true,
51
-
52
- useLines : true,
53
-
54
- useIcons : true,
55
-
56
- useStatusText : true,
57
-
58
- closeSameLevel : false,
59
-
60
- inOrder : true
61
-
62
- }
63
-
64
- this.icon = {
65
-
66
- root : 'images/logo.gif',
67
-
68
- folder : 'images/folder.gif',
69
-
70
- folderOpen : 'images/folderopen.gif',
71
-
72
- node : 'images/page.gif',
73
-
74
- empty : 'images/empty.gif',
75
-
76
- line : 'images/line.gif',
77
-
78
- join : 'images/join.gif',
79
-
80
- joinBottom : 'images/joinbottom.gif',
81
-
82
- plus : 'images/plus.gif',
83
-
84
- plusBottom : 'images/plusbottom.gif',
85
-
86
- minus : 'images/minus.gif',
87
-
88
- minusBottom : 'images/minusbottom.gif',
89
-
90
- nlPlus : 'images/nolines_plus.gif',
91
-
92
- nlMinus : 'images/nolines_minus.gif'
93
-
94
- };
95
-
96
- this.obj = objName;
97
-
98
- this.aNodes = [];
99
-
100
- this.aIndent = [];
101
-
102
- this.root = new Node(-1);
103
-
104
- this.selectedNode = null;
105
-
106
- this.selectedFound = false;
107
-
108
- this.completed = false;
109
-
110
- };
111
-
112
-
113
-
114
- // Adds a new node to the node array
115
-
116
- dTree.prototype.add = function(id, pid, name, url, title, target, icon, iconOpen, open) {
117
-
118
- this.aNodes[this.aNodes.length] = new Node(id, pid, name, url, title, target, icon, iconOpen, open);
119
-
120
- };
121
-
122
-
123
-
124
- // Open/close all nodes
125
-
126
- dTree.prototype.openAll = function() {
127
-
128
- this.oAll(true);
129
-
130
- };
131
-
132
- dTree.prototype.closeAll = function() {
133
-
134
- this.oAll(false);
135
-
136
- };
137
-
138
-
139
-
140
- // Outputs the tree to the page
141
-
142
- dTree.prototype.toString = function() {
143
-
144
- var str = '<div class="dtree">\n';
145
-
146
- if (document.getElementById) {
147
-
148
- if (this.config.useCookies) this.selectedNode = this.getSelected();
149
-
150
- str += this.addNode(this.root);
151
-
152
- } else str += 'Browser not supported.';
153
-
154
- str += '</div>';
155
-
156
- if (!this.selectedFound) this.selectedNode = null;
157
-
158
- this.completed = true;
159
-
160
- return str;
161
-
162
- };
163
-
164
-
165
-
166
- // Creates the tree structure
167
-
168
- dTree.prototype.addNode = function(pNode) {
169
-
170
- var str = '';
171
-
172
- var n=0;
173
-
174
- if (this.config.inOrder) n = pNode._ai;
175
-
176
- for (n; n<this.aNodes.length; n++) {
177
-
178
- if (this.aNodes[n].pid == pNode.id) {
179
-
180
- var cn = this.aNodes[n];
181
-
182
- cn._p = pNode;
183
-
184
- cn._ai = n;
185
-
186
- this.setCS(cn);
187
-
188
- if (!cn.target && this.config.target) cn.target = this.config.target;
189
-
190
- if (cn._hc && !cn._io && this.config.useCookies) cn._io = this.isOpen(cn.id);
191
-
192
- if (!this.config.folderLinks && cn._hc) cn.url = null;
193
-
194
- if (this.config.useSelection && cn.id == this.selectedNode && !this.selectedFound) {
195
-
196
- cn._is = true;
197
-
198
- this.selectedNode = n;
199
-
200
- this.selectedFound = true;
201
-
202
- }
203
-
204
- str += this.node(cn, n);
205
-
206
- if (cn._ls) break;
207
-
208
- }
209
-
210
- }
211
-
212
- return str;
213
-
214
- };
215
-
216
-
217
-
218
- // Creates the node icon, url and text
219
-
220
- dTree.prototype.node = function(node, nodeId) {
221
-
222
- var str = '<div class="dTreeNode">' + this.indent(node, nodeId);
223
-
224
- if (this.config.useIcons) {
225
-
226
- if (!node.icon) node.icon = (this.root.id == node.pid) ? this.icon.root : ((node._hc) ? this.icon.folder : this.icon.node);
227
-
228
- if (!node.iconOpen) node.iconOpen = (node._hc) ? this.icon.folderOpen : this.icon.node;
229
-
230
- if (this.root.id == node.pid) {
231
-
232
- node.icon = this.icon.root;
233
-
234
- node.iconOpen = this.icon.root;
235
-
236
- }
237
-
238
- str += '<img id="i' + this.obj + nodeId + '" src="' + ((node._io) ? node.iconOpen : node.icon) + '" alt="" />';
239
-
240
- }
241
-
242
- if (node.url) {
243
-
244
- str += '<a id="s' + this.obj + nodeId + '" class="' + ((this.config.useSelection) ? ((node._is ? 'nodeSel' : 'node')) : 'node') + '" href="' + node.url + '"';
245
-
246
- if (node.title) str += ' title="' + node.title + '"';
247
-
248
- if (node.target) str += ' target="' + node.target + '"';
249
-
250
- if (this.config.useStatusText) str += ' onmouseover="window.status=\'' + node.name + '\';return true;" onmouseout="window.status=\'\';return true;" ';
251
-
252
- if (this.config.useSelection && ((node._hc && this.config.folderLinks) || !node._hc))
253
-
254
- str += ' onclick="javascript: ' + this.obj + '.s(' + nodeId + ');"';
255
-
256
- str += '>';
257
-
258
- }
259
-
260
- else if ((!this.config.folderLinks || !node.url) && node._hc && node.pid != this.root.id)
261
-
262
- str += '<a href="javascript: ' + this.obj + '.o(' + nodeId + ');" class="node">';
263
-
264
- str += node.name;
265
-
266
- if (node.url || ((!this.config.folderLinks || !node.url) && node._hc)) str += '</a>';
267
-
268
- str += '</div>';
269
-
270
- if (node._hc) {
271
-
272
- str += '<div id="d' + this.obj + nodeId + '" class="clip" style="display:' + ((this.root.id == node.pid || node._io) ? 'block' : 'none') + ';">';
273
-
274
- str += this.addNode(node);
275
-
276
- str += '</div>';
277
-
278
- }
279
-
280
- this.aIndent.pop();
281
-
282
- return str;
283
-
284
- };
285
-
286
-
287
-
288
- // Adds the empty and line icons
289
-
290
- dTree.prototype.indent = function(node, nodeId) {
291
-
292
- var str = '';
293
-
294
- if (this.root.id != node.pid) {
295
-
296
- for (var n=0; n<this.aIndent.length; n++)
297
-
298
- str += '<img src="' + ( (this.aIndent[n] == 1 && this.config.useLines) ? this.icon.line : this.icon.empty ) + '" alt="" />';
299
-
300
- (node._ls) ? this.aIndent.push(0) : this.aIndent.push(1);
301
-
302
- if (node._hc) {
303
-
304
- str += '<a href="javascript: ' + this.obj + '.o(' + nodeId + ');"><img id="j' + this.obj + nodeId + '" src="';
305
-
306
- if (!this.config.useLines) str += (node._io) ? this.icon.nlMinus : this.icon.nlPlus;
307
-
308
- else str += ( (node._io) ? ((node._ls && this.config.useLines) ? this.icon.minusBottom : this.icon.minus) : ((node._ls && this.config.useLines) ? this.icon.plusBottom : this.icon.plus ) );
309
-
310
- str += '" alt="" /></a>';
311
-
312
- } else str += '<img src="' + ( (this.config.useLines) ? ((node._ls) ? this.icon.joinBottom : this.icon.join ) : this.icon.empty) + '" alt="" />';
313
-
314
- }
315
-
316
- return str;
317
-
318
- };
319
-
320
-
321
-
322
- // Checks if a node has any children and if it is the last sibling
323
-
324
- dTree.prototype.setCS = function(node) {
325
-
326
- var lastId;
327
-
328
- for (var n=0; n<this.aNodes.length; n++) {
329
-
330
- if (this.aNodes[n].pid == node.id) node._hc = true;
331
-
332
- if (this.aNodes[n].pid == node.pid) lastId = this.aNodes[n].id;
333
-
334
- }
335
-
336
- if (lastId==node.id) node._ls = true;
337
-
338
- };
339
-
340
-
341
-
342
- // Returns the selected node
343
-
344
- dTree.prototype.getSelected = function() {
345
-
346
- var sn = this.getCookie('cs' + this.obj);
347
-
348
- return (sn) ? sn : null;
349
-
350
- };
351
-
352
-
353
-
354
- // Highlights the selected node
355
-
356
- dTree.prototype.s = function(id) {
357
-
358
- if (!this.config.useSelection) return;
359
-
360
- var cn = this.aNodes[id];
361
-
362
- if (cn._hc && !this.config.folderLinks) return;
363
-
364
- if (this.selectedNode != id) {
365
-
366
- if (this.selectedNode || this.selectedNode==0) {
367
-
368
- eOld = document.getElementById("s" + this.obj + this.selectedNode);
369
-
370
- eOld.className = "node";
371
-
372
- }
373
-
374
- eNew = document.getElementById("s" + this.obj + id);
375
-
376
- eNew.className = "nodeSel";
377
-
378
- this.selectedNode = id;
379
-
380
- if (this.config.useCookies) this.setCookie('cs' + this.obj, cn.id);
381
-
382
- }
383
-
384
- };
385
-
386
-
387
-
388
- // Toggle Open or close
389
-
390
- dTree.prototype.o = function(id) {
391
-
392
- var cn = this.aNodes[id];
393
-
394
- this.nodeStatus(!cn._io, id, cn._ls);
395
-
396
- cn._io = !cn._io;
397
-
398
- if (this.config.closeSameLevel) this.closeLevel(cn);
399
-
400
- if (this.config.useCookies) this.updateCookie();
401
-
402
- };
403
-
404
-
405
-
406
- // Open or close all nodes
407
-
408
- dTree.prototype.oAll = function(status) {
409
-
410
- for (var n=0; n<this.aNodes.length; n++) {
411
-
412
- if (this.aNodes[n]._hc && this.aNodes[n].pid != this.root.id) {
413
-
414
- this.nodeStatus(status, n, this.aNodes[n]._ls)
415
-
416
- this.aNodes[n]._io = status;
417
-
418
- }
419
-
420
- }
421
-
422
- if (this.config.useCookies) this.updateCookie();
423
-
424
- };
425
-
426
-
427
-
428
- // Opens the tree to a specific node
429
-
430
- dTree.prototype.openTo = function(nId, bSelect, bFirst) {
431
-
432
- if (!bFirst) {
433
-
434
- for (var n=0; n<this.aNodes.length; n++) {
435
-
436
- if (this.aNodes[n].id == nId) {
437
-
438
- nId=n;
439
-
440
- break;
441
-
442
- }
443
-
444
- }
445
-
446
- }
447
-
448
- var cn=this.aNodes[nId];
449
-
450
- if (cn.pid==this.root.id || !cn._p) return;
451
-
452
- cn._io = true;
453
-
454
- cn._is = bSelect;
455
-
456
- if (this.completed && cn._hc) this.nodeStatus(true, cn._ai, cn._ls);
457
-
458
- if (this.completed && bSelect) this.s(cn._ai);
459
-
460
- else if (bSelect) this._sn=cn._ai;
461
-
462
- this.openTo(cn._p._ai, false, true);
463
-
464
- };
465
-
466
-
467
-
468
- // Closes all nodes on the same level as certain node
469
-
470
- dTree.prototype.closeLevel = function(node) {
471
-
472
- for (var n=0; n<this.aNodes.length; n++) {
473
-
474
- if (this.aNodes[n].pid == node.pid && this.aNodes[n].id != node.id && this.aNodes[n]._hc) {
475
-
476
- this.nodeStatus(false, n, this.aNodes[n]._ls);
477
-
478
- this.aNodes[n]._io = false;
479
-
480
- this.closeAllChildren(this.aNodes[n]);
481
-
482
- }
483
-
484
- }
485
-
486
- }
487
-
488
-
489
-
490
- // Closes all children of a node
491
-
492
- dTree.prototype.closeAllChildren = function(node) {
493
-
494
- for (var n=0; n<this.aNodes.length; n++) {
495
-
496
- if (this.aNodes[n].pid == node.id && this.aNodes[n]._hc) {
497
-
498
- if (this.aNodes[n]._io) this.nodeStatus(false, n, this.aNodes[n]._ls);
499
-
500
- this.aNodes[n]._io = false;
501
-
502
- this.closeAllChildren(this.aNodes[n]);
503
-
504
- }
505
-
506
- }
507
-
508
- }
509
-
510
-
511
-
512
- // Change the status of a node(open or closed)
513
-
514
- dTree.prototype.nodeStatus = function(status, id, bottom) {
515
-
516
- eDiv = document.getElementById('d' + this.obj + id);
517
-
518
- eJoin = document.getElementById('j' + this.obj + id);
519
-
520
- if (this.config.useIcons) {
521
-
522
- eIcon = document.getElementById('i' + this.obj + id);
523
-
524
- eIcon.src = (status) ? this.aNodes[id].iconOpen : this.aNodes[id].icon;
525
-
526
- }
527
-
528
- eJoin.src = (this.config.useLines)?
529
-
530
- ((status)?((bottom)?this.icon.minusBottom:this.icon.minus):((bottom)?this.icon.plusBottom:this.icon.plus)):
531
-
532
- ((status)?this.icon.nlMinus:this.icon.nlPlus);
533
-
534
- eDiv.style.display = (status) ? 'block': 'none';
535
-
536
- };
537
-
538
-
539
-
540
-
541
-
542
- // [Cookie] Clears a cookie
543
-
544
- dTree.prototype.clearCookie = function() {
545
-
546
- var now = new Date();
547
-
548
- var yesterday = new Date(now.getTime() - 1000 * 60 * 60 * 24);
549
-
550
- this.setCookie('co'+this.obj, 'cookieValue', yesterday);
551
-
552
- this.setCookie('cs'+this.obj, 'cookieValue', yesterday);
553
-
554
- };
555
-
556
-
557
-
558
- // [Cookie] Sets value in a cookie
559
-
560
- dTree.prototype.setCookie = function(cookieName, cookieValue, expires, path, domain, secure) {
561
-
562
- document.cookie =
563
-
564
- escape(cookieName) + '=' + escape(cookieValue)
565
-
566
- + (expires ? '; expires=' + expires.toGMTString() : '')
567
-
568
- + (path ? '; path=' + path : '')
569
-
570
- + (domain ? '; domain=' + domain : '')
571
-
572
- + (secure ? '; secure' : '');
573
-
574
- };
575
-
576
-
577
-
578
- // [Cookie] Gets a value from a cookie
579
-
580
- dTree.prototype.getCookie = function(cookieName) {
581
-
582
- var cookieValue = '';
583
-
584
- var posName = document.cookie.indexOf(escape(cookieName) + '=');
585
-
586
- if (posName != -1) {
587
-
588
- var posValue = posName + (escape(cookieName) + '=').length;
589
-
590
- var endPos = document.cookie.indexOf(';', posValue);
591
-
592
- if (endPos != -1) cookieValue = unescape(document.cookie.substring(posValue, endPos));
593
-
594
- else cookieValue = unescape(document.cookie.substring(posValue));
595
-
596
- }
597
-
598
- return (cookieValue);
599
-
600
- };
601
-
602
-
603
-
604
- // [Cookie] Returns ids of open nodes as a string
605
-
606
- dTree.prototype.updateCookie = function() {
607
-
608
- var str = '';
609
-
610
- for (var n=0; n<this.aNodes.length; n++) {
611
-
612
- if (this.aNodes[n]._io && this.aNodes[n].pid != this.root.id) {
613
-
614
- if (str) str += '.';
615
-
616
- str += this.aNodes[n].id;
617
-
618
- }
619
-
620
- }
621
-
622
- this.setCookie('co' + this.obj, str);
623
-
624
- };
625
-
626
-
627
-
628
- // [Cookie] Checks if a node id is in a cookie
629
-
630
- dTree.prototype.isOpen = function(id) {
631
-
632
- var aOpen = this.getCookie('co' + this.obj).split('.');
633
-
634
- for (var n=0; n<aOpen.length; n++)
635
-
636
- if (aOpen[n] == id) return true;
637
-
638
- return false;
639
-
640
- };
641
-
642
-
643
-
644
- // If Push and pop is not implemented by the browser
645
-
646
- if (!Array.prototype.push) {
647
-
648
- Array.prototype.push = function array_push() {
649
-
650
- for(var i=0;i<arguments.length;i++)
651
-
652
- this[this.length]=arguments[i];
653
-
654
- return this.length;
655
-
656
- }
657
-
658
- };
659
-
660
- if (!Array.prototype.pop) {
661
-
662
- Array.prototype.pop = function array_pop() {
663
-
664
- lastElement = this[this.length-1];
665
-
666
- this.length = Math.max(this.length-1,0);
667
-
668
- return lastElement;
669
-
670
- }
671
-
672
- };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/javascript/tabber.js DELETED
@@ -1,512 +0,0 @@
1
- function checkAll( n, fldName ) {
2
- if (!fldName) {
3
- fldName = 'cb';
4
- }
5
- var f = document.adminForm;
6
- var c = f.toggle.checked;
7
- var n2 = 0;
8
- for (i=0; i < n; i++) {
9
- cb = eval( 'f.' + fldName + '' + i );
10
- if (cb) {
11
- cb.checked = c;
12
- n2++;
13
- }
14
- }
15
- if (c) {
16
- document.adminForm.boxchecked.value = n2;
17
- } else {
18
- document.adminForm.boxchecked.value = 0;
19
- }
20
- }
21
-
22
- function tabberObj(argsObj)
23
- {
24
- var arg; /* name of an argument to override */
25
-
26
- /* Element for the main tabber div. If you supply this in argsObj,
27
- then the init() method will be called.
28
- */
29
- this.div = null;
30
-
31
- /* Class of the main tabber div */
32
- this.classMain = "tabber";
33
-
34
- /* Rename classMain to classMainLive after tabifying
35
- (so a different style can be applied)
36
- */
37
- this.classMainLive = "tabberlive";
38
-
39
- /* Class of each DIV that contains a tab */
40
- this.classTab = "tabbertab";
41
-
42
- /* Class to indicate which tab should be active on startup */
43
- this.classTabDefault = "tabbertabdefault";
44
-
45
- /* Class for the navigation UL */
46
- this.classNav = "tabbernav";
47
-
48
- /* When a tab is to be hidden, instead of setting display='none', we
49
- set the class of the div to classTabHide. In your screen
50
- stylesheet you should set classTabHide to display:none. In your
51
- print stylesheet you should set display:block to ensure that all
52
- the information is printed.
53
- */
54
- this.classTabHide = "tabbertabhide";
55
-
56
- /* Class to set the navigation LI when the tab is active, so you can
57
- use a different style on the active tab.
58
- */
59
- this.classNavActive = "tabberactive";
60
-
61
- /* Elements that might contain the title for the tab, only used if a
62
- title is not specified in the TITLE attribute of DIV classTab.
63
- */
64
- this.titleElements = ['h2','h3','h4','h5','h6'];
65
-
66
- /* Should we strip out the HTML from the innerHTML of the title elements?
67
- This should usually be true.
68
- */
69
- this.titleElementsStripHTML = true;
70
-
71
- /* If the user specified the tab names using a TITLE attribute on
72
- the DIV, then the browser will display a tooltip whenever the
73
- mouse is over the DIV. To prevent this tooltip, we can remove the
74
- TITLE attribute after getting the tab name.
75
- */
76
- this.removeTitle = true;
77
-
78
- /* If you want to add an id to each link set this to true */
79
- this.addLinkId = false;
80
-
81
- /* If addIds==true, then you can set a format for the ids.
82
- <tabberid> will be replaced with the id of the main tabber div.
83
- <tabnumberzero> will be replaced with the tab number
84
- (tab numbers starting at zero)
85
- <tabnumberone> will be replaced with the tab number
86
- (tab numbers starting at one)
87
- <tabtitle> will be replaced by the tab title
88
- (with all non-alphanumeric characters removed)
89
- */
90
- this.linkIdFormat = '<tabberid>nav<tabnumberone>';
91
-
92
- /* You can override the defaults listed above by passing in an object:
93
- var mytab = new tabber({property:value,property:value});
94
- */
95
- for (arg in argsObj) { this[arg] = argsObj[arg]; }
96
-
97
- /* Create regular expressions for the class names; Note: if you
98
- change the class names after a new object is created you must
99
- also change these regular expressions.
100
- */
101
- this.REclassMain = new RegExp('\\b' + this.classMain + '\\b', 'gi');
102
- this.REclassMainLive = new RegExp('\\b' + this.classMainLive + '\\b', 'gi');
103
- this.REclassTab = new RegExp('\\b' + this.classTab + '\\b', 'gi');
104
- this.REclassTabDefault = new RegExp('\\b' + this.classTabDefault + '\\b', 'gi');
105
- this.REclassTabHide = new RegExp('\\b' + this.classTabHide + '\\b', 'gi');
106
-
107
- /* Array of objects holding info about each tab */
108
- this.tabs = new Array();
109
-
110
- /* If the main tabber div was specified, call init() now */
111
- if (this.div) {
112
-
113
- this.init(this.div);
114
-
115
- /* We don't need the main div anymore, and to prevent a memory leak
116
- in IE, we must remove the circular reference between the div
117
- and the tabber object. */
118
- this.div = null;
119
- }
120
- }
121
-
122
-
123
- /*--------------------------------------------------
124
- Methods for tabberObj
125
- --------------------------------------------------*/
126
-
127
-
128
- tabberObj.prototype.init = function(e)
129
- {
130
- /* Set up the tabber interface.
131
-
132
- e = element (the main containing div)
133
-
134
- Example:
135
- init(document.getElementById('mytabberdiv'))
136
- */
137
-
138
- var
139
- childNodes, /* child nodes of the tabber div */
140
- i, i2, /* loop indices */
141
- t, /* object to store info about a single tab */
142
- defaultTab=0, /* which tab to select by default */
143
- DOM_ul, /* tabbernav list */
144
- DOM_li, /* tabbernav list item */
145
- DOM_a, /* tabbernav link */
146
- aId, /* A unique id for DOM_a */
147
- headingElement; /* searching for text to use in the tab */
148
-
149
- /* Verify that the browser supports DOM scripting */
150
- if (!document.getElementsByTagName) { return false; }
151
-
152
- /* If the main DIV has an ID then save it. */
153
- if (e.id) {
154
- this.id = e.id;
155
- }
156
-
157
- /* Clear the tabs array (but it should normally be empty) */
158
- this.tabs.length = 0;
159
-
160
- /* Loop through an array of all the child nodes within our tabber element. */
161
- childNodes = e.childNodes;
162
- for(i=0; i < childNodes.length; i++) {
163
-
164
- /* Find the nodes where class="tabbertab" */
165
- if(childNodes[i].className &&
166
- childNodes[i].className.match(this.REclassTab)) {
167
-
168
- /* Create a new object to save info about this tab */
169
- t = new Object();
170
-
171
- /* Save a pointer to the div for this tab */
172
- t.div = childNodes[i];
173
-
174
- /* Add the new object to the array of tabs */
175
- this.tabs[this.tabs.length] = t;
176
-
177
- /* If the class name contains classTabDefault,
178
- then select this tab by default.
179
- */
180
- if (childNodes[i].className.match(this.REclassTabDefault)) {
181
- defaultTab = this.tabs.length-1;
182
- }
183
- }
184
- }
185
-
186
- /* Create a new UL list to hold the tab headings */
187
- DOM_ul = document.createElement("ul");
188
- DOM_ul.className = this.classNav;
189
-
190
- /* Loop through each tab we found */
191
- for (i=0; i < this.tabs.length; i++) {
192
-
193
- t = this.tabs[i];
194
-
195
- /* Get the label to use for this tab:
196
- From the title attribute on the DIV,
197
- Or from one of the this.titleElements[] elements,
198
- Or use an automatically generated number.
199
- */
200
- t.headingText = t.div.title;
201
-
202
- /* Remove the title attribute to prevent a tooltip from appearing */
203
- if (this.removeTitle) { t.div.title = ''; }
204
-
205
- if (!t.headingText) {
206
-
207
- /* Title was not defined in the title of the DIV,
208
- So try to get the title from an element within the DIV.
209
- Go through the list of elements in this.titleElements
210
- (typically heading elements ['h2','h3','h4'])
211
- */
212
- for (i2=0; i2<this.titleElements.length; i2++) {
213
- headingElement = t.div.getElementsByTagName(this.titleElements[i2])[0];
214
- if (headingElement) {
215
- t.headingText = headingElement.innerHTML;
216
- if (this.titleElementsStripHTML) {
217
- t.headingText.replace(/<br>/gi," ");
218
- t.headingText = t.headingText.replace(/<[^>]+>/g,"");
219
- }
220
- break;
221
- }
222
- }
223
- }
224
-
225
- if (!t.headingText) {
226
- /* Title was not found (or is blank) so automatically generate a
227
- number for the tab.
228
- */
229
- t.headingText = i + 1;
230
- }
231
-
232
- /* Create a list element for the tab */
233
- DOM_li = document.createElement("li");
234
-
235
- /* Save a reference to this list item so we can later change it to
236
- the "active" class */
237
- t.li = DOM_li;
238
-
239
- /* Create a link to activate the tab */
240
- DOM_a = document.createElement("a");
241
- DOM_a.appendChild(document.createTextNode(t.headingText));
242
- DOM_a.href = "javascript:void(null);";
243
- DOM_a.title = t.headingText;
244
- DOM_a.onclick = this.navClick;
245
-
246
- /* Add some properties to the link so we can identify which tab
247
- was clicked. Later the navClick method will need this.
248
- */
249
- DOM_a.tabber = this;
250
- DOM_a.tabberIndex = i;
251
-
252
- /* Do we need to add an id to DOM_a? */
253
- if (this.addLinkId && this.linkIdFormat) {
254
-
255
- /* Determine the id name */
256
- aId = this.linkIdFormat;
257
- aId = aId.replace(/<tabberid>/gi, this.id);
258
- aId = aId.replace(/<tabnumberzero>/gi, i);
259
- aId = aId.replace(/<tabnumberone>/gi, i+1);
260
- aId = aId.replace(/<tabtitle>/gi, t.headingText.replace(/[^a-zA-Z0-9\-]/gi, ''));
261
-
262
- DOM_a.id = aId;
263
- }
264
-
265
- /* Add the link to the list element */
266
- DOM_li.appendChild(DOM_a);
267
-
268
- /* Add the list element to the list */
269
- DOM_ul.appendChild(DOM_li);
270
- }
271
-
272
- /* Add the UL list to the beginning of the tabber div */
273
- e.insertBefore(DOM_ul, e.firstChild);
274
-
275
- /* Make the tabber div "live" so different CSS can be applied */
276
- e.className = e.className.replace(this.REclassMain, this.classMainLive);
277
-
278
- /* Activate the default tab, and do not call the onclick handler */
279
- this.tabShow(defaultTab);
280
-
281
- /* If the user specified an onLoad function, call it now. */
282
- if (typeof this.onLoad == 'function') {
283
- this.onLoad({tabber:this});
284
- }
285
-
286
- return this;
287
- };
288
-
289
-
290
- tabberObj.prototype.navClick = function(event)
291
- {
292
- /* This method should only be called by the onClick event of an <A>
293
- element, in which case we will determine which tab was clicked by
294
- examining a property that we previously attached to the <A>
295
- element.
296
-
297
- Since this was triggered from an onClick event, the variable
298
- "this" refers to the <A> element that triggered the onClick
299
- event (and not to the tabberObj).
300
-
301
- When tabberObj was initialized, we added some extra properties
302
- to the <A> element, for the purpose of retrieving them now. Get
303
- the tabberObj object, plus the tab number that was clicked.
304
- */
305
-
306
- var
307
- rVal, /* Return value from the user onclick function */
308
- a, /* element that triggered the onclick event */
309
- self, /* the tabber object */
310
- tabberIndex, /* index of the tab that triggered the event */
311
- onClickArgs; /* args to send the onclick function */
312
-
313
- a = this;
314
- if (!a.tabber) { return false; }
315
-
316
- self = a.tabber;
317
- tabberIndex = a.tabberIndex;
318
-
319
- /* Remove focus from the link because it looks ugly.
320
- I don't know if this is a good idea...
321
- */
322
- a.blur();
323
-
324
- /* If the user specified an onClick function, call it now.
325
- If the function returns false then do not continue.
326
- */
327
- if (typeof self.onClick == 'function') {
328
-
329
- onClickArgs = {'tabber':self, 'index':tabberIndex, 'event':event};
330
-
331
- /* IE uses a different way to access the event object */
332
- if (!event) { onClickArgs.event = window.event; }
333
-
334
- rVal = self.onClick(onClickArgs);
335
- if (rVal === false) { return false; }
336
- }
337
-
338
- self.tabShow(tabberIndex);
339
-
340
- return false;
341
- };
342
-
343
-
344
- tabberObj.prototype.tabHideAll = function()
345
- {
346
- var i; /* counter */
347
-
348
- /* Hide all tabs and make all navigation links inactive */
349
- for (i = 0; i < this.tabs.length; i++) {
350
- this.tabHide(i);
351
- }
352
- };
353
-
354
-
355
- tabberObj.prototype.tabHide = function(tabberIndex)
356
- {
357
- var div;
358
-
359
- if (!this.tabs[tabberIndex]) { return false; }
360
-
361
- /* Hide a single tab and make its navigation link inactive */
362
- div = this.tabs[tabberIndex].div;
363
-
364
- /* Hide the tab contents by adding classTabHide to the div */
365
- if (!div.className.match(this.REclassTabHide)) {
366
- div.className += ' ' + this.classTabHide;
367
- }
368
- this.navClearActive(tabberIndex);
369
-
370
- return this;
371
- };
372
-
373
-
374
- tabberObj.prototype.tabShow = function(tabberIndex)
375
- {
376
- /* Show the tabberIndex tab and hide all the other tabs */
377
-
378
- var div;
379
-
380
- if (!this.tabs[tabberIndex]) { return false; }
381
-
382
- /* Hide all the tabs first */
383
- this.tabHideAll();
384
-
385
- /* Get the div that holds this tab */
386
- div = this.tabs[tabberIndex].div;
387
-
388
- /* Remove classTabHide from the div */
389
- div.className = div.className.replace(this.REclassTabHide, '');
390
-
391
- /* Mark this tab navigation link as "active" */
392
- this.navSetActive(tabberIndex);
393
-
394
- /* If the user specified an onTabDisplay function, call it now. */
395
- if (typeof this.onTabDisplay == 'function') {
396
- this.onTabDisplay({'tabber':this, 'index':tabberIndex});
397
- }
398
-
399
- return this;
400
- };
401
-
402
- tabberObj.prototype.navSetActive = function(tabberIndex)
403
- {
404
- /* Note: this method does *not* enforce the rule
405
- that only one nav item can be active at a time.
406
- */
407
-
408
- /* Set classNavActive for the navigation list item */
409
- this.tabs[tabberIndex].li.className = this.classNavActive;
410
-
411
- return this;
412
- };
413
-
414
-
415
- tabberObj.prototype.navClearActive = function(tabberIndex)
416
- {
417
- /* Note: this method does *not* enforce the rule
418
- that one nav should always be active.
419
- */
420
-
421
- /* Remove classNavActive from the navigation list item */
422
- this.tabs[tabberIndex].li.className = '';
423
-
424
- return this;
425
- };
426
-
427
-
428
- /*==================================================*/
429
-
430
-
431
- function tabberAutomatic(tabberArgs)
432
- {
433
- /* This function finds all DIV elements in the document where
434
- class=tabber.classMain, then converts them to use the tabber
435
- interface.
436
-
437
- tabberArgs = an object to send to "new tabber()"
438
- */
439
- var
440
- tempObj, /* Temporary tabber object */
441
- divs, /* Array of all divs on the page */
442
- i; /* Loop index */
443
-
444
- if (!tabberArgs) { tabberArgs = {}; }
445
-
446
- /* Create a tabber object so we can get the value of classMain */
447
- tempObj = new tabberObj(tabberArgs);
448
-
449
- /* Find all DIV elements in the document that have class=tabber */
450
-
451
- /* First get an array of all DIV elements and loop through them */
452
- divs = document.getElementsByTagName("div");
453
- for (i=0; i < divs.length; i++) {
454
-
455
- /* Is this DIV the correct class? */
456
- if (divs[i].className &&
457
- divs[i].className.match(tempObj.REclassMain)) {
458
-
459
- /* Now tabify the DIV */
460
- tabberArgs.div = divs[i];
461
- divs[i].tabber = new tabberObj(tabberArgs);
462
- }
463
- }
464
-
465
- return this;
466
- }
467
-
468
-
469
- /*==================================================*/
470
-
471
-
472
- function tabberAutomaticOnLoad(tabberArgs)
473
- {
474
- /* This function adds tabberAutomatic to the window.onload event,
475
- so it will run after the document has finished loading.
476
- */
477
- var oldOnLoad;
478
-
479
- if (!tabberArgs) { tabberArgs = {}; }
480
-
481
- /* Taken from: http://simon.incutio.com/archive/2004/05/26/addLoadEvent */
482
-
483
- oldOnLoad = window.onload;
484
- if (typeof window.onload != 'function') {
485
- window.onload = function() {
486
- tabberAutomatic(tabberArgs);
487
- };
488
- } else {
489
- window.onload = function() {
490
- oldOnLoad();
491
- tabberAutomatic(tabberArgs);
492
- };
493
- }
494
- }
495
-
496
-
497
- /*==================================================*/
498
-
499
-
500
- /* Run tabberAutomaticOnload() unless the "manualStartup" option was specified */
501
-
502
- if (typeof tabberOptions == 'undefined') {
503
-
504
- tabberAutomaticOnLoad();
505
-
506
- } else {
507
-
508
- if (!tabberOptions['manualStartup']) {
509
- tabberAutomaticOnLoad(tabberOptions);
510
- }
511
-
512
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/language/deutsch.php DELETED
@@ -1,410 +0,0 @@
1
- <?php
2
- /**
3
- * @XCloner 2.1 - German language file
4
- * @Translated by Joomla Blog Insider / www.joomla-blog.net - Felix Schumpelick
5
- * @by order of XCloner.com
6
- * @version 1.0 - 15.07.08
7
- **/
8
-
9
- // --- FRONT AREA---//
10
- define("LM_FRONT_CHOOSE_PACKAGE","<b>W�hle das zu installierende Paket: </b>");
11
- define("LM_FRONT_CHOOSE_PACKAGE_SUB","<small>Bitte w�hle die zu installierende Joomla Version</small>");
12
- define("LM_FRONT_TOP","<span colspan='2' class='contentheading'>Joomla Software online installieren</span>");
13
- define("LM_FRONT_TOP_FTP_DETAILS","<h2>Gib deine FTP Zugangsdaten unten ein: </h2>");
14
- define("LM_FRONT_WEBSITE_URL","<b>URL der Webseite: </b>");
15
- define("LM_FRONT_WEBSITE_URL_SUB","<small>Gib die Webseiten URL ein, wo Joomla installiert werden soll. Beispiel: http://www.seitenname.de/Joomla</small>");
16
- define("LM_FRONT_FTP_HOST","<b>FTP Hostname:</b>");
17
- define("LM_FRONT_FTP_HOST_SUB","<small>Beispiel ftp.seitenname.de</small>");
18
- define("LM_FRONT_FTP_USER","<b>FTP Username:</b>");
19
- define("LM_FRONT_FTP_USER_SUB","<small>Beispiel John</small>");
20
- define("LM_FRONT_FTP_PASS","<b>FTP Kennwort:</b>");
21
- define("LM_FRONT_FTP_PASS_SUB","<small>Beispiel johnpass</small>");
22
- define("LM_FRONT_FTP_DIR","<b>FTP Verzeichnis: </b>");
23
- define("LM_FRONT_FTP_DIR_SUB","<small>FTP Verzeichnis in dem du Joomla installieren willst. Beispiel: public_html/Joomla/ oder htdocs/Joomla/. Stelle sicher, dass dieses Verzeichnis volle Schreibrechte hat, normalerweise 777</small>");
24
- define("LM_TRANSFER_FTP_INCT","Inkrementeller Transfer:");
25
- define("LM_TRANSFER_FTP_INCT_SUB","Datentransfer �ber FTP im inkrementellen Modus um Timeouts oder wei�e Seiten zu vermeiden.");
26
- define("LM_FRONT_BOTTOM","Hat nicht funktioniert? Bitte teile uns mit, was das Problem / die Fehlermeldung ist. Wir helfen dir weiter: <a href='http://www.xcloner.com/contact/3/'>XCloner Kontaktseite </a><br />Powered by<a href='http://www.xcloner.com'>XCloner</a>");
27
- define("LM_FRONT_MSG_OK","Wir haben das Backup-Wiederherstellung Programm auf deine FTP Seite hochgeladen. Um fortzufahren klicke hier");
28
- define("LM_NOPAKCAGE_ERROR","Es wurde kein Backup Paket gew�hlt. Abbruch...!");
29
-
30
- // --- BACKEND AREA---//
31
- define("LM_DATABASE_EXCLUDE_TABLES","W�hle die Tabellen, die vom Backup ausgeschlossen werden sollen (optional)");
32
- define("LM_CONFIG_SYSTEM_FOLDER","Ordner Anzeige:");
33
- define("LM_CONFIG_SYSTEM_FOLDER_SUB","Bitte w�hle die Methode aus mit der die Ordner von der Backuperstellung ausgeschlossen werden sollen");
34
- define("LM_CONFIG_SYSTEM_LANG","System Sprache:");
35
- define("LM_CONFIG_SYSTEM_LANG_SUB","<small>Konfiguriert die XCloner Sprache. Wenn auf 'System Default' gesetzt, dann wird die Joomla default Sprache angezeigt.</small>");
36
- define("LM_CONFIG_SYSTEM_LANG_DEFAULT","System Default");
37
- define("LM_CONFIG_SYSTEM_DOWNLOAD","Direkten Download Link aktivieren:");
38
- define("LM_CONFIG_SYSTEM_DOWNLOAD_SUB","Wenn dies aktiviert ist, im 'Backups anzeigen' Screen,
39
- ist der Download Link ein direkter Link von deinem Server. Beachte, dass der Backup Pfad im
40
- Joomla Root Pfad liegen muss");
41
- define("LM_CONFIG_DISPLAY","Sprachauswahl f�r XCloner");
42
- define("LM_CONFIG_SYSTEM","System Einstellungen");
43
- define("LM_CONFIG_SYSTEM_FTP","FTP Transfer Modus");
44
- define("LM_CONFIG_SYSTEM_FTP_SUB","<small>W�hle aus, wie die Dateien vom einen Server zum anderen Server, unter Verwendung des FTP Protokolls, transferiert werden sollen.</small>");
45
- define("LM_CONFIG_MEM","Backup unter Benutzung von Server Funktionen, falls verf�gbar:");
46
- define("LM_CONFIG_MEM_SUB","<small>Wenn du diese Optionen aktivierst, muss dein Server <b>ZIP oder TAR</b> und / oder <b>MySQLDump</b> Befehle unterst�tzen. Zudem musst du deren Pfade angeben. Auch die PHP Funktion <b>exec()</b> muss aktiviert sein. Im Zweifelsfalle frage am Besten bei deinem Hoster nach, ob du diese Funktionen nutzen kannst.</small>");
47
- define("LM_CRON_DB_BACKUP","Datenbank Backup einschalten:");
48
- define("LM_CRON_DB_BACKUP_SUB","<small>W�hle 'Ja', wenn du ein Backup der MySQL Daten erstellen willst</small>");
49
- define("LM_CONFIG_SYSTEM_MBACKUP","Backup Verzeichnis im Klon integrieren:");
50
- define("LM_CONFIG_SYSTEM_MBACKUP_SUB","<small>Wenn aktiviert, dann enth�lt das erstellte Backup immer auch alle vorherigen Backups. Damit erh�ht sich die Backup Gr��te jedes Mal deutlich. Somit nur sinnvoll f�r besondere Anwendungszwecke.</small>");
51
-
52
- define("LM_TAB_MYSQL","MySQL");
53
- define("LM_CONFIG_MYSQL","MySQL Verbindungseinstellungen");
54
- define("LM_CONFIG_MYSQLH","MySQL Hostname:");
55
- define("LM_CONFIG_MYSQLU","MySQL Username:");
56
- define("LM_CONFIG_MYSQLP","MySQL Passwort:");
57
- define("LM_CONFIG_MYSQLD","MySQL Datenbank:");
58
- define("LM_CONFIG_MYSQLH_SUB","");
59
- define("LM_CONFIG_MYSQLU_SUB","");
60
- define("LM_CONFIG_MYSQLP_SUB","");
61
- define("LM_CONFIG_MYSQLD_SUB","");
62
-
63
- define("LM_TAB_AUTH","Authentifikation");
64
- define("LM_CONFIG_AUTH","XCloner Authentifikation");
65
- define("LM_CONFIG_AUTH_USER","Login Username:");
66
- define("LM_CONFIG_AUTH_PASS","Login Passwort:");
67
- define("LM_CONFIG_AUTH_USER_SUB","<small>Dies ist dein Login User Name f�r XCloner.</small>");
68
- define("LM_CONFIG_AUTH_PASS_SUB","<small>Dies ist dein Login Passwort f�r XCloner. Freilassen, wenn du das Passwort nicht �ndern m�chtest.</small>");
69
-
70
- define("LM_YES","Ja");
71
- define("LM_NO","Nein");
72
- define("LM_ACTIVE","Aktiv:");
73
- define("LM_TAR_PATH","Tar Pfad oder Server Befehl:");
74
- define("LM_TAR_PATH_SUB","<small>(notwendig wenn 'Aktiv' Checkbox aktiviert und TAR als Archiv Typ gew�hlt ist.)</small>");
75
- define("LM_ZIP_PATH","Zip Pfad oder Server Befehl:");
76
- define("LM_ZIP_PATH_SUB","<small>(notwendig wenn 'Aktiv' Checkbox aktiviert und ZIP als Archiv Typ gew�hlt ist.)</small>");
77
- define("LM_MYSQLDUMP_PATH","MySQLDump Pfad oder Befehl:<br />F�r gro�e MySQL Dumps nutze bitte den Befehl
78
- <br /><b><small>mysqldump --quote-names --quick --single-transaction --skip-comments</b></small>");
79
-
80
- // --- CONFIG ---//
81
- define("LM_CONFIG_MANUAL","Manueller Backup Prozess");
82
- define("LM_CONFIG_MANUAL_BACKUP","Manuelles Backup:");
83
- define("LM_CONFIG_MANUAL_BACKUP_SUB","Wenn dein Server eine PHP Ausf�hrungszeit Beschr�nkungen aufweist (siehe Tab 'Server Info'), dann aktiviere das manuelle Backup. Es ben�tigt JavaScript und l�uft ebenfalls automatisch ab.");
84
- define("LM_CONFIG_MANUAL_FILES","Anzahl der Dateien, die pro manueller Session gesichert werden sollen:");
85
- define("LM_CONFIG_MANUAL_REFRESH","Zeit zwischen Backup Session Refresh:");
86
- define("LM_CONFIG_SYSTEM_MDATABASES","Mehrere Datenbanken sichern:");
87
- define("LM_CONFIG_SYSTEM_MDATABASES_SUB","Darf XCloner mehrere Datenbanken auf einmal sichern?");
88
-
89
- define("LM_CONFIG_CRON_LOCAL","Lokaler Server*");
90
- define("LM_CONFIG_CRON_REMOTE","Remote FTP Account");
91
- define("LM_CONFIG_CRON_EMAIL","Email**");
92
- define("LM_CONFIG_CRON_FULL","Komplett (Daten + Datenbank)");
93
- define("LM_CONFIG_CRON_FILES","Nur Daten");
94
- define("LM_CONFIG_CRON_DATABASE","Nur Datenbank");
95
-
96
- define("LM_CONFIG_EDIT","Konfigurationsdatei editieren:");
97
- define("LM_CONFIG_BSETTINGS","Backup Pfad Einstellungen");
98
- define("LM_CONFIG_BSETTINGS_OPTIONS","Backup Erstellungsoptionen");
99
- define("LM_CONFIG_BSETTINGS_SERVER","Server Nutzungsoptionen (optional)");
100
- define("LM_CONFIG_BPATH","Backup Speicherort:");
101
- define("LM_CONFIG_UBPATH","Backup Start Pfad:");
102
- define("LM_CONFIG_BPATH_SUB","<small>dies ist der Pfad, wo alle XCloner Backups gespeichert werden.</small>");
103
- define("LM_CONFIG_UBPATH_SUB","<small>dies ist der Pfad, in dem der XCloner Backuppozess beginnt - meistens also das Server Root Verzeichnis.</small>");
104
- define("LM_CRON_EXCLUDE","Ausgeschlossene Verzeichnisse");
105
- define("LM_CRON_EXCLUDE_DIR","Liste der vom Backup auszuschlie�enden Verzeichnisse. Ein Verzeichnis pro Zeile. Bitte nutze den vollen Serverpfad");
106
- define("LM_CRON_BNAME","Backup Name:");
107
- define("LM_CRON_BNAME_SUB","<small>Wenn freigelassen, dann wird XCloner bei jedem Cron Backup einen neuen Namen erzeugen.</small>");
108
- define("LM_CRON_IP","Zugelassene Cron IP's:");
109
- define("LM_CRON_IP_SUB","<small>Standardm��ig, hat nur der lokale Server Zugriff zum Cron Job. Du kannst hier aber weitere IP's zulassen - eine IP pro Zeile.</small>");
110
- define("LM_CRON_DELETE_FILES","�ltere Backups l�schen");
111
- define("LM_CRON_DELETE_FILES_SUB","Backups l�schen, die �lter sind als: ");
112
- define("LM_CRON_DELETE_FILES_SUB_ACTIVE","Aktiv:");
113
- define("LM_CRON_SEMAIL","Cron Log emailen an: ");
114
- define("LM_CRON_SEMAIL_SUB","<small>Wenn eine Email Adresse eingegeben wird, dann wird der Cron Log an diese Adresse gemailt - nachdem der Cron Job gelaufen ist. Es k�nnen mehrere Email Adressen eingegeben werden, getrennt mit ';'.</small>");
115
- define("LM_CRON_MCRON","Konfigurationsprofil:");
116
- define("LM_CRON_MCRON_AVAIL","Vorhandene Konfigurationen:");
117
- define("LM_CRON_MCRON_R","Bitte gib eine kurze, simple Bezeichnung an f�r den Namen dieser neuen Cron Konfiguration.");
118
- define("LM_CRON_MCRON_SUB","<small>Mit dieser Option kannst du bestimmte Cron Profile erstellen und in einer speziellen Datei abspeichern. Nutze diese Funktion, um mehrere Cron Jobs zu definieren und auszuf�hren.</small>");
119
- define("LM_CRON_SETTINGS_M","Cron Konfiguration");
120
- // --- MENU ---//
121
- define("LM_MENU_OPEN_ALL", "alle �ffnen");
122
- define("LM_MENU_CLOSE_ALL", "alle schlie�en ");
123
- define("LM_MENU_ADMINISTRATION","Administration");
124
- define("LM_MENU_CLONER","XCloner");
125
- define("LM_MENU_CONFIGURATION","Konfiguration");
126
- define("LM_MENU_CRON","Cron");
127
- define("LM_MENU_LANG","�bersetzer");
128
- define("LM_MENU_ACTIONS","Aktionen");
129
- define("LM_MENU_Generate_backup","Backup erstellen");
130
- define("LM_MENU_Restore_backup","Backup wiederherstellen");
131
- define("LM_MENU_View_backups","Backups anzeigen");
132
- define("LM_MENU_Documentation","Hilfe");
133
- define("LM_MENU_ABOUT","�ber");
134
- define("LM_DELETE_FILE_FAILED","L�schen fehlgeschlagen - bitte Datei Zugriffsrechte pr�fen");
135
- define("LM_JOOMLAPLUG_CP","XCloner - Die Joomla Backup L�sung");
136
- define("LM_MENU_FORUM","Forum");
137
- define("LM_MENU_SUPPORT","Support");
138
- define("LM_MENU_WEBSITE","Webseite");
139
-
140
- define("LM_MAIN_Settings","Einstellungen");
141
- define("LM_MAIN_View_Backups","Backups anzeigen");
142
- define("LM_MAIN_Generate_Backup","Backup erstellen");
143
- define("LM_MAIN_Help","Hilfe");
144
- define("LM_FTP_TRANSFER_MORE","FTP Verbindunsmodus");
145
-
146
-
147
- // --- LANGUAGE --//
148
- define("LM_LANG_NAME", "XCloner Sprache");
149
- define("LM_LANG_MSG_DEL", "Sprache(n) erfolgreich gel�scht!");
150
- define("LM_LANG_NEW","Neuer Sprach Name:");
151
- define("LM_LANG_EDIT_FILE","Datei editieren:");
152
- define("LM_LANG_EDIT_FILE_SUB","Bitte vergi� nicht, die �bersetzung alle 5 Minuten zu speichern. Dr�cke dazu einfach den Apply Button.");
153
-
154
-
155
- // --- TABS --//
156
- define("LM_TAB_GENERAL","Allgemein");
157
- define("LM_TAB_G_STRUCTURE","Struktur");
158
- define("LM_TAB_SYSTEM","System");
159
- define("LM_TAB_CRON","Cron");
160
- define("LM_TAB_INFO","Server Info");
161
- define("LM_TAB_G_DATABASE","Datenbank Optionen");
162
- define("LM_TAB_G_FILES","Datei Optionen");
163
- define("LM_G_EXCLUDE_COMMENT","<br>Auszuschlie�ende Ordner bitte hier angeben. 1 Ordner pro Zeile.
164
- <br><b>M�glicherweise willst du die das Cache Feature deaktivieren, w�hrend du ein Backup erstellst. Ansonsten kannst du auch das Cache Verzeichnis vom Backup ausschlie�en.</b>");
165
-
166
-
167
- // --- MESSAGES --//
168
- // front end
169
- define("LM_MSG_FRONT_1","Kein Backup Paket vorhanden");
170
- define("LM_MSG_FRONT_2","Der FTP Upload ist leider fehlgeschlagen");
171
- define("LM_MSG_FRONT_3","Upload erledigt f�r");
172
- define("LM_MSG_FRONT_4","FTP Verbindung fehlgeschlagen!");
173
- define("LM_MSG_FRONT_5","Verbindungsversuch zu");
174
- define("LM_MSG_FRONT_6","f�r User");
175
-
176
- //backend
177
- define("LM_MSG_BACK_1","Konfiguration erfolgreich aktualisiert...");
178
- define("LM_MSG_BACK_2","FTP Verbindung fehlgeschlagen!");
179
- define("LM_MSG_BACK_3","Verschieben des Backups erfolgreich! Das ausgew�hlte Backup sollte nun an der neuen Stelle verf�gbar sein.");
180
- define("LM_MSG_BACK_4","Verschieben erfolgreich - starte den Klon Prozess auf dem Remote Host");
181
- define("LM_MSG_BACK_5","Frontend Anzeige erfolgreich deaktiviert");
182
- define("LM_MSG_BACK_6","Deaktivierung fehlgeschlagen! Bitte �berpr�fe die Pfade!");
183
- define("LM_MSG_BACK_7","Frontpage Ver�ffentlichung erfolgreich deaktiviert");
184
- define("LM_MSG_BACK_8","Frontpage Deaktivierung fehlgeschlagen! Bitte �berpr�fe die Pfade!");
185
- define("LM_MSG_BACK_9","Klon erfolgreich umbenannt!");
186
- define("LM_MSG_BACK_10","Der Joomla Pfad ist nicht innerhalb deines Backup Pfades. Konnte den direkten Download Modus nicht nutzen. Du solltest deine Server Konfiguration im Tab 'System Info' �berpr�fen und die Option 'Direct Download link' auf 'Nein' stellen.");
187
- define("LM_MSG_BACK_11","Fertig! Manueller Backup Vorgang erfolgreich abgeschlossen! <a href='index2.php?option=com_cloner&task=view'>Klicke hier um fortzufahren</a>");
188
- define("LM_MSG_BACK_12","<h2>Backup ist leider fehlgeschlagen! Bitte �berpr�fe ob dein Server die ZIP Funktion (/usr/bin/zip or /usr/local/bin/zip) unterst�zt und ob die Pfade in der Konfiguration korrekt gesetzt sind.</h2>");
189
- define("LM_MSG_BACK_13","<h2>Backup ist leider fehlgeschlagen! Bitte �berpr�fe ob dein Server die TAR Funktion (/usr/bin/tar or /usr/local/bin/tar) unterst�zt und ob die Pfade in der Konfiguration korrekt gesetzt sind.</h2>");
190
- define("LM_MSG_BACK_14","<font color='red'>Leider gab es ein Problem bei der Erstellung des Datenbank Backups. Bitte �berpr�fe deinen MySQLDump Server Pfad im Tab 'Allgemein'.</font>");
191
-
192
- define("LM_CRON_TOP","Anleitung - Cron Backup einstellen");
193
- define("LM_CRON_SUB","Mit Hilfe der Cron Funktion kannst du voll automatische Backups deiner Joomla Webseite erstellen lassen!
194
- Um dies zu aktivieren, musst du in deinem Cron Job Panel deines Servers, Details zum CronJob erf�hrst du von
195
- deinem Hoster, folgenden Befehl hinzuf�gen:<br />");
196
- define("LM_CRON_HELP","Anmerkungen:
197
- - wenn dein PHP Verzeichnis nicht /usr/bin/php ist, dann nutze bitte folgendes: format /$"."php_path/php
198
-
199
-
200
- Weiterf�hrende Informationen (englisch) wie man ein Cronjob konfiguriert f�r
201
- - Cpanel <a href='http://www.cpanel.net/docs/cpanel/' target='_blank'>click here</a>
202
- - Plesk <a href='http://www.swsoft.com/doc/tutorials/Plesk/Plesk7/plesk_plesk7_eu/plesk7_eu_crontab.htm' target='_blank'>click here</a>
203
- - Interworx <a href='http://www.sagonet.com/interworx/tutorials/siteworx/cron.php' target='_blank'>click here</a>
204
- - General Linux crontab info <a href='http://www.computerhope.com/unix/ucrontab.htm#01' target='_blank'>click here</a>
205
-
206
- Wenn du Hilfe beim Setup des Cron Backups ben�tigst oder Probleme beim Cron Backups hast, dann wende dich bitte
207
- an unser Forum <a href='http://www.xcloner.com/support/forums/'>http://www.xcloner.com/support/forums/</a> oder schreibe uns eine Email an <a href='mailto:admin@xcloner.com'>admin@xcloner.com</a>");
208
- define("LM_CRON_SETTINGS","Cron Einstellungen");
209
- define("LM_CRON_MODE","Backup Speicher Modus:");
210
- define("LM_CRON_MODE_INFO"," <br />
211
- <small>*: Wenn 'Lokaler Server' ausgew�hlt wird, dann wird der default Backup Pfad aus dem Tab 'Allgemein' genutzt, um das Backup zu speichern.</small>
212
- <br /><br />
213
- <small>**: Wenn 'Email' ausgew�hlt wird, dann kann nicht garantiert werden, dass das Backup korrekt zugestellt wird, wenn Provider Einschr�nkungen �berschritten werden (Speicherplatz, etc.).</small>
214
- ");
215
- define("LM_CRON_TYPE_INFO","<small><br />Bitte w�hle den Backup Modus, mit dem die Cron Backups erstellt werden sollen.</small>");
216
- define("LM_CRON_MYSQL_DETAILS","MySQL Optionen");
217
- define("LM_CRON_MYSQL_DROP","MySQL Drop erg�nzen:");
218
- define("LM_CRON_TYPE","Backup Modus:");
219
- define("LM_CRON_FTP_DETAILS","FTP Speichermodus Details");
220
- define("LM_CRON_FTP_SERVER","FTP Server:");
221
- define("LM_CRON_FTP_USER","FTP Username:");
222
- define("LM_CRON_FTP_PASS","FTP Passwort:");
223
- define("LM_CRON_FTP_PATH","FTP Pfad:");
224
- define("LM_CRON_FTP_DELB","Nach Transfer das Backup l�schen:");
225
- define("LM_CRON_EMAIL_DETAILS","Email Modus Details");
226
- define("LM_CRON_EMAIL_ACCOUNT","Email Account:");
227
- define("LM_CRON_COMPRESS","Backup Archive komprimieren:");
228
- define("LM_RESTORE_TOP","Anleitung - Backup wiederherstellen");
229
- define("LM_CREDIT_TOP","�ber XCloner:");
230
- define("LM_CLONE_FORM_TOP","<h2>Bitte gib deine FTP Einstellungen hier ein:</h2>");
231
-
232
- // --- Info Tab ---//
233
-
234
- define("LM_CONFIG_INFO_T_SAFEMODE","PHP Safe_mode:");
235
- define("LM_CONFIG_INFO_T_MTIME","PHP max_execution_time:");
236
- define("LM_CONFIG_INFO_T_MEML","PHP memory_limit:");
237
- define("LM_CONFIG_INFO_T_BDIR","PHP open_basedir:");
238
- define("LM_CONFIG_INFO_T_EXEC","exec() Funktion Support:");
239
- define("LM_CONFIG_INFO_T_TAR","TAR Utility Server Pfad:");
240
- define("LM_CONFIG_INFO_T_ZIP","ZIP Utility Server Pfad:");
241
- define("LM_CONFIG_INFO_T_MSQL","MySQLDump Utility Server Pfad:");
242
- define("LM_CONFIG_INFO_T_BPATH","Backup Pfad:");
243
- define ("LM_CONFIG_INFO_ROOT_BPATH","Backup Start Pfad:");
244
- define("LM_CONFIG_INFO_ROOT_PATH_SUB","<small>Der Backup Start Pfad muss existieren und lesbar sein, damit XCloner den Backup Prozess starten kann.</small>");
245
- define("LM_CONFIG_INFO_ROOT_BPATH_TMP", "Tempor�res Verzeichnis:");
246
- define("LM_CONFIG_INFO_ROOT_PATH_TMP_SUB","<small>Dieser Pfad muss erstellt und beschreibbar sein, damit XCloner ordnungsgem�� arbeiten kann.</small>");
247
-
248
-
249
- define("LM_CONFIG_INFO","Dieses Tab zeigt allgemeine System Infos und Pfade");
250
- define("LM_CONFIG_INFO_PATHS","Generelle Pfad Informationen:");
251
- define("LM_CONFIG_INFO_PHP","PHP Konfiguration:");
252
- define("LM_CONFIG_INFO_TIME","<small>Diese Einstellung definiert die maximale Zeit in Sekunden, die das Backup Skript auf dem Server laufen darf.</small>");
253
- define("LM_CONFIG_INFO_MEMORY","<small>Diese Einstellung definiert, wieviel Speicher das Backup Skript f�r die Backuperstellung maximal nutzen darf.</small>");
254
- define("LM_CONFIG_INFO_BASEDIR","<small>Diese Einstellung definiert die Pfade, auf welche das Backup Skript zugreifen darf. Kein Wert hei�t, dass das Skript auf alle Pfade zugreifen darf.</small>");
255
- define("LM_CONFIG_INFO_SAFEMODE","<small>Safe Mode muss 'Off' geschaltet sein, damit XCloner ordnungsgem�� funktioniert.</small>");
256
- define("LM_CONFIG_INFO_TAR","<small>Wenn das Skript den TAR Pfad nicht automatisch bestimmen kann, musst du die TAR Option 'Aktiv' im Tab 'Allgemein' deaktivieren.</small>");
257
- define("LM_CONFIG_INFO_ZIP","<small>Wenn das Skript den ZIP Pfad nicht automatisch bestimmen kann, musst du die ZIP Option 'Aktiv' im Tab 'Allgemein' deaktivieren.</small>");
258
- define("LM_CONFIG_INFO_MSQL","<small>Wenn das Skript den MySQLDump Pfad nicht automatisch bestimmen kann, musst du die MySQLDump Option 'Aktiv' im Tab 'Allgemein' deaktivieren.</small>");
259
- define("LM_CONFIG_INFO_EXEC","<small>Wenn diese Funktion deaktiviert ist, musst du die Checkbox 'Aktiv' im Tab 'Allgemein' deaktivieren.</small>");
260
- define("LM_CONFIG_INFO_BPATH","<small>Dieses Verzeichnis muss beschreibbar sein, damit XCloner die Backups abspeichern kann.</small>");
261
-
262
-
263
- // --- TRANSFER DETAILS---//
264
-
265
- define("LM_TRANSFER_URL","Website URL:");
266
- define("LM_TRANSFER_URL_SUB","<small>Bitte gib die Webseiten URL an, auf die das Backup geklont / kopiert werden soll. Beispiel: http://www.webseite.de/</small>");
267
- define("LM_TRANSFER_FTP_HOST","FTP Hostname:");
268
- define("LM_TRANSFER_FTP_HOST_SUB","Beispiel ftp.webseite.de");
269
- define("LM_TRANSFER_FTP_USER","FTP Username:");
270
- define("LM_TRANSFER_FTP_USER_SUB","Beispiel 'john'");
271
- define("LM_TRANSFER_FTP_PASS","FTP Passwort:");
272
- define("LM_TRANSFER_FTP_PASS_SUB","Beispiel 'johnpass'");
273
- define("LM_TRANSFER_FTP_DIR","FTP Verzeichnis:");
274
- define("LM_TRANSFER_FTP_DIR_SUB","Bitte gib das FTP Verzeichnis an, auf die das Backup geklont / kopiert werden soll. Beispiel: public_html/ oder htdocs/ . Stelle die Zugriffberechtigungen daf�r auf 777.");
275
-
276
-
277
- // --- GENERATE BACKUP---//
278
-
279
- define("LM_BACKUP_NAME","<b>Bitte w�hlen den gew�nschten Backupnamen</b>");
280
- define("LM_BACKUP_NAME_SUB","<small>Wenn freigelassen, wird XCloner den Default Backupnamen w�hlen.</small>");
281
-
282
-
283
- // -- General --//
284
- define("LM_COM_TITLE" , "XCloner Backup Manager - ");
285
- define("LM_COM_TITLE_CONFIRM" , "Best�tige die Verzeichnis Auswahl");
286
-
287
- define("LM_COL_FILENAME" , "Backup Archiv");
288
- define("LM_COL_DOWNLOAD" , "Download");
289
- define("LM_COL_AVALAIBLE","Frontend Paket");
290
- define("LM_COL_SIZE" , "Gr��e");
291
- define("LM_COL_DATE" , "Datum der Backuperstellung");
292
- define("LM_COL_FOLDER" , "<b>Verzeichnisse und / oder Dateien ausschlie�en</b>");
293
-
294
- define("LM_DELETE_FILE_SUCCESS", "Datei(en) gel�scht");
295
- define("LM_DOWNLOAD_TITLE", "Downloade dieses Backup Archiv");
296
-
297
-
298
- define("LM_ARCHIVE_NAME" , "Archive Name");
299
- define("LM_NUMBER_FOLDERS" , "Anzahl der Verzeichnisse");
300
- define("LM_NUMBER_FILES" , "Anzahl der Dateien");
301
- define("LM_SIZE_ORIGINAL" , "Gr��e der Originaldatei");
302
- define("LM_SIZE_ARCHIVE" , "Gr��e des Archivs");
303
- define("LM_DATABASE_ARCHIVE" , "Backup der Datenbank");
304
-
305
- define("LM_CONFIRM_INSTRUCTIONS" , "<b>Bitte w�hle die Verzeichnisse, die von der Backuperstellung ausgeschlossen werden sollen.</b> <br />
306
- - standardm��ig werden alle Verzeichnisse gesichert. Schlie�e Verzeichnisse aus, indem du die jeweiligen Checkboxen der Verzeichnisse aktivierst.");
307
- define("LM_CONFIRM_DATABASE" , "Datenbank sichern und in Backup Archiv integrieren");
308
-
309
-
310
- define("LM_DATABASE_EXCLUDED", "Ausgeschlossen");
311
- define("LM_DATABASE_CURRENT","Aktuelle Datenbank:");
312
- define("LM_DATABASE_INCLUDE_DATABASES","Zus�tzliche Datenbanken sichern");
313
- define("LM_DATABASE_INCLUDE_DATABASES_SUB","<small>Du kannst mehrere Datenbanken in die Backuperstellung einschlie�en, indem du die STRG Taste beim Ausw�hlen mit der Maus gedr�ckt h�lst. Die Datenbanken werden im Administrator / Backups Verzeichnis in deinem Backup Archiv gespeichert.</small>");
314
- define("LM_DATABASE_MISSING_TABLES", "Fehler: Tabellen Definitionen nicht gefunden");
315
- define("LM_DATABASE_BACKUP_FAILED", "Backup ist leider fehlgeschlagen. Bitte �berpr�fe, ob das Administrator / Backup Verzeichnis Schreibzugriff hat!");
316
- define("LM_DATABASE_BACKUP_COMPLETED", "Backup vollst�ndig");
317
- define("LM_RENAME_TOP","Ausgew�hlte Klone umbenennen");
318
- define("LM_RENAME","Klon umbenennen ");
319
- define("LM_RENAME_TO"," zu ");
320
- // --- CLONER RESTORE--- //
321
-
322
- define("LM_CLONER_RESTORE","<h2>Wie du ein Backup an verschiedenen Stellen wiederherstellen kannst</h2>
323
- <pre>
324
- Mit XCloner ist es kaum einfacher deine Backups wiederherzustellen. Mit Hilfe der Klon Funktion aus dem <a href='index2.php?option=com_cloner&task=view'>Backups anzeigen</a>
325
- Bereich kannst du deine Joomla Backups an jede Stelle im Internet verschieben und wiederherstellen / einspielen.
326
-
327
- Und folgende Arbeitsschritte sind daf�r notwendig:
328
-
329
- <b>Schritt 1 - Bewege dein Backup auf den neuen Server</b>
330
-
331
- - �ffne den Bereich 'Backups anzeigen' im XCloner Backend
332
- - nachdem du das jeweilige Backup ausgew�hlt hast, klicke auf den 'Clone' Button
333
- - gib nun die FTP Zugangsdaten des neuen Servers ein, an dem das Backup eingespielt werden soll
334
- - Nachdem du den Submit Button angeklickt hast wird das Backup und das Wiederherstellungsskript auf
335
- den neuen Server kopiert
336
- - Du bekommst abschlie�end eine URL angezeigt, die dich zum n�chsten Arbeitsschritt f�hrt.
337
- Beispiel URL: <b>http://neue-seite.de/XCloner.php</b>
338
-
339
- <b>Anmerkung: </b>Wenn dieser Prozess fehlschlagen sollte, dann befolge diese Schritte:
340
- 1. Downloade das Backup auf deinen Computer
341
- 2. Downloade das Wiederherstellungsskript, welches aus 3 Dateien besteht. Zu finden im
342
- Verzeichnis administrator/components/com_xcloner/restore
343
- 3. Uploade das Backup und alle 3 Dateien des Wiederherstellungskripts auf den neuen Server
344
- 4. Rufe nun XCloner.php auf dem neuen Server mit deinem Browser auf und befolge abschlie�end
345
- die Anweisungen des Wiederherstellungsskripts
346
-
347
- <b>Schritt 2 - XCloner Wiederherstellungsskript</b>
348
-
349
- - In diesem Schritt hast du bereits das Backup und das Wiederherstellungsskript auf dem neuen Server (siehe oben)
350
- - Gib nun deine neuen MySQL Zugangsdaten des neuen Servers ein
351
- (MySQL hostname, user, pass und Datenbank Name)
352
- - Gib die URL der neuen Webseite und die neuen Zugangsdaten ein
353
- - F�r die eigentliche Wiederherstellung des Backups hast du <b>zwei Optionen:</b>
354
-
355
- - 1. Wiederherstellung der Dateien �ber FTP. Das Skript wird ein FTP Upload auf den neuen Server simulieren.
356
- Somit werden eventuelle Zugriffsprobleme vermieden (wwwrun)
357
- - 2. Direkte Wiederherstellung der Dateien. Dabei wird das Backup direkt auf dem Server entpackt. Diese Option
358
- ist schneller, kann aber an Zugriffsprobleme scheitern, wenn der Zugriff auf den FTP User eingestellt ist
359
- anstatt wwwrun
360
-
361
- - Nachdem du den Submit Button angeklickt hast, beginnt die Wiederherstellung / das Einspielen der Dateien
362
- und der Datenbank
363
- - Wenn alles einwandfrei geklappt hat, kann der Backup Klon direkt auf der neuen URL / Server verwendet werden
364
-
365
- Hast du Fragen oder Probleme? Dann wende dich bitte an unser Forum <a href='http://www.xcloner.com/support/forums/' target='_blank'>http://www.xcloner.com/support/forums/</a>
366
- oder schreibe uns eine Email an <a href='mailto:info@xcloner.com'>info@xcloner.com</a>.
367
-
368
- </pre>");
369
-
370
-
371
- // --- ABOUT CLONER---//
372
-
373
- define("LM_CLONER_ABOUT","<h2>XCloner Backup</h2><br />
374
- <pre>XCloner ist ein Tool, das dir bei der Backuperstellung von Joomla Webseiten umfassend hilft - bishin zur voll
375
- automatischen Backuperstellung. Du kannst Backups erstellen, wiederherstellen oder verschieben und klonen. So wird
376
- deine Webseite immer abgesichert sein und das ohne gro�en Aufwand.
377
-
378
- <b>Features:</b>
379
- - Cron Skript f�r die automatische Backuperstellung
380
- - Optionen f�r multiple Backups
381
- - Wiederherstellungstool f�r das einfache, schnelle Verschieben von ganzen Webseiten
382
- - Verschiedene Backuporte, an denen das Backup sicher gespeichert werden kann
383
-
384
- F�r Mitteilungen und Vorschl�ge wende dich bitte an admin@xcloner.com oder besuche uns auf
385
- <a href='http://www.xcloner.com'>http://www.xcloner.com</a>.
386
-
387
- <b>Deutsche �bersetzung</b>: Du hast Verbesserungsvorschl�ge oder Fragen bez�glich der deutschen �bersetzung von
388
- XCloner? Dann wende dich per Kontaktformular an <a href='http://www.joomla-blog.net'>Joomla Blog Insider</a>. Vielen Dank im Voraus!
389
- </pre>
390
- <br/>
391
- XCloner.com &copy; 2004-2010 | <a href=\"http://www.xcloner.com\">www.xcloner.com</a>
392
- <br/><p/><br/>
393
- ");
394
-
395
- define("LM_LOGIN_TEXT","
396
- <pre>
397
- <b>Weitere Infos:</b>
398
- 1. Wenn du diesen Login das erste Mal siehst, ist dein Username '<i>admin</i>' und dein Passwort '<i>admin</i>'.
399
- Bitte �ndere beide Angaben nach dem Login
400
-
401
- 2. Wenn du dein Passwort vergessen haben solltest, kannst du dieses leicht zur�cksetzen. Du musst dazu folgenden
402
- Code erg�nzen:
403
-
404
- <b>$"."_CONFIG[\"jcpass\"] = md5(\"neues_passwort\");</b>
405
-
406
- am Ende der Konfigurationsdatei cloner.config.php direkt vor der Zeile '?>'
407
- Vergi� nicht die Angabe 'neues_passwort' mit deinem neuen pers�nlichen Passwort zu ersetzen.
408
- </pre>
409
- ");
410
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/language/dutch.php DELETED
@@ -1,304 +0,0 @@
1
- <?php
2
- define("LM_FRONT_CHOOSE_PACKAGE","<b>Kies het installatie pakket:</b>");
3
- define("LM_FRONT_CHOOSE_PACKAGE_SUB","<small>Selecteer de Joomla! versie die je wilt installeren</small>");
4
- define("LM_FRONT_TOP","<span colspan='2' class='contentheading'>Installeer Joomla Software Online</span>");
5
- define("LM_FRONT_TOP_FTP_DETAILS","<h2>Vul je ftp gegevens hieronder in:</h2>");
6
- define("LM_FRONT_WEBSITE_URL","<b>Website URL:</b>");
7
- define("LM_FRONT_WEBSITE_URL_SUB","<small>Vul aub de URL van de website in waar Joomla geinstalleerd zal worden, bijvoorbeeld http://www.sitenaam.nl/Joomla</small>");
8
- define("LM_FRONT_FTP_HOST","<b>FTP Hostnaam:</b>");
9
- define("LM_FRONT_FTP_HOST_SUB","<small>voorbeeld ftp.sitename.com</small>");
10
- define("LM_FRONT_FTP_USER","<b>Ftp gebruikersnaam:</b>");
11
- define("LM_FRONT_FTP_USER_SUB","<small>voorbeeld john</small>");
12
- define("LM_FRONT_FTP_PASS","<b>Ftp wachtwoord:</b>");
13
- define("LM_FRONT_FTP_PASS_SUB","<small>voorbeeld johnpass</small>");
14
- define("LM_FRONT_FTP_DIR","<b>FTP Directory:</b>");
15
- define("LM_FRONT_FTP_DIR_SUB","<small>Vul aub de directorie in waar je Joomla! wilt installeren, bijvoorbeeld public_html/Joomla/ or htdocs/Joomla/ en zorg ervoor dat er schrijfrechten zijn voor iedereen, normaliter 777.</small>");
16
- define("LM_TRANSFER_FTP_INCT","Gedeeltelijke transfer:");
17
- define("LM_TRANSFER_FTP_INCT_SUB","zal proberen de bestanden via een gedeeltelijke transfer over te brengen om zo blanke pagina�s en time outs te voorkomen.");
18
- define("LM_FRONT_BOTTOM","Werkt die niet voor jou? Vertel ons waarom niet -> <a href='http://www.xcloner.com/contact/'>Contact pagina</a><br />
19
- Powered by <a href='http://www.xcloner.com'>XCloner</a>");
20
- define("LM_FRONT_MSG_OK","We hebben de Package Restore Utility ge�pload naar je ftp site. klik hier om door te gaan");
21
- define("LM_NOPAKCAGE_ERROR","Er is geen pakket geselecteerd, installatie wordt afgebroken");
22
- define("LM_DATABASE_EXCLUDE_TABLES","Selecteer de tabellen die niet met de backup meegenomen dienen te worden:");
23
- define("LM_CONFIG_SYSTEM_FOLDER","Mapweergave:");
24
- define("LM_CONFIG_SYSTEM_FOLDER_SUB","selecteer aub de manier waarop je de mappen wilt uitsluiten in de 'Genereer Backup' sectie.");
25
- define("LM_CONFIG_SYSTEM_LANG","Systeem taal:");
26
- define("LM_CONFIG_SYSTEM_LANG_SUB","configureert de taal van XCloner, als deze waarde op standaard staat, zal de taal van de site gebruikt worden, indien beschikbaar.");
27
- define("LM_CONFIG_SYSTEM_LANG_DEFAULT","Systeem Standaard");
28
- define("LM_CONFIG_SYSTEM_DOWNLOAD","Maak directe download link aan:");
29
- define("LM_CONFIG_SYSTEM_DOWNLOAD_SUB","indien dit is aangevinkt in het 'Bekijk de Backup's scherm zal de download link een directe link zijn naar het desbetreffende backup pakket. Houdt er rekening mee dat de backup in de Joomla! root aangemaakt moet zijn.");
30
- define("LM_CONFIG_DISPLAY","Weergave Instellingen");
31
- define("LM_CONFIG_SYSTEM","Systeem Instellingen");
32
- define("LM_CONFIG_SYSTEM_FTP","Ftp Transfer Modus");
33
- define("LM_CONFIG_SYSTEM_FTP_SUB","selecteer hoe de bestanden moeten worden overgebracht van server naar server wanneer het ftp protocol gebruikt wordt.");
34
- define("LM_CONFIG_MEM","Backup met gebruik van de Serverfuncties");
35
- define("LM_CONFIG_MEM_SUB","<small>Indien ingesteld op Actief, ben je verplicht om op je server ondersteuning te hebben voor <b>zip of tar</b> en/of <b> mysqldump commando's en zul je de paden aan moeten geven en ook <b>exec()</b> toegang in je php</small>");
36
- define("LM_CRON_DB_BACKUP","Maak Database backup mogelijk:");
37
- define("LM_CRON_DB_BACKUP_SUB","<small>Vink Ja aan indien je de MySQL data wilt back-uppen</small>");
38
- define("LM_CONFIG_SYSTEM_MBACKUP","Sluit backup directory in wanneer de site gekloond wordt:");
39
- define("LM_CONFIG_SYSTEM_MBACKUP_SUB","<small>Indien Ja gebruikt wordt, zal de gemaakte backup ook alle vooraf gemaakte backups in deze backup opnemen, wat er toe bijdraagt dat de grootte van het bestand iedere keer toeneemt</small>");
40
- define("LM_TAB_MYSQL","MySQL");
41
- define("LM_CONFIG_MYSQL","MySQL verbindings intsellingen:");
42
- define("LM_CONFIG_MYSQLH","MySQL Hostname:");
43
- define("LM_CONFIG_MYSQLU","MySQL gebruikersnaam:");
44
- define("LM_CONFIG_MYSQLP","MySQL wachtwoord:");
45
- define("LM_CONFIG_MYSQLD","MySQL Database:");
46
- define("LM_TAB_AUTH","Authentificatie");
47
- define("LM_CONFIG_AUTH","Gebruikers Authentificatie Sectie");
48
- define("LM_CONFIG_AUTH_USER","Login Gebruikersnaam:");
49
- define("LM_CONFIG_AUTH_PASS","Login Wachtwoord:");
50
- define("LM_CONFIG_AUTH_USER_SUB","Dit is de standaard inlog voor Xcloner");
51
- define("LM_CONFIG_AUTH_PASS_SUB","je standaard login wachtwoord, leeg laten als je het niet wilt veranderen.");
52
- define("LM_YES","Ja");
53
- define("LM_NO","Neen");
54
- define("LM_ACTIVE","Actief:");
55
- define("LM_TAR_PATH","Tar pad of commando:");
56
- define("LM_TAR_PATH_SUB","(verplicht indien archief type Tar en Actieve box zijn aangevinkt)");
57
- define("LM_ZIP_PATH","Zip pad of commando:");
58
- define("LM_ZIP_PATH_SUB","(verplicht indien archief type Zip en Actieve box zijn aangevinkt)");
59
- define("LM_MYSQLDUMP_PATH","MySQL dump pad or commando: (verplicht indien Actieve box is aangevinkt)<br /> Voor grote MySQL dumps gebruik je het beste
60
- <br /><b><small>mysqldump --quote-names --quick --single-transaction --skip-comments</b></small>");
61
- define("LM_CONFIG_MANUAL","Handmatig Backup Proces");
62
- define("LM_CONFIG_MANUAL_BACKUP","Handmatige backup:");
63
- define("LM_CONFIG_MANUAL_BACKUP_SUB","Deze optie wordt weergegeven indien er een php tijd uitvoer limiet op je server zit. Je dient voor het gebruiken van deze optie Javascript in je browser geactiveerd te hebben.");
64
- define("LM_CONFIG_MANUAL_FILES","Bestanden die per handmatige sessie verwerkt moeten worden");
65
- define("LM_CONFIG_MANUAL_REFRESH","Tijd tussen het verversen van de sessies:");
66
- define("LM_CONFIG_SYSTEM_MDATABASES","Backup Meerdere Databases:");
67
- define("LM_CONFIG_SYSTEM_MDATABASES_SUB","Deze optie zal er voor zorgen dat XCloner meerdere databases kan backuppen.");
68
- define("LM_CONFIG_CRON_LOCAL","Locale Server*");
69
- define("LM_CONFIG_CRON_REMOTE","FTP account op afstand");
70
- define("LM_CONFIG_CRON_EMAIL","E-mail**");
71
- define("LM_CONFIG_CRON_FULL","Volledig (bestanden + database)");
72
- define("LM_CONFIG_CRON_FILES","Enkel de bestanden");
73
- define("LM_CONFIG_CRON_DATABASE","Enkel de Database");
74
- define("LM_CONFIG_EDIT","Bewerken van het config bestand");
75
- define("LM_CONFIG_BSETTINGS","Backup Pad Instellingen");
76
- define("LM_CONFIG_BSETTINGS_OPTIONS","Backup Generator Opties");
77
- define("LM_CONFIG_BSETTINGS_SERVER","Server Gebruiks Opties");
78
- define("LM_CONFIG_BPATH","Backup Oplsag Pad:");
79
- define("LM_CONFIG_UBPATH","Backup Start Pad:");
80
- define("LM_CONFIG_BPATH_SUB","<small>dit is het pad waar alle backups zullen worden opgeslagen</small>");
81
- define("LM_CONFIG_UBPATH_SUB","<small>vul hier het pad in van waaruit XCloner alle processen zal starten</small>");
82
- define("LM_CRON_EXCLUDE","Directories die uitgesloten dienen te worden");
83
- define("LM_CRON_EXCLUDE_DIR","Sluit diretories uit, een per lijn<br> gebruik aub het volledige pad van de server directory");
84
- define("LM_CRON_BNAME","Backup Naam:");
85
- define("LM_CRON_BNAME_SUB","<small>Indien leeg wordt er een standaard naam gekozen wanneer er een nieuwe backup via cron wordt gemaakt</small>");
86
- define("LM_CRON_IP","IP adressen die gebruik mogen maken van de cron optie:");
87
- define("LM_CRON_IP_SUB","<small>Standaard heeft enkel de locale server toegant tot een cron job, maar je mag ook andere IP nummers invullen, ��n per lijn.</small>");
88
- define("LM_CRON_DELETE_FILES","Oude Backups verwijderen");
89
- define("LM_CRON_DELETE_FILES_SUB","Verwijder backups ouder dan:");
90
- define("LM_CRON_DELETE_FILES_SUB_ACTIVE"," Actief:");
91
- define("LM_CRON_SEMAIL","E-mail cron log naar:");
92
- define("LM_CRON_SEMAIL_SUB","Als er een e-mail adres is ingevuld, zal het log dat gemaakt is gedurende de cron-job naar dat betreffende e-mail adres gestuurd. Er kunnen meerdere e-mail adressen worden ingevuld, gescheiden door een ;");
93
- define("LM_CRON_MCRON","Configuratie Naam:");
94
- define("LM_CRON_MCRON_AVAIL","Beschikbare Configuraties:");
95
- define("LM_CRON_MCRON_R","vul aub een eenvoudige naam in voor je nieuwe cron configuratie");
96
- define("LM_CRON_MCRON_SUB","Met deze optie ben je in staat om de huidige configuratie op te slaan in een apart bestand en om het te gebruiken als je meerdere cron-jobs tegelijk uitvoert");
97
- define("LM_CRON_SETTINGS_M","Meerdere CronJobs Configuratie");
98
- define("LM_MENU_OPEN_ALL","alles openvouwen");
99
- define("LM_MENU_CLOSE_ALL","alles sluiten");
100
- define("LM_MENU_ADMINISTRATION","Administratie");
101
- define("LM_MENU_CLONER","XCloner");
102
- define("LM_MENU_CONFIGURATION","Configuratie");
103
- define("LM_MENU_CRON","Cronjob");
104
- define("LM_MENU_LANG","Vertaler");
105
- define("LM_MENU_ACTIONS","Acties");
106
- define("LM_MENU_Generate_backup","Backup maken");
107
- define("LM_MENU_Restore_backup","Backup Herstellen");
108
- define("LM_MENU_View_backups","Backups Bekijken");
109
- define("LM_MENU_Documentation","Hulp");
110
- define("LM_MENU_ABOUT","Over");
111
- define("LM_DELETE_FILE_FAILED","Verwijderen mislukt, controleer de bestandsrechten");
112
- define("LM_JOOMLAPLUG_CP","XCloner - de backup en herstel oplossing voor je website");
113
- define("LM_MENU_FORUM","Fora");
114
- define("LM_MENU_SUPPORT","Ondersteuning");
115
- define("LM_MENU_WEBSITE","Web-site");
116
- define("LM_MAIN_Settings","Instellingen");
117
- define("LM_MAIN_View_Backups","Bekijk Backups");
118
- define("LM_MAIN_Generate_Backup","Maak Backup");
119
- define("LM_MAIN_Help","Hulp");
120
- define("LM_FTP_TRANSFER_MORE","FTP Connectie Modus");
121
- define("LM_LANG_NAME","Naam van taal");
122
- define("LM_LANG_MSG_DEL","Taal met succes verwijderd.");
123
- define("LM_LANG_NEW","Nieuwe naam voor taal:");
124
- define("LM_LANG_EDIT_FILE","Bestand bewerken:");
125
- define("LM_LANG_EDIT_FILE_SUB","Vergeet niet om om de 5 minuten je vertaling op te slaan. Klik gewoon op de Apply knop om een update te maken");
126
- define("LM_TAB_GENERAL","Algemeen");
127
- define("LM_TAB_G_STRUCTURE","Structuur");
128
- define("LM_TAB_SYSTEM","Systeem");
129
- define("LM_TAB_CRON","Cronjob");
130
- define("LM_TAB_INFO","Informatie");
131
- define("LM_TAB_G_DATABASE","Database Opties");
132
- define("LM_TAB_G_FILES","Bestands Opties");
133
- define("LM_G_EXCLUDE_COMMENT","<br>Vul hier aub de mappen in die uitgesloten worden van de backup, iedere map op een aparte lijn!
134
- <br><b>je zou het beste de cache functie kunnen uitschakelen als je begint met een backup te maken, of de cache mappen uitsluiten van de backup.</b>");
135
- define("LM_MSG_FRONT_1","Geen pakket beschikbaar");
136
- define("LM_MSG_FRONT_2","FTP upload naar bestemming is mislukt");
137
- define("LM_MSG_FRONT_3","Upload klaar voor:");
138
- define("LM_MSG_FRONT_4","FTP connectie is mislukt!");
139
- define("LM_MSG_FRONT_5","Probeer te verbinden met");
140
- define("LM_MSG_FRONT_6","voor gebruiker");
141
- define("LM_MSG_BACK_1","Configuratie met succes bijgewerkt");
142
- define("LM_MSG_BACK_2","FTP connectie is mislukt!");
143
- define("LM_MSG_BACK_3","Het verplaatsen van de backup is afgerond. De door jou geselecteerde backup zou nu beschikbaar moeten zijn op de aangegeven locatie");
144
- define("LM_MSG_BACK_4","Verplaatsen afgerond, het clone proces op de nieuwe server wordt gestart.");
145
- define("LM_MSG_BACK_5","Met succes gede-publiceerd op de voorpagina");
146
- define("LM_MSG_BACK_6","de-publiceren mislukt, controleer je paden!");
147
- define("LM_MSG_BACK_7","Met succes gepubliceerd naar de voorpagina");
148
- define("LM_MSG_BACK_8","Publiceren mislukt, controleer je paden!");
149
- define("LM_MSG_BACK_9","De Kloons zijn met succes hernoemd!");
150
- define("LM_MSG_BACK_10","Het Joomla! pad ligt niet binnen je backup pad. Kan geen gebruik maken van de directe download methode. Je moet je Configuratie -> Systeem tab bewerken en de optie Directe download op nee zetten.");
151
- define("LM_MSG_BACK_11","Alle taken zijn volbracht. Het handmatige backup proces is klaar.<a href='index2.php?option=com_cloner&task=view'>Klik hier om verder te gaan</a>");
152
- define("LM_MSG_BACK_12","<h2>Backup mislukt! controleer of je gebruik kunt maken van de ZIP applicatie op je server (/usr/bin/zip of /usr/local/bin/zip) en of het juist is ingevuld in je configuratie. Kies anders voor het TAR archief type</h2>");
153
- define("LM_MSG_BACK_13","<h2>Backup mislukt! controleer of je gebruik kunt maken van de TAR applicatie op je server (/usr/bin/tar of /usr/local/bin/tar) en of het juist is ingevuld in je configuratie. Kies anders voor het ZIP archief type</h2>");
154
- define("LM_MSG_BACK_14","<font color='red'>Er is een probleem opgetreden bij het maken van een database backup, controleer aub het MySQL server pad!</font>");
155
- define("LM_CRON_TOP","Instellen van een Cron backup:");
156
- define("LM_CRON_SUB","<b>Door het gebruik van de Cron functie kun je een automatische backup van je Joomla! webstie laten maken</b>. Om dit in te stellen moet je in het configuratiescherm van je crontab het volgende commando invoeren:");
157
- define("LM_CRON_HELP","Notes:
158
- - indien de PHP locatie verschilt van /usr/bin/php gebruik dan die, formaat /$"."php_path/php
159
-
160
-
161
- Voor meer informatie over het instellen van cronjobs kun je terecht op een van de onderstaande locaties
162
- - Cpanel <a href='http://www.cpanel.net/docs/cpanel/' target='_blank'>klik hier</a>
163
- - Plesk <a href='http://www.swsoft.com/doc/tutorials/Plesk/Plesk7/plesk_plesk7_eu/plesk7_eu_crontab.htm' target='_blank'>klik hier</a>
164
- - Interworx <a href='http://www.sagonet.com/interworx/tutorials/siteworx/cron.php' target='_blank'>klik hier</a>
165
- - Algemene Linux crontab informatie <a href='http://www.computerhope.com/unix/ucrontab.htm#01' target='_blank'>klik hier</a>
166
-
167
- If you need help setting it up or have problems please consult our forums <a href='http://www.xcloner.com/support/forums/'>http://www.xcloner.com/support/forums/</a>
168
- or email us at <a href='mailto:admin@xcloner.com'>admin@xcloner.com</a>");
169
- define("LM_CRON_SETTINGS","Cron instellingen");
170
- define("LM_CRON_MODE","Backup opslag modus:");
171
- define("LM_CRON_MODE_INFO"," <br />
172
- <small> let op:* indien local server is gekozen, zullen we het standaard backup pad gebruikeren, zoals op het tabblad Algemeen aangegeven.</small>
173
- <br />
174
- <small> let op:** als de e-mail modus wordt gebruikt, kunnen we niet garanderen of de backup het account zal bereiken, dit ivm de beperkingen van de desbetreffende provider.</small>");
175
- define("LM_CRON_TYPE_INFO","<small><br /> selecteer het type backup dat je wilt aanmaken</small>");
176
- define("LM_CRON_MYSQL_DETAILS","MySQL Opties");
177
- define("LM_CRON_MYSQL_DROP","Voeg MySQL Drop toe:");
178
- define("LM_CRON_TYPE","Backup soort:");
179
- define("LM_CRON_FTP_DETAILS","meer details over FTP opslag :");
180
- define("LM_CRON_FTP_SERVER","FTP Serveradres:");
181
- define("LM_CRON_FTP_USER","FTP gebruikersnaam:");
182
- define("LM_CRON_FTP_PASS","FTP wachtwoord:");
183
- define("LM_CRON_FTP_PATH","FTP pad:");
184
- define("LM_CRON_FTP_DELB","Verwijder backup na transfer:");
185
- define("LM_CRON_EMAIL_DETAILS","E-mail modus details:");
186
- define("LM_CRON_EMAIL_ACCOUNT","E-mail account:");
187
- define("LM_CRON_COMPRESS","Comprimeer backup bestanden");
188
- define("LM_RESTORE_TOP","Herstelinformatie over je backupsRestoring your backups info:");
189
- define("LM_CREDIT_TOP","Over XCloner:");
190
- define("LM_CLONE_FORM_TOP","<h2>Vul hieronder je FTP gegevens in</h2>");
191
- define("LM_CONFIG_INFO_T_SAFEMODE","PHP Safe_mode:");
192
- define("LM_CONFIG_INFO_T_MTIME","PHP max_execution_time:");
193
- define("LM_CONFIG_INFO_T_MEML","PHP memory_limit:");
194
- define("LM_CONFIG_INFO_T_BDIR","PHP open_basedir:");
195
- define("LM_CONFIG_INFO_T_EXEC","exec() functie ondersteuning:");
196
- define("LM_CONFIG_INFO_T_TAR","pad op de server voor de TAR applicatie:");
197
- define("LM_CONFIG_INFO_T_ZIP","pad op de server voor de ZIP applicatie:");
198
- define("LM_CONFIG_INFO_T_MSQL","pad op de server voor de MySQLdump applicatie:");
199
- define("LM_CONFIG_INFO_T_BPATH","Backup Pad:");
200
- define("LM_CONFIG_INFO_ROOT_PATH_SUB","het backup pad moet reeds aangemaakt zijn en leesbaar eer je XCloner kunt laten starten met het backup proces.");
201
- define("LM_CONFIG_INFO_ROOT_BPATH_TMP","Tijdelijke map");
202
- define("LM_CONFIG_INFO_ROOT_PATH_TMP_SUB","Dit pad moet aangemaakt worden met schrijfrechten om XCloner goed te laten functioneren");
203
- define("LM_CONFIG_INFO","Dit tabblad geeft de algemene instellingen en paden weer.");
204
- define("LM_CONFIG_INFO_PATHS","Informatie over het algemene pad.");
205
- define("LM_CONFIG_INFO_PHP","PHP Configuratien Informatie:");
206
- define("LM_CONFIG_INFO_TIME","<small>Dit regelt de maximale tijdsduur in seconden, dat je script op de server mag gebruiken.</small>");
207
- define("LM_CONFIG_INFO_MEMORY","<small>Dit regelt de maximum aan geheugen dat je script voor de uitvoer mag aanroepen voor de benodigde processen</small>");
208
- define("LM_CONFIG_INFO_BASEDIR","<small>Dit regelt de paden waar je script toegang tot heeft, geen waarde betekend dat het script elk pad kan gebruiken.</small>");
209
- define("LM_CONFIG_INFO_SAFEMODE","<small>safe mode moet uitgeschakeld zijn om XCloner goed te laten werken.</small>");
210
- define("LM_CONFIG_INFO_TAR","<small>Indien het script niet in staat is om het TAR pad automatisch te detecteren zou je het keuzehokje 'Actief' naast TAR op het tabblad Algemeen kunnen uitvinken.</small>");
211
- define("LM_CONFIG_INFO_ZIP","<small>Indien het script niet in staat is om het ZIP pad automatisch te detecteren zou je het keuzehokje 'Actief' naast ZIP op het tabblad Algemeen kunnen uitvinken.</small>");
212
- define("LM_CONFIG_INFO_MSQL","<small>Indien het script niet in staat is om het MySQL dump pad automatisch te detecteren zou je het keuzehokje 'Actief' naast MySQLdump op het tabblad Algemeen kunnen uitvinken.</small>");
213
- define("LM_CONFIG_INFO_EXEC","<small>Indien deze functie is uitgeschakeld kun je het beste de vinkjes weghalen bij beide keuzehokjes op het tabblad Algemeen.</small>");
214
- define("LM_CONFIG_INFO_BPATH","<small>moet schrijfrechten hebben om XCloner backups te archieveren</small>");
215
- define("LM_TRANSFER_URL","Website URL:");
216
- define("LM_TRANSFER_URL_SUB","<small>Vul aub de URL in van de site waarheen de backup verplaatst zal worden. Bijvoorbeeld http://www.naamvandesite.nl/, we hebben dit nodig om je daarheen door te sturen om toegang te krijgen tot het herstelscript</small>");
217
- define("LM_TRANSFER_FTP_HOST","FTP hostnaam:");
218
- define("LM_TRANSFER_FTP_HOST_SUB","voorbeeld ftp.naamvandesite.nl");
219
- define("LM_TRANSFER_FTP_USER","FTP gebruikersnaam");
220
- define("LM_TRANSFER_FTP_USER_SUB","vorobeeld 'john'");
221
- define("LM_TRANSFER_FTP_PASS","FTP wachtwoord:");
222
- define("LM_TRANSFER_FTP_PASS_SUB","voorbeeld 'johnpass'");
223
- define("LM_TRANSFER_FTP_DIR","FTP directory:");
224
- define("LM_TRANSFER_FTP_DIR_SUB","Vul aub de FTP directory in waar je je backup heen wilt verplaatsen, bijvoorbeeld public_html/ or htdocs/ en zorg voor schrijfrechten voor iederen, normaliter 777");
225
- define("LM_BACKUP_NAME","<b>Kies aub een naam voor je backup</b>");
226
- define("LM_BACKUP_NAME_SUB","<small>Indien leeg zullen we een standaard naam invullen!</small>");
227
- define("LM_COL_AVALAIBLE","Voorpagina Pakket");
228
- define("LM_DELETE_FILE_SUCCESS","Bestand(en) verwijderd");
229
- define("LM_DOWNLOAD_TITLE","Download dit Backup Set");
230
- define("LM_DATABASE_EXCLUDED","Uitgesloten");
231
- define("LM_DATABASE_CURRENT","Huidige database:");
232
- define("LM_DATABASE_INCLUDE_DATABASES","Inclusief Extra Databases");
233
- define("LM_DATABASE_INCLUDE_DATABASES_SUB","je kunt meerdere databases in de backup opnemen door de CTRL toets ingedrukt te houden en vervolgens de gewenste bestanden te selecteren met je muis<br />
234
- de databases zullen worden opgeslagen in de administrator/backups directory in je archief");
235
- define("LM_DATABASE_MISSING_TABLES","Fout: Tabel definities niet gevonden");
236
- define("LM_DATABASE_BACKUP_FAILED","Backup mislukt, controleer of je administrator/backups directory schrijfrechten heeft");
237
- define("LM_DATABASE_BACKUP_COMPLETED","Backup Complee");
238
- define("LM_RENAME_TOP","Hernoem geselecteerde Kloons");
239
- define("LM_RENAME","hernoem kloon");
240
- define("LM_RENAME_TO","naar");
241
- define("LM_CLONER_RESTORE","<h2>Hoe herstel ik een backup op verschillende locaties INFO!</h2>
242
- <pre>
243
- Het herstellen van een backup was nog nooit zo eenvoudig!
244
- Met behulp van onze clone functie vanuit het With the help of our cloning function from the <a href='index2.php?option=com_cloner&task=view'>Bekijk je backups</a> scherm zul je instaat zijn om je Joomla! backup te verplaatsen waardan ook op het Internet.
245
-
246
- Dit is wat je er voor moet doen:
247
-
248
- <b>Stap1 - verplaats je backup naar een herstelhost</b>
249
-
250
- - ga in XCloner naar de 'Bekijk Backups' sectie
251
- - nadat je een backup hebt geselecteerd klik je op de 'Clone it' knop
252
- - Vul je ftp detiails in van de server waar je je backup heen wilt clonen.
253
- - na de toevoeg knop te hebben gedrukt zal de backupen het herstel script naar de nieuwe host worden overgebracht krijg je een URL toegewezen waar je naar toe moet gaan, gebaseerd op de door jou ingevoerde URL voor de locatie op afstand.
254
- - na op de getoonde link geklikt te hebben wordt je naar de nieuwe locatie gebracht. Voorbeeld van een URL <b>http://mijn_herstel_site.nl/XCloner.php</b>
255
-
256
- <b>Let op:</b>Als dit proces om welke reden dan ook onderbroken wordt of mislukt dien je de volgende stappen te nemen
257
- 1. Download de backup naar je computer
258
- 2. Download het herstel script, alle 3 de bestanden uit de volgende directory: administrator/components/com_cloner/restore
259
- 3. Upload beiden backup en herstel script naar de herstel locatie
260
- 4. Start XCloner.php in je browser en volg het herstelscherm zoals hieronder aangegeven
261
-
262
- <b>Stap 2 - het XCloner.php herstel scherm:</b>
263
-
264
- <b>XCloner.php - het herstel script</b>
265
- - In deze stap heb je reeds de kloon en het herstelscript op de desbetreffende plaats ge�pload
266
- - Vul de nieuwe MySQL gegevens in, inclusief MySQL hostnaam, gebruikersnaam en paswoord, en de nieuwe database die van de orginele verschilt.
267
- - Vul de URL van de nieuwe locatie in en je wachtwoord.
268
- - Om de bestanden te herstellen heb je <b>2 opties:</b>
269
-
270
- - 1. herstel de bestanden over FTP, het script zal dan een FTP proces emuleren op je server, dat zal ook het rechtenprobleem uit stap 2 oplossen.
271
- - 2. herstel de bestanden direct, dit zal je bestanden op de server uitpakken, deze manier is erg snel, maar zou wel eens rechtenproblemen met zich mee kunnen brengen als je veel gebruik maakt van FTP om wijzigingen aan je site aan te brengen.
272
-
273
- - nadat je op toevoegen hebt geklikt, zal het script proberen om de bestanden naar het nieuwe pad te verplaatsen, direct of via FTP, en zal ook de database installeren
274
- - indien alles zonder fouten is verlopen zou je gekloonde site het moeten doen vanaf de nieuwe locatie
275
-
276
- Voor ondersteuning kun je het best gebruik maken van onze fora <a href='http://www.xcloner.com/support/forums/' target='_blank'>http://www.xcloner.com/support/forums/</a>
277
- of ons een e-mail sturen via: <a href='mailto:info@xcloner.com'>info@xcloner.com</a>
278
-
279
-
280
- </pre>");
281
- define("LM_CLONER_ABOUT","<h2>XCloner Backup</h2>
282
- <pre>XCloner is een gereedschap dat je helpt om een backups te beheren van je Joomla! websites. Genereer/Herstel/Verplaats een backup zodat je Joomla! website altijd veilig zal zijn.
283
-
284
- Features:
285
- -cron script to generate backup
286
- -multiple backup options
287
- -restore tool to move the website rapidly to other locations
288
- -multiple locations of where you could store the backup safelly
289
-
290
- For reports and suggestions please contact us at admin@xcloner.com or visit us on <a href='http://www.xcloner.com'>http://www.xcloner.com</a>
291
- </pre>
292
- <br/><br/>
293
-
294
- XCloner.com � 2004-2010 | <a href='http://www.xcloner.com'>www.xcloner.com</a>
295
- <br/><p/><br/>");
296
- define("LM_LOGIN_TEXT","<pre>
297
- <b>Notes:</b>
298
- 1. Als je dit scherm voor het eerst ziet is je standaard
299
- gebruikersnaam '<i>admin</i>'en wachtwoord'<i>admin</i>', je zult deze na het inloggen moeten wijzigen
300
-
301
- 2. Om je wachtwoord te resetten als je het vergeten bent, zul je onderstaande code moeten toevoegen:
302
-
303
- <b>$"."_CONFIG['jcpass'] = md5('my_new_pass')</b></pre>");
304
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/language/english.php DELETED
@@ -1,402 +0,0 @@
1
- <?php
2
-
3
- // --- FRONT AREA---//
4
- define("LM_FRONT_CHOOSE_PACKAGE","<b>Choose the package to install:</b>");
5
- define("LM_FRONT_CHOOSE_PACKAGE_SUB","<small>Please select your Joomla version you wish to install</small>");
6
- define("LM_FRONT_TOP","<span colspan='2' class='contentheading'>Install Joomla Software Online</span>");
7
- define("LM_FRONT_TOP_FTP_DETAILS","<h2>Provide your ftp details below:</h2>");
8
- define("LM_FRONT_WEBSITE_URL","<b>Website Url:</b>");
9
- define("LM_FRONT_WEBSITE_URL_SUB","<small>Please provide the website url where Joomla will be installed, example http://www.sitename.com/Joomla</small>");
10
- define("LM_FRONT_FTP_HOST","<b>Ftp hostname:</b>");
11
- define("LM_FRONT_FTP_HOST_SUB","<small>example ftp.sitename.com</small>");
12
- define("LM_FRONT_FTP_USER","<b>Ftp username:</b>");
13
- define("LM_FRONT_FTP_USER_SUB","<small>example john</small>");
14
- define("LM_FRONT_FTP_PASS","<b>Ftp password:</b>");
15
- define("LM_FRONT_FTP_PASS_SUB","<small>example johnpass</small>");
16
- define("LM_FRONT_FTP_DIR","<b>Ftp directory:</b>");
17
- define("LM_FRONT_FTP_DIR_SUB","<small>Please provide the ftp directory of where you would like to install Joomla, example public_html/Joomla/ or htdocs/Joomla/ and make sure it has write permissions for everybody, usually 777</small>");
18
- define("LM_TRANSFER_FTP_INCT","Incremental transfer: ");
19
- define("LM_TRANSFER_FTP_INCT_SUB","will attempt to transfer the files over ftp in an incremental mode to avoid any blank pages or timeouts ");
20
- define("LM_FRONT_BOTTOM","Didn't worked for you? Please tell us what happened -> <a href='http://www.xcloner.com/contact/'>Contact page</a><br />
21
- Powered by <a href='http://www.xcloner.com'>XCloner</a>");
22
- define("LM_FRONT_MSG_OK","We have uploaded the Package Restore Utility on your ftp site, to continue click here");
23
- define("LM_NOPAKCAGE_ERROR","There is no package selected, aborting...!");
24
-
25
- // --- BACKEND AREA---//
26
- define("LM_DATABASE_EXCLUDE_TABLES","Select tables to exclude from backup:");
27
- define("LM_CONFIG_SYSTEM_FOLDER","Folders display:");
28
- define("LM_CONFIG_SYSTEM_FOLDER_SUB","please select the mode you would like to select the exclude folders from 'Generate Backup' section");
29
- define("LM_CONFIG_SYSTEM_LANG","System Language:");
30
- define("LM_CONFIG_SYSTEM_LANG_SUB","configures the XCloner language, if set to default it will display the default language of Joomla is avalaible");
31
- define("LM_CONFIG_SYSTEM_LANG_DEFAULT","System Default");
32
- define("LM_CONFIG_SYSTEM_DOWNLOAD","Enable Direct Download link:");
33
- define("LM_CONFIG_SYSTEM_DOWNLOAD_SUB","if this is checked, in the 'View Backups' screen, the download link will be a direct link from your server to download the package, please note that the backup path must be within the Joomla root path");
34
- define("LM_CONFIG_DISPLAY","Display Settings");
35
- define("LM_CONFIG_SYSTEM","System Settings");
36
- define("LM_CONFIG_SYSTEM_FTP","Ftp Transfer Mode");
37
- define("LM_CONFIG_SYSTEM_FTP_SUB","select how the files will be transfered from server to server when using ftp protocol");
38
- define("LM_CONFIG_MEM","Backup using Server Functions");
39
- define("LM_CONFIG_MEM_SUB","<small>If set to Active, you will be required to have on your server support for <b>zip or tar</b> and/or <b>mysqldump</b> commands and specify their paths, and also <b>exec()</b> access in your php</small>");
40
- define("LM_CRON_DB_BACKUP","Enable Database backup:");
41
- define("LM_CRON_DB_BACKUP_SUB","<small>check Yes if you would like to backup the mysql data</small>");
42
- define("LM_CONFIG_SYSTEM_MBACKUP","Include backups directory in clone:");
43
- define("LM_CONFIG_SYSTEM_MBACKUP_SUB","<small>If set to Yes, the created backup will also contain previous backups files, increasing each time it's size</small>");
44
-
45
- define("LM_TAB_MYSQL","MYSQL");
46
- define("LM_CONFIG_MYSQL","MYSQL Connection Settings:");
47
- define("LM_CONFIG_MYSQLH","Mysql hostname:");
48
- define("LM_CONFIG_MYSQLU","Mysql username:");
49
- define("LM_CONFIG_MYSQLP","Mysql password:");
50
- define("LM_CONFIG_MYSQLD","Mysql database:");
51
- define("LM_CONFIG_MYSQLH_SUB","");
52
- define("LM_CONFIG_MYSQLU_SUB","");
53
- define("LM_CONFIG_MYSQLP_SUB","");
54
- define("LM_CONFIG_MYSQLD_SUB","");
55
-
56
- define("LM_TAB_AUTH","Authentification");
57
- define("LM_CONFIG_AUTH","User Authentification Area");
58
- define("LM_CONFIG_AUTH_USER","Login Username:");
59
- define("LM_CONFIG_AUTH_PASS","Login Password:");
60
- define("LM_CONFIG_AUTH_USER_SUB","this will be your default login user to XCloner");
61
- define("LM_CONFIG_AUTH_PASS_SUB", "your default login password, leave blank if you don't want to change it");
62
-
63
- define("LM_YES","Yes");
64
- define("LM_NO", "No");
65
- define("LM_ACTIVE","Active:");
66
- define("LM_TAR_PATH","Tar path or command:");
67
- define("LM_TAR_PATH_SUB","(required if archive type is Tar and Active box checked)");
68
- define("LM_ZIP_PATH","Zip path or command:");
69
- define("LM_ZIP_PATH_SUB","(required if archive type is Zip and Active box checked)");
70
- define("LM_MYSQLDUMP_PATH","Mysqldump path or command: (required if Active box checked)<br /> For large mysql dumps please use
71
- <br /><b><small>mysqldump --quote-names --quick --single-transaction --skip-comments</b></small>");
72
-
73
- // --- CONFIG ---//
74
- define("LM_CONFIG_MANUAL","Backup Manual Process");
75
- define("LM_CONFIG_MANUAL_BACKUP","Manual backup:");
76
- define("LM_CONFIG_MANUAL_BACKUP_SUB","This option is indicated if you have php time execution limitations on your server, this will require javascript activated on your browser");
77
- define("LM_CONFIG_MANUAL_FILES","Files to process per manual session:");
78
- define("LM_CONFIG_MANUAL_REFRESH","Time between sessions refresh:");
79
- define("LM_CONFIG_SYSTEM_MDATABASES","Backup Multiple Databases:");
80
- define("LM_CONFIG_SYSTEM_MDATABASES_SUB","this option controls wheteher XCloner may backup multiple databases");
81
-
82
- define("LM_CONFIG_CRON_LOCAL","Local server*");
83
- define("LM_CONFIG_CRON_REMOTE","Remote ftp account");
84
- define("LM_CONFIG_CRON_EMAIL","Email**");
85
- define("LM_CONFIG_CRON_FULL","Full(files + database)");
86
- define("LM_CONFIG_CRON_FILES","Files only");
87
- define("LM_CONFIG_CRON_DATABASE","Database only");
88
-
89
- define("LM_CONFIG_EDIT","Editing config file");
90
- define("LM_CONFIG_BSETTINGS","Backup Path Settings");
91
- define("LM_CONFIG_BSETTINGS_OPTIONS","Backup Generator Options");
92
- define("LM_CONFIG_BSETTINGS_SERVER","Server Use Options");
93
- define("LM_CONFIG_BPATH","Backup Store Path:");
94
- define("LM_CONFIG_UBPATH","Backup Start Path:");
95
- define("LM_CONFIG_BPATH_SUB","<small>this is the path where all backups will be stored</small>");
96
- define("LM_CONFIG_UBPATH_SUB","<small>input here the initial backup path from where XCloner will start all the processes</small>");
97
- define("LM_CRON_EXCLUDE","Excluded Directories");
98
- define("LM_CRON_EXCLUDE_DIR","Excluded directories list one per line:<br>please use full path of the server directory");
99
- define("LM_CRON_BNAME","Backup Name:");
100
- define("LM_CRON_BNAME_SUB","<small>if left blank we will generate a name by default each time a new cron backup is made</small>");
101
- define("LM_CRON_IP","Cron Allowed IP's:");
102
- define("LM_CRON_IP_SUB","<small>by default, only the local server will have access to the cron job, but you may enter also other IP's one per line</small>");
103
- define("LM_CRON_DELETE_FILES","Delete Older Backups");
104
- define("LM_CRON_DELETE_FILES_SUB","Delete backups older than: ");
105
- define("LM_CRON_DELETE_FILES_SUB_ACTIVE"," Active:");
106
- define("LM_CRON_SEMAIL","Email cron log to: ");
107
- define("LM_CRON_SEMAIL_SUB","If an email address is set, after running a cron job, the cron log will be emailed to this address; multiple addresses can be added separated by ;");
108
- define("LM_CRON_MCRON","Configuration Name:");
109
- define("LM_CRON_MCRON_AVAIL","Available Configurations:");
110
- define("LM_CRON_MCRON_R","please provide a simple name for your new cron configuration");
111
- define("LM_CRON_MCRON_SUB","with this option you will be able to save the current configuration in a separate file and use it for running multiple cronjobs");
112
- define("LM_CRON_SETTINGS_M","Multiple CronJobs Configuration");
113
- // --- MENU ---//
114
- define("LM_MENU_OPEN_ALL", "open all");
115
- define("LM_MENU_CLOSE_ALL", "close all");
116
- define("LM_MENU_ADMINISTRATION","Administration");
117
- define("LM_MENU_CLONER","XCloner");
118
- define("LM_MENU_CONFIGURATION","Configuration");
119
- define("LM_MENU_CRON","Cron");
120
- define("LM_MENU_LANG","Translator");
121
- define("LM_MENU_ACTIONS","Actions");
122
- define("LM_MENU_Generate_backup","Generate Backup");
123
- define("LM_MENU_Restore_backup","Restore Backup");
124
- define("LM_MENU_View_backups","View Backups");
125
- define("LM_MENU_Documentation","Help");
126
- define("LM_MENU_ABOUT","About");
127
- define("LM_DELETE_FILE_FAILED","Delete Failed, please check the file permissions");
128
- define("LM_JOOMLAPLUG_CP","XCloner - Your site backup and restore solution");
129
- define("LM_MENU_FORUM","Forums");
130
- define("LM_MENU_SUPPORT","Support");
131
- define("LM_MENU_WEBSITE","Website");
132
-
133
- define("LM_MAIN_Settings","Settings");
134
- define("LM_MAIN_View_Backups","View Backups");
135
- define("LM_MAIN_Generate_Backup","Generate Backup");
136
- define("LM_MAIN_Help","Help");
137
- define("LM_FTP_TRANSFER_MORE","FTP Connection Mode");
138
-
139
-
140
- // --- LANGUAGE --//
141
- define("LM_LANG_NAME", "Language Name");
142
- define("LM_LANG_MSG_DEL", "Language(s) succesfully deleted!");
143
- define("LM_LANG_NEW","New Language Name:");
144
- define("LM_LANG_EDIT_FILE","Editing File:");
145
- define("LM_LANG_EDIT_FILE_SUB","Do not forget to save your translation every 5 minutes, just hit the Apply button to update");
146
-
147
-
148
- // --- TABS --//
149
- define("LM_TAB_GENERAL","General");
150
- define("LM_TAB_G_STRUCTURE","Structure");
151
- define("LM_TAB_SYSTEM","System");
152
- define("LM_TAB_CRON","Cron");
153
- define("LM_TAB_INFO","Info");
154
- define("LM_TAB_G_DATABASE","Database Options");
155
- define("LM_TAB_G_FILES","Files Options");
156
- define("LM_G_EXCLUDE_COMMENT","<br>Please enter here the excluded folders, each one per line!
157
- <br><b>you may want to disable the cache feature when doing a backup, or if not exlude the cache folder from the backup</b>");
158
-
159
-
160
- // --- MESSAGES --//
161
- // front end
162
- define("LM_MSG_FRONT_1","No package avalaible");
163
- define("LM_MSG_FRONT_2","FTP upload has failed for destination");
164
- define("LM_MSG_FRONT_3","Uploaded done for");
165
- define("LM_MSG_FRONT_4","FTP connection has failed!");
166
- define("LM_MSG_FRONT_5","Attempted to connect to");
167
- define("LM_MSG_FRONT_6","for user");
168
-
169
- //backend
170
- define("LM_MSG_BACK_1","Config succesfully updated...");
171
- define("LM_MSG_BACK_2","FTP connection has failed!");
172
- define("LM_MSG_BACK_3","Backup move DONE! The select backup should now be avalaible on the provided location!");
173
- define("LM_MSG_BACK_4","Moving done, starting the clone process on the remote host");
174
- define("LM_MSG_BACK_5","Succesfully unpublished from frontend");
175
- define("LM_MSG_BACK_6","Unpublishing failed! Please check your paths!");
176
- define("LM_MSG_BACK_7","Succesfully published to frontend");
177
- define("LM_MSG_BACK_8","Publishing failed! Please check your paths!");
178
- define("LM_MSG_BACK_9","Clones succesfully renamed!");
179
- define("LM_MSG_BACK_10","The Joomla path is not within your backup path! Could not use the direct download mode! You should edit your Configuration->System Tab and set 'Direct Download link' to No");
180
- define("LM_MSG_BACK_11","All done! Manual Backup process finished! <a href='index2.php?option=com_cloner&task=view'>Click here to continue</a>");
181
- define("LM_MSG_BACK_12","<h2>Backup failed! Please check that you have support for the zip utility(/usr/bin/zip or /usr/local/bin/zip) on your server and the path you set it's corect in Configuration, or choose the Tar archive type! </h2>");
182
- define("LM_MSG_BACK_13","<h2>Backup failed! Please check that you have support for the tar utility(/usr/bin/tar or /usr/local/bin/tar) on your server and the path you set it's corect in Configuration, or choose the Zip archive type! </h2>");
183
- define("LM_MSG_BACK_14","<font color='red'>There was a problem in generating the database backup, please check your mysqldump server path!</font>");
184
-
185
-
186
-
187
- define("LM_CRON_TOP","Setting up cron backup:");
188
- define("LM_CRON_SUB","<b>Using the cron function you can setup an automated backup generator for your Joomla website!</b>
189
- To set it up you need to add in your control panel crontab the following command:");
190
- define("LM_CRON_HELP","Notes:
191
- - if you php location is diferent than /usr/bin/php please use that one, format /$"."php_path/php
192
-
193
-
194
- For more info on how to setup a cron for
195
- - Cpanel <a href='http://www.cpanel.net/docs/cpanel/' target='_blank'>click here</a>
196
- - Plesk <a href='http://www.swsoft.com/doc/tutorials/Plesk/Plesk7/plesk_plesk7_eu/plesk7_eu_crontab.htm' target='_blank'>click here</a>
197
- - Interworx <a href='http://www.sagonet.com/interworx/tutorials/siteworx/cron.php' target='_blank'>click here</a>
198
- - General Linux crontab info <a href='http://www.computerhope.com/unix/ucrontab.htm#01' target='_blank'>click here</a>
199
-
200
- If you need help setting it up or have problems please consult our forums <a href='http://www.xcloner.com/support/forums/'>http://www.xcloner.com/support/forums/</a>
201
- or email us at <a href='mailto:info@xcloner.com'>info@xcloner.com</a>");
202
- define("LM_CRON_SETTINGS","Cron settings");
203
- define("LM_CRON_MODE","Backup store mode:");
204
- define("LM_CRON_MODE_INFO"," <br />
205
- <small> please note:* if local server is choosed we will use the default backup path from General section to store the backup</small>
206
- <br />
207
- <small> please note:** if email mode is used, we do no guarantee that the backup will reach the mail account due to provider limitation</small>
208
- ");
209
- define("LM_CRON_TYPE_INFO","<small><br /> please choose your backup type you would like to create</small>");
210
- define("LM_CRON_MYSQL_DETAILS","Mysql Options");
211
- define("LM_CRON_MYSQL_DROP","Add Mysql Drop:");
212
- define("LM_CRON_TYPE","Backup type:");
213
- define("LM_CRON_FTP_DETAILS","Ftp store mode details:");
214
- define("LM_CRON_FTP_SERVER","Ftp server:");
215
- define("LM_CRON_FTP_USER","Ftp username:");
216
- define("LM_CRON_FTP_PASS","Ftp password:");
217
- define("LM_CRON_FTP_PATH","Ftp path:");
218
- define("LM_CRON_FTP_DELB","Delete backup after transfer:");
219
- define("LM_CRON_EMAIL_DETAILS","Email mode details:");
220
- define("LM_CRON_EMAIL_ACCOUNT","Email account:");
221
- define("LM_CRON_COMPRESS","Compress backup files:");
222
- define("LM_RESTORE_TOP","Restoring your backups info:");
223
- define("LM_CREDIT_TOP","About XCloner:");
224
- define("LM_CLONE_FORM_TOP","<h2>Provide your ftp details below:</h2>");
225
-
226
- // --- Info Tab ---//
227
-
228
- define("LM_CONFIG_INFO_T_SAFEMODE","Php Safe_mode:");
229
- define("LM_CONFIG_INFO_T_MTIME","Php max_execution_time:");
230
- define("LM_CONFIG_INFO_T_MEML","Php memory_limit:");
231
- define("LM_CONFIG_INFO_T_BDIR","Php open_basedir:");
232
- define("LM_CONFIG_INFO_T_EXEC","exec() function support:");
233
- define("LM_CONFIG_INFO_T_TAR","Tar utility server path:");
234
- define("LM_CONFIG_INFO_T_ZIP","Zip utility server path:");
235
- define("LM_CONFIG_INFO_T_MSQL","Mysqldump utility server path:");
236
- define("LM_CONFIG_INFO_T_BPATH","Backup Path:");
237
- define ("LM_CONFIG_INFO_ROOT_BPATH","Backup Start Path");
238
- define("LM_CONFIG_INFO_ROOT_PATH_SUB","the backup start path needs to exist and be readable in order for XCloner to start the backup process");
239
- define("LM_CONFIG_INFO_ROOT_BPATH_TMP", "Temporary Folder");
240
- define("LM_CONFIG_INFO_ROOT_PATH_TMP_SUB","this path needs to be created and be writeable in order for XCloner to work properly");
241
-
242
-
243
- define("LM_CONFIG_INFO","This tab will show general system info and paths");
244
- define("LM_CONFIG_INFO_PATHS","General paths info:");
245
- define("LM_CONFIG_INFO_PHP","Php Configuration Information:");
246
- define("LM_CONFIG_INFO_TIME","<small>This controls the maximum time your script is allowed to run on server in seconds</small>");
247
- define("LM_CONFIG_INFO_MEMORY","<small>This controls the maximum memory the script may allocate for it's processes</small>");
248
- define("LM_CONFIG_INFO_BASEDIR","<small>This controls the paths your script is allowed to access, no value means it can access any path </small>");
249
- define("LM_CONFIG_INFO_SAFEMODE","<small>safe mode will need to be set to Off in order for XCloner to work properly </small>");
250
- define("LM_CONFIG_INFO_TAR","<small>If the script is unable to determine the tar path automatically, you might need to uncheck the 'Active' checkbox near TAR line in General Tab</small>");
251
- define("LM_CONFIG_INFO_ZIP","<small>If the script is unable to determine the zip path automatically, you might need to uncheck the 'Active' checkbox near ZIP line in General Tab</small>");
252
- define("LM_CONFIG_INFO_MSQL","<small>If the script is unable to determine the mysqldump path automatically, you might need to uncheck the 'Active' checkbox near MYSQLDUMP line in General Tabn</small>");
253
- define("LM_CONFIG_INFO_EXEC","<small>If this function is disabled, you might want to uncheck Both 'Active' checkboxes from the General Tab</small>");
254
- define("LM_CONFIG_INFO_BPATH","<small>needs to be writeable in order for XCloner to archive backups</small>");
255
-
256
-
257
- // --- TRANSFER DETAILS---//
258
-
259
- define("LM_TRANSFER_URL","Website Url:");
260
- define("LM_TRANSFER_URL_SUB","<small>Please provide the website url where backup will be moved, example http://www.sitename.com/, we need this because we will direct you there to access the restore script</small>");
261
- define("LM_TRANSFER_FTP_HOST","Ftp hostname:");
262
- define("LM_TRANSFER_FTP_HOST_SUB","example ftp.sitename.com");
263
- define("LM_TRANSFER_FTP_USER","Ftp username:");
264
- define("LM_TRANSFER_FTP_USER_SUB","example 'john'");
265
- define("LM_TRANSFER_FTP_PASS","Ftp password:");
266
- define("LM_TRANSFER_FTP_PASS_SUB","example 'johnpass'");
267
- define("LM_TRANSFER_FTP_DIR","Ftp directory:");
268
- define("LM_TRANSFER_FTP_DIR_SUB","Please provide the ftp directory of where you would like to move the backup , example public_html/ or htdocs/ and make sure it has write permissions for everybody, usually 777");
269
-
270
-
271
- // --- GENERATE BACKUP---//
272
-
273
- define("LM_BACKUP_NAME","<b>Please choose your backup name</b>");
274
- define("LM_BACKUP_NAME_SUB","<small>if left blank we will generate a name by default!</small>");
275
-
276
-
277
- // -- General --//
278
- define("LM_COM_TITLE" , "XCloner Manager - ");
279
- define("LM_COM_TITLE_CONFIRM" , "Confirm Folder Selection");
280
-
281
- define("LM_COL_FILENAME" , "Backup Set");
282
- define("LM_COL_DOWNLOAD" , "Download");
283
- define("LM_COL_AVALAIBLE","Frontend Package");
284
- define("LM_COL_SIZE" , "Size of Set");
285
- define("LM_COL_DATE" , "Date of Backup");
286
- define("LM_COL_FOLDER" , "<b>Excluded Folders and/or files</b>");
287
-
288
- define("LM_DELETE_FILE_SUCCESS", "File(s) Deleted");
289
- define("LM_DOWNLOAD_TITLE", "Download this Backup Set");
290
-
291
-
292
- define("LM_ARCHIVE_NAME" , "Archive Name");
293
- define("LM_NUMBER_FOLDERS" , "Number of Folders");
294
- define("LM_NUMBER_FILES" , "Number of Files");
295
- define("LM_SIZE_ORIGINAL" , "Size of Original File");
296
- define("LM_SIZE_ARCHIVE" , "Size of Archive");
297
- define("LM_DATABASE_ARCHIVE" , "Database Backup");
298
-
299
- define("LM_CONFIRM_INSTRUCTIONS" , "<b>Please select the folders you wish to exclude from archive</b> <br />
300
- - by default all folders are included, if you wish to exlude a folder and it's subfolders just check the box next to it");
301
- define("LM_CONFIRM_DATABASE" , "Backup database and include in this backup set");
302
-
303
-
304
- define("LM_DATABASE_EXCLUDED", "Excluded");
305
- define("LM_DATABASE_CURRENT","Current database:");
306
- define("LM_DATABASE_INCLUDE_DATABASES","Include Extra Databases");
307
- define("LM_DATABASE_INCLUDE_DATABASES_SUB","you can select multiple databases to include in the backup by holding down the CTRL key and selecting the desired items with your mouse<br />
308
- the databases will be stored in administrator/backups directory in your archive");
309
-
310
- define("LM_DATABASE_MISSING_TABLES", "Error: Table Definitions Not Found");
311
- define("LM_DATABASE_BACKUP_FAILED", "Backup FAILED, please check that administrator/backups directory is writeable!");
312
- define("LM_DATABASE_BACKUP_COMPLETED", "Backup Completed");
313
- define("LM_RENAME_TOP","Rename selected clones");
314
- define("LM_RENAME","Rename clone ");
315
- define("LM_RENAME_TO"," to ");
316
- // --- CLONER RESTORE--- //
317
-
318
- define("LM_CLONER_RESTORE","<h2>How to restore a backup on different locations INFO!</h2>
319
- <pre>
320
- Restoring your backups has never been more easier!
321
- With the help of our cloning function from the <a href='index2.php?option=com_cloner&task=view'>View Backups</a> screen
322
- you will be able to move your Joomla backup anywhere on the Internet.
323
-
324
- Here is what you have to do:
325
-
326
- <b>Step1 - move your backup to the restore host</b>
327
-
328
- - go into the XCloner 'View Backups' area
329
- - after you have selected your backup click on the 'Clone it' button
330
- - enter the ftp details of where you would like to Clone the backup
331
- - after hitting submit the backup and the restore script will be transfered on the new host and you
332
- will be given a url to access the next step based on the url you provided for the remote location
333
- - after you click the provided link you will be taken to the new location, sample url <b>http://my_restore_site.com/XCloner.php</b>
334
-
335
- <b>Note:</b> if this process fails for any reason, you need to do this:
336
- 1. Download the backup on your computer
337
- 2. Download the restore script, all 3 files from directory administrator/components/com_xcloner/restore
338
- 3. Upload both backup and restore script to your restore location
339
- 4. Launch XCloner.php in your browser and follow the restore screen as specified below
340
-
341
- <b>Step 2 - the XCloner.php restore screen:</b>
342
-
343
- <b>XCloner.php - the restore script</b>
344
- - on this step you have in place the clone you made based on your Joomla site and the Restore script
345
- - enter you new mysql details, this includes your new mysql hostname, user and pass, and a new database
346
- different from the original one
347
- - enter you new location Url and pass
348
- - to restore the files you have <b>2 options:</b>
349
-
350
- - 1. restore the files through ftp, the script will simulate a ftp upload process on your server, this will
351
- fix the permissions problem from step 2.
352
- - 2. restore the files directly, this will unarchive the files on your server, will work fast but it might
353
- result in some permission problems if you use your ftp a lot to make changes to the site
354
-
355
- - after you hit submit the script will attempt to move the files to the new path, directly or using ftp and
356
- will install the database
357
- - if everything goes ok your new site clone is up and running on the new location
358
-
359
- For support please consult our forums <a href='http://www.xcloner.com/support/forums/' target='_blank'>http://www.xcloner.com/support/forums/</a>
360
- or email us at <a href='mailto:info@xcloner.com'>info@xcloner.com</a>
361
-
362
-
363
- </pre>");
364
-
365
-
366
- // --- ABOUT CLONER---//
367
-
368
- define("LM_CLONER_ABOUT","<h2>XCloner Backup</h2>
369
- <pre>XCloner is a tool that wil help you manage your Joomla website backups, generate/restore/move so your website will be always secured!
370
-
371
- Features:
372
- -cron script to generate backup
373
- -multiple backup options
374
- -restore tool to move the website rapidly to other locations
375
- -multiple locations of where you could store the backup safelly
376
-
377
- For reports and suggestions please contact us at info@xcloner.com or visit us on <a href='http://www.xcloner.com'>http://www.xcloner.com</a>
378
- </pre>
379
- <br/><br/>
380
-
381
- XCloner.com &copy; 2004-2010 | <a href=\"http://www.xcloner.com\">www.xcloner.com</a>
382
- <br/><p/><br/>
383
- ");
384
-
385
- define("LM_LOGIN_TEXT","
386
- <pre>
387
- <b>Notes:</b>
388
- 1. If you are on this screen for the first time, your default
389
- username is '<i>admin</i>' and password '<i>admin</i>', you will need
390
- to change them after login
391
-
392
- 2. if you forgot your password, to reset it you need to add
393
- this code:
394
-
395
- <b>$"."_CONFIG[\"jcpass\"] = md5(\"my_new_pass\");</b>
396
-
397
- at the end of the config file cloner.config.php just
398
- before line ?>
399
- Don't forget to replace my_new_pass with the actual password
400
- </pre>
401
- ");
402
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/language/index.html DELETED
@@ -1,4 +0,0 @@
1
- <html>
2
- <body>
3
- </body>
4
- </html>
 
 
 
 
trunk/license.txt DELETED
@@ -1,2 +0,0 @@
1
- The software source code has not been encrypt, however JoomlaPlug.com reserves the rights to the code ownership,
2
- and will only be providing support to Premium users who purchased a JoomlaCloner License
 
 
trunk/readme.txt DELETED
@@ -1,80 +0,0 @@
1
- === XCloner ===
2
- Contributors: xcloner
3
- Donate link: http://www.xcloner.com/
4
- Tags: backup, restore, database backup, wordpress backup, full backup, wordpress cloner
5
- Requires at least: 2.0.2
6
- Tested up to: 2.1
7
- Stable tag: 2.1
8
-
9
- XCloner is a full backup and restore plugin for Wordpress, it will backup and restore both files and database
10
-
11
- == Description ==
12
-
13
- XCloner is a Backup and Restore component designed for PHP/Mysql websites, it can work as a native plugin for WordPress and Joomla!.
14
-
15
- XCloner design was specifically created to Generate custom backups of any LAMP website through custom admin inputs, and to be able to Restore the clone on any other location with the help of the automatic Restore script we provide, independent from the main package!
16
-
17
- XCloner Backup tool uses Open Source standards like TAR and Mysql formats so you can rest assured your backups can be restored in a variety of ways, giving you more flexibility and full control.
18
-
19
- XCloner Generate, Move and Restore process:
20
-
21
- 1. Generate and Store the backups
22
- 2. Move the backup and restore script to the new location
23
- 3. Restore the backup by launching the XCloner.php restore script
24
-
25
- Features:
26
-
27
- * Backup and Restore any PHP/Mysql application
28
-
29
- * Create custom backups
30
-
31
- * Generate automatic backups based on cronjobs
32
-
33
- * Restore your backups anywhere
34
-
35
- * Share your custom backups with your clients
36
-
37
-
38
- == Installation ==
39
-
40
- 1. Activate the plugin
41
- 2. Create directory administrator/backups and make it writeable under your Wordpress site root
42
- 3. Access it from the Plugins->XCloner menu
43
-
44
- IMPORTANT:
45
-
46
- If the plugin was downloaded from the xcloner.com website, follow this install:
47
-
48
- 1. Upload the package files to your Wordpress root directory
49
- 2. Activate the plugin
50
- 3. Create directory administrator/backups and make it writeable under your Wordpress site root
51
- 4. Access it from the Plugins->XCloner menu
52
-
53
- == Frequently Asked Questions ==
54
-
55
- = How do I restore my backup? =
56
-
57
- If the inside Clone option fails for some reason, you need to:
58
-
59
- 1. upload the backup archive to the new restore site
60
- 2. upload the XCloner.php and TAR.php files in the same location as the backup from 1., you can find these files in directory wp-content/plugins/xcloner/restore/ on the original site
61
- 3. start the XCloner.php restore script in your browser
62
-
63
-
64
- == Screenshots ==
65
-
66
- 1. Login screen
67
- 2. Config area
68
- 3. Config options
69
- 4. Generate Backup -> database options
70
- 5. Generate Backup -> files options
71
-
72
- == Changelog ==
73
-
74
- = 2.1 =
75
- Initial release
76
-
77
- == Upgrade Notice ==
78
-
79
- = 2.1 =
80
- Initial release
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/recursive.php DELETED
@@ -1,118 +0,0 @@
1
- <?php
2
- $startdir = "D:/server/wamp/www/";
3
- $dir = $startdir;
4
- $last_file = "..";
5
- $recursive_limit = 400;
6
-
7
-
8
- $f_arr = array();
9
- $d_arr = array() ;
10
- #$dir = "E:/server/www/Joomla/xcloner/images";
11
-
12
- while($i++ < 100){
13
-
14
- $count = 0;
15
- $k = 0;
16
- $return = "";
17
- $last = recursive($dir, $last_file);
18
- echo "<br /><b>Lastdir:</b> $last<br />" ;
19
-
20
- if(dirname($last) == dirname($startdir)){
21
-
22
- $f_arr = array_unique($f_arr);
23
- $d_arr = array_unique($d_arr);
24
- sort($f_arr);
25
- sort($d_arr);
26
- echo "<b>Recurse finished! Files: ".sizeof($f_arr)." ; Directories: ".sizeof($d_arr)."</b>";
27
- #print_r($f_arr);
28
- break;
29
- }
30
-
31
- #echo $last_return;
32
- if((!is_dir($last))||($last_return == 1))
33
- {
34
- $dir = dirname($last);
35
- $last_file = basename ($last);
36
- }
37
- else{
38
- $dir = $last;
39
- $last_file = '..';
40
-
41
- }
42
-
43
-
44
-
45
- }
46
-
47
- function recursive( $dir , $last_file = '..')
48
- { global $count, $return, $k, $startdir, $last_return, $recursive_limit, $f_arr, $d_arr;
49
-
50
- #echo "<br /><b>Opening $dir with last file $last_file</b><br />";
51
- $last_return = 0;
52
-
53
- if (is_dir($dir)) {
54
- if ($dh = opendir($dir)) {
55
- while (($file = readdir($dh)) !== false ) {
56
-
57
- #echo $file."--".$last_file."<br />";
58
-
59
- if (($file != $last_file)&&($k == 0))
60
- continue;
61
- elseif(($file == $last_file)&&($file != '..')){
62
- $k = 1;
63
- continue;
64
- }else{
65
-
66
- $k =1 ;
67
- }
68
- #echo "<b>".$file."</b>";
69
-
70
- if( $file != "." && $file != ".." )
71
- {
72
- $cfile = "$dir/$file";
73
-
74
- if($count == $recursive_limit){
75
-
76
- if($return == "")
77
- $return = $cfile;
78
-
79
- $last_return = 2;
80
-
81
- if(is_dir($cfile))
82
- $d_arr[] = $cfile;
83
- else
84
- $f_arr[] = $cfile;
85
-
86
- echo "return here with $cfile";return $return ;
87
- }
88
-
89
- ++$count;
90
-
91
- if( is_dir( $dir ."/". $file ) )
92
- {
93
- echo "<b>Entering Directory: $cfile</b><br/>";
94
- $d_arr[] = $cfile;
95
- recursive( $cfile );
96
-
97
- }
98
- else
99
- {
100
-
101
- echo "file: $cfile<br/>";
102
-
103
- $f_arr[] = $cfile;
104
-
105
- }
106
- }
107
- }
108
- closedir($dh);
109
- }
110
- }
111
-
112
- $last_return = 1;
113
- return $dir;
114
-
115
- }
116
-
117
-
118
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/restore/TAR.php DELETED
@@ -1,1821 +0,0 @@
1
- <?php
2
- /* vim: set ts=4 sw=4: */
3
- // +----------------------------------------------------------------------+
4
- // | PHP Version 4 |
5
- // +----------------------------------------------------------------------+
6
- // | Copyright (c) 1997-2003 The PHP Group |
7
- // +----------------------------------------------------------------------+
8
- // | This source file is subject to version 3.0 of the PHP license, |
9
- // | that is bundled with this package in the file LICENSE, and is |
10
- // | available through the world-wide-web at the following url: |
11
- // | http://www.php.net/license/3_0.txt. |
12
- // | If you did not receive a copy of the PHP license and are unable to |
13
- // | obtain it through the world-wide-web, please send a note to |
14
- // | license@php.net so we can mail you a copy immediately. |
15
- // +----------------------------------------------------------------------+
16
- // | Author: Vincent Blavet <vincent@phpconcept.net> |
17
- // +----------------------------------------------------------------------+
18
- //
19
- // $Id: Tar.php,v 1.39 2006/12/22 19:20:08 cellog Exp $
20
-
21
- #require_once 'PEAR.php';
22
-
23
-
24
- define ('ARCHIVE_TAR_ATT_SEPARATOR', 90001);
25
- define ('ARCHIVE_TAR_END_BLOCK', pack("a512", ''));
26
-
27
- /**
28
- * Creates a (compressed) Tar archive
29
- *
30
- * @author Vincent Blavet <vincent@phpconcept.net>
31
- * @version $Revision: 1.39 $
32
- * @package Archive
33
- */
34
- class archive_tar
35
- {
36
- /**
37
- * @var string Name of the Tar
38
- */
39
- var $_tarname='';
40
-
41
- /**
42
- * @var boolean if true, the Tar file will be gzipped
43
- */
44
- var $_compress=false;
45
-
46
- /**
47
- * @var string Type of compression : 'none', 'gz' or 'bz2'
48
- */
49
- var $_compress_type='none';
50
-
51
- /**
52
- * @var string Explode separator
53
- */
54
- var $_separator=' ';
55
-
56
- /**
57
- * @var file descriptor
58
- */
59
- var $_file=0;
60
-
61
- /**
62
- * @var string Local Tar name of a remote Tar (http:// or ftp://)
63
- */
64
- var $_temp_tarname='';
65
-
66
- function raiseError($message){
67
-
68
- print "<b>TAR error: </b><font color='red'>".$message."</font><br />";return;
69
-
70
- }
71
-
72
- // {{{ constructor
73
- /**
74
- * Archive_Tar Class constructor. This flavour of the constructor only
75
- * declare a new Archive_Tar object, identifying it by the name of the
76
- * tar file.
77
- * If the compress argument is set the tar will be read or created as a
78
- * gzip or bz2 compressed TAR file.
79
- *
80
- * @param string $p_tarname The name of the tar archive to create
81
- * @param string $p_compress can be null, 'gz' or 'bz2'. This
82
- * parameter indicates if gzip or bz2 compression
83
- * is required. For compatibility reason the
84
- * boolean value 'true' means 'gz'.
85
- * @access public
86
- */
87
- function Archive_Tar($p_tarname, $p_compress = null)
88
- {
89
- #$this->PEAR();
90
- $this->_compress = false;
91
- $this->_compress_type = 'none';
92
- if (($p_compress === null) || ($p_compress == '')) {
93
- if (@file_exists($p_tarname)) {
94
- if ($fp = @fopen($p_tarname, "rb")) {
95
- // look for gzip magic cookie
96
- $data = fread($fp, 2);
97
- fclose($fp);
98
- if ($data == "\37\213") {
99
- $this->_compress = true;
100
- $this->_compress_type = 'gz';
101
- // No sure it's enought for a magic code ....
102
- } elseif ($data == "BZ") {
103
- $this->_compress = true;
104
- $this->_compress_type = 'bz2';
105
- }
106
- }
107
- } else {
108
- // probably a remote file or some file accessible
109
- // through a stream interface
110
- if (substr($p_tarname, -2) == 'gz') {
111
- $this->_compress = true;
112
- $this->_compress_type = 'gz';
113
- } elseif ((substr($p_tarname, -3) == 'bz2') ||
114
- (substr($p_tarname, -2) == 'bz')) {
115
- $this->_compress = true;
116
- $this->_compress_type = 'bz2';
117
- }
118
- }
119
- } else {
120
- if (($p_compress === true) || ($p_compress == 'gz')) {
121
- $this->_compress = true;
122
- $this->_compress_type = 'gz';
123
- } else if ($p_compress == 'bz2') {
124
- $this->_compress = true;
125
- $this->_compress_type = 'bz2';
126
- } else {
127
- die("Unsupported compression type '$p_compress'\n".
128
- "Supported types are 'gz' and 'bz2'.\n");
129
- return false;
130
- }
131
- }
132
- $this->_tarname = $p_tarname;
133
- if ($this->_compress) { // assert zlib or bz2 extension support
134
- if ($this->_compress_type == 'gz')
135
- $extname = 'zlib';
136
- else if ($this->_compress_type == 'bz2')
137
- $extname = 'bz2';
138
-
139
- #if (!extension_loaded($extname)) {
140
- #PEAR::loadExtension($extname);
141
- #}
142
- if (!extension_loaded($extname)) {
143
- die("The extension '$extname' couldn't be found.\n".
144
- "Please make sure your version of PHP was built ".
145
- "with '$extname' support.\n");
146
- return false;
147
- }
148
- }
149
- }
150
- // }}}
151
-
152
- // {{{ destructor
153
- function _Archive_Tar()
154
- {
155
- $this->_close();
156
- // ----- Look for a local copy to delete
157
- if ($this->_temp_tarname != '')
158
- @unlink($this->_temp_tarname);
159
- #$this->_PEAR();
160
- }
161
- // }}}
162
-
163
- // {{{ create()
164
- /**
165
- * This method creates the archive file and add the files / directories
166
- * that are listed in $p_filelist.
167
- * If a file with the same name exist and is writable, it is replaced
168
- * by the new tar.
169
- * The method return false and a PEAR error text.
170
- * The $p_filelist parameter can be an array of string, each string
171
- * representing a filename or a directory name with their path if
172
- * needed. It can also be a single string with names separated by a
173
- * single blank.
174
- * For each directory added in the archive, the files and
175
- * sub-directories are also added.
176
- * See also createModify() method for more details.
177
- *
178
- * @param array $p_filelist An array of filenames and directory names, or a
179
- * single string with names separated by a single
180
- * blank space.
181
- * @return true on success, false on error.
182
- * @see createModify()
183
- * @access public
184
- */
185
- function create($p_filelist)
186
- {
187
- return $this->createModify($p_filelist, '', '');
188
- }
189
- // }}}
190
-
191
- // {{{ add()
192
- /**
193
- * This method add the files / directories that are listed in $p_filelist in
194
- * the archive. If the archive does not exist it is created.
195
- * The method return false and a PEAR error text.
196
- * The files and directories listed are only added at the end of the archive,
197
- * even if a file with the same name is already archived.
198
- * See also createModify() method for more details.
199
- *
200
- * @param array $p_filelist An array of filenames and directory names, or a
201
- * single string with names separated by a single
202
- * blank space.
203
- * @return true on success, false on error.
204
- * @see createModify()
205
- * @access public
206
- */
207
- function add($p_filelist)
208
- {
209
- return $this->addModify($p_filelist, '', '');
210
- }
211
- // }}}
212
-
213
- // {{{ extract()
214
- function extract($p_path='')
215
- {
216
- return $this->extractModify($p_path, '');
217
- }
218
- // }}}
219
-
220
- // {{{ listContent()
221
- function listContent()
222
- {
223
- $v_list_detail = array();
224
-
225
- if ($this->_openRead()) {
226
- if (!$this->_extractList('', $v_list_detail, "list", '', '')) {
227
- unset($v_list_detail);
228
- $v_list_detail = 0;
229
- }
230
- $this->_close();
231
- }
232
-
233
- return $v_list_detail;
234
- }
235
- // }}}
236
-
237
- // {{{ createModify()
238
- /**
239
- * This method creates the archive file and add the files / directories
240
- * that are listed in $p_filelist.
241
- * If the file already exists and is writable, it is replaced by the
242
- * new tar. It is a create and not an add. If the file exists and is
243
- * read-only or is a directory it is not replaced. The method return
244
- * false and a PEAR error text.
245
- * The $p_filelist parameter can be an array of string, each string
246
- * representing a filename or a directory name with their path if
247
- * needed. It can also be a single string with names separated by a
248
- * single blank.
249
- * The path indicated in $p_remove_dir will be removed from the
250
- * memorized path of each file / directory listed when this path
251
- * exists. By default nothing is removed (empty path '')
252
- * The path indicated in $p_add_dir will be added at the beginning of
253
- * the memorized path of each file / directory listed. However it can
254
- * be set to empty ''. The adding of a path is done after the removing
255
- * of path.
256
- * The path add/remove ability enables the user to prepare an archive
257
- * for extraction in a different path than the origin files are.
258
- * See also addModify() method for file adding properties.
259
- *
260
- * @param array $p_filelist An array of filenames and directory names,
261
- * or a single string with names separated by
262
- * a single blank space.
263
- * @param string $p_add_dir A string which contains a path to be added
264
- * to the memorized path of each element in
265
- * the list.
266
- * @param string $p_remove_dir A string which contains a path to be
267
- * removed from the memorized path of each
268
- * element in the list, when relevant.
269
- * @return boolean true on success, false on error.
270
- * @access public
271
- * @see addModify()
272
- */
273
- function createModify($p_filelist, $p_add_dir, $p_remove_dir='')
274
- {
275
- $v_result = true;
276
-
277
- if (!$this->_openWrite())
278
- return false;
279
-
280
- if ($p_filelist != '') {
281
- if (is_array($p_filelist))
282
- $v_list = $p_filelist;
283
- elseif (is_string($p_filelist))
284
- $v_list = explode($this->_separator, $p_filelist);
285
- else {
286
- $this->_cleanFile();
287
- $this->_error('Invalid file list');
288
- return false;
289
- }
290
-
291
- $v_result = $this->_addList($v_list, $p_add_dir, $p_remove_dir);
292
- }
293
-
294
- if ($v_result) {
295
- $this->_writeFooter();
296
- $this->_close();
297
- } else
298
- $this->_cleanFile();
299
-
300
- return $v_result;
301
- }
302
- // }}}
303
-
304
- // {{{ addModify()
305
- /**
306
- * This method add the files / directories listed in $p_filelist at the
307
- * end of the existing archive. If the archive does not yet exists it
308
- * is created.
309
- * The $p_filelist parameter can be an array of string, each string
310
- * representing a filename or a directory name with their path if
311
- * needed. It can also be a single string with names separated by a
312
- * single blank.
313
- * The path indicated in $p_remove_dir will be removed from the
314
- * memorized path of each file / directory listed when this path
315
- * exists. By default nothing is removed (empty path '')
316
- * The path indicated in $p_add_dir will be added at the beginning of
317
- * the memorized path of each file / directory listed. However it can
318
- * be set to empty ''. The adding of a path is done after the removing
319
- * of path.
320
- * The path add/remove ability enables the user to prepare an archive
321
- * for extraction in a different path than the origin files are.
322
- * If a file/dir is already in the archive it will only be added at the
323
- * end of the archive. There is no update of the existing archived
324
- * file/dir. However while extracting the archive, the last file will
325
- * replace the first one. This results in a none optimization of the
326
- * archive size.
327
- * If a file/dir does not exist the file/dir is ignored. However an
328
- * error text is send to PEAR error.
329
- * If a file/dir is not readable the file/dir is ignored. However an
330
- * error text is send to PEAR error.
331
- *
332
- * @param array $p_filelist An array of filenames and directory
333
- * names, or a single string with names
334
- * separated by a single blank space.
335
- * @param string $p_add_dir A string which contains a path to be
336
- * added to the memorized path of each
337
- * element in the list.
338
- * @param string $p_remove_dir A string which contains a path to be
339
- * removed from the memorized path of
340
- * each element in the list, when
341
- * relevant.
342
- * @return true on success, false on error.
343
- * @access public
344
- */
345
- function addModify($p_filelist, $p_add_dir, $p_remove_dir='')
346
- {
347
- $v_result = true;
348
-
349
- if (!$this->_isArchive())
350
- $v_result = $this->createModify($p_filelist, $p_add_dir,
351
- $p_remove_dir);
352
- else {
353
- if (is_array($p_filelist))
354
- $v_list = $p_filelist;
355
- elseif (is_string($p_filelist))
356
- $v_list = explode($this->_separator, $p_filelist);
357
- else {
358
- $this->_error('Invalid file list');
359
- return false;
360
- }
361
-
362
- $v_result = $this->_append($v_list, $p_add_dir, $p_remove_dir);
363
- }
364
-
365
- return $v_result;
366
- }
367
- // }}}
368
-
369
- // {{{ addString()
370
- /**
371
- * This method add a single string as a file at the
372
- * end of the existing archive. If the archive does not yet exists it
373
- * is created.
374
- *
375
- * @param string $p_filename A string which contains the full
376
- * filename path that will be associated
377
- * with the string.
378
- * @param string $p_string The content of the file added in
379
- * the archive.
380
- * @return true on success, false on error.
381
- * @access public
382
- */
383
- function addString($p_filename, $p_string)
384
- {
385
- $v_result = true;
386
-
387
- if (!$this->_isArchive()) {
388
- if (!$this->_openWrite()) {
389
- return false;
390
- }
391
- $this->_close();
392
- }
393
-
394
- if (!$this->_openAppend())
395
- return false;
396
-
397
- // Need to check the get back to the temporary file ? ....
398
- $v_result = $this->_addString($p_filename, $p_string);
399
-
400
- $this->_writeFooter();
401
-
402
- $this->_close();
403
-
404
- return $v_result;
405
- }
406
- // }}}
407
-
408
- // {{{ extractModify()
409
- /**
410
- * This method extract all the content of the archive in the directory
411
- * indicated by $p_path. When relevant the memorized path of the
412
- * files/dir can be modified by removing the $p_remove_path path at the
413
- * beginning of the file/dir path.
414
- * While extracting a file, if the directory path does not exists it is
415
- * created.
416
- * While extracting a file, if the file already exists it is replaced
417
- * without looking for last modification date.
418
- * While extracting a file, if the file already exists and is write
419
- * protected, the extraction is aborted.
420
- * While extracting a file, if a directory with the same name already
421
- * exists, the extraction is aborted.
422
- * While extracting a directory, if a file with the same name already
423
- * exists, the extraction is aborted.
424
- * While extracting a file/directory if the destination directory exist
425
- * and is write protected, or does not exist but can not be created,
426
- * the extraction is aborted.
427
- * If after extraction an extracted file does not show the correct
428
- * stored file size, the extraction is aborted.
429
- * When the extraction is aborted, a PEAR error text is set and false
430
- * is returned. However the result can be a partial extraction that may
431
- * need to be manually cleaned.
432
- *
433
- * @param string $p_path The path of the directory where the
434
- * files/dir need to by extracted.
435
- * @param string $p_remove_path Part of the memorized path that can be
436
- * removed if present at the beginning of
437
- * the file/dir path.
438
- * @return boolean true on success, false on error.
439
- * @access public
440
- * @see extractList()
441
- */
442
- function extractModify($p_path, $p_remove_path)
443
- {
444
- $v_result = true;
445
- $v_list_detail = array();
446
-
447
- if ($v_result = $this->_openRead()) {
448
- $v_result = $this->_extractList($p_path, $v_list_detail,
449
- "complete", 0, $p_remove_path);
450
- $this->_close();
451
- }
452
-
453
- return $v_result;
454
- }
455
- // }}}
456
-
457
- // {{{ extractInString()
458
- /**
459
- * This method extract from the archive one file identified by $p_filename.
460
- * The return value is a string with the file content, or NULL on error.
461
- * @param string $p_filename The path of the file to extract in a string.
462
- * @return a string with the file content or NULL.
463
- * @access public
464
- */
465
- function extractInString($p_filename)
466
- {
467
- if ($this->_openRead()) {
468
- $v_result = $this->_extractInString($p_filename);
469
- $this->_close();
470
- } else {
471
- $v_result = NULL;
472
- }
473
-
474
- return $v_result;
475
- }
476
- // }}}
477
-
478
- // {{{ extractList()
479
- /**
480
- * This method extract from the archive only the files indicated in the
481
- * $p_filelist. These files are extracted in the current directory or
482
- * in the directory indicated by the optional $p_path parameter.
483
- * If indicated the $p_remove_path can be used in the same way as it is
484
- * used in extractModify() method.
485
- * @param array $p_filelist An array of filenames and directory names,
486
- * or a single string with names separated
487
- * by a single blank space.
488
- * @param string $p_path The path of the directory where the
489
- * files/dir need to by extracted.
490
- * @param string $p_remove_path Part of the memorized path that can be
491
- * removed if present at the beginning of
492
- * the file/dir path.
493
- * @return true on success, false on error.
494
- * @access public
495
- * @see extractModify()
496
- */
497
- function extractList($p_filelist, $p_path='', $p_remove_path='')
498
- {
499
- $v_result = true;
500
- $v_list_detail = array();
501
-
502
- if (is_array($p_filelist))
503
- $v_list = $p_filelist;
504
- elseif (is_string($p_filelist))
505
- $v_list = explode($this->_separator, $p_filelist);
506
- else {
507
- $this->_error('Invalid string list');
508
- return false;
509
- }
510
-
511
- if ($v_result = $this->_openRead()) {
512
- $v_result = $this->_extractList($p_path, $v_list_detail, "partial",
513
- $v_list, $p_remove_path);
514
- $this->_close();
515
- }
516
-
517
- return $v_result;
518
- }
519
- // }}}
520
-
521
- // {{{ setAttribute()
522
- /**
523
- * This method set specific attributes of the archive. It uses a variable
524
- * list of parameters, in the format attribute code + attribute values :
525
- * $arch->setAttribute(ARCHIVE_TAR_ATT_SEPARATOR, ',');
526
- * @param mixed $argv variable list of attributes and values
527
- * @return true on success, false on error.
528
- * @access public
529
- */
530
- function setAttribute()
531
- {
532
- $v_result = true;
533
-
534
- // ----- Get the number of variable list of arguments
535
- if (($v_size = func_num_args()) == 0) {
536
- return true;
537
- }
538
-
539
- // ----- Get the arguments
540
- $v_att_list = &func_get_args();
541
-
542
- // ----- Read the attributes
543
- $i=0;
544
- while ($i<$v_size) {
545
-
546
- // ----- Look for next option
547
- switch ($v_att_list[$i]) {
548
- // ----- Look for options that request a string value
549
- case ARCHIVE_TAR_ATT_SEPARATOR :
550
- // ----- Check the number of parameters
551
- if (($i+1) >= $v_size) {
552
- $this->_error('Invalid number of parameters for '
553
- .'attribute ARCHIVE_TAR_ATT_SEPARATOR');
554
- return false;
555
- }
556
-
557
- // ----- Get the value
558
- $this->_separator = $v_att_list[$i+1];
559
- $i++;
560
- break;
561
-
562
- default :
563
- $this->_error('Unknow attribute code '.$v_att_list[$i].'');
564
- return false;
565
- }
566
-
567
- // ----- Next attribute
568
- $i++;
569
- }
570
-
571
- return $v_result;
572
- }
573
- // }}}
574
-
575
- // {{{ _error()
576
- function _error($p_message)
577
- {
578
- // ----- To be completed
579
- $this->raiseError($p_message);
580
- }
581
- // }}}
582
-
583
- // {{{ _warning()
584
- function _warning($p_message)
585
- {
586
- // ----- To be completed
587
- $this->raiseError($p_message);
588
- }
589
- // }}}
590
-
591
- // {{{ _isArchive()
592
- function _isArchive($p_filename=NULL)
593
- {
594
- if ($p_filename == NULL) {
595
- $p_filename = $this->_tarname;
596
- }
597
- clearstatcache();
598
- return @is_file($p_filename);
599
- }
600
- // }}}
601
-
602
- // {{{ _openWrite()
603
- function _openWrite()
604
- {
605
- if ($this->_compress_type == 'gz')
606
- $this->_file = @gzopen($this->_tarname, "wb9");
607
- else if ($this->_compress_type == 'bz2')
608
- $this->_file = @bzopen($this->_tarname, "wb");
609
- else if ($this->_compress_type == 'none')
610
- $this->_file = @fopen($this->_tarname, "wb");
611
- else
612
- $this->_error('Unknown or missing compression type ('
613
- .$this->_compress_type.')');
614
-
615
- if ($this->_file == 0) {
616
- $this->_error('Unable to open in write mode \''
617
- .$this->_tarname.'\'');
618
- return false;
619
- }
620
-
621
- return true;
622
- }
623
- // }}}
624
-
625
- // {{{ _openRead()
626
- function _openRead()
627
- {
628
- if (strtolower(substr($this->_tarname, 0, 7)) == 'http://') {
629
-
630
- // ----- Look if a local copy need to be done
631
- if ($this->_temp_tarname == '') {
632
- $this->_temp_tarname = uniqid('tar').'.tmp';
633
- if (!$v_file_from = @fopen($this->_tarname, 'rb')) {
634
- $this->_error('Unable to open in read mode \''
635
- .$this->_tarname.'\'');
636
- $this->_temp_tarname = '';
637
- return false;
638
- }
639
- if (!$v_file_to = @fopen($this->_temp_tarname, 'wb')) {
640
- $this->_error('Unable to open in write mode \''
641
- .$this->_temp_tarname.'\'');
642
- $this->_temp_tarname = '';
643
- return false;
644
- }
645
- while ($v_data = @fread($v_file_from, 1024))
646
- @fwrite($v_file_to, $v_data);
647
- @fclose($v_file_from);
648
- @fclose($v_file_to);
649
- }
650
-
651
- // ----- File to open if the local copy
652
- $v_filename = $this->_temp_tarname;
653
-
654
- } else
655
- // ----- File to open if the normal Tar file
656
- $v_filename = $this->_tarname;
657
-
658
- if ($this->_compress_type == 'gz')
659
- $this->_file = @gzopen($v_filename, "rb");
660
- else if ($this->_compress_type == 'bz2')
661
- $this->_file = @bzopen($v_filename, "rb");
662
- else if ($this->_compress_type == 'none')
663
- $this->_file = @fopen($v_filename, "rb");
664
- else
665
- $this->_error('Unknown or missing compression type ('
666
- .$this->_compress_type.')');
667
-
668
- if ($this->_file == 0) {
669
- $this->_error('Unable to open in read mode \''.$v_filename.'\'');
670
- return false;
671
- }
672
-
673
- return true;
674
- }
675
- // }}}
676
-
677
- // {{{ _openReadWrite()
678
- function _openReadWrite()
679
- {
680
- if ($this->_compress_type == 'gz')
681
- $this->_file = @gzopen($this->_tarname, "r+b");
682
- else if ($this->_compress_type == 'bz2')
683
- $this->_file = @bzopen($this->_tarname, "r+b");
684
- else if ($this->_compress_type == 'none')
685
- $this->_file = @fopen($this->_tarname, "r+b");
686
- else
687
- $this->_error('Unknown or missing compression type ('
688
- .$this->_compress_type.')');
689
-
690
- if ($this->_file == 0) {
691
- $this->_error('Unable to open in read/write mode \''
692
- .$this->_tarname.'\'');
693
- return false;
694
- }
695
-
696
- return true;
697
- }
698
- // }}}
699
-
700
- // {{{ _close()
701
- function _close()
702
- {
703
- //if (isset($this->_file)) {
704
- if (is_resource($this->_file)) {
705
- if ($this->_compress_type == 'gz')
706
- @gzclose($this->_file);
707
- else if ($this->_compress_type == 'bz2')
708
- @bzclose($this->_file);
709
- else if ($this->_compress_type == 'none')
710
- @fclose($this->_file);
711
- else
712
- $this->_error('Unknown or missing compression type ('
713
- .$this->_compress_type.')');
714
-
715
- $this->_file = 0;
716
- }
717
-
718
- // ----- Look if a local copy need to be erase
719
- // Note that it might be interesting to keep the url for a time : ToDo
720
- if ($this->_temp_tarname != '') {
721
- @unlink($this->_temp_tarname);
722
- $this->_temp_tarname = '';
723
- }
724
-
725
- return true;
726
- }
727
- // }}}
728
-
729
- // {{{ _cleanFile()
730
- function _cleanFile()
731
- {
732
- $this->_close();
733
-
734
- // ----- Look for a local copy
735
- if ($this->_temp_tarname != '') {
736
- // ----- Remove the local copy but not the remote tarname
737
- @unlink($this->_temp_tarname);
738
- $this->_temp_tarname = '';
739
- } else {
740
- // ----- Remove the local tarname file
741
- @unlink($this->_tarname);
742
- }
743
- $this->_tarname = '';
744
-
745
- return true;
746
- }
747
- // }}}
748
-
749
- // {{{ _writeBlock()
750
- function _writeBlock($p_binary_data, $p_len=null)
751
- {
752
- if (is_resource($this->_file)) {
753
- if ($p_len === null) {
754
- if ($this->_compress_type == 'gz')
755
- @gzputs($this->_file, $p_binary_data);
756
- else if ($this->_compress_type == 'bz2')
757
- @bzwrite($this->_file, $p_binary_data);
758
- else if ($this->_compress_type == 'none')
759
- @fputs($this->_file, $p_binary_data);
760
- else
761
- $this->_error('Unknown or missing compression type ('
762
- .$this->_compress_type.')');
763
- } else {
764
- if ($this->_compress_type == 'gz')
765
- @gzputs($this->_file, $p_binary_data, $p_len);
766
- else if ($this->_compress_type == 'bz2')
767
- @bzwrite($this->_file, $p_binary_data, $p_len);
768
- else if ($this->_compress_type == 'none')
769
- @fputs($this->_file, $p_binary_data, $p_len);
770
- else
771
- $this->_error('Unknown or missing compression type ('
772
- .$this->_compress_type.')');
773
-
774
- }
775
- }
776
- return true;
777
- }
778
- // }}}
779
-
780
- // {{{ _readBlock()
781
- function _readBlock()
782
- {
783
- $v_block = null;
784
- if (is_resource($this->_file)) {
785
- if ($this->_compress_type == 'gz')
786
- $v_block = @gzread($this->_file, 512);
787
- else if ($this->_compress_type == 'bz2')
788
- $v_block = @bzread($this->_file, 512);
789
- else if ($this->_compress_type == 'none')
790
- $v_block = @fread($this->_file, 512);
791
- else
792
- $this->_error('Unknown or missing compression type ('
793
- .$this->_compress_type.')');
794
- }
795
- return $v_block;
796
- }
797
- // }}}
798
-
799
- // {{{ _jumpBlock()
800
- function _jumpBlock($p_len=null)
801
- {
802
- if (is_resource($this->_file)) {
803
- if ($p_len === null)
804
- $p_len = 1;
805
-
806
- if ($this->_compress_type == 'gz') {
807
- @gzseek($this->_file, gztell($this->_file)+($p_len*512));
808
- }
809
- else if ($this->_compress_type == 'bz2') {
810
- // ----- Replace missing bztell() and bzseek()
811
- for ($i=0; $i<$p_len; $i++)
812
- $this->_readBlock();
813
- } else if ($this->_compress_type == 'none')
814
- @fseek($this->_file, ftell($this->_file)+($p_len*512));
815
- else
816
- $this->_error('Unknown or missing compression type ('
817
- .$this->_compress_type.')');
818
-
819
- }
820
- return true;
821
- }
822
- // }}}
823
-
824
- // {{{ _writeFooter()
825
- function _writeFooter()
826
- {
827
- if (is_resource($this->_file)) {
828
- // ----- Write the last 0 filled block for end of archive
829
- $v_binary_data = pack('a1024', '');
830
- $this->_writeBlock($v_binary_data);
831
- }
832
- return true;
833
- }
834
- // }}}
835
-
836
- // {{{ _addList()
837
- function _addList($p_list, $p_add_dir, $p_remove_dir)
838
- {
839
- $v_result=true;
840
- $v_header = array();
841
-
842
- // ----- Remove potential windows directory separator
843
- $p_add_dir = $this->_translateWinPath($p_add_dir);
844
- $p_remove_dir = $this->_translateWinPath($p_remove_dir, false);
845
-
846
- if (!$this->_file) {
847
- $this->_error('Invalid file descriptor');
848
- return false;
849
- }
850
-
851
- if (sizeof($p_list) == 0)
852
- return true;
853
-
854
- foreach ($p_list as $v_filename) {
855
- if (!$v_result) {
856
- break;
857
- }
858
-
859
- // ----- Skip the current tar name
860
- if ($v_filename == $this->_tarname)
861
- continue;
862
-
863
- if ($v_filename == '')
864
- continue;
865
-
866
- if (!file_exists($v_filename)) {
867
- $this->_warning("File '$v_filename' does not exist");
868
- continue;
869
- }
870
-
871
- // ----- Add the file or directory header
872
- if (!$this->_addFile($v_filename, $v_header, $p_add_dir, $p_remove_dir))
873
- return false;
874
-
875
- if (@is_dir($v_filename)) {
876
- if (!($p_hdir = opendir($v_filename))) {
877
- $this->_warning("Directory '$v_filename' can not be read");
878
- continue;
879
- }
880
- while (false !== ($p_hitem = readdir($p_hdir))) {
881
- if (($p_hitem != '.') && ($p_hitem != '..')) {
882
- if ($v_filename != ".")
883
- $p_temp_list[0] = $v_filename.'/'.$p_hitem;
884
- else
885
- $p_temp_list[0] = $p_hitem;
886
-
887
- $v_result = $this->_addList($p_temp_list,
888
- $p_add_dir,
889
- $p_remove_dir);
890
- }
891
- }
892
-
893
- unset($p_temp_list);
894
- unset($p_hdir);
895
- unset($p_hitem);
896
- }
897
- }
898
-
899
- return $v_result;
900
- }
901
- // }}}
902
-
903
- // {{{ _addFile()
904
- function _addFile($p_filename, &$p_header, $p_add_dir, $p_remove_dir)
905
- {
906
- if (!$this->_file) {
907
- $this->_error('Invalid file descriptor');
908
- return false;
909
- }
910
-
911
- if ($p_filename == '') {
912
- $this->_error('Invalid file name');
913
- return false;
914
- }
915
-
916
- // ----- Calculate the stored filename
917
- $p_filename = $this->_translateWinPath($p_filename, false);;
918
- $v_stored_filename = $p_filename;
919
- if (strcmp($p_filename, $p_remove_dir) == 0) {
920
- return true;
921
- }
922
- if ($p_remove_dir != '') {
923
- if (substr($p_remove_dir, -1) != '/')
924
- $p_remove_dir .= '/';
925
-
926
- if (substr($p_filename, 0, strlen($p_remove_dir)) == $p_remove_dir)
927
- $v_stored_filename = substr($p_filename, strlen($p_remove_dir));
928
- }
929
- $v_stored_filename = $this->_translateWinPath($v_stored_filename);
930
- if ($p_add_dir != '') {
931
- if (substr($p_add_dir, -1) == '/')
932
- $v_stored_filename = $p_add_dir.$v_stored_filename;
933
- else
934
- $v_stored_filename = $p_add_dir.'/'.$v_stored_filename;
935
- }
936
-
937
- $v_stored_filename = $this->_pathReduction($v_stored_filename);
938
-
939
- if ($this->_isArchive($p_filename)) {
940
- if (($v_file = @fopen($p_filename, "rb")) == 0) {
941
- $this->_warning("Unable to open file '".$p_filename
942
- ."' in binary read mode");
943
- return true;
944
- }
945
-
946
- if (!$this->_writeHeader($p_filename, $v_stored_filename))
947
- return false;
948
-
949
- while (($v_buffer = fread($v_file, 512)) != '') {
950
- $v_binary_data = pack("a512", "$v_buffer");
951
- $this->_writeBlock($v_binary_data);
952
- }
953
-
954
- fclose($v_file);
955
-
956
- } else {
957
- // ----- Only header for dir
958
- if (!$this->_writeHeader($p_filename, $v_stored_filename))
959
- return false;
960
- }
961
-
962
- return true;
963
- }
964
- // }}}
965
-
966
- // {{{ _addString()
967
- function _addString($p_filename, $p_string)
968
- {
969
- if (!$this->_file) {
970
- $this->_error('Invalid file descriptor');
971
- return false;
972
- }
973
-
974
- if ($p_filename == '') {
975
- $this->_error('Invalid file name');
976
- return false;
977
- }
978
-
979
- // ----- Calculate the stored filename
980
- $p_filename = $this->_translateWinPath($p_filename, false);;
981
-
982
- if (!$this->_writeHeaderBlock($p_filename, strlen($p_string),
983
- time(), 384, "", 0, 0))
984
- return false;
985
-
986
- $i=0;
987
- while (($v_buffer = substr($p_string, (($i++)*512), 512)) != '') {
988
- $v_binary_data = pack("a512", $v_buffer);
989
- $this->_writeBlock($v_binary_data);
990
- }
991
-
992
- return true;
993
- }
994
- // }}}
995
-
996
- // {{{ _writeHeader()
997
- function _writeHeader($p_filename, $p_stored_filename)
998
- {
999
- if ($p_stored_filename == '')
1000
- $p_stored_filename = $p_filename;
1001
- $v_reduce_filename = $this->_pathReduction($p_stored_filename);
1002
-
1003
- if (strlen($v_reduce_filename) > 99) {
1004
- if (!$this->_writeLongHeader($v_reduce_filename))
1005
- return false;
1006
- }
1007
-
1008
- $v_info = stat($p_filename);
1009
- $v_uid = sprintf("%6s ", DecOct($v_info[4]));
1010
- $v_gid = sprintf("%6s ", DecOct($v_info[5]));
1011
- $v_perms = sprintf("%6s ", DecOct(fileperms($p_filename)));
1012
-
1013
- $v_mtime = sprintf("%11s", DecOct(filemtime($p_filename)));
1014
-
1015
- if (@is_dir($p_filename)) {
1016
- $v_typeflag = "5";
1017
- $v_size = sprintf("%11s ", DecOct(0));
1018
- } else {
1019
- $v_typeflag = '';
1020
- clearstatcache();
1021
- $v_size = sprintf("%11s ", DecOct(filesize($p_filename)));
1022
- }
1023
-
1024
- $v_linkname = '';
1025
-
1026
- $v_magic = '';
1027
-
1028
- $v_version = '';
1029
-
1030
- $v_uname = '';
1031
-
1032
- $v_gname = '';
1033
-
1034
- $v_devmajor = '';
1035
-
1036
- $v_devminor = '';
1037
-
1038
- $v_prefix = '';
1039
-
1040
- $v_binary_data_first = pack("a100a8a8a8a12A12",
1041
- $v_reduce_filename, $v_perms, $v_uid,
1042
- $v_gid, $v_size, $v_mtime);
1043
- $v_binary_data_last = pack("a1a100a6a2a32a32a8a8a155a12",
1044
- $v_typeflag, $v_linkname, $v_magic,
1045
- $v_version, $v_uname, $v_gname,
1046
- $v_devmajor, $v_devminor, $v_prefix, '');
1047
-
1048
- // ----- Calculate the checksum
1049
- $v_checksum = 0;
1050
- // ..... First part of the header
1051
- for ($i=0; $i<148; $i++)
1052
- $v_checksum += ord(substr($v_binary_data_first,$i,1));
1053
- // ..... Ignore the checksum value and replace it by ' ' (space)
1054
- for ($i=148; $i<156; $i++)
1055
- $v_checksum += ord(' ');
1056
- // ..... Last part of the header
1057
- for ($i=156, $j=0; $i<512; $i++, $j++)
1058
- $v_checksum += ord(substr($v_binary_data_last,$j,1));
1059
-
1060
- // ----- Write the first 148 bytes of the header in the archive
1061
- $this->_writeBlock($v_binary_data_first, 148);
1062
-
1063
- // ----- Write the calculated checksum
1064
- $v_checksum = sprintf("%6s ", DecOct($v_checksum));
1065
- $v_binary_data = pack("a8", $v_checksum);
1066
- $this->_writeBlock($v_binary_data, 8);
1067
-
1068
- // ----- Write the last 356 bytes of the header in the archive
1069
- $this->_writeBlock($v_binary_data_last, 356);
1070
-
1071
- return true;
1072
- }
1073
- // }}}
1074
-
1075
- // {{{ _writeHeaderBlock()
1076
- function _writeHeaderBlock($p_filename, $p_size, $p_mtime=0, $p_perms=0,
1077
- $p_type='', $p_uid=0, $p_gid=0)
1078
- {
1079
- $p_filename = $this->_pathReduction($p_filename);
1080
-
1081
- if (strlen($p_filename) > 99) {
1082
- if (!$this->_writeLongHeader($p_filename))
1083
- return false;
1084
- }
1085
-
1086
- if ($p_type == "5") {
1087
- $v_size = sprintf("%11s ", DecOct(0));
1088
- } else {
1089
- $v_size = sprintf("%11s ", DecOct($p_size));
1090
- }
1091
-
1092
- $v_uid = sprintf("%6s ", DecOct($p_uid));
1093
- $v_gid = sprintf("%6s ", DecOct($p_gid));
1094
- $v_perms = sprintf("%6s ", DecOct($p_perms));
1095
-
1096
- $v_mtime = sprintf("%11s", DecOct($p_mtime));
1097
-
1098
- $v_linkname = '';
1099
-
1100
- $v_magic = '';
1101
-
1102
- $v_version = '';
1103
-
1104
- $v_uname = '';
1105
-
1106
- $v_gname = '';
1107
-
1108
- $v_devmajor = '';
1109
-
1110
- $v_devminor = '';
1111
-
1112
- $v_prefix = '';
1113
-
1114
- $v_binary_data_first = pack("a100a8a8a8a12A12",
1115
- $p_filename, $v_perms, $v_uid, $v_gid,
1116
- $v_size, $v_mtime);
1117
- $v_binary_data_last = pack("a1a100a6a2a32a32a8a8a155a12",
1118
- $p_type, $v_linkname, $v_magic,
1119
- $v_version, $v_uname, $v_gname,
1120
- $v_devmajor, $v_devminor, $v_prefix, '');
1121
-
1122
- // ----- Calculate the checksum
1123
- $v_checksum = 0;
1124
- // ..... First part of the header
1125
- for ($i=0; $i<148; $i++)
1126
- $v_checksum += ord(substr($v_binary_data_first,$i,1));
1127
- // ..... Ignore the checksum value and replace it by ' ' (space)
1128
- for ($i=148; $i<156; $i++)
1129
- $v_checksum += ord(' ');
1130
- // ..... Last part of the header
1131
- for ($i=156, $j=0; $i<512; $i++, $j++)
1132
- $v_checksum += ord(substr($v_binary_data_last,$j,1));
1133
-
1134
- // ----- Write the first 148 bytes of the header in the archive
1135
- $this->_writeBlock($v_binary_data_first, 148);
1136
-
1137
- // ----- Write the calculated checksum
1138
- $v_checksum = sprintf("%6s ", DecOct($v_checksum));
1139
- $v_binary_data = pack("a8", $v_checksum);
1140
- $this->_writeBlock($v_binary_data, 8);
1141
-
1142
- // ----- Write the last 356 bytes of the header in the archive
1143
- $this->_writeBlock($v_binary_data_last, 356);
1144
-
1145
- return true;
1146
- }
1147
- // }}}
1148
-
1149
- // {{{ _writeLongHeader()
1150
- function _writeLongHeader($p_filename)
1151
- {
1152
- $v_size = sprintf("%11s ", DecOct(strlen($p_filename)));
1153
-
1154
- $v_typeflag = 'L';
1155
-
1156
- $v_linkname = '';
1157
-
1158
- $v_magic = '';
1159
-
1160
- $v_version = '';
1161
-
1162
- $v_uname = '';
1163
-
1164
- $v_gname = '';
1165
-
1166
- $v_devmajor = '';
1167
-
1168
- $v_devminor = '';
1169
-
1170
- $v_prefix = '';
1171
-
1172
- $v_binary_data_first = pack("a100a8a8a8a12A12",
1173
- '././@LongLink', 0, 0, 0, $v_size, 0);
1174
- $v_binary_data_last = pack("a1a100a6a2a32a32a8a8a155a12",
1175
- $v_typeflag, $v_linkname, $v_magic,
1176
- $v_version, $v_uname, $v_gname,
1177
- $v_devmajor, $v_devminor, $v_prefix, '');
1178
-
1179
- // ----- Calculate the checksum
1180
- $v_checksum = 0;
1181
- // ..... First part of the header
1182
- for ($i=0; $i<148; $i++)
1183
- $v_checksum += ord(substr($v_binary_data_first,$i,1));
1184
- // ..... Ignore the checksum value and replace it by ' ' (space)
1185
- for ($i=148; $i<156; $i++)
1186
- $v_checksum += ord(' ');
1187
- // ..... Last part of the header
1188
- for ($i=156, $j=0; $i<512; $i++, $j++)
1189
- $v_checksum += ord(substr($v_binary_data_last,$j,1));
1190
-
1191
- // ----- Write the first 148 bytes of the header in the archive
1192
- $this->_writeBlock($v_binary_data_first, 148);
1193
-
1194
- // ----- Write the calculated checksum
1195
- $v_checksum = sprintf("%6s ", DecOct($v_checksum));
1196
- $v_binary_data = pack("a8", $v_checksum);
1197
- $this->_writeBlock($v_binary_data, 8);
1198
-
1199
- // ----- Write the last 356 bytes of the header in the archive
1200
- $this->_writeBlock($v_binary_data_last, 356);
1201
-
1202
- // ----- Write the filename as content of the block
1203
- $i=0;
1204
- while (($v_buffer = substr($p_filename, (($i++)*512), 512)) != '') {
1205
- $v_binary_data = pack("a512", "$v_buffer");
1206
- $this->_writeBlock($v_binary_data);
1207
- }
1208
-
1209
- return true;
1210
- }
1211
- // }}}
1212
-
1213
- // {{{ _readHeader()
1214
- function _readHeader($v_binary_data, &$v_header)
1215
- {
1216
- if (strlen($v_binary_data)==0) {
1217
- $v_header['filename'] = '';
1218
- return true;
1219
- }
1220
-
1221
- if (strlen($v_binary_data) != 512) {
1222
- $v_header['filename'] = '';
1223
- $this->_error('Invalid block size : '.strlen($v_binary_data));
1224
- return false;
1225
- }
1226
-
1227
- if (!is_array($v_header)) {
1228
- $v_header = array();
1229
- }
1230
- // ----- Calculate the checksum
1231
- $v_checksum = 0;
1232
- // ..... First part of the header
1233
- for ($i=0; $i<148; $i++)
1234
- $v_checksum+=ord(substr($v_binary_data,$i,1));
1235
- // ..... Ignore the checksum value and replace it by ' ' (space)
1236
- for ($i=148; $i<156; $i++)
1237
- $v_checksum += ord(' ');
1238
- // ..... Last part of the header
1239
- for ($i=156; $i<512; $i++)
1240
- $v_checksum+=ord(substr($v_binary_data,$i,1));
1241
-
1242
- $v_data = unpack("a100filename/a8mode/a8uid/a8gid/a12size/a12mtime/"
1243
- ."a8checksum/a1typeflag/a100link/a6magic/a2version/"
1244
- ."a32uname/a32gname/a8devmajor/a8devminor",
1245
- $v_binary_data);
1246
-
1247
- // ----- Extract the checksum
1248
- $v_header['checksum'] = OctDec(trim($v_data['checksum']));
1249
- if ($v_header['checksum'] != $v_checksum) {
1250
- $v_header['filename'] = '';
1251
-
1252
- // ----- Look for last block (empty block)
1253
- if (($v_checksum == 256) && ($v_header['checksum'] == 0))
1254
- return true;
1255
-
1256
- $this->_error('Invalid checksum for file "'.$v_data['filename']
1257
- .'" : '.$v_checksum.' calculated, '
1258
- .$v_header['checksum'].' expected');
1259
- return false;
1260
- }
1261
-
1262
- // ----- Extract the properties
1263
- $v_header['filename'] = trim($v_data['filename']);
1264
- if ($this->_maliciousFilename($v_header['filename'])) {
1265
- $this->_error('Malicious .tar detected, file "' . $v_header['filename'] .
1266
- '" will not install in desired directory tree');
1267
- return false;
1268
- }
1269
- $v_header['mode'] = OctDec(trim($v_data['mode']));
1270
- $v_header['uid'] = OctDec(trim($v_data['uid']));
1271
- $v_header['gid'] = OctDec(trim($v_data['gid']));
1272
- $v_header['size'] = OctDec(trim($v_data['size']));
1273
- $v_header['mtime'] = OctDec(trim($v_data['mtime']));
1274
- if (($v_header['typeflag'] = $v_data['typeflag']) == "5") {
1275
- $v_header['size'] = 0;
1276
- }
1277
- $v_header['link'] = trim($v_data['link']);
1278
- /* ----- All these fields are removed form the header because
1279
- they do not carry interesting info
1280
- $v_header[magic] = trim($v_data[magic]);
1281
- $v_header[version] = trim($v_data[version]);
1282
- $v_header[uname] = trim($v_data[uname]);
1283
- $v_header[gname] = trim($v_data[gname]);
1284
- $v_header[devmajor] = trim($v_data[devmajor]);
1285
- $v_header[devminor] = trim($v_data[devminor]);
1286
- */
1287
-
1288
- return true;
1289
- }
1290
- // }}}
1291
-
1292
- // {{{ _maliciousFilename()
1293
- /**
1294
- * Detect and report a malicious file name
1295
- *
1296
- * @param string $file
1297
- * @return bool
1298
- * @access private
1299
- */
1300
- function _maliciousFilename($file)
1301
- {
1302
- if (strpos($file, '/../') !== false) {
1303
- return true;
1304
- }
1305
- if (strpos($file, '../') === 0) {
1306
- return true;
1307
- }
1308
- return false;
1309
- }
1310
- // }}}
1311
-
1312
- // {{{ _readLongHeader()
1313
- function _readLongHeader(&$v_header)
1314
- {
1315
- $v_filename = '';
1316
- $n = floor($v_header['size']/512);
1317
- for ($i=0; $i<$n; $i++) {
1318
- $v_content = $this->_readBlock();
1319
- $v_filename .= $v_content;
1320
- }
1321
- if (($v_header['size'] % 512) != 0) {
1322
- $v_content = $this->_readBlock();
1323
- $v_filename .= $v_content;
1324
- }
1325
-
1326
- // ----- Read the next header
1327
- $v_binary_data = $this->_readBlock();
1328
-
1329
- if (!$this->_readHeader($v_binary_data, $v_header))
1330
- return false;
1331
-
1332
- $v_header['filename'] = $v_filename;
1333
- if ($this->_maliciousFilename($v_filename)) {
1334
- $this->_error('Malicious .tar detected, file "' . $v_filename .
1335
- '" will not install in desired directory tree');
1336
- return false;
1337
- }
1338
-
1339
- return true;
1340
- }
1341
- // }}}
1342
-
1343
- // {{{ _extractInString()
1344
- /**
1345
- * This method extract from the archive one file identified by $p_filename.
1346
- * The return value is a string with the file content, or NULL on error.
1347
- * @param string $p_filename The path of the file to extract in a string.
1348
- * @return a string with the file content or NULL.
1349
- * @access private
1350
- */
1351
- function _extractInString($p_filename)
1352
- {
1353
- $v_result_str = "";
1354
-
1355
- While (strlen($v_binary_data = $this->_readBlock()) != 0)
1356
- {
1357
- if (!$this->_readHeader($v_binary_data, $v_header))
1358
- return NULL;
1359
-
1360
- if ($v_header['filename'] == '')
1361
- continue;
1362
-
1363
- // ----- Look for long filename
1364
- if ($v_header['typeflag'] == 'L') {
1365
- if (!$this->_readLongHeader($v_header))
1366
- return NULL;
1367
- }
1368
-
1369
- if ($v_header['filename'] == $p_filename) {
1370
- if ($v_header['typeflag'] == "5") {
1371
- $this->_error('Unable to extract in string a directory '
1372
- .'entry {'.$v_header['filename'].'}');
1373
- return NULL;
1374
- } else {
1375
- $n = floor($v_header['size']/512);
1376
- for ($i=0; $i<$n; $i++) {
1377
- $v_result_str .= $this->_readBlock();
1378
- }
1379
- if (($v_header['size'] % 512) != 0) {
1380
- $v_content = $this->_readBlock();
1381
- $v_result_str .= substr($v_content, 0,
1382
- ($v_header['size'] % 512));
1383
- }
1384
- return $v_result_str;
1385
- }
1386
- } else {
1387
- $this->_jumpBlock(ceil(($v_header['size']/512)));
1388
- }
1389
- }
1390
-
1391
- return NULL;
1392
- }
1393
- // }}}
1394
-
1395
- // {{{ _extractList()
1396
- function _extractList($p_path, &$p_list_detail, $p_mode,
1397
- $p_file_list, $p_remove_path)
1398
- {
1399
- $v_result=true;
1400
- $v_nb = 0;
1401
- $v_extract_all = true;
1402
- $v_listing = false;
1403
-
1404
- $p_path = $this->_translateWinPath($p_path, false);
1405
- if ($p_path == '' || (substr($p_path, 0, 1) != '/'
1406
- && substr($p_path, 0, 3) != "../" && !strpos($p_path, ':'))) {
1407
- $p_path = "./".$p_path;
1408
- }
1409
- $p_remove_path = $this->_translateWinPath($p_remove_path);
1410
-
1411
- // ----- Look for path to remove format (should end by /)
1412
- if (($p_remove_path != '') && (substr($p_remove_path, -1) != '/'))
1413
- $p_remove_path .= '/';
1414
- $p_remove_path_size = strlen($p_remove_path);
1415
-
1416
- switch ($p_mode) {
1417
- case "complete" :
1418
- $v_extract_all = TRUE;
1419
- $v_listing = FALSE;
1420
- break;
1421
- case "partial" :
1422
- $v_extract_all = FALSE;
1423
- $v_listing = FALSE;
1424
- break;
1425
- case "list" :
1426
- $v_extract_all = FALSE;
1427
- $v_listing = TRUE;
1428
- break;
1429
- default :
1430
- $this->_error('Invalid extract mode ('.$p_mode.')');
1431
- return false;
1432
- }
1433
-
1434
- clearstatcache();
1435
-
1436
- while (strlen($v_binary_data = $this->_readBlock()) != 0)
1437
- {
1438
- $v_extract_file = FALSE;
1439
- $v_extraction_stopped = 0;
1440
-
1441
- if (!$this->_readHeader($v_binary_data, $v_header))
1442
- return false;
1443
-
1444
- if ($v_header['filename'] == '') {
1445
- continue;
1446
- }
1447
-
1448
- // ----- Look for long filename
1449
- if ($v_header['typeflag'] == 'L') {
1450
- if (!$this->_readLongHeader($v_header))
1451
- return false;
1452
- }
1453
-
1454
- if ((!$v_extract_all) && (is_array($p_file_list))) {
1455
- // ----- By default no unzip if the file is not found
1456
- $v_extract_file = false;
1457
-
1458
- for ($i=0; $i<sizeof($p_file_list); $i++) {
1459
- // ----- Look if it is a directory
1460
- if (substr($p_file_list[$i], -1) == '/') {
1461
- // ----- Look if the directory is in the filename path
1462
- if ((strlen($v_header['filename']) > strlen($p_file_list[$i]))
1463
- && (substr($v_header['filename'], 0, strlen($p_file_list[$i]))
1464
- == $p_file_list[$i])) {
1465
- $v_extract_file = TRUE;
1466
- break;
1467
- }
1468
- }
1469
-
1470
- // ----- It is a file, so compare the file names
1471
- elseif ($p_file_list[$i] == $v_header['filename']) {
1472
- $v_extract_file = TRUE;
1473
- break;
1474
- }
1475
- }
1476
- } else {
1477
- $v_extract_file = TRUE;
1478
- }
1479
-
1480
- // ----- Look if this file need to be extracted
1481
- if (($v_extract_file) && (!$v_listing))
1482
- {
1483
- if (($p_remove_path != '')
1484
- && (substr($v_header['filename'], 0, $p_remove_path_size)
1485
- == $p_remove_path))
1486
- $v_header['filename'] = substr($v_header['filename'],
1487
- $p_remove_path_size);
1488
- if (($p_path != './') && ($p_path != '/')) {
1489
- while (substr($p_path, -1) == '/')
1490
- $p_path = substr($p_path, 0, strlen($p_path)-1);
1491
-
1492
- if (substr($v_header['filename'], 0, 1) == '/')
1493
- $v_header['filename'] = $p_path.$v_header['filename'];
1494
- else
1495
- $v_header['filename'] = $p_path.'/'.$v_header['filename'];
1496
- }
1497
- if (file_exists($v_header['filename'])) {
1498
- if ( (@is_dir($v_header['filename']))
1499
- && ($v_header['typeflag'] == '')) {
1500
- $this->_error('File '.$v_header['filename']
1501
- .' already exists as a directory');
1502
- return false;
1503
- }
1504
- if ( ($this->_isArchive($v_header['filename']))
1505
- && ($v_header['typeflag'] == "5")) {
1506
- $this->_error('Directory '.$v_header['filename']
1507
- .' already exists as a file');
1508
- return false;
1509
- }
1510
- if (!is_writeable($v_header['filename'])) {
1511
- $this->_error('File '.$v_header['filename']
1512
- .' already exists and is write protected');
1513
- return false;
1514
- }
1515
- if (filemtime($v_header['filename']) > $v_header['mtime']) {
1516
- // To be completed : An error or silent no replace ?
1517
- }
1518
- }
1519
-
1520
- // ----- Check the directory availability and create it if necessary
1521
- elseif (($v_result
1522
- = $this->_dirCheck(($v_header['typeflag'] == "5"
1523
- ?$v_header['filename']
1524
- :dirname($v_header['filename'])))) != 1) {
1525
- $this->_error('Unable to create path for '.$v_header['filename']);
1526
- return false;
1527
- }
1528
-
1529
- if ($v_extract_file) {
1530
- if ($v_header['typeflag'] == "5") {
1531
- if (!@file_exists($v_header['filename'])) {
1532
- if (!@mkdir($v_header['filename'], 0777)) {
1533
- $this->_error('Unable to create directory {'
1534
- .$v_header['filename'].'}');
1535
- return false;
1536
- }
1537
- }
1538
- } elseif ($v_header['typeflag'] == "2") {
1539
- if (!@symlink($v_header['link'], $v_header['filename'])) {
1540
- $this->_error('Unable to extract symbolic link {'
1541
- .$v_header['filename'].'}');
1542
- return false;
1543
- }
1544
- } else {
1545
- if (($v_dest_file = @fopen($v_header['filename'], "wb")) == 0) {
1546
- $this->_error('Error while opening {'.$v_header['filename']
1547
- .'} in write binary mode');
1548
- return false;
1549
- } else {
1550
- $n = floor($v_header['size']/512);
1551
- for ($i=0; $i<$n; $i++) {
1552
- $v_content = $this->_readBlock();
1553
- fwrite($v_dest_file, $v_content, 512);
1554
- }
1555
- if (($v_header['size'] % 512) != 0) {
1556
- $v_content = $this->_readBlock();
1557
- fwrite($v_dest_file, $v_content, ($v_header['size'] % 512));
1558
- }
1559
-
1560
- @fclose($v_dest_file);
1561
-
1562
- // ----- Change the file mode, mtime
1563
- @touch($v_header['filename'], $v_header['mtime']);
1564
- if ($v_header['mode'] & 0111) {
1565
- // make file executable, obey umask
1566
- $mode = fileperms($v_header['filename']) | (~umask() & 0111);
1567
- @chmod($v_header['filename'], $mode);
1568
- }
1569
- }
1570
-
1571
- // ----- Check the file size
1572
- clearstatcache();
1573
- if (filesize($v_header['filename']) != $v_header['size']) {
1574
- $this->_error('Extracted file '.$v_header['filename']
1575
- .' does not have the correct file size \''
1576
- .filesize($v_header['filename'])
1577
- .'\' ('.$v_header['size']
1578
- .' expected). Archive may be corrupted.');
1579
- return false;
1580
- }
1581
- }
1582
- } else {
1583
- $this->_jumpBlock(ceil(($v_header['size']/512)));
1584
- }
1585
- } else {
1586
- $this->_jumpBlock(ceil(($v_header['size']/512)));
1587
- }
1588
-
1589
- /* TBC : Seems to be unused ...
1590
- if ($this->_compress)
1591
- $v_end_of_file = @gzeof($this->_file);
1592
- else
1593
- $v_end_of_file = @feof($this->_file);
1594
- */
1595
-
1596
- if ($v_listing || $v_extract_file || $v_extraction_stopped) {
1597
- // ----- Log extracted files
1598
- if (($v_file_dir = dirname($v_header['filename']))
1599
- == $v_header['filename'])
1600
- $v_file_dir = '';
1601
- if ((substr($v_header['filename'], 0, 1) == '/') && ($v_file_dir == ''))
1602
- $v_file_dir = '/';
1603
-
1604
- $p_list_detail[$v_nb++] = $v_header;
1605
- if (is_array($p_file_list) && (count($p_list_detail) == count($p_file_list))) {
1606
- return true;
1607
- }
1608
- }
1609
- }
1610
-
1611
- return true;
1612
- }
1613
- // }}}
1614
-
1615
- // {{{ _openAppend()
1616
- function _openAppend()
1617
- {
1618
- if (filesize($this->_tarname) == 0)
1619
- return $this->_openWrite();
1620
-
1621
- if ($this->_compress) {
1622
- $this->_close();
1623
-
1624
- if (!@rename($this->_tarname, $this->_tarname.".tmp")) {
1625
- $this->_error('Error while renaming \''.$this->_tarname
1626
- .'\' to temporary file \''.$this->_tarname
1627
- .'.tmp\'');
1628
- return false;
1629
- }
1630
-
1631
- if ($this->_compress_type == 'gz')
1632
- $v_temp_tar = @gzopen($this->_tarname.".tmp", "rb");
1633
- elseif ($this->_compress_type == 'bz2')
1634
- $v_temp_tar = @bzopen($this->_tarname.".tmp", "rb");
1635
-
1636
- if ($v_temp_tar == 0) {
1637
- $this->_error('Unable to open file \''.$this->_tarname
1638
- .'.tmp\' in binary read mode');
1639
- @rename($this->_tarname.".tmp", $this->_tarname);
1640
- return false;
1641
- }
1642
-
1643
- if (!$this->_openWrite()) {
1644
- @rename($this->_tarname.".tmp", $this->_tarname);
1645
- return false;
1646
- }
1647
-
1648
- if ($this->_compress_type == 'gz') {
1649
- while (!@gzeof($v_temp_tar)) {
1650
- $v_buffer = @gzread($v_temp_tar, 512);
1651
- if ($v_buffer == ARCHIVE_TAR_END_BLOCK) {
1652
- // do not copy end blocks, we will re-make them
1653
- // after appending
1654
- continue;
1655
- }
1656
- $v_binary_data = pack("a512", $v_buffer);
1657
- $this->_writeBlock($v_binary_data);
1658
- }
1659
-
1660
- @gzclose($v_temp_tar);
1661
- }
1662
- elseif ($this->_compress_type == 'bz2') {
1663
- while (strlen($v_buffer = @bzread($v_temp_tar, 512)) > 0) {
1664
- if ($v_buffer == ARCHIVE_TAR_END_BLOCK) {
1665
- continue;
1666
- }
1667
- $v_binary_data = pack("a512", $v_buffer);
1668
- $this->_writeBlock($v_binary_data);
1669
- }
1670
-
1671
- @bzclose($v_temp_tar);
1672
- }
1673
-
1674
- if (!@unlink($this->_tarname.".tmp")) {
1675
- $this->_error('Error while deleting temporary file \''
1676
- .$this->_tarname.'.tmp\'');
1677
- }
1678
-
1679
- } else {
1680
- // ----- For not compressed tar, just add files before the last
1681
- // one or two 512 bytes block
1682
- if (!$this->_openReadWrite())
1683
- return false;
1684
-
1685
- clearstatcache();
1686
- $v_size = filesize($this->_tarname);
1687
-
1688
- // We might have zero, one or two end blocks.
1689
- // The standard is two, but we should try to handle
1690
- // other cases.
1691
- fseek($this->_file, $v_size - 1024);
1692
- if (fread($this->_file, 512) == ARCHIVE_TAR_END_BLOCK) {
1693
- fseek($this->_file, $v_size - 1024);
1694
- }
1695
- elseif (fread($this->_file, 512) == ARCHIVE_TAR_END_BLOCK) {
1696
- fseek($this->_file, $v_size - 512);
1697
- }
1698
- }
1699
-
1700
- return true;
1701
- }
1702
- // }}}
1703
-
1704
- // {{{ _append()
1705
- function _append($p_filelist, $p_add_dir='', $p_remove_dir='')
1706
- {
1707
- if (!$this->_openAppend())
1708
- return false;
1709
-
1710
- if ($this->_addList($p_filelist, $p_add_dir, $p_remove_dir))
1711
- $this->_writeFooter();
1712
-
1713
- $this->_close();
1714
-
1715
- return true;
1716
- }
1717
- // }}}
1718
-
1719
- // {{{ _dirCheck()
1720
-
1721
- /**
1722
- * Check if a directory exists and create it (including parent
1723
- * dirs) if not.
1724
- *
1725
- * @param string $p_dir directory to check
1726
- *
1727
- * @return bool TRUE if the directory exists or was created
1728
- */
1729
- function _dirCheck($p_dir)
1730
- {
1731
- clearstatcache();
1732
- if ((@is_dir($p_dir)) || ($p_dir == ''))
1733
- return true;
1734
-
1735
- $p_parent_dir = dirname($p_dir);
1736
-
1737
- if (($p_parent_dir != $p_dir) &&
1738
- ($p_parent_dir != '') &&
1739
- (!$this->_dirCheck($p_parent_dir)))
1740
- return false;
1741
-
1742
- if (!@mkdir($p_dir, 0777)) {
1743
- $this->_error("Unable to create directory '$p_dir'");
1744
- return false;
1745
- }
1746
-
1747
- return true;
1748
- }
1749
-
1750
- // }}}
1751
-
1752
- // {{{ _pathReduction()
1753
-
1754
- /**
1755
- * Compress path by changing for example "/dir/foo/../bar" to "/dir/bar",
1756
- * rand emove double slashes.
1757
- *
1758
- * @param string $p_dir path to reduce
1759
- *
1760
- * @return string reduced path
1761
- *
1762
- * @access private
1763
- *
1764
- */
1765
- function _pathReduction($p_dir)
1766
- {
1767
- $v_result = '';
1768
-
1769
- // ----- Look for not empty path
1770
- if ($p_dir != '') {
1771
- // ----- Explode path by directory names
1772
- $v_list = explode('/', $p_dir);
1773
-
1774
- // ----- Study directories from last to first
1775
- for ($i=sizeof($v_list)-1; $i>=0; $i--) {
1776
- // ----- Look for current path
1777
- if ($v_list[$i] == ".") {
1778
- // ----- Ignore this directory
1779
- // Should be the first $i=0, but no check is done
1780
- }
1781
- else if ($v_list[$i] == "..") {
1782
- // ----- Ignore it and ignore the $i-1
1783
- $i--;
1784
- }
1785
- else if ( ($v_list[$i] == '')
1786
- && ($i!=(sizeof($v_list)-1))
1787
- && ($i!=0)) {
1788
- // ----- Ignore only the double '//' in path,
1789
- // but not the first and last /
1790
- } else {
1791
- $v_result = $v_list[$i].($i!=(sizeof($v_list)-1)?'/'
1792
- .$v_result:'');
1793
- }
1794
- }
1795
- }
1796
- $v_result = strtr($v_result, '\\', '/');
1797
- return $v_result;
1798
- }
1799
-
1800
- // }}}
1801
-
1802
- // {{{ _translateWinPath()
1803
- function _translateWinPath($p_path, $p_remove_disk_letter=true)
1804
- {
1805
- if (defined('OS_WINDOWS') && OS_WINDOWS) {
1806
- // ----- Look for potential disk letter
1807
- if ( ($p_remove_disk_letter)
1808
- && (($v_position = strpos($p_path, ':')) != false)) {
1809
- $p_path = substr($p_path, $v_position+1);
1810
- }
1811
- // ----- Change potential windows directory separator
1812
- if ((strpos($p_path, '\\') > 0) || (substr($p_path, 0,1) == '\\')) {
1813
- $p_path = strtr($p_path, '\\', '/');
1814
- }
1815
- }
1816
- return $p_path;
1817
- }
1818
- // }}}
1819
-
1820
- }
1821
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/restore/XCloner.php DELETED
@@ -1,2219 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * XCloner
5
- * Oficial website: http://www.joomlaplug.com/
6
- * -------------------------------------------
7
- * Creator: Liuta Romulus Ovidiu
8
- * License: All Rights Reserved
9
- * Email: admin@joomlaplug.com
10
- * Revision: 1.0
11
- * Date: July 2007
12
- **/
13
-
14
- @set_time_limit(3600);
15
-
16
- @ini_set("error_reporting", E_ALL^E_NOTICE);
17
-
18
- ###################### Do not edit Below #############################
19
-
20
- $g_pcltar_lib_dir = "./";
21
-
22
- require "TAR.php";
23
-
24
- $_CONFIG['my_version'] = "1.9.0";
25
-
26
- $_CONFIG['script_name'] = "XCloner.php";
27
-
28
- $_CONFIG['sql_usefile'] = "";
29
-
30
-
31
- if(isset($_REQUEST['sql_setfile']))
32
-
33
- $_CONFIG['sql_usefile'] = $_REQUEST['sql_setfile'];
34
-
35
-
36
- if(trim($_CONFIG['sql_usefile']) == "")
37
-
38
- $_CONFIG['sql_usefile'] = "database-sql.sql";
39
-
40
-
41
- if(isset($_REQUEST['strrep'])){
42
-
43
- setcookie ("strrep_c", "", time() - 3600);
44
-
45
- setcookie("strrep_c", str_replace("\r\n","*-*",stripslashes($_REQUEST['strrep'])), time()+3600); /* expire in 1 hour */
46
-
47
- }
48
-
49
- else{
50
-
51
- $_REQUEST['strrep'] = str_replace("*-*", "\r\n", $_COOKIE['strrep_c']);
52
-
53
- }
54
-
55
-
56
- if ($handle = opendir('./')) {
57
-
58
-
59
-
60
- /* This is the correct way to loop over the directory. */
61
-
62
- while (false !== ($file = readdir($handle))){
63
-
64
- $ext = substr($file,strlen($file)-4,strlen($file));
65
-
66
- if(($file!='XCloner.php')&&($file!='..')&&($file!='.')&&(($ext=='.zip')||($ext=='.tgz')||($ext=='.tar')))
67
-
68
- {
69
-
70
- $_CONFIG[versions][] = $file;
71
-
72
- }
73
-
74
- }
75
-
76
- closedir($handle);
77
-
78
- }
79
-
80
- else{
81
-
82
- echo "Unable to open my directory for reading and listing!";exit;
83
-
84
- }
85
-
86
-
87
-
88
-
89
-
90
- ######################################################################
91
-
92
-
93
-
94
- $_CONFIG['output_path'] = $_REQUEST['output_path'];
95
-
96
- $_CONFIG['output_url'] = $_REQUEST['output_url_pref']."://".$_REQUEST['output_url'];
97
-
98
- $_CONFIG['tmp'] = $_REQUEST['output_path'];
99
-
100
- if($_REQUEST['files_skip'] == 1)
101
-
102
- $_REQUEST['do_database'] = 1;
103
-
104
-
105
-
106
- $filepath =$_SERVER["SCRIPT_FILENAME"];
107
-
108
- $pathinfo = pathinfo($filepath);
109
-
110
-
111
-
112
- $startscript = $pathinfo['dirname'];
113
-
114
-
115
-
116
- #$owneruid=fileowner($startscript);
117
-
118
- #$ownerinfo=posix_getpwuid($owneruid);
119
-
120
-
121
-
122
-
123
-
124
- #$groupid = filegroup ($startscript);
125
-
126
- #$groupinfo = posix_getgrgid($groupid);
127
-
128
-
129
-
130
-
131
-
132
- $_CONFIG[group] = $groupinfo[name];
133
-
134
- $_CONFIG[owner] =$ownerinfo[name];
135
-
136
-
137
-
138
-
139
-
140
-
141
-
142
- ###################### FRONT AREA ###################################
143
-
144
- ?>
145
-
146
-
147
-
148
- <!doctype html public "-//W3C//DTD HTML 4.0 //EN">
149
-
150
- <html>
151
-
152
- <head>
153
-
154
- <title>XCloner - Your Clone Restore Utility</title>
155
-
156
- <style type="text/css" media="screen">
157
-
158
- @import url( http://www.joomlaplug.com/jcloner/style.css );
159
-
160
- .error {
161
-
162
- color: red;
163
-
164
- font-size: 15px;
165
-
166
- }
167
-
168
- </style>
169
-
170
- </head>
171
-
172
- <body>
173
-
174
-
175
-
176
- <table align='center' width='700' bgcolor='#eeeeee' style='padding: 0 5px 0 5px;'>
177
-
178
- <tr><td align='center'><h2><font color=red>XCloner</font> Automatic Restore!</h2></td></tr>
179
-
180
- <tr><td align='left'>
181
-
182
- <form action='' method='GET' name='form'>
183
-
184
- <?php
185
-
186
-
187
-
188
- switch ($_REQUEST[task]) {
189
-
190
-
191
-
192
- case 'step2':
193
-
194
- step2();
195
-
196
- break;
197
-
198
- case 'step1':
199
-
200
- step1();
201
-
202
- break;
203
-
204
- case 'getinfo':
205
-
206
- getPHPINFO();
207
-
208
- break;
209
-
210
- case 'info':
211
-
212
- echo phpinfo();
213
-
214
- break;
215
-
216
- default :
217
-
218
- start();
219
-
220
- break;
221
-
222
- }
223
-
224
-
225
-
226
-
227
-
228
- ?>
229
-
230
- </form>
231
-
232
- </td></tr>
233
-
234
- <tr><td>
235
-
236
- <small>XCloner Restore Version <b><?php echo $_CONFIG['my_version']?></b>
237
-
238
- <br />For support and questions please visit us at <a href='http://www.joomlaplug.com'>www.joomlaplug.com</a>
239
-
240
- </small>
241
-
242
- </td></tr>
243
-
244
- </table>
245
-
246
- </body>
247
-
248
- </html>
249
-
250
-
251
-
252
-
253
-
254
- <?php
255
-
256
- #####################################################################
257
-
258
-
259
-
260
-
261
-
262
-
263
-
264
- ##################### FUNCTIONS #####################################
265
-
266
-
267
-
268
- function step2($file=""){
269
-
270
- global $_CONFIG,$filepath ;
271
-
272
- $DBcreated = $_REQUEST[DBcreated];
273
-
274
- if ($DBcreated=='on'){
275
-
276
-
277
- $DBhostname = $_REQUEST['mysql_server'];
278
-
279
- $DBuserName = $_REQUEST['mysql_username'];
280
-
281
- $DBpassword = $_REQUEST['mysql_pass'];
282
-
283
- $DBname = $_REQUEST['mysql_db'];
284
-
285
-
286
- $db = @mysql_connect($DBhostname, $DBuserName, $DBpassword) or die("<br />The database details provided are incorrect and/or empty. Unable to connect to mysql server");
287
-
288
- @mysql_query("CREATE database $DBname;");
289
-
290
- if (!@mysql_select_db($DBname)) {
291
-
292
- die("<br /><span class='error'>Could not connect to $DBname database! Please make sure the database exists and that you assigned the mysql user to it...</span>");
293
-
294
- }
295
-
296
- if($_REQUEST['charset_of_file']!="")
297
- mysql_query("SET NAMES ".$_REQUEST['charset_of_file']."");
298
-
299
-
300
-
301
- }
302
-
303
-
304
-
305
- if($_REQUEST['do_database'] != 1){
306
-
307
- ############ DATABASE ONLY RESTRICTION##################################################
308
-
309
-
310
-
311
- ########################### START FTP MODE #################################
312
- if($_REQUEST[transfer_mode]==2){
313
-
314
- $_CONFIG[output_path] = $_CONFIG[output_path]."/archive_tmp/";
315
-
316
- @mkdir($_CONFIG[output_path]);
317
-
318
-
319
-
320
- // set up basic connection
321
-
322
- $conn_id = @ftp_connect($_REQUEST[ftp_server], $_REQUEST[ftp_port]) or die("<span class='error'>Could not connect to $_REQUEST[ftp_server] on port $_REQUEST[ftp_port]! Ftp connection has failed!</span>");
323
-
324
-
325
-
326
- // login with username and password
327
-
328
- $login_result = @ftp_login($conn_id, $_REQUEST[ftp_user], $_REQUEST[ftp_pass]) or die("<span class='error'>Could not login to ftp server for user $_REQUEST[ftp_user] and provided pass! Ftp connection has failed!</span>");
329
-
330
-
331
-
332
- // check connection
333
-
334
- if ((!$conn_id) || (!$login_result)) {
335
-
336
- echo "<b style='color:red'>FTP connection has failed!</b>";
337
-
338
- echo "<b style='color:red'>Attempted to connect to ".$_REQUEST[ftp_server].":".$_REQUEST[ftp_port]." for user ".$_REQUEST[ftp_user]."</b>";
339
-
340
- return;
341
-
342
- } else {
343
-
344
- echo "<br />Connected to $_REQUEST[ftp_server], for user $_REQUEST[ftp_user], starting transfer...<br />";
345
-
346
- }
347
-
348
- $ftp_dir_original = ftp_pwd($conn_id);
349
-
350
- @ftp_mkdir($conn_id,$_REQUEST[ftp_path]);
351
-
352
- // try to change the directory to somedir
353
- if (@ftp_chdir($conn_id, $_REQUEST[ftp_path])) {
354
-
355
- echo "Current directory is now: <b>" . ftp_pwd($conn_id) . "</b>\n";
356
-
357
- } else {
358
-
359
- echo "<b style='color:red'>Couldn't change directory to <b>$_REQUEST[ftp_path]</b>, please verify that the ftp location exists or use the \"Install files directly\" option!</b><br />\n";
360
-
361
- return;
362
-
363
- }
364
- @ftp_chdir($conn_id, $ftp_dir_original);
365
-
366
-
367
-
368
-
369
-
370
-
371
-
372
- }
373
-
374
- ########################## END FTP MODE ######################################
375
-
376
- ##### START extract ######
377
- if($_REQUEST['refresh'] < 1){
378
-
379
- $ext = substr($file, strlen($file)-4, strlen($file));
380
-
381
- if($_REQUEST['file_utilities'] != '1'){
382
-
383
- $tar_object = new Archive_Tar($file);
384
-
385
- $tar_object->extract($_CONFIG['output_path']);
386
- #$tar_object->extractList("backups/perm.txt", $_CONFIG['output_path']);
387
-
388
- }else{
389
-
390
- if($ext == '.tgz') $compress = 'z';
391
- else $compress = '';
392
-
393
- shell_exec("tar -x".$compress."pf $file -C $_CONFIG[output_path]");
394
-
395
- }
396
-
397
- }
398
- ##### END extract ######
399
-
400
-
401
- $new_arr = array();
402
-
403
-
404
-
405
- #@chmod($_CONFIG[output_path], 0777);
406
-
407
-
408
-
409
- $tran_file = $_CONFIG[output_path]."/transfer.txt";
410
-
411
-
412
-
413
- if($_REQUEST[transfer_mode]==2){
414
-
415
-
416
-
417
- # initialise list arrays, directories and files separately and array counters for them
418
-
419
- $excludedFolders = array();
420
-
421
- $d_arr = array(); $d = 0;
422
-
423
- $ds_arr = array();
424
-
425
- $f_arr = array(); $f = 0;
426
-
427
- $s_arr = array(); $s = 0;
428
-
429
-
430
-
431
- $d_arr[$d] = $_CONFIG[output_path];
432
-
433
-
434
-
435
- if($_REQUEST['refresh'] < 1){
436
-
437
- # obtain the list of files by recursing the mambo file store
438
-
439
- recurseFiles($d_arr, $ds_arr, $f_arr, $s_arr, $d, $f, $s, $excludedFolders , '', $_CONFIG[output_path]);
440
-
441
-
442
-
443
- recurseFiles($d_arr, $ds_arr, $f_arr, $s_arr, $d, $f, $s, $d_arr , '', $_CONFIG[output_path]);
444
-
445
-
446
-
447
- sort($d_arr);
448
-
449
- sort($f_arr);
450
-
451
- $new_arr = array_merge($d_arr, $f_arr);
452
-
453
-
454
-
455
-
456
-
457
-
458
-
459
- if($_REQUEST[transfer_mode]==2)
460
-
461
- if($fp = fopen($tran_file, "w")){
462
-
463
-
464
-
465
- foreach($new_arr as $file){
466
-
467
-
468
-
469
- fwrite($fp, $file."\n");
470
-
471
-
472
-
473
- }
474
-
475
-
476
-
477
- fclose($fp);
478
-
479
-
480
-
481
- }else{
482
-
483
-
484
-
485
- echo "Unable to write to directory ".$_CONFIG[output_path]."! Please check that this directory is writeable!"; return;
486
-
487
-
488
-
489
- }
490
-
491
-
492
-
493
- else{};
494
-
495
-
496
-
497
-
498
-
499
- }else{
500
-
501
-
502
-
503
- $content = "";
504
-
505
-
506
-
507
- $new_arr = file($tran_file);
508
-
509
-
510
-
511
- }
512
-
513
-
514
-
515
-
516
-
517
- if(sizeof($new_arr) != 0 )
518
-
519
- $percn = sprintf("%.2f",($_REQUEST[next] * 100)/sizeof($new_arr));
520
-
521
-
522
-
523
- if($percn > sizeof($new_arr))
524
-
525
- $percn = sizeof($new_arr);
526
-
527
-
528
-
529
- }
530
-
531
-
532
-
533
-
534
-
535
- if($_REQUEST['refresh'] == 1){
536
-
537
-
538
-
539
- echo "<h3>Transfering $percn% of ".sizeof($new_arr)." files through ftp</h3>";
540
-
541
-
542
-
543
- echo "<textarea cols=70 rows=30 name='ftp_list'></textarea>";
544
-
545
-
546
-
547
- }
548
-
549
- elseif($_REQUEST['refresh'] == 2)
550
-
551
-
552
-
553
- echo "Files transfer finished!";
554
-
555
-
556
-
557
- $i = (int)$_REQUEST[next];
558
-
559
- $j = 0;
560
-
561
-
562
-
563
- ### MOVING THE FILES THROUGH FTP
564
-
565
-
566
-
567
- #foreach($new_arr as $key=>$file)
568
-
569
-
570
-
571
- for($key=$i;$key<=sizeof($new_arr);$key++){
572
-
573
-
574
-
575
- $file = str_replace(array("\r","\n"), array("",""), $new_arr[$key]) ;
576
-
577
-
578
-
579
- if($_REQUEST['manual_ftp'] == 1)
580
-
581
- if($j == 100){
582
-
583
-
584
-
585
- #echo "Transfering files from line: ". (int)$_REQUEST[next];
586
-
587
-
588
-
589
-
590
-
591
- $qstr = explode("&refresh=1&next=",$_SERVER['QUERY_STRING']);
592
-
593
-
594
-
595
- $rurl = "XCloner.php?".$qstr[0]."&refresh=1&next=".($_REQUEST[next]+100);
596
-
597
- ftp_close($conn_id);
598
-
599
-
600
-
601
- echo "<script> document.location='".$rurl."'</script>";
602
-
603
-
604
-
605
- exit;
606
-
607
- }
608
-
609
-
610
-
611
- $j++;
612
-
613
-
614
-
615
- $sfile = str_replace($_CONFIG[output_path],"",$file);
616
-
617
- $fsource = $_CONFIG[output_path]."/".$sfile;
618
-
619
-
620
-
621
- if(($sfile != "")&&($sfile!="/"))
622
-
623
- if($_REQUEST[transfer_mode]==2){
624
-
625
-
626
-
627
- $upload = 1;
628
-
629
-
630
-
631
-
632
-
633
- $ftarget = $_REQUEST[ftp_path]."/".$sfile;
634
-
635
-
636
-
637
- if(is_dir($fsource)){
638
-
639
-
640
-
641
- $upload1 = @ftp_mkdir($conn_id,$ftarget);
642
-
643
-
644
-
645
- }
646
-
647
- else{
648
-
649
- $upload = ftp_put($conn_id, $ftarget, $fsource, FTP_BINARY);
650
-
651
-
652
-
653
- }
654
-
655
-
656
-
657
- #echo "$i <br >";
658
-
659
- if(!$upload){
660
-
661
- echo "<br /><font color=red>Transfer fail for $fsource to $ftarget</font> <br />File already exists and/or doesn't have writing permissions!<br/>";
662
-
663
- }
664
-
665
- else{
666
-
667
- if($_REQUEST['manual_ftp'] == 1){
668
-
669
- $ftarget .= '\n';
670
-
671
- echo "<script>document.form.ftp_list.value = document.form.ftp_list.value + '".$ftarget."'; </script>";
672
-
673
- #echo "$ftarget <br />\n";
674
-
675
- }
676
-
677
- }
678
-
679
-
680
-
681
- }
682
-
683
- }
684
-
685
-
686
-
687
- if($_REQUEST['refresh'] == 1){
688
-
689
-
690
-
691
- $qstr = explode("&refresh=1&next=",$_SERVER['QUERY_STRING']);
692
-
693
-
694
-
695
- $rurl = "XCloner.php?".$qstr[0]."&refresh=2&next=".($_REQUEST[next]+102);
696
-
697
-
698
-
699
- echo "<script> document.location='".$rurl."'</script>";
700
-
701
-
702
-
703
- exit;
704
-
705
-
706
-
707
- }
708
-
709
-
710
-
711
- ############### RESTORING HTACCESS AND CONFIGURATION PERM#####################################
712
-
713
-
714
- if($_REQUEST[transfer_mode]==2){
715
-
716
- $cmd = "CHMOD 0777 ".$_REQUEST[ftp_path]."/"."wp-config.php";
717
-
718
- @ftp_site($conn_id, $cmd);
719
-
720
- }
721
-
722
- else{
723
-
724
- @chmod($_REQUEST[output_path]."/"."wp-config.php", 0777);
725
-
726
- }
727
-
728
-
729
-
730
-
731
- #### CUSTOM PERMISSIONS #####
732
- if($_REQUEST['preserve_perm']){
733
-
734
-
735
- $perm_data = "";
736
-
737
- $perm_file = $_CONFIG[output_path]."/administrator/backups/perm.txt";
738
-
739
- $per = 1;
740
-
741
-
742
- @chmod($perm_file,0777);
743
-
744
- $fp = fopen($perm_file,'r');
745
-
746
-
747
- if($fp){
748
-
749
- while(!feof($fp))
750
-
751
- $perm_data .= fread($fp, 1024);
752
-
753
- fclose($fp);
754
-
755
- }
756
-
757
- else{
758
-
759
- echo "Could not set permissions! Permissions file $perm_file not found!<br />";
760
-
761
- $per = 0;
762
-
763
- }
764
-
765
-
766
- $data = explode("\n",$perm_data);
767
-
768
- foreach($data as $value){
769
-
770
- $dir = explode("|", $value);
771
-
772
- if($dir[1]=="")
773
-
774
- $dir[1] = '0755';
775
-
776
- if(strstr($dir[0],"wp-config.php"))
777
-
778
- $dir[1] = '0777';
779
-
780
-
781
-
782
- if($_REQUEST[transfer_mode]==2){
783
-
784
- $cmd = "CHMOD ".$dir[1]." ".$_REQUEST[ftp_path]."/".$dir[0];
785
-
786
-
787
-
788
- @ftp_site($conn_id, $cmd);
789
-
790
- }
791
-
792
- else{
793
-
794
- @chmod($_CONFIG[output_path]."/".$dir[0], octdec($dir[1]));
795
-
796
- }
797
-
798
- }
799
-
800
- if($per){
801
-
802
- echo "<h2>Permissions restored to their initial value...</h2>";
803
-
804
- }
805
-
806
- }
807
- #### END CUSTOM PERMISSIONS #####
808
-
809
-
810
- $_CONFIG[output_path] = str_replace("/archive_tmp/","",$_CONFIG[output_path]);
811
-
812
-
813
- if($_REQUEST[transfer_mode]==2)
814
-
815
- {
816
-
817
- // close the FTP stream
818
-
819
- @ftp_close($conn_id);
820
-
821
- recursive_remove_directory($_CONFIG[output_path]."/archive_tmp/");
822
-
823
- @unlink($_CONFIG[output_path]."/archive_tmp/");
824
-
825
- echo "<h2>Files succesfully copied to ".$_REQUEST[ftp_path]." on $_REQUEST[ftp_server] using FTP</h2>";
826
-
827
- }
828
-
829
- else{
830
-
831
- echo "<h2>Files succesfully copied to ".$_CONFIG[output_path]."</h2>";
832
-
833
- }
834
-
835
-
836
- ######### END DATABASE ONLY RESTRICT #########################################
837
-
838
- }
839
-
840
-
841
- ##### RESTORE CONFIGURATION #####
842
-
843
- if(($_REQUEST['do_database'] != 1) || ($_REQUEST['files_skip'] == 1)){
844
-
845
- $config_file = $_CONFIG[output_path]."/wp-config.php";
846
-
847
- @chmod($config_file,0777);
848
-
849
- @unlink($_CONFIG[output_path]."/administrator/backups/perm.txt");
850
-
851
- if(($_CONFIG['sql_usefile'] == "database-sql.sql") && (!isset($_REQUEST['fpos'])))
852
-
853
- if(write_config($config_file)){
854
-
855
- echo "<H2>Configuration updated!";
856
- echo "<iframe src='".$_REQUEST[output_url_pref]."://".$_REQUEST[output_url]."/wp-login.php' width=1 height=1></iframe>";
857
- echo "</H2>";
858
-
859
- }
860
-
861
- else{
862
- echo "<span class='error'>Unable to write to configuration file $config_file... Aborting...</span>";return;
863
-
864
- }
865
-
866
- }
867
-
868
-
869
-
870
- ############ ATTEMPT DATABASE INSERT #####################################
871
-
872
-
873
-
874
- if($DBcreated!='on'){
875
-
876
- echo "<h2>Database import skipped!</h2>";
877
-
878
- echo "<a href='".$_CONFIG[output_url]."'><b>All should be done! Click here to continue...</b></a><br />";
879
-
880
- return ;
881
-
882
- }
883
-
884
- if (($DBcreated=='on')&&($_REQUEST['do_database'] == 1)){
885
-
886
-
887
- $sqlfile = $_CONFIG[output_path]."/administrator/backups/".$_CONFIG['sql_usefile'];
888
-
889
- if(!file_exists($sqlfile)){
890
-
891
- echo "<span class='error'>Unable to read the database backup file $sqlfile , database was not imported!</span>";
892
-
893
- }
894
-
895
- else{
896
-
897
- if($_REQUEST['manual_sql'])
898
-
899
- $errors = populate_db_manual( $db, $sqlfile);
900
-
901
- else
902
-
903
- $errors = populate_db( $db, $sqlfile);
904
-
905
-
906
-
907
- if(sizeof($errors)>0){
908
-
909
- echo "There were some errors while importing the database:<br />";
910
-
911
- echo "<textarea cols=60 rows=30>".implode("\n",$errors)."</textarea>";
912
-
913
- exit;
914
-
915
- }else{
916
-
917
- @unlink($_CONFIG[output_path]."/administrator/backups/".$_CONFIG['sql_usefile']);
918
-
919
- }
920
-
921
- echo "<h2>Database populated...</h2>";
922
-
923
-
924
- }
925
-
926
- }
927
-
928
- ###################################################################################
929
-
930
- if($_REQUEST['do_database'] != 1) {
931
-
932
- $vars = "";
933
-
934
-
935
-
936
- foreach($_REQUEST as $key=>$value)
937
-
938
- $vars .= $key.'='.@urlencode($value).'&';
939
-
940
-
941
-
942
- $href = "XCloner.php?".$vars."do_database=1";
943
-
944
-
945
-
946
- echo "<br /><a href='$href'>Please click here to continue with database import...</a>";
947
-
948
-
949
-
950
- return ;
951
-
952
- }
953
-
954
- else{
955
-
956
-
957
-
958
- echo "<br /><a href='".$_CONFIG[output_url]."'><b>All should be done! Click here to continue...<br /></a><br />";
959
-
960
-
961
-
962
- return ;
963
-
964
-
965
-
966
- }
967
-
968
-
969
-
970
- }
971
-
972
-
973
-
974
- function write_config($file){
975
-
976
- if(@$fp = fopen($file, "r")){
977
-
978
- $config_data = "";
979
-
980
- while(!feof($fp))
981
-
982
- $config_data .= fread($fp, 1024);
983
-
984
- fclose($fp);
985
-
986
- }
987
-
988
- if ($_REQUEST[DBcreated] == 'on'){
989
-
990
-
991
- $config_data = str_replace("define('DB_HOST', '", "define('DB_HOST', '".$_REQUEST[mysql_server]."');#", $config_data);
992
- $config_data = str_replace("define('DB_USER', '", "define('DB_USER', '".$_REQUEST[mysql_username]."');#", $config_data);
993
- $config_data = str_replace("define('DB_PASSWORD', '", "define('DB_PASSWORD', '".$_REQUEST[mysql_pass]."');#", $config_data);
994
- $config_data = str_replace("define('DB_NAME', '", "define('DB_NAME', '".$_REQUEST[mysql_db]."');#", $config_data);
995
- $liveurl = $_REQUEST[output_url_pref]."://".$_REQUEST[output_url];
996
- $config_data = str_replace("define('DB_HOST", "define('WP_SITEURL','".$liveurl."');\ndefine('WP_HOME','".$liveurl."');\ndefine('RELOCATE',true);\ndefine('DB_HOST", $config_data);
997
-
998
- $config_data = str_replace("define('WP_SITEURL', '", "define('WP_SITEURL', '".$liveurl."');#", $config_data);
999
- $config_data = str_replace("define('WP_HOME', '", "define('WP_HOME', '".$liveurl."');#", $config_data);
1000
-
1001
- }
1002
-
1003
- if($_REQUEST['transfer_mode'] == 2){
1004
-
1005
- $config_data = str_replace('$'.'ftp_host =',"$"."ftp_host ='".$_REQUEST[ftp_server]."';#", $config_data);
1006
-
1007
- $config_data = str_replace('$'.'ftp_port =',"$"."ftp_port ='".$_REQUEST[ftp_port]."';#", $config_data);
1008
-
1009
- $config_data = str_replace('$'.'ftp_user =',"$"."ftp_user ='".$_REQUEST[ftp_user]."';#", $config_data);
1010
-
1011
- $config_data = str_replace('$'.'ftp_pass =',"$"."ftp_pass ='".$_REQUEST[ftp_pass]."';#", $config_data);
1012
-
1013
- $config_data = str_replace('$'.'ftp_root =',"$"."ftp_root ='".$_REQUEST[ftp_path]."';#", $config_data);
1014
-
1015
- }else{
1016
-
1017
- $config_data = str_replace('$'.'ftp_enable =',"$"."ftp_enable ='0';#", $config_data);
1018
-
1019
- }
1020
-
1021
- $_REQUEST[output_url] = str_replace("/###","",$_REQUEST[output_url]."###");
1022
-
1023
- $_REQUEST[output_url] = str_replace("###","",$_REQUEST[output_url]);
1024
-
1025
-
1026
-
1027
- $config_data = str_replace('$'.'live_site =',"$"."live_site ='".$_REQUEST[output_url_pref]."://".$_REQUEST[output_url]."';#", $config_data);
1028
-
1029
- $config_data = str_replace('$'.'absolute_path =',"$"."absolute_path ='".$_REQUEST[output_path]."';#", $config_data);
1030
-
1031
-
1032
- if ($fp = fopen($file, "w")) {
1033
-
1034
- fwrite( $fp, $config_data);
1035
-
1036
- fclose( $fp );
1037
-
1038
- } else {
1039
-
1040
- return false;
1041
-
1042
- } // if
1043
-
1044
- return true;
1045
-
1046
- }
1047
-
1048
- function step1(){
1049
-
1050
- global $_CONFIG;
1051
-
1052
-
1053
- $ftarget = $_CONFIG[output_path]."/".$_REQUEST[ver];
1054
-
1055
-
1056
- if($_REQUEST['refresh'] < 1)
1057
-
1058
- if(!is_writable($_CONFIG[output_path])){
1059
-
1060
- echo "<span class='error'>Directory ".$_CONFIG[output_path]." is not writeable or does not exists! Could not continue...</span>";
1061
-
1062
- return ;
1063
-
1064
- }
1065
-
1066
-
1067
-
1068
- $ftarget = $_REQUEST[ver];
1069
-
1070
-
1071
- if(!file_exists($ftarget))
1072
-
1073
- {echo "<span class='error'>Could not continue, unable to read the clone backup file! Please make sure you copied the backup in the same directory as XCloner.php </span>";exit;}
1074
-
1075
- step2($ftarget);
1076
-
1077
- return;
1078
-
1079
- }
1080
-
1081
-
1082
-
1083
- function start() {
1084
-
1085
- global $_CONFIG,$pathinfo;
1086
-
1087
-
1088
-
1089
- $pdir = str_replace($_CONFIG['script_name'], "", $_SERVER["SCRIPT_FILENAME"]);
1090
-
1091
- $purl = $_SERVER['HTTP_HOST'].str_replace($_CONFIG['script_name'],"", $_SERVER['SCRIPT_NAME']);
1092
-
1093
- ?>
1094
-
1095
-
1096
-
1097
-
1098
-
1099
- <input type=hidden name='task' value='step1'>
1100
-
1101
- <table width='100%'>
1102
-
1103
-
1104
-
1105
- <tr bgcolor='#dddddd'><td>
1106
-
1107
- <b>Path configuration: <a href='XCloner.php?task=getinfo' onclick="window.open('XCloner.php?task=getinfo', 'getInfo', 'toolbar,width=550,height=400'); return false;">check PhpInfo</a></b>
1108
- <br />
1109
- <b style='color:red'>Security Note:</b> after restore <b>delete the XCloner.php</b> script from your server
1110
- </td></tr>
1111
-
1112
- <tr>
1113
-
1114
- <td>
1115
-
1116
- Install directory:<br />
1117
-
1118
- <input type=text size=70 name='output_path' value='<?php echo str_replace("\\", "/", $pdir);?>'>
1119
-
1120
- <br ><small>please enter the full server path to the install directory, must have writing permissions</small>
1121
-
1122
- </td>
1123
-
1124
- </tr>
1125
-
1126
- <tr>
1127
-
1128
- <td>
1129
-
1130
- Install Url:<br />
1131
-
1132
- <select name='output_url_pref'>
1133
-
1134
- <option selected value='http'>http://</option>
1135
-
1136
- <option value='https'>https://</option>
1137
-
1138
- </select>
1139
-
1140
- <input type=text size=60 name='output_url' value='<?php echo $purl?>'>
1141
-
1142
- <br ><small>please enter the url of where Joomla will be accessible from, can be remote also if you use the ftp function below to other host</small>
1143
-
1144
- </td>
1145
-
1146
- </tr>
1147
-
1148
-
1149
-
1150
- <tr><td>
1151
-
1152
- <b>Choose clone archive to install:</b>
1153
-
1154
- </td></tr>
1155
-
1156
- <tr>
1157
-
1158
- <td>
1159
-
1160
- <?php
1161
-
1162
- echo version_list('ver');
1163
-
1164
- ?>
1165
-
1166
- </td>
1167
-
1168
- </tr>
1169
-
1170
- <tr bgcolor='#dddddd'><td>
1171
-
1172
- <b>Mysql configuration: </b> <br />
1173
-
1174
- <input type=checkbox checked name='DBcreated'> <font color='red'>import mysql database</font>
1175
-
1176
- <br />
1177
-
1178
- <input type='checkbox' value='1' name='manual_sql' > incremental sql import (<small> recommended for large databases</small>)
1179
-
1180
- <br />
1181
- Character set of the file:
1182
- <select name="charset_of_file">
1183
-
1184
- <option value="" selected="selected">Default</option>
1185
- <option value="big5" title="Big5 Traditional Chinese">big5</option>
1186
- <option value="binary" title="Binary pseudo charset">binary</option>
1187
- <option value="cp1250" title="Windows Central European">cp1250</option>
1188
- <option value="cp932" title="SJIS for Windows Japanese">cp932</option>
1189
- <option value="euckr" title="EUC-KR Korean">euckr</option>
1190
-
1191
- <option value="gb2312" title="GB2312 Simplified Chinese">gb2312</option>
1192
- <option value="gbk" title="GBK Simplified Chinese">gbk</option>
1193
- <option value="latin1" title="cp1252 West European">latin1</option>
1194
- <option value="latin2" title="ISO 8859-2 Central European">latin2</option>
1195
- <option value="sjis" title="Shift-JIS Japanese">sjis</option>
1196
- <option value="tis620" title="TIS620 Thai">tis620</option>
1197
-
1198
- <option value="ucs2" title="UCS-2 Unicode">ucs2</option>
1199
- <option value="ujis" title="EUC-JP Japanese">ujis</option>
1200
- <option value="utf8" title="UTF-8 Unicode" >utf8</option>
1201
- </select>
1202
-
1203
- </td></tr>
1204
-
1205
- <!--<tr bgcolor='#dddddd'>
1206
-
1207
- <td>
1208
-
1209
- <input type=checkbox name='use_mysqldump' value='1'> import with mysql server utility, path:
1210
-
1211
- <input type=text size=40 name='mysqldump_path' value='mysql'> (<small>advanced users only</small>)
1212
-
1213
- </td>
1214
-
1215
- </tr>
1216
-
1217
- -->
1218
-
1219
- <tr><td>
1220
-
1221
-
1222
-
1223
- <table width='100%'>
1224
-
1225
-
1226
-
1227
- <tr>
1228
-
1229
- <td width='120'>Mysql server:</td>
1230
-
1231
- <td><input type=text size=40 name='mysql_server' value='localhost'></td>
1232
-
1233
- <tr>
1234
-
1235
- <td>Mysql username:</td>
1236
-
1237
- <td><input type=text size=40 name='mysql_username' value=''></td>
1238
-
1239
- </tr>
1240
-
1241
- <tr>
1242
-
1243
- <td>Mysql password:</td>
1244
-
1245
- <td><input type=text size=40 name='mysql_pass' value=''></td>
1246
-
1247
- </tr>
1248
-
1249
- <tr>
1250
-
1251
- <td>Mysql database:</td>
1252
-
1253
- <td><input type=text size=40 name='mysql_db' value=''></td>
1254
-
1255
- </tr>
1256
-
1257
-
1258
-
1259
- <?php
1260
-
1261
- $dir = "administrator/backups/";
1262
-
1263
- $sql_files =array();
1264
-
1265
-
1266
-
1267
- if(@is_dir($dir)){
1268
-
1269
-
1270
-
1271
- if ($handle = @opendir($dir)) {
1272
-
1273
-
1274
-
1275
- /* This is the correct way to loop over the directory. */
1276
-
1277
- while (false !== ($file = @readdir($handle))) {
1278
-
1279
-
1280
-
1281
- if(strstr($file, ".sql"))
1282
-
1283
-
1284
-
1285
- $sql_files[] = $file;
1286
-
1287
-
1288
-
1289
- }
1290
-
1291
-
1292
-
1293
- @closedir($handle);
1294
-
1295
- }
1296
-
1297
-
1298
-
1299
-
1300
-
1301
- if(sizeof($sql_files) > 0) {
1302
-
1303
-
1304
-
1305
- $list = "";
1306
-
1307
- for($i=0;$i<sizeof($sql_files);$i++){
1308
-
1309
-
1310
-
1311
- $list .= "<option value='$sql_files[$i]'>$sql_files[$i]</option>";
1312
-
1313
-
1314
-
1315
- }
1316
-
1317
- echo "<tr>
1318
-
1319
- <td>Import Mysql file:</td>
1320
-
1321
- <td><select name='sql_setfile'><option value='database-sql.sql'>Default</option>$list</select></td>
1322
-
1323
- </tr>";
1324
-
1325
-
1326
-
1327
- }
1328
-
1329
-
1330
-
1331
- }
1332
-
1333
- ?>
1334
-
1335
-
1336
-
1337
- </table>
1338
-
1339
-
1340
-
1341
- </td>
1342
-
1343
- </tr>
1344
-
1345
-
1346
-
1347
-
1348
-
1349
- <tr bgcolor='#dddddd'><td>
1350
-
1351
- <b>Files transfer and configuration:</b><br />
1352
-
1353
- <input type=checkbox name='files_skip' value='1' > <font color='red'>Skip files restore, will attempt to restore only database</font><br />
1354
-
1355
- <input type=checkbox name='preserve_perm' value='1'> restore original files permissions<br />
1356
-
1357
- <input type=checkbox name='file_utilities' value='1' > Restore by using the server utilities unzip/tar
1358
-
1359
- </td></tr>
1360
-
1361
-
1362
-
1363
- <tr><td colspan=2>
1364
-
1365
- <table width='100%'>
1366
-
1367
- <tr>
1368
-
1369
- <td width='50%' valign='top'>
1370
-
1371
-
1372
-
1373
- <table width='100%'>
1374
-
1375
- <tr><td colspan='2'>
1376
-
1377
- Install files throught ftp: <input type='checkbox' value='1' name='manual_ftp' checked> - incremental transfer
1378
-
1379
- </td></tr>
1380
-
1381
- <tr>
1382
-
1383
- <td colspan='2'><input type=radio name=transfer_mode value=2 checked>
1384
-
1385
- <br />
1386
-
1387
- <small>this will attempt to transfer all files through ftp, so the owner keep it's permissions, can be used to send files to other hosts also, <font color=red>*recommended</font></small>
1388
-
1389
- </td>
1390
-
1391
- </tr>
1392
-
1393
-
1394
-
1395
- <tr>
1396
-
1397
- <td nowrap>Ftp server:</td>
1398
-
1399
- <td><input type=text size=30 name='ftp_server' value='localhost'><br />
1400
-
1401
- port: <input type=text size=5 name='ftp_port' value='21'></td>
1402
-
1403
- </tr>
1404
-
1405
- <tr>
1406
-
1407
- <td>Ftp user:</td>
1408
-
1409
- <td><input type=text size=30 name='ftp_user'></td>
1410
-
1411
- </tr>
1412
-
1413
- <tr>
1414
-
1415
- <td>Ftp pass:</td>
1416
-
1417
- <td><input type=text size=30 name='ftp_pass'></td>
1418
-
1419
- </tr>
1420
-
1421
- <tr>
1422
-
1423
- <td>Ftp path:</td>
1424
-
1425
- <td><input type=text size=30 name='ftp_path'>
1426
-
1427
- <br><small>ftp root path of where Joomla will be installed</small>
1428
-
1429
- </td>
1430
-
1431
- </tr>
1432
-
1433
- </table>
1434
-
1435
-
1436
-
1437
- </td>
1438
-
1439
- <td width='50%' valign=top>
1440
-
1441
-
1442
-
1443
- <table width='100%'>
1444
-
1445
- <tr><td>
1446
-
1447
- Install files directly:
1448
-
1449
- </td></tr>
1450
-
1451
- <tr>
1452
-
1453
- <td><input type=radio name=transfer_mode value=1>
1454
-
1455
- <br />
1456
-
1457
- <small>transfering the files directly will cause some permissions problem in some cases, but it's faster than the other option </small>
1458
-
1459
- </td>
1460
-
1461
- </tr>
1462
-
1463
- </table>
1464
-
1465
-
1466
-
1467
- </td>
1468
-
1469
- </tr>
1470
-
1471
-
1472
-
1473
-
1474
-
1475
- </table>
1476
-
1477
- </td></tr>
1478
-
1479
- <tr><td>
1480
-
1481
-
1482
-
1483
- </td></tr>
1484
-
1485
-
1486
-
1487
- <tr><td colspan='2'>
1488
-
1489
-
1490
-
1491
- <input type=submit name=submit value='Start install' >
1492
-
1493
- <br /><small>*after hitting submit please wait for the package to get unarchived and transfered through ftp if it is the case!</small>
1494
-
1495
-
1496
-
1497
- <br /><b>NOTE:*** IMPORTANT - if you plan to apply this script to a live site - upgrade or fresh install over existing files please
1498
-
1499
- make sure you first make a backup of them! </b>
1500
-
1501
- </td></tr>
1502
-
1503
-
1504
-
1505
- </table>
1506
-
1507
-
1508
-
1509
- <?php
1510
-
1511
-
1512
-
1513
- }
1514
-
1515
-
1516
-
1517
- function getPHPINFO(){
1518
-
1519
-
1520
-
1521
- ?>
1522
-
1523
- <table width='100%'>
1524
-
1525
- <tr bgcolor='#dddddd'><td>
1526
-
1527
- <b>Php Configuration: <a target='_blank' href='XCloner.php?task=info'> phpinfo()</a></b>
1528
-
1529
- </td></tr>
1530
-
1531
-
1532
-
1533
- <tr><td>
1534
-
1535
- <table bgcolor='#dddddd' width='65%' style='font-size:10px; text-align:center;' border='1'>
1536
-
1537
-
1538
-
1539
- <tr>
1540
-
1541
- <td><b style='color:red'>PHP Setting</b></td>
1542
-
1543
- <td><b style='color:orange'>Current Value</b></td>
1544
-
1545
- <td><b style='color:green'>Recomemnded</b></td>
1546
-
1547
- </tr>
1548
-
1549
-
1550
-
1551
- <tr>
1552
-
1553
- <td><b>Open_Basedir:</b> </td>
1554
-
1555
- <td>
1556
-
1557
- <?php echo (@ini_get('open_basedir') ? @ini_get('open_basedir') : 'No value')?>
1558
-
1559
- </td>
1560
-
1561
- <td><b>No Value</b></td>
1562
-
1563
- </tr>
1564
-
1565
-
1566
-
1567
- <tr>
1568
-
1569
- <td><b>Max Execution Time:</b> </td>
1570
-
1571
- <td>
1572
-
1573
- <?php echo (@ini_get('max_execution_time') ? @ini_get('max_execution_time') : 'No value')?>
1574
-
1575
- </td>
1576
-
1577
- <td><b>>30</b></td>
1578
-
1579
- </tr>
1580
-
1581
-
1582
-
1583
- <tr>
1584
-
1585
- <td><b>Safe mode:</b> </td>
1586
-
1587
- <td>
1588
-
1589
- <?php echo (@ini_get('safe_mode') ? @ini_get('safe_mode') : 'Off')?>
1590
-
1591
- </td>
1592
-
1593
- <td><b>Off</b></td>
1594
-
1595
- </tr>
1596
-
1597
-
1598
-
1599
- </table>
1600
-
1601
- </td></tr>
1602
-
1603
-
1604
-
1605
- </table>
1606
-
1607
- <?php
1608
- }
1609
-
1610
-
1611
- ###END
1612
-
1613
-
1614
- ###Starting the manual sql backup
1615
-
1616
- function populate_db_manual( $db, $sqlfile='administrator/backups/database-sql.sql'){
1617
-
1618
- global $qstr;
1619
-
1620
- $extra_que = $qstr[0];
1621
-
1622
- $file = $sqlfile;
1623
-
1624
- define ('DATA_CHUNK_LENGTH',16384); // How many chars are read per time
1625
-
1626
- define ('MAX_QUERY_LINES',300); // How many lines may be considered to be one query (except text lines)
1627
-
1628
- $lines = "";
1629
-
1630
- $error = "";
1631
-
1632
- $error_status = 0;
1633
-
1634
- if((isset($_REQUEST['chunk']))&&((int)$_REQUEST['chunk'] != 0))
1635
-
1636
- $chunk = $_REQUEST['chunk'];
1637
-
1638
- else
1639
-
1640
- $chunk = DATA_CHUNK_LENGTH;
1641
-
1642
- if($_REQUEST['correct_query'] != 1){
1643
-
1644
- $start_pos = (int)$_REQUEST['fpos'];
1645
-
1646
- $fpos = read_file($file, MAX_QUERY_LINES, $start_pos, $chunk, $lines);
1647
-
1648
- }else{
1649
-
1650
- $lines[0] = stripslashes($_REQUEST['error_msg']);
1651
-
1652
- $fpos = $_REQUEST['start_posf'] ;
1653
-
1654
- }
1655
-
1656
- foreach($lines as $line)
1657
-
1658
- if(trim($line) != ''){
1659
-
1660
- $query = $line;
1661
-
1662
- $line = $line .";\n";
1663
-
1664
- #$tmp = explode("DEFAULT CHARSET",$line);
1665
-
1666
- $line_tmp = $line;
1667
-
1668
- $start_pos = $start_pos + strlen($line);
1669
-
1670
- if(isset($_REQUEST['strrep']))
1671
-
1672
- {
1673
-
1674
- $strrep = explode("\r\n", stripslashes($_REQUEST['strrep']));
1675
-
1676
- foreach($strrep as $value)
1677
-
1678
- if(trim($value)!= ""){
1679
-
1680
-
1681
- $tmp = explode("|", $value);
1682
-
1683
-
1684
- $line_tmp = str_replace(trim($tmp[0]),trim($tmp[1]),$line_tmp);
1685
-
1686
- $query = str_replace(trim($tmp[0]),trim($tmp[1]),$query);
1687
-
1688
- }
1689
-
1690
- }
1691
-
1692
- if(!mysql_query($line_tmp)){
1693
-
1694
- if($_REQUEST['correct_query'] != 1)
1695
-
1696
- $fpos = $start_pos ;
1697
-
1698
- $form_url = rurl($fpos, $chunk);
1699
-
1700
- echo "</form><form name='' action='".$form_url."' method='POST'>
1701
-
1702
- <input type='hidden' name='correct_query' value = '1'>
1703
-
1704
- <input type='hidden' name='start_pos' value='".$start_pos."'>
1705
-
1706
- <input type='hidden' name='start_posf' value='".$fpos."'>
1707
-
1708
- <input type='hidden' name='glen' value='".$qlen."'>
1709
-
1710
- <center>";
1711
-
1712
- echo sprintf("<b>###MYSQL error</b>\n<br /><font color='red'>".mysql_error()."</font><br />\n<b>###On Query:</b><br />\n<br /><textarea cols=70 rows=15 name='error_msg'>%s</textarea><br />", $query);
1713
-
1714
- echo "<b>Search and replace in query:</b><br /><textarea cols=70 rows=5 name='strrep'>".stripslashes($_REQUEST[strrep])."</textarea><br />
1715
-
1716
- <small>
1717
-
1718
- enter a string, one per line, which you would like to replace in the query above, example <i>string_to_search|text_to_replace_with</i>
1719
-
1720
- </small>";
1721
-
1722
- echo "<br /> <input type=submit name=submit value='Correct Query &gt;&gt;'>";
1723
-
1724
- echo "</center></form>";
1725
-
1726
- $error_status = 1;
1727
-
1728
- break;
1729
-
1730
- }
1731
-
1732
- }
1733
-
1734
-
1735
- $percent = sprintf("%.2f", (100*$fpos)/ filesize($file));
1736
-
1737
- if($fpos!='-1'){
1738
-
1739
- echo "<h3>Processed $percent% from sql backup!</h3>";
1740
-
1741
- $red_url = rurl($fpos, $chunk);
1742
-
1743
- if($error_status == 1 ){
1744
-
1745
- echo "<h3><a href='".$red_url."'>To skip this query, click here to Continue</a></h3>";
1746
-
1747
- exit;
1748
-
1749
- }else{
1750
-
1751
- echo "<h3><a href='".$red_url."'>Continue here</a></h3>";
1752
-
1753
- echo "<script>window.location='".$red_url."'</script>";
1754
-
1755
- exit;
1756
-
1757
- }
1758
-
1759
- } else {
1760
-
1761
- echo "<h3>The sql import is finished!</h3>";
1762
-
1763
- }
1764
-
1765
- return;
1766
-
1767
- }
1768
-
1769
- ########END
1770
-
1771
-
1772
-
1773
- ### STARTING THE AUTOMATIC BACKUP
1774
-
1775
- function populate_db( $db, $sqlfile='administrator/backups/database-sql.sql') {
1776
-
1777
- global $errors, $_CONFIG;
1778
-
1779
-
1780
-
1781
- if($_REQUEST['use_mysqldump'] == 1){
1782
-
1783
-
1784
-
1785
- echo shell_exec($_REQUEST['mysqldump_path']." -u ".$_REQUEST[mysql_username]." -p".$_REQUEST[mysql_pass]." -h ".$_REQUEST[mysql_server]." ".$_REQUEST[mysql_db]." < ".$sqlfile);
1786
-
1787
- return;
1788
-
1789
-
1790
-
1791
- }
1792
-
1793
-
1794
-
1795
- $mqr = @get_magic_quotes_runtime();
1796
-
1797
- @set_magic_quotes_runtime(0);
1798
-
1799
- @chmod($sqlfile,0777);
1800
-
1801
- $query = fread( fopen( $sqlfile, 'r' ), filesize( $sqlfile ) );
1802
-
1803
- @set_magic_quotes_runtime($mqr);
1804
-
1805
- $pieces = split_sql($query);
1806
-
1807
-
1808
-
1809
- for ($i=0; $i<count($pieces); $i++) {
1810
-
1811
- $pieces[$i] = trim($pieces[$i]);
1812
-
1813
- $tmp = explode("DEFAULT CHARSET",$pieces[$i]);
1814
-
1815
- $pieces[$i] = $tmp[0].";";
1816
-
1817
- if(!empty($pieces[$i]) && $pieces[$i] != "#") {
1818
-
1819
- if (!mysql_query($pieces[$i], $db)) {
1820
-
1821
- $errors[] = "\n\n##Mysql Query: \n########\n".
1822
-
1823
- $pieces[$i].
1824
-
1825
- "\n########\n##Error message: ".
1826
-
1827
- mysql_error();
1828
-
1829
-
1830
-
1831
- }
1832
-
1833
- }
1834
-
1835
-
1836
-
1837
- }
1838
-
1839
- return $errors;
1840
-
1841
- }
1842
-
1843
-
1844
-
1845
-
1846
-
1847
- function rurl($fpos, $chunk){
1848
-
1849
- $get_query = "&";
1850
-
1851
- foreach($_GET as $key=>$value){
1852
-
1853
- if(($key != 'fpos')&&($key != 'chunk')&&($key != 'strrep_c')&&($key != 'strrep'))
1854
-
1855
- $get_query .= $key."=".$value."&";
1856
-
1857
- }
1858
-
1859
- $url = $_SERVER['PHP_SELF']."?fpos=".$fpos."&chunk=".$chunk.$get_query;
1860
-
1861
- return $url;
1862
-
1863
- }
1864
-
1865
- function read_file($file, $lines, $start_pos, &$chunk, &$text)
1866
-
1867
- {
1868
-
1869
- $cline = 0;
1870
-
1871
- $fp = fopen($file, "r");
1872
-
1873
- fseek($fp, $start_pos);
1874
-
1875
- while((!feof($fp)) &&($cline <= $lines)){
1876
-
1877
- $btemp = fgets($fp, $chunk);
1878
-
1879
- $buffer .= $btemp;
1880
-
1881
- if(strstr($btemp, ";\n"))
1882
-
1883
- $cline++;
1884
-
1885
- $fpos = ftell($fp);
1886
-
1887
- }
1888
-
1889
- $buffer = str_replace(";\r", ";\n", $buffer);
1890
-
1891
- $text = explode(";\n", $buffer);
1892
-
1893
- $fpos = $fpos - strlen($text[sizeof($text)-1]);
1894
-
1895
- if(sizeof($text) == 1)
1896
-
1897
- $chunk = DATA_CHUNK_LENGTH+$chunk;
1898
-
1899
- else
1900
-
1901
- $chunk = DATA_CHUNK_LENGTH;
1902
-
1903
- if(feof($fp))
1904
-
1905
- $fpos = '-1';
1906
-
1907
- fclose ($fp);
1908
-
1909
- return $fpos; // array_reverse is optional: you can also just return the $text array which consists of the file's lines.
1910
-
1911
- }
1912
-
1913
-
1914
-
1915
- /**
1916
-
1917
- * @param string
1918
-
1919
- */
1920
-
1921
- function split_sql($sql) {
1922
-
1923
-
1924
-
1925
- $ret = array();
1926
-
1927
- $sql = str_replace("\n) ", "\n) ;\n#\n#", $sql);
1928
-
1929
- $sql = str_replace("\n--\n","\n#\n",$sql);
1930
-
1931
- $sql = str_replace("\n-- ","\n# ",$sql);
1932
-
1933
- $sql = str_replace("\n/*","\n#/*",$sql);
1934
-
1935
- $sql = ereg_replace("#\n", "#;\n", $sql);
1936
-
1937
-
1938
- // Processing the SQL file content
1939
-
1940
- $file_content = explode("\n",$sql);
1941
-
1942
- $query = "";
1943
-
1944
- // Parsing the SQL file content
1945
-
1946
- foreach($file_content as $key=>$sql_line)
1947
-
1948
- {
1949
-
1950
-
1951
-
1952
- if(substr($sql_line, 0, 2) == "--")
1953
-
1954
- $sql_line = "#".substr($sql_line, 2, strlen($sql_line));
1955
-
1956
-
1957
-
1958
- if(trim($sql_line) != "" )
1959
-
1960
- {
1961
-
1962
- $query .= $sql_line;
1963
-
1964
- // Checking whether the line is a valid statement
1965
-
1966
- if(preg_match("/(.*);/", $sql_line))
1967
-
1968
- {
1969
-
1970
- $query = substr($query, 0, strlen($query)-1);
1971
-
1972
- //Executing the parsed string, returns the error code in failure
1973
-
1974
- $ret[] = $query;
1975
-
1976
- $query = "";
1977
-
1978
- }
1979
-
1980
- }
1981
-
1982
- } //End of foreach
1983
-
1984
- return($ret);
1985
-
1986
- }
1987
-
1988
-
1989
-
1990
- function recurseFiles(&$d_arr, &$ds_arr, &$f_arr, &$s_arr, &$d, &$f, &$s, &$includedFolders, $path, $mosConfig_absolute_path) {
1991
-
1992
-
1993
-
1994
- $currentfullpath = $mosConfig_absolute_path.$path;
1995
-
1996
- # Open possibly available directory
1997
-
1998
- if( is_dir( $currentfullpath ) ) {
1999
-
2000
- if( $handle = opendir( $currentfullpath ) ) {
2001
-
2002
- while( false !== ( $file = readdir( $handle ) ) ) {
2003
-
2004
- # Make sure we don't push parental directories or dotfiles (unix) into the arrays
2005
-
2006
- if( $file != "." && $file != ".." ) {
2007
-
2008
- if( is_dir( $currentfullpath . "/" . $file ) ) {
2009
-
2010
- # Create array for directories
2011
-
2012
- $d_arr[++$d] = $currentfullpath . "/" . $file;
2013
-
2014
- recurseFiles($d_arr, $ds_arr, $f_arr, $s_arr, $d, $f, $s, $includedFolders, $path . "/" . $file, $mosConfig_absolute_path);
2015
-
2016
- } else {
2017
-
2018
- if ( in_array($currentfullpath, $includedFolders) ) {
2019
-
2020
- # Create array for files
2021
-
2022
- $s_arr[$f] = filesize($currentfullpath.'/'.$file);
2023
-
2024
- $f_arr[$f++] = str_replace($mosConfig_absolute_path.'/', '', $currentfullpath.'/').$file;
2025
-
2026
- $s += filesize($currentfullpath.'/'.$file);
2027
-
2028
- }
2029
-
2030
- }
2031
-
2032
- }
2033
-
2034
- }
2035
-
2036
- }
2037
-
2038
- # Wrap things up if we're in a directory
2039
-
2040
- if( is_dir( $handle ) )
2041
-
2042
- closedir( $handle );
2043
-
2044
- }
2045
-
2046
- }
2047
-
2048
-
2049
-
2050
-
2051
-
2052
- function version_list($fname) {
2053
-
2054
- global $_CONFIG;
2055
-
2056
-
2057
-
2058
- $return = "<select name='$fname'><option value=''>Choose local clone archive</option>";
2059
-
2060
-
2061
-
2062
- if(is_array($_CONFIG[versions])){
2063
-
2064
- foreach($_CONFIG[versions] as $key=>$value){
2065
-
2066
- $size = sprintf("%.2fM", filesize($value)/(1024*1024));
2067
-
2068
- $return .= "<option selected value='$value'>$value($size)</option>";
2069
-
2070
-
2071
-
2072
- }
2073
-
2074
- }
2075
-
2076
- $return .= "</select>";
2077
-
2078
-
2079
-
2080
- return $return;
2081
-
2082
- }
2083
-
2084
-
2085
- function recursive_remove_directory($directory, $empty=FALSE)
2086
-
2087
- {
2088
-
2089
- // if the path has a slash at the end we remove it here
2090
-
2091
- if(substr($directory,-1) == '/')
2092
-
2093
- {
2094
-
2095
- $directory = substr($directory,0,-1);
2096
-
2097
- }
2098
-
2099
-
2100
-
2101
- // if the path is not valid or is not a directory ...
2102
-
2103
- if(!file_exists($directory) || !is_dir($directory))
2104
-
2105
- {
2106
-
2107
- // ... we return false and exit the function
2108
-
2109
- return FALSE;
2110
-
2111
-
2112
-
2113
- // ... if the path is not readable
2114
-
2115
- }elseif(!is_readable($directory))
2116
-
2117
- {
2118
-
2119
- // ... we return false and exit the function
2120
-
2121
- return FALSE;
2122
-
2123
-
2124
-
2125
- // ... else if the path is readable
2126
-
2127
- }else{
2128
-
2129
-
2130
-
2131
- // we open the directory
2132
-
2133
- $handle = opendir($directory);
2134
-
2135
-
2136
-
2137
- // and scan through the items inside
2138
-
2139
- while (FALSE !== ($item = readdir($handle)))
2140
-
2141
- {
2142
-
2143
- // if the filepointer is not the current directory
2144
-
2145
- // or the parent directory
2146
-
2147
- if($item != '.' && $item != '..')
2148
-
2149
- {
2150
-
2151
- // we build the new path to delete
2152
-
2153
- $path = $directory.'/'.$item;
2154
-
2155
-
2156
-
2157
- // if the new path is a directory
2158
-
2159
- if(is_dir($path))
2160
-
2161
- {
2162
-
2163
- // we call this function with the new path
2164
-
2165
- recursive_remove_directory($path);
2166
-
2167
-
2168
-
2169
- // if the new path is a file
2170
-
2171
- }else{
2172
-
2173
- // we remove the file
2174
-
2175
- unlink($path);
2176
-
2177
- }
2178
-
2179
- }
2180
-
2181
- }
2182
-
2183
- // close the directory
2184
-
2185
- closedir($handle);
2186
-
2187
-
2188
-
2189
- // if the option to empty is not set to true
2190
-
2191
- if($empty == FALSE)
2192
-
2193
- {
2194
-
2195
- // try to delete the now empty directory
2196
-
2197
- if(!@rmdir($directory))
2198
-
2199
- {
2200
-
2201
- // return false if not possible
2202
-
2203
- return FALSE;
2204
-
2205
- }
2206
-
2207
- }
2208
-
2209
- // return success
2210
-
2211
- return TRUE;
2212
-
2213
- }
2214
-
2215
- }
2216
-
2217
-
2218
-
2219
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/screenshot-1.png DELETED
Binary file
trunk/screenshot-2.png DELETED
Binary file
trunk/screenshot-3.png DELETED
Binary file
trunk/screenshot-4.png DELETED
Binary file
trunk/screenshot-5.png DELETED
Binary file
trunk/toolbar.cloner.html.php DELETED
@@ -1,85 +0,0 @@
1
- <?php
2
- /**
3
- * XCloner
4
- * Oficial website: http://www.joomlaplug.com/
5
- * -------------------------------------------
6
- * Creator: Liuta Romulus Ovidiu
7
- * License: All Rights Reserved
8
- * Email: admin@joomlaplug.com
9
- * Revision: 1.0
10
- * Date: July 2007
11
- **/
12
-
13
-
14
- /** ensure this file is being included by a parent file */
15
- defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );
16
-
17
- function button($action, $text='', $js=''){
18
-
19
- echo "<td align='center' class=\"test\" onclick=\"document.adminForm.task.value='$action';document.adminForm.submit();\" onmouseover=\"this.className='test2'\" onmouseout=\"this.className='test'\">
20
- <a href='#' onclick=\"document.adminForm.task.value='$action';document.adminForm.submit();\" ><b>$text</b></a>
21
- </td>";
22
-
23
- }
24
-
25
- class TOOLBAR_cloner {
26
-
27
- function _LOGIN() {
28
- button('dologin','Login',false);
29
- button('cancel','Cancel',false);
30
- }
31
- function _GENERATE() {
32
- button('clone','Clone',false);
33
- button('move','Move',false);
34
- button('view','Back',false);
35
- }
36
- function _CONFIRM() {
37
- button('generate','Continue',false);
38
- button('cancel','Cancel',false);
39
- }
40
- function _CLONE() {
41
- button('continue','Continue',false);
42
- button('view','Cancel',false);
43
- }
44
- function _CONFIG() {
45
- button('config', 'Save');
46
- button('cancel', 'Cancel');
47
- }
48
-
49
- function _LANG_EDIT() {
50
- button('save_lang_apply','Apply');
51
- button('save_lang', 'Save');
52
- button('cancel_lang', 'Cancel');
53
- }
54
-
55
- function _LANG_ADD() {
56
- button('add_lang_new', 'New');
57
- button('cancel_lang', 'Cancel');
58
- }
59
-
60
- function _LANG() {
61
- button('add_lang','New');
62
- button('edit_lang', 'Edit');
63
- button('del_lang', 'Delete');
64
- button('cancel','Cancel');
65
- }
66
-
67
- function _RENAME() {
68
- button('rename_save', 'Save');
69
- button('rename_cancel', 'Cancel');
70
- }
71
- function _VIEW() {
72
- button('clone','Clone',true);
73
- button('move','Move',true);
74
- button('rename','Rename',true);
75
- button('remove','Delete');
76
- button('cancel','Cancel');
77
- }
78
- function _DEFAULT() {
79
-
80
- button('logout','Logout');
81
- button('cancel','Cancel');
82
-
83
- }
84
- }
85
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/toolbar.cloner.php DELETED
@@ -1,69 +0,0 @@
1
- <?php
2
- /**
3
- * XCloner
4
- * Oficial website: http://www.joomlaplug.com/
5
- * -------------------------------------------
6
- * Creator: Liuta Romulus Ovidiu
7
- * License: All Rights Reserved
8
- * Email: admin@joomlaplug.com
9
- * Revision: 1.0
10
- * Date: July 2007
11
- **/
12
-
13
-
14
- /** ensure this file is being included by a parent file */
15
- defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );
16
-
17
- require_once('toolbar.cloner.html.php' );
18
-
19
- switch ( $task ) {
20
- case 'help':
21
- case 'credits':
22
- case 'refresh':
23
- case 'generate':
24
- TOOLBAR_cloner::_GENERATE();
25
- break;
26
-
27
- case 'rename_save':
28
- case 'rename':
29
- TOOLBAR_cloner::_RENAME();
30
- break;
31
- case 'confirm':
32
- TOOLBAR_cloner::_CONFIRM();
33
- break;
34
- case 'continue':
35
- case 'move':
36
- case 'clone':
37
- TOOLBAR_cloner::_CLONE();
38
- break;
39
- case 'config':
40
- TOOLBAR_cloner::_CONFIG();
41
- break;
42
- case 'show':
43
- case 'view':
44
- TOOLBAR_cloner::_VIEW();
45
- break;
46
-
47
-
48
- case 'add_lang':
49
- TOOLBAR_cloner::_LANG_ADD();
50
- break;
51
- case 'save_lang_apply':
52
- case 'edit_lang':
53
- TOOLBAR_cloner::_LANG_EDIT();
54
- break;
55
-
56
- case 'del_lang':
57
- case 'lang':
58
- TOOLBAR_cloner::_LANG();
59
- break;
60
-
61
- case 'login':
62
- TOOLBAR_cloner::_LOGIN();
63
- break;
64
-
65
- default:
66
- TOOLBAR_cloner::_DEFAULT();
67
- break;
68
- }
69
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/xcloner.php DELETED
@@ -1,43 +0,0 @@
1
- <?php
2
- /*
3
- Plugin Name: XCloner
4
- Plugin URI: http://www.joomlaplug.com
5
- Description: XCloner is a tool that will help you manage your website backups, generate/restore/move so your website will be always secured! With XCloner you will be able to clone your site to any other location with just a few clicks
6
- Version: 2.1
7
- Author: Liuta Ovidiu
8
- Author URI: http://www.joomlaplug.com
9
- */
10
-
11
-
12
- // no direct access
13
- #defined( '_JEXEC' ) or die( 'Restricted access' );
14
-
15
- function xcloner_show(){
16
-
17
- print "<iframe src='../wp-content/plugins/xcloner/index.php' width='100%' height='900' frameborder=0 marginWidth=0 frameSpacing=0 marginHeight=110 ></iframe>";
18
-
19
- }
20
- function xcloner_install(){
21
-
22
- }
23
-
24
- function xcloner_page(){
25
-
26
- if ( function_exists('add_submenu_page') )
27
- add_submenu_page('plugins.php', XCloner, XCloner, 'manage_options', 'xcloner_show', 'xcloner_show');
28
-
29
-
30
-
31
- }
32
-
33
- #add_action('admin_head', 'xcloner');
34
- add_action('admin_menu', 'xcloner_page');
35
-
36
- #add_options_page('XCloner Options', 'XCloner', 9, 'index.php', 'xcloner_options');
37
-
38
- if (isset($_GET['activate']) && $_GET['activate'] == 'true')
39
- {
40
- add_action('init', 'xcloner_install');
41
- }
42
-
43
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
trunk/xcloner_j1.5.xml DELETED
@@ -1,115 +0,0 @@
1
- <install type="component" version="1.5.0">
2
- <name>XCloner</name>
3
- <version>2.1.0</version>
4
- <license>JoomlaPlug.com</license>
5
- <author>JoomlaPlug.com</author>
6
- <authoremail>admin@joomlaplug.com</authoremail>
7
- <authorurl>http://www.joomlaplug.com</authorurl>
8
- <creationDate>September 2007</creationDate>
9
- <copyright>JoomlaPlug.com</copyright>
10
- <description><![CDATA[
11
- <a href="http://www.joomlaplug.com"><img src="http://www.joomlaplug.com/logo.gif" border=0></a><br/>
12
- <h2>XCloner Backup&Restore Utility</h2>
13
- <pre>XCloner is a tool that will help you manage your website backups, generate/restore/move so your website will be always secured!
14
-
15
- Features:
16
- -cron script to generate backup
17
- -multiple backup options
18
- -restore tool to move the website rapidly to other locations
19
- -multiple locations of where you could store the backup safelly
20
- -comnpatible with both Joomla 1.0.x and 1.5.x
21
-
22
- For reports and suggestions please contact us at admin@joomlaplug.com or visit us on <a href='http://www.joomlaplug.com'>http://www.joomlaplug.com</a>
23
- </pre>
24
- <br/><br/>
25
-
26
- JoomaPlug.com &copy; 2006-2007 | <a href="http://www.joomlaplug.com">www.joomlaplug.com</a>
27
- <br/><p/><br/>
28
- ]]>
29
- </description>
30
- <installfile>install.xcloner.php</installfile>
31
- <administration>
32
- <menu>.XCloner</menu>
33
- <files>
34
- <filename>admin.xcloner.php</filename>
35
- <filename>xcloner.php</filename>
36
- <filename>administrator/index.html</filename>
37
- <filename>administrator/backups/index.html</filename>
38
- <filename>browser/file.gif</filename>
39
- <filename>browser/filebrowser.css</filename>
40
- <filename>browser/files_inpage.php</filename>
41
- <filename>browser/files_xml.php</filename>
42
- <filename>browser/folder.gif</filename>
43
- <filename>browser/timer.gif</filename>
44
- <filename>browser/xmlhttp.js</filename>
45
- <filename>configs/index.html</filename>
46
- <filename>css/dtree.css</filename>
47
- <filename>css/main.css</filename>
48
- <filename>css/tabber.css</filename>
49
- <filename>images/about.png</filename>
50
- <filename>images/actions.gif</filename>
51
- <filename>images/actions.png</filename>
52
- <filename>images/backup.png</filename>
53
- <filename>images/css.png</filename>
54
- <filename>images/editions.png</filename>
55
- <filename>images/editionssm.png</filename>
56
- <filename>images/empty.gif</filename>
57
- <filename>images/filesave.png</filename>
58
- <filename>images/folder.png</filename>
59
- <filename>images/forum.png</filename>
60
- <filename>images/gen_settings.png</filename>
61
- <filename>images/help.png</filename>
62
- <filename>images/helpsm.png</filename>
63
- <filename>images/join.gif</filename>
64
- <filename>images/joinbottom.gif</filename>
65
- <filename>images/keep_icon.gif</filename>
66
- <filename>images/lang.png</filename>
67
- <filename>images/lhelp.png</filename>
68
- <filename>images/line.gif</filename>
69
- <filename>images/logo.gif</filename>
70
- <filename>images/logo.png</filename>
71
- <filename>images/xcloner.png</filename>
72
- <filename>images/minus.gif</filename>
73
- <filename>images/minusbottom.gif</filename>
74
- <filename>images/nolines_minus.gif</filename>
75
- <filename>images/nolines_plus.gif</filename>
76
- <filename>images/page.gif</filename>
77
- <filename>images/plus.gif</filename>
78
- <filename>images/plusbottom.gif</filename>
79
- <filename>images/publish_x.png</filename>
80
- <filename>images/settings.png</filename>
81
- <filename>images/support.png</filename>
82
- <filename>images/templatessm.png</filename>
83
- <filename>images/website.png</filename>
84
- <filename>images/wizard.png</filename>
85
- <filename>images/wizardsm.png</filename>
86
- <filename>images/wizardsm_restore.gif</filename>
87
- <filename>images/wizardsm_restore.png</filename>
88
- <filename>javascript/dtree.js</filename>
89
- <filename>javascript/tabber.js</filename>
90
- <filename>language/english.php</filename>
91
- <filename>language/index.html</filename>
92
- <filename>restore/TAR.php</filename>
93
- <filename>restore/XCloner.php</filename>
94
- <filename>.cloner.config.php</filename>
95
- <filename>admin.cloner.html.php</filename>
96
- <filename>admin.cloner.php</filename>
97
- <filename>cloner.config.php</filename>
98
- <filename>cloner.cron.php</filename>
99
- <filename>cloner.functions.php</filename>
100
- <filename>common.php</filename>
101
- <filename>index.php</filename>
102
- <filename>index2.php</filename>
103
- <filename>install.xcloner.php</filename>
104
- <filename>license.txt</filename>
105
- <filename>readme.txt</filename>
106
- <filename>recursive.php</filename>
107
- <filename>toolbar.cloner.html.php</filename>
108
- <filename>toolbar.cloner.php</filename>
109
-
110
-
111
- </files>
112
- </administration>
113
- </install>
114
-
115
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
xcloner.php CHANGED
@@ -2,7 +2,7 @@
2
  /*
3
  Plugin Name: XCloner
4
  Plugin URI: http://www.xcloner.com
5
- Description: XCloner is a tool that will help you manage your website backups, generate/restore/move so your website will be always secured! With XCloner you will be able to clone your site to any other location with just a few clicks
6
  Version: 2.1
7
  Author: Liuta Ovidiu
8
  Author URI: http://www.xcloner.com
2
  /*
3
  Plugin Name: XCloner
4
  Plugin URI: http://www.xcloner.com
5
+ Description: XCloner is a tool that will help you manage your website backups, generate/restore/move so your website will be always secured! With XCloner you will be able to clone your site to any other location with just a few clicks. Don't forget to create the 'administrator/backups' directory in your Wordpress root and make it fully writeable. <a href="plugins.php?page=xcloner_show">Open XCloner</a> | <a href="http://www.xcloner.com/support/premium-support/">Get Premium Support</a> | <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=info%40xcloner%2ecom&lc=US&item_name=XCloner%20Support&no_note=0&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHostedGuest">Donate</a>
6
  Version: 2.1
7
  Author: Liuta Ovidiu
8
  Author URI: http://www.xcloner.com