XOOPS 2.5.6  Final
 All Classes Namespaces Files Functions Variables Pages
maintenance.php
Go to the documentation of this file.
1 <?php
19 defined('XOOPS_ROOT_PATH') or die('Restricted access');
20 
28 {
29  var $db;
30  var $prefix;
31 
35  function SystemMaintenance() {
37  $this->db = $db;
38  $this->prefix = $this->db->prefix.'_';
39  }
40 
47  function displayTables($array = true) {
48  $tables = array();
49  $result = $this->db->queryF('SHOW TABLES');
50  while ($myrow = $this->db->fetchArray($result)) {
51  $value = array_values($myrow);
52  $value = substr($value[0], strlen(XOOPS_DB_PREFIX) + 1);
53  $tables[$value] = $value;
54  }
55  if( $array = true ) {
56  return $tables;
57  } else {
58  return join(',', $tables);
59  }
60  }
61 
67  function CleanSession() {
68  $result = $this->db->queryF('TRUNCATE TABLE '.$this->db->prefix('session'));
69  return true;
70  }
71 
78  function CleanCache($cache) {
79  for($i=0; $i<count($cache); $i++) {
80  if($cache[$i] == 1) {
81  $files = glob(XOOPS_VAR_PATH.'/caches/smarty_cache/*.*');
82  foreach ($files as $filename) {
83  if(basename(strtolower($filename)) != 'index.html') {
84  unlink($filename);
85  }
86  }
87  } else if($cache[$i] == 2) {
88  $files = glob(XOOPS_VAR_PATH.'/caches/smarty_compile/*.*');
89  foreach ($files as $filename) {
90  if(basename(strtolower($filename)) != 'index.html') {
91  unlink($filename);
92  }
93  }
94  } else if($cache[$i] == 3) {
95  $files = glob(XOOPS_VAR_PATH.'/caches/xoops_cache/*.*');
96  foreach ($files as $filename) {
97  if(basename(strtolower($filename)) != 'index.html') {
98  unlink($filename);
99  }
100  }
101  }
102  }
103  return true;
104  }
105 
113  function CheckRepairAnalyzeOptimizeQueries($tables, $maintenance) {
114  $ret = '<table class="outer"><th>'._AM_SYSTEM_MAINTENANCE_TABLES1.'</th><th>'._AM_SYSTEM_MAINTENANCE_TABLES_OPTIMIZE.'</th><th>'._AM_SYSTEM_MAINTENANCE_TABLES_CHECK.'</th><th>'._AM_SYSTEM_MAINTENANCE_TABLES_REPAIR.'</th><th>'._AM_SYSTEM_MAINTENANCE_TABLES_ANALYZE.'</th>';
115  $tab = array();
116  for($i=0; $i<4; $i++) {
117  $tab[$i] = $i+1;
118  }
119  $tab1 = array();
120  for($i=0; $i<4; $i++) {
121  if (in_array ($tab[$i], $maintenance) ) {
122  $tab1[$i] = $tab[$i];
123  } else {
124  $tab1[$i] = '0';
125  }
126  }
127  unset($tab);
128  $class = 'odd';
129  for($i=0; $i<count($tables); $i++) {
130  $ret .= '<tr class="'.$class.'"><td align="center">'.$this->prefix.$tables[$i].'</td>';
131  for($j=0; $j<4; $j++) {
132  if( $tab1[$j] == 1 ) {
133  // Optimize
134  $result = $this->db->queryF('OPTIMIZE TABLE '.$this->prefix.$tables[$i]);
135  if($result) {
136  $ret .= '<td class="xo-actions txtcenter"><img src="'.system_AdminIcons('success.png').'" /></td>';
137  } else {
138  $ret .= '<td class="xo-actions txtcenter"><img src="'.system_AdminIcons('cancel.png').'" /></td>';
139  }
140  } else if ( $tab1[$j] == 2 ) {
141  // Check tables
142  $result = $this->db->queryF('CHECK TABLE '.$this->prefix.$tables[$i]);
143  if($result) {
144  $ret .= '<td class="xo-actions txtcenter"><img src="'.system_AdminIcons('success.png').'" /></td>';
145  } else {
146  $ret .= '<td class="xo-actions txtcenter"><img src="'.system_AdminIcons('cancel.png').'" /></td>';
147  }
148  } else if ( $tab1[$j] == 3 ) {
149  // Repair
150  $result = $this->db->queryF('REPAIR TABLE '.$this->prefix.$tables[$i]);
151  if($result) {
152  $ret .= '<td class="xo-actions txtcenter"><img src="'.system_AdminIcons('success.png').'" /></td>';
153  } else {
154  $ret .= '<td class="xo-actions txtcenter"><img src="'.system_AdminIcons('cancel.png').'" /></td>';
155  }
156  } else if ( $tab1[$j] == 4 ) {
157  // Analyze
158  $result = $this->db->queryF('ANALYZE TABLE '.$this->prefix.$tables[$i]);
159  if($result) {
160  $ret .= '<td class="xo-actions txtcenter"><img src="'.system_AdminIcons('success.png').'" /></td>';
161  } else {
162  $ret .= '<td class="xo-actions txtcenter"><img src="'.system_AdminIcons('cancel.png').'" /></td>';
163  }
164  } else {
165  $ret .= '<td>&nbsp;</td>';
166  }
167  }
168  $ret .= '</tr>';
169  $class = ($class == 'even') ? 'odd' : 'even';
170  }
171  $ret .= '</table>';
172  return $ret;
173  }
174 
182  function dump_tables($tables, $drop) {
183  $ret = array();
184  $ret[0] = "# \n";
185  $ret[0] .= "# Dump SQL, Generate by Xoops \n";
186  $ret[0] .= "# Date : ".date('d-m-Y � H:i')." \n";
187  $ret[1] = '<table class="outer"><tr><th width="30%">'._AM_SYSTEM_MAINTENANCE_DUMP_TABLES.'</th><th width="35%">'._AM_SYSTEM_MAINTENANCE_DUMP_STRUCTURES.'</th><th width="35%">'._AM_SYSTEM_MAINTENANCE_DUMP_NB_RECORDS.'</th></tr>';
188  $class = 'odd';
189  for($i=0; $i<count($tables); $i++) {
190  //structure
191  $ret = $this->dump_table_structure($ret, $this->prefix.$tables[$i], $drop, $class);
192  //data
193  $ret = $this->dump_table_datas($ret, $this->prefix.$tables[$i]);
194  $class = ($class == 'even') ? 'odd' : 'even';
195  }
196  $ret = $this->dump_write($ret);
197  $ret[1] .= '</table>';
198  return $ret;
199  }
200 
208  function dump_modules($modules, $drop) {
209  $ret = array();
210  $ret[0] = "# \n";
211  $ret[0] .= "# Dump SQL, Generate by Xoops \n";
212  $ret[0] .= "# Date : ".date('d-m-Y � H:i')." \n";
213  $ret[0] .= "# \n\n";
214  $ret[1] = '<table class="outer"><tr><th width="30%">'._AM_SYSTEM_MAINTENANCE_DUMP_TABLES.'</th><th width="35%">'._AM_SYSTEM_MAINTENANCE_DUMP_STRUCTURES.'</th><th width="35%">'._AM_SYSTEM_MAINTENANCE_DUMP_NB_RECORDS.'</th></tr>';
215  $class = 'odd';
216  for($i=0; $i<count($modules); $i++) {
217  $module_handler =& xoops_gethandler('module');
218  $module = $module_handler->getByDirname($modules[$i]);
219  $ret[1] .= '<tr><th colspan="3" align="left">'.ucfirst($modules[$i]).'</th></tr>';
220  $modtables = $module->getInfo('tables');
221  if ($modtables != false && is_array($modtables)) {
222  foreach ($modtables as $table) {
223  //structure
224  $ret = $this->dump_table_structure($ret, $this->prefix.$table, $drop, $class);
225  //data
226  $ret = $this->dump_table_datas($ret, $this->prefix.$table);
227  $class = ($class == 'even') ? 'odd' : 'even';
228  }
229  } else {
230  $ret[1] .= '<tr><td colspan="3" align="center">'._AM_SYSTEM_MAINTENANCE_DUMP_NO_TABLES.'</td></tr>';
231  }
232  }
233  $ret[1] .= '</table>';
234  $ret = $this->dump_write($ret);
235  return $ret;
236  }
237 
247  function dump_table_structure($ret, $table, $drop, $class)
248  {
249  $verif = false;
250  $result = $this->db->queryF('SHOW create table `'.$table.'`;');
251  if( $result ) {
252  if( $row = $this->db->fetchArray($result) ) {
253  $ret[0] .= "# Table structure for table `".$table."` \n\n";
254  if ( $drop == 1 ) {
255  $ret[0] .= "DROP TABLE IF EXISTS `".$table."`;\n\n";
256  }
257  $verif = true;
258  $ret[0] .= $row['Create Table'].";\n\n";
259  }
260  }
261  $ret[1] .= '<tr class="'.$class.'"><td align="center">'.$table.'</td><td class="xo-actions txtcenter">';
262  $ret[1] .= ( $verif == true ) ? '<img src="'.system_AdminIcons('success.png').'" />' : '<img src="'.system_AdminIcons('cancel.png').'" />';
263  $ret[1] .= '</td>';
264  $this->db->freeRecordSet($result);
265  return $ret;
266  }
267 
275  function dump_table_datas($ret, $table)
276  {
277  $count = 0;
278  $result = $this->db->queryF('SELECT * FROM '.$table.';');
279  if( $result) {
280  $num_rows= $this->db->getRowsNum($result);
281  $num_fields= $this->db->getFieldsNum($result);
282 
283  if( $num_rows > 0) {
284  $field_type = array();
285  $i = 0;
286  while( $i < $num_fields ) {
287  $meta = mysql_fetch_field($result, $i);
288  array_push($field_type, $meta->type);
289  $i++;
290  }
291 
292  $ret[0] .= "INSERT INTO `".$table."` values\n";
293  $index = 0;
294  while( $row = $this->db->fetchRow($result) ) {
295  $count++;
296  $ret[0] .= "(";
297  for( $i=0; $i < $num_fields; $i++ ) {
298  if( is_null( $row[$i] ) ) {
299  $ret[0] .= "null";
300  } else {
301  switch( $field_type[$i]) {
302  case 'int':
303  $ret[0] .= $row[$i];
304  break;
305  default:
306  $ret[0] .= "'".mysql_real_escape_string($row[$i])."'";
307  }
308  }
309  if( $i < $num_fields-1) {
310  $ret[0] .= ",";
311  }
312  }
313  $ret[0] .= ")";
314 
315  if( $index < $num_rows-1 ) {
316  $ret[0] .= ",";
317  } else {
318  $ret[0] .= ";";
319  }
320  $ret[0] .= "\n";
321  $index++;
322  }
323  }
324  }
325  $ret[1] .= '<td align="center">';
326  $ret[1] .= $count.'&nbsp;'._AM_SYSTEM_MAINTENANCE_DUMP_RECORDS.'</td></tr>';
327  $ret[0] .= "\n";
328  $this->db->freeRecordSet($result);
329  $ret[0] .= "\n";
330  return $ret;
331  }
332 
339  function dump_write($ret) {
340  $file_name = "dump_".date("Y.m.d")."_".date("H.i.s").".sql";
341  $path_file = "./admin/maintenance/dump/".$file_name;
342  if( file_put_contents($path_file, $ret[0]) ) {
343  $ret[1] .= '<table class="outer"><tr><th colspan="2" align="center">'._AM_SYSTEM_MAINTENANCE_DUMP_FILE_CREATED.'</th><th>'._AM_SYSTEM_MAINTENANCE_DUMP_RESULT.'</th></tr><tr><td colspan="2" align="center"><a href="'.XOOPS_URL.'/modules/system/admin/maintenance/dump/'.$file_name.'">'.$file_name.'</a></td><td class="xo-actions txtcenter"><img src="'.system_AdminIcons('success.png').'" /></td><tr></table>';
344  } else {
345  $ret[1] .= '<table class="outer"><tr><th colspan="2" align="center">'._AM_SYSTEM_MAINTENANCE_DUMP_FILE_CREATED.'</th><th>'._AM_SYSTEM_MAINTENANCE_DUMP_RESULT.'</th></tr><tr><td colspan="2" class="xo-actions txtcenter">'.$file_name.'</td><td class="xo-actions txtcenter"><img src="'.system_AdminIcons('cancel.png').'" /></td><tr></table>';
346  }
347  return $ret;
348  }
349 }
350 
351 ?>