All *_list() functions now does not display html directly - added echo when needed.
[fa-stable.git] / admin / backups.php
1 <?php
2 /**********************************************************************
3     Copyright (C) FrontAccounting, LLC.
4         Released under the terms of the GNU General Public License, GPL, 
5         as published by the Free Software Foundation, either version 3 
6         of the License, or (at your option) any later version.
7     This program is distributed in the hope that it will be useful,
8     but WITHOUT ANY WARRANTY; without even the implied warranty of
9     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
10     See the License here <http://www.gnu.org/licenses/gpl-3.0.html>.
11 ***********************************************************************/
12 $page_security = 'SA_BACKUP';
13
14 $path_to_root="..";
15 include_once($path_to_root . "/includes/session.inc");
16 include_once($path_to_root . "/includes/ui.inc");
17 include_once($path_to_root . "/admin/db/maintenance_db.inc");
18
19 if (get_post('view')) {
20         $filename = BACKUP_PATH . get_post('cmb_backups');
21         if (in_ajax()) 
22                 $Ajax->popup( $filename );
23         else {
24             header('Content-type: application/octet-stream');
25         header('Content-Length: '.filesize($filename));
26                 header("Content-Disposition: inline; filename=$filename");
27         readfile($filename);
28                 exit();
29         }
30 };
31
32 if (get_post('download')) {
33         download_file(BACKUP_PATH . get_post('cmb_backups'));
34         exit;
35 }
36
37 page(_($help_context = "Backup and Restore Database"), false, false, '', '');
38
39 check_paths();
40
41 function check_paths()
42 {
43         if (!file_exists(BACKUP_PATH)) {
44                 display_error (_("Backup paths have not been set correctly.") 
45                         ._("Please contact System Administrator.")."<br>" 
46                         . _("cannot find backup directory") . " - " . BACKUP_PATH . "<br>");
47                 end_page();
48                 exit;
49         }
50 }
51
52 function generate_backup($conn, $ext='no', $comm='')
53 {
54         $filename = db_backup($conn, $ext, $comm);
55         if ($filename)
56                 display_notification(_("Backup successfully generated."). ' '
57                         . _("Filename") . ": " . $filename);
58         else
59                 display_error(_("Database backup failed."));
60         
61         return $filename;
62 }
63
64
65 function get_backup_file_combo()
66 {
67         global $path_to_root, $Ajax;
68         
69         $ar_files = array();
70     default_focus('cmb_backups');
71     $dh = opendir(BACKUP_PATH);
72         while (($file = readdir($dh)) !== false)
73                 $ar_files[] = $file;
74         closedir($dh);
75
76     rsort($ar_files);
77         $opt_files = "";
78     foreach ($ar_files as $file)
79                 if (preg_match("/.sql(.zip|.gz)?$/", $file))
80                 $opt_files .= "<option value='$file'>$file</option>";
81
82         $selector = "<select name='cmb_backups' size=2 style='height:160px;min-width:230px'>$opt_files</select>";
83
84         $Ajax->addUpdate('cmd_backups', "_cmd_backups_sel", $selector);
85         $selector = "<span id='_cmd_backups_sel'>".$selector."</span>\n";
86
87         return $selector;
88 }
89
90 function compress_list_row($label, $name, $value=null)
91 {
92         $ar_comps = array('no'=>_("No"));
93
94     if (function_exists("gzcompress"))
95         $ar_comps['zip'] = "zip";
96     if (function_exists("gzopen"))
97         $ar_comps['gzip'] = "gzip";
98
99         echo "<tr><td>$label</td><td>";
100         echo array_selector('comp', $value, $ar_comps);
101         echo "</td></tr>";
102 }
103
104 function download_file($filename)
105 {
106     if (empty($filename) || !file_exists($filename))
107     {
108         return false;
109     }
110     $saveasname = basename($filename);
111     header('Content-type: application/octet-stream');
112         header('Content-Length: '.filesize($filename));
113         header('Content-Disposition: attachment; filename="'.$saveasname.'"');
114     readfile($filename);
115
116     return true;
117 }
118
119 $db_name = $_SESSION["wa_current_user"]->company;
120 $conn = $db_connections[$db_name];
121
122 if (get_post('creat')) {
123         generate_backup($conn, get_post('comp'), get_post('comments'));
124         $Ajax->activate('cmd_backups');
125 };
126
127 if (get_post('restore')) {
128         if (db_import(BACKUP_PATH . get_post('cmb_backups'), $conn))
129                 display_notification(_("Restore backup completed."));
130 }
131
132 if (get_post('delete')) {
133         if (unlink(BACKUP_PATH . get_post('cmb_backups'))) {
134                 display_notification(_("File successfully deleted.")." "
135                                 . _("Filename") . ": " . get_post('cmb_backups'));
136                 $Ajax->activate('cmd_backups');
137         }
138         else
139                 display_error(_("Can't delete backup file."));
140 };
141
142 if (get_post('upload'))
143 {
144         $tmpname = $_FILES['uploadfile']['tmp_name'];
145         $fname = $_FILES['uploadfile']['name'];
146
147         if (!preg_match("/.sql(.zip|.gz)?$/", $fname))
148                 display_error(_("You can only upload *.sql backup files"));
149         elseif (is_uploaded_file($tmpname)) {
150                 rename($tmpname, BACKUP_PATH . $fname);
151                 display_notification( "File uploaded to backup directory");
152                 $Ajax->activate('cmd_backups');
153         } else
154                 display_error(_("File was not uploaded into the system."));
155 }
156 //-------------------------------------------------------------------------------
157 start_form(true, true);
158 start_outer_table($table_style2);
159 table_section(1);
160 table_section_title(_("Create backup"));
161         textarea_row(_("Comments:"), 'comments', null, 30, 8);
162         compress_list_row(_("Compression:"),'comp');
163         vertical_space("height='20px'");
164         submit_row('creat',_("Create Backup"), false, "colspan=2 align='center'", '', 'process');
165 table_section(2);
166 table_section_title(_("Backup scripts maintenance"));
167
168         start_row();
169         echo "<td style='padding-left:20px'align='left'>".get_backup_file_combo()."</td>";
170         echo "<td valign='top'>";
171         start_table();
172         submit_row('view',_("View Backup"), false, '', '', true);
173         submit_row('download',_("Download Backup"), false, '', '', false);
174         submit_row('restore',_("Restore Backup"), false, '','', 'process');
175         submit_js_confirm('restore',_("You are about to restore database from backup file.\nDo you want to continue?"));
176
177         submit_row('delete', _("Delete Backup"), false, '','', true);
178         submit_js_confirm('delete', sprintf(_("You are about to remove selected backup file.\nDo you want to continue ?")));
179         end_table();
180         echo "</td>";
181         end_row();
182 start_row();
183 echo "<td style='padding-left:20px' align='left'><input name='uploadfile' type='file'></td>";
184         submit_cells('upload',_("Upload file"),'', '', true);
185 end_row();
186 end_outer_table();
187
188 end_form();
189
190 end_page();
191 ?>