<?php


highlight_file
(__FILE__);
        exit;
/*
  $Id: backup.php 1821 2008-01-15 09:58:55Z hpdl $

  osCommerce, Open Source E-Commerce Solutions
  http://www.oscommerce.com

  Copyright (c) 2008 osCommerce

  Released under the GNU General Public License
*/

  
require('includes/application_top.php');

  
$action = (isset($HTTP_GET_VARS['action']) ? $HTTP_GET_VARS['action'] : '');

  if (
tep_not_null($action)) {
    switch (
$action) {
      case 
'forget':
        
tep_db_query("delete from " TABLE_CONFIGURATION " where configuration_key = 'DB_LAST_RESTORE'");

        
$messageStack->add_session(SUCCESS_LAST_RESTORE_CLEARED'success');

        
tep_redirect(tep_href_link(FILENAME_BACKUP));
        break;
      case 
'backupnow':
        
tep_set_time_limit(0);
        
$backup_file 'db_' DB_DATABASE '-' date('YmdHis') . '.sql';
        
$fp fopen(DIR_FS_BACKUP $backup_file'w');

        
$schema '# osCommerce, Open Source E-Commerce Solutions' "\n" .
                  
'# http://www.oscommerce.com' "\n" .
                  
'#' "\n" .
                  
'# Database Backup For ' STORE_NAME "\n" .
                  
'# Copyright (c) ' date('Y') . ' ' STORE_OWNER "\n" .
                  
'#' "\n" .
                  
'# Database: ' DB_DATABASE "\n" .
                  
'# Database Server: ' DB_SERVER "\n" .
                  
'#' "\n" .
                  
'# Backup Date: ' date(PHP_DATE_TIME_FORMAT) . "\n\n";
        
fputs($fp$schema);

        
$tables_query tep_db_query('show tables');
        while (
$tables tep_db_fetch_array($tables_query)) {
          list(,
$table) = each($tables);

          
$schema 'drop table if exists ' $table ';' "\n" .
                    
'create table ' $table ' (' "\n";

          
$table_list = array();
          
$fields_query tep_db_query("show fields from " $table);
          while (
$fields tep_db_fetch_array($fields_query)) {
            
$table_list[] = $fields['Field'];

            
$schema .= '  ' $fields['Field'] . ' ' $fields['Type'];

            if (
strlen($fields['Default']) > 0$schema .= ' default \'' $fields['Default'] . '\'';

            if (
$fields['Null'] != 'YES'$schema .= ' not null';

            if (isset(
$fields['Extra'])) $schema .= ' ' $fields['Extra'];

            
$schema .= ',' "\n";
          }

          
$schema ereg_replace(",\n$"''$schema);

// add the keys
          
$index = array();
          
$keys_query tep_db_query("show keys from " $table);
          while (
$keys tep_db_fetch_array($keys_query)) {
            
$kname $keys['Key_name'];

            if (!isset(
$index[$kname])) {
              
$index[$kname] = array('unique' => !$keys['Non_unique'],
                                     
'fulltext' => ($keys['Index_type'] == 'FULLTEXT' '1' '0'),
                                     
'columns' => array());
            }

            
$index[$kname]['columns'][] = $keys['Column_name'];
          }

          while (list(
$kname$info) = each($index)) {
            
$schema .= ',' "\n";

            
$columns implode($info['columns'], ', ');

            if (
$kname == 'PRIMARY') {
              
$schema .= '  PRIMARY KEY (' $columns ')';
            } elseif ( 
$info['fulltext'] == '1' ) {
              
$schema .= '  FULLTEXT ' $kname ' (' $columns ')';
            } elseif (
$info['unique']) {
              
$schema .= '  UNIQUE ' $kname ' (' $columns ')';
            } else {
              
$schema .= '  KEY ' $kname ' (' $columns ')';
            }
          }

          
$schema .= "\n" ');' "\n\n";
          
fputs($fp$schema);

// dump the data
          
if ( ($table != TABLE_SESSIONS ) && ($table != TABLE_WHOS_ONLINE) ) {
            
$rows_query tep_db_query("select " implode(','$table_list) . " from " $table);
            while (
$rows tep_db_fetch_array($rows_query)) {
              
$schema 'insert into ' $table ' (' implode(', '$table_list) . ') values (';

              
reset($table_list);
              while (list(,
$i) = each($table_list)) {
                if (!isset(
$rows[$i])) {
                  
$schema .= 'NULL, ';
                } elseif (
tep_not_null($rows[$i])) {
                  
$row addslashes($rows[$i]);
                  
$row ereg_replace("\n#""\n".'\#'$row);

                  
$schema .= '\'' $row '\', ';
                } else {
                  
$schema .= '\'\', ';
                }
              }

              
$schema ereg_replace(', $'''$schema) . ');' "\n";
              
fputs($fp$schema);
            }
          }
        }

        
fclose($fp);

        if (isset(
$HTTP_POST_VARS['download']) && ($HTTP_POST_VARS['download'] == 'yes')) {
          switch (
$HTTP_POST_VARS['compress']) {
            case 
'gzip':
              
exec(LOCAL_EXE_GZIP ' ' DIR_FS_BACKUP $backup_file);
              
$backup_file .= '.gz';
              break;
            case 
'zip':
              
exec(LOCAL_EXE_ZIP ' -j ' DIR_FS_BACKUP $backup_file '.zip ' DIR_FS_BACKUP $backup_file);
              
unlink(DIR_FS_BACKUP $backup_file);
              
$backup_file .= '.zip';
          }
          
header('Content-type: application/x-octet-stream');
          
header('Content-disposition: attachment; filename=' $backup_file);

          
readfile(DIR_FS_BACKUP $backup_file);
          
unlink(DIR_FS_BACKUP $backup_file);

          exit;
        } else {
          switch (
$HTTP_POST_VARS['compress']) {
            case 
'gzip':
              
exec(LOCAL_EXE_GZIP ' ' DIR_FS_BACKUP $backup_file);
              break;
            case 
'zip':
              
exec(LOCAL_EXE_ZIP ' -j ' DIR_FS_BACKUP $backup_file '.zip ' DIR_FS_BACKUP $backup_file);
              
unlink(DIR_FS_BACKUP $backup_file);
          }

          
$messageStack->add_session(SUCCESS_DATABASE_SAVED'success');
        }

        
tep_redirect(tep_href_link(FILENAME_BACKUP));
        break;
      case 
'restorenow':
      case 
'restorelocalnow':
        
tep_set_time_limit(0);

        if (
$action == 'restorenow') {
          
$read_from $HTTP_GET_VARS['file'];

          if (
file_exists(DIR_FS_BACKUP $HTTP_GET_VARS['file'])) {
            
$restore_file DIR_FS_BACKUP $HTTP_GET_VARS['file'];
            
$extension substr($HTTP_GET_VARS['file'], -3);

            if ( (
$extension == 'sql') || ($extension == '.gz') || ($extension == 'zip') ) {
              switch (
$extension) {
                case 
'sql':
                  
$restore_from $restore_file;
                  
$remove_raw false;
                  break;
                case 
'.gz':
                  
$restore_from substr($restore_file0, -3);
                  
exec(LOCAL_EXE_GUNZIP ' ' $restore_file ' -c > ' $restore_from);
                  
$remove_raw true;
                  break;
                case 
'zip':
                  
$restore_from substr($restore_file0, -4);
                  
exec(LOCAL_EXE_UNZIP ' ' $restore_file ' -d ' DIR_FS_BACKUP);
                  
$remove_raw true;
              }

              if (isset(
$restore_from) && file_exists($restore_from) && (filesize($restore_from) > 15000)) {
                
$fd fopen($restore_from'rb');
                
$restore_query fread($fdfilesize($restore_from));
                
fclose($fd);
              }
            }
          }
        } elseif (
$action == 'restorelocalnow') {
          
$sql_file = new upload('sql_file');

          if (
$sql_file->parse() == true) {
            
$restore_query fread(fopen($sql_file->tmp_filename'r'), filesize($sql_file->tmp_filename));
            
$read_from $sql_file->filename;
          }
        }

        if (isset(
$restore_query)) {
          
$sql_array = array();
          
$drop_table_names = array();
          
$sql_length strlen($restore_query);
          
$pos strpos($restore_query';');
          for (
$i=$pos$i<$sql_length$i++) {
            if (
$restore_query[0] == '#') {
              
$restore_query ltrim(substr($restore_querystrpos($restore_query"\n")));
              
$sql_length strlen($restore_query);
              
$i strpos($restore_query';')-1;
              continue;
            }
            if (
$restore_query[($i+1)] == "\n") {
              for (
$j=($i+2); $j<$sql_length$j++) {
                if (
trim($restore_query[$j]) != '') {
                  
$next substr($restore_query$j6);
                  if (
$next[0] == '#') {
// find out where the break position is so we can remove this line (#comment line)
                    
for ($k=$j$k<$sql_length$k++) {
                      if (
$restore_query[$k] == "\n") break;
                    }
                    
$query substr($restore_query0$i+1);
                    
$restore_query substr($restore_query$k);
// join the query before the comment appeared, with the rest of the dump
                    
$restore_query $query $restore_query;
                    
$sql_length strlen($restore_query);
                    
$i strpos($restore_query';')-1;
                    continue 
2;
                  }
                  break;
                }
              }
              if (
$next == '') { // get the last insert query
                
$next 'insert';
              }
              if ( (
eregi('create'$next)) || (eregi('insert'$next)) || (eregi('drop t'$next)) ) {
                
$query substr($restore_query0$i);

                
$next '';
                
$sql_array[] = $query;
                
$restore_query ltrim(substr($restore_query$i+1));
                
$sql_length strlen($restore_query);
                
$i strpos($restore_query';')-1;

                if (
eregi('^create*'$query)) {
                  
$table_name trim(substr($querystripos($query'table ')+6));
                  
$table_name substr($table_name0strpos($table_name' '));

                  
$drop_table_names[] = $table_name;
                }
              }
            }
          }

          
tep_db_query('drop table if exists ' implode(', '$drop_table_names));

          for (
$i=0$n=sizeof($sql_array); $i<$n$i++) {
            
tep_db_query($sql_array[$i]);
          }

          
tep_session_close();

          
tep_db_query("delete from " TABLE_WHOS_ONLINE);
          
tep_db_query("delete from " TABLE_SESSIONS);

          
tep_db_query("delete from " TABLE_CONFIGURATION " where configuration_key = 'DB_LAST_RESTORE'");
          
tep_db_query("insert into " TABLE_CONFIGURATION " values (null, 'Last Database Restore', 'DB_LAST_RESTORE', '" $read_from "', 'Last database restore file', '6', '0', null, now(), '', '')");

          if (isset(
$remove_raw) && ($remove_raw == true)) {
            
unlink($restore_from);
          }

          
$messageStack->add_session(SUCCESS_DATABASE_RESTORED'success');
        }

        
tep_redirect(tep_href_link(FILENAME_BACKUP));
        break;
      case 
'download':
        
$extension substr($HTTP_GET_VARS['file'], -3);

        if ( (
$extension == 'zip') || ($extension == '.gz') || ($extension == 'sql') ) {
          if (
$fp fopen(DIR_FS_BACKUP $HTTP_GET_VARS['file'], 'rb')) {
            
$buffer fread($fpfilesize(DIR_FS_BACKUP $HTTP_GET_VARS['file']));
            
fclose($fp);

            
header('Content-type: application/x-octet-stream');
            
header('Content-disposition: attachment; filename=' $HTTP_GET_VARS['file']);

            echo 
$buffer;

            exit;
          }
        } else {
          
$messageStack->add(ERROR_DOWNLOAD_LINK_NOT_ACCEPTABLE'error');
        }
        break;
      case 
'deleteconfirm':
        if (
strstr($HTTP_GET_VARS['file'], '..')) tep_redirect(tep_href_link(FILENAME_BACKUP));

        
tep_remove(DIR_FS_BACKUP '/' $HTTP_GET_VARS['file']);

        if (!
$tep_remove_error) {
          
$messageStack->add_session(SUCCESS_BACKUP_DELETED'success');

          
tep_redirect(tep_href_link(FILENAME_BACKUP));
        }
        break;
    }
  }

// check if the backup directory exists
  
$dir_ok false;
  if (
is_dir(DIR_FS_BACKUP)) {
    if (
is_writeable(DIR_FS_BACKUP)) {
      
$dir_ok true;
    } else {
      
$messageStack->add(ERROR_BACKUP_DIRECTORY_NOT_WRITEABLE'error');
    }
  } else {
    
$messageStack->add(ERROR_BACKUP_DIRECTORY_DOES_NOT_EXIST'error');
  }
?>
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
<html <?php echo HTML_PARAMS?>>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET?>">
<title><?php echo TITLE?></title>
<link rel="stylesheet" type="text/css" href="includes/stylesheet.css">
<script language="javascript" src="includes/general.js"></script>
</head>
<body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" bgcolor="#FFFFFF">
<!-- header //-->
<?php require(DIR_WS_INCLUDES 'header.php'); ?>
<!-- header_eof //-->

<!-- body //-->
<table border="0" width="100%" cellspacing="2" cellpadding="2">
  <tr>
    <td width="<?php echo BOX_WIDTH?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH?>" cellspacing="1" cellpadding="1" class="columnLeft">
<!-- left_navigation //-->
<?php require(DIR_WS_INCLUDES 'column_left.php'); ?>
<!-- left_navigation_eof //-->
    </table></td>
<!-- body_text //-->
    <td width="100%" valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="2">
      <tr>
        <td><table border="0" width="100%" cellspacing="0" cellpadding="0">
          <tr>
            <td class="pageHeading"><?php echo HEADING_TITLE?></td>
            <td class="pageHeading" align="right"><?php echo tep_draw_separator('pixel_trans.gif'HEADING_IMAGE_WIDTHHEADING_IMAGE_HEIGHT); ?></td>
          </tr>
        </table></td>
      </tr>
      <tr>
        <td><table border="0" width="100%" cellspacing="0" cellpadding="0">
          <tr>
            <td valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="2">
              <tr class="dataTableHeadingRow">
                <td class="dataTableHeadingContent"><?php echo TABLE_HEADING_TITLE?></td>
                <td class="dataTableHeadingContent" align="center"><?php echo TABLE_HEADING_FILE_DATE?></td>
                <td class="dataTableHeadingContent" align="right"><?php echo TABLE_HEADING_FILE_SIZE?></td>
                <td class="dataTableHeadingContent" align="right"><?php echo TABLE_HEADING_ACTION?>&nbsp;</td>
              </tr>
<?php
  
if ($dir_ok == true) {
    
$dir dir(DIR_FS_BACKUP);
    
$contents = array();
    while (
$file $dir->read()) {
      if (!
is_dir(DIR_FS_BACKUP $file) && in_array(substr($file, -3), array('zip''sql''.gz'))) {
        
$contents[] = $file;
      }
    }
    
sort($contents);

    for (
$i=0$n=sizeof($contents); $i<$n$i++) {
      
$entry $contents[$i];

      
$check 0;

      if ((!isset(
$HTTP_GET_VARS['file']) || (isset($HTTP_GET_VARS['file']) && ($HTTP_GET_VARS['file'] == $entry))) && !isset($buInfo) && ($action != 'backup') && ($action != 'restorelocal')) {
        
$file_array['file'] = $entry;
        
$file_array['date'] = date(PHP_DATE_TIME_FORMATfilemtime(DIR_FS_BACKUP $entry));
        
$file_array['size'] = number_format(filesize(DIR_FS_BACKUP $entry)) . ' bytes';
        switch (
substr($entry, -3)) {
          case 
'zip'$file_array['compression'] = 'ZIP'; break;
          case 
'.gz'$file_array['compression'] = 'GZIP'; break;
          default: 
$file_array['compression'] = TEXT_NO_EXTENSION; break;
        }

        
$buInfo = new objectInfo($file_array);
      }

      if (isset(
$buInfo) && is_object($buInfo) && ($entry == $buInfo->file)) {
        echo 
'              <tr id="defaultSelected" class="dataTableRowSelected" onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)">' "\n";
        
$onclick_link 'file=' $buInfo->file '&action=restore';
      } else {
        echo 
'              <tr class="dataTableRow" onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)">' "\n";
        
$onclick_link 'file=' $entry;
      }
?>
                <td class="dataTableContent" onclick="document.location.href='<?php echo tep_href_link(FILENAME_BACKUP$onclick_link); ?>'"><?php echo '<a href="' tep_href_link(FILENAME_BACKUP'action=download&file=' $entry) . '">' tep_image(DIR_WS_ICONS 'file_download.gif'ICON_FILE_DOWNLOAD) . '</a>&nbsp;' $entry?></td>
                <td class="dataTableContent" align="center" onclick="document.location.href='<?php echo tep_href_link(FILENAME_BACKUP$onclick_link); ?>'"><?php echo date(PHP_DATE_TIME_FORMATfilemtime(DIR_FS_BACKUP $entry)); ?></td>
                <td class="dataTableContent" align="right" onclick="document.location.href='<?php echo tep_href_link(FILENAME_BACKUP$onclick_link); ?>'"><?php echo number_format(filesize(DIR_FS_BACKUP $entry)); ?> bytes</td>
                <td class="dataTableContent" align="right"><?php if (isset($buInfo) && is_object($buInfo) && ($entry == $buInfo->file)) { echo tep_image(DIR_WS_IMAGES 'icon_arrow_right.gif'''); } else { echo '<a href="' tep_href_link(FILENAME_BACKUP'file=' $entry) . '">' tep_image(DIR_WS_IMAGES 'icon_info.gif'IMAGE_ICON_INFO) . '</a>'; } ?>&nbsp;</td>
              </tr>
<?php
    
}
    
$dir->close();
  }
?>
              <tr>
                <td class="smallText" colspan="3"><?php echo TEXT_BACKUP_DIRECTORY ' ' DIR_FS_BACKUP?></td>
                <td align="right" class="smallText"><?php if ( ($action != 'backup') && (isset($dir)) ) echo '<a href="' tep_href_link(FILENAME_BACKUP'action=backup') . '">' tep_image_button('button_backup.gif'IMAGE_BACKUP) . '</a>'; if ( ($action != 'restorelocal') && isset($dir) ) echo '&nbsp;&nbsp;<a href="' tep_href_link(FILENAME_BACKUP'action=restorelocal') . '">' tep_image_button('button_restore.gif'IMAGE_RESTORE) . '</a>'?></td>
              </tr>
<?php
  
if (defined('DB_LAST_RESTORE')) {
?>
              <tr>
                <td class="smallText" colspan="4"><?php echo TEXT_LAST_RESTORATION ' ' DB_LAST_RESTORE ' <a href="' tep_href_link(FILENAME_BACKUP'action=forget') . '">' TEXT_FORGET '</a>'?></td>
              </tr>
<?php
  
}
?>
            </table></td>
<?php
  $heading 
= array();
  
$contents = array();

  switch (
$action) {
    case 
'backup':
      
$heading[] = array('text' => '<b>' TEXT_INFO_HEADING_NEW_BACKUP '</b>');

      
$contents = array('form' => tep_draw_form('backup'FILENAME_BACKUP'action=backupnow'));
      
$contents[] = array('text' => TEXT_INFO_NEW_BACKUP);

      
$contents[] = array('text' => '<br>' tep_draw_radio_field('compress''no'true) . ' ' TEXT_INFO_USE_NO_COMPRESSION);
      if (
file_exists(LOCAL_EXE_GZIP)) $contents[] = array('text' => '<br>' tep_draw_radio_field('compress''gzip') . ' ' TEXT_INFO_USE_GZIP);
      if (
file_exists(LOCAL_EXE_ZIP)) $contents[] = array('text' => tep_draw_radio_field('compress''zip') . ' ' TEXT_INFO_USE_ZIP);

      if (
$dir_ok == true) {
        
$contents[] = array('text' => '<br>' tep_draw_checkbox_field('download''yes') . ' ' TEXT_INFO_DOWNLOAD_ONLY '*<br><br>*' TEXT_INFO_BEST_THROUGH_HTTPS);
      } else {
        
$contents[] = array('text' => '<br>' tep_draw_radio_field('download''yes'true) . ' ' TEXT_INFO_DOWNLOAD_ONLY '*<br><br>*' TEXT_INFO_BEST_THROUGH_HTTPS);
      }

      
$contents[] = array('align' => 'center''text' => '<br>' tep_image_submit('button_backup.gif'IMAGE_BACKUP) . '&nbsp;<a href="' tep_href_link(FILENAME_BACKUP) . '">' tep_image_button('button_cancel.gif'IMAGE_CANCEL) . '</a>');
      break;
    case 
'restore':
      
$heading[] = array('text' => '<b>' $buInfo->date '</b>');

      
$contents[] = array('text' => tep_break_string(sprintf(TEXT_INFO_RESTOREDIR_FS_BACKUP . (($buInfo->compression != TEXT_NO_EXTENSION) ? substr($buInfo->file0strrpos($buInfo->file'.')) : $buInfo->file), ($buInfo->compression != TEXT_NO_EXTENSION) ? TEXT_INFO_UNPACK ''), 35' '));
      
$contents[] = array('align' => 'center''text' => '<br><a href="' tep_href_link(FILENAME_BACKUP'file=' $buInfo->file '&action=restorenow') . '">' tep_image_button('button_restore.gif'IMAGE_RESTORE) . '</a>&nbsp;<a href="' tep_href_link(FILENAME_BACKUP'file=' $buInfo->file) . '">' tep_image_button('button_cancel.gif'IMAGE_CANCEL) . '</a>');
      break;
    case 
'restorelocal':
      
$heading[] = array('text' => '<b>' TEXT_INFO_HEADING_RESTORE_LOCAL '</b>');

      
$contents = array('form' => tep_draw_form('restore'FILENAME_BACKUP'action=restorelocalnow''post''enctype="multipart/form-data"'));
      
$contents[] = array('text' => TEXT_INFO_RESTORE_LOCAL '<br><br>' TEXT_INFO_BEST_THROUGH_HTTPS);
      
$contents[] = array('text' => '<br>' tep_draw_file_field('sql_file'));
      
$contents[] = array('text' => TEXT_INFO_RESTORE_LOCAL_RAW_FILE);
      
$contents[] = array('align' => 'center''text' => '<br>' tep_image_submit('button_restore.gif'IMAGE_RESTORE) . '&nbsp;<a href="' tep_href_link(FILENAME_BACKUP) . '">' tep_image_button('button_cancel.gif'IMAGE_CANCEL) . '</a>');
      break;
    case 
'delete':
      
$heading[] = array('text' => '<b>' $buInfo->date '</b>');

      
$contents = array('form' => tep_draw_form('delete'FILENAME_BACKUP'file=' $buInfo->file '&action=deleteconfirm'));
      
$contents[] = array('text' => TEXT_DELETE_INTRO);
      
$contents[] = array('text' => '<br><b>' $buInfo->file '</b>');
      
$contents[] = array('align' => 'center''text' => '<br>' tep_image_submit('button_delete.gif'IMAGE_DELETE) . ' <a href="' tep_href_link(FILENAME_BACKUP'file=' $buInfo->file) . '">' tep_image_button('button_cancel.gif'IMAGE_CANCEL) . '</a>');
      break;
    default:
      if (isset(
$buInfo) && is_object($buInfo)) {
        
$heading[] = array('text' => '<b>' $buInfo->date '</b>');

        
$contents[] = array('align' => 'center''text' => '<a href="' tep_href_link(FILENAME_BACKUP'file=' $buInfo->file '&action=restore') . '">' tep_image_button('button_restore.gif'IMAGE_RESTORE) . '</a> <a href="' tep_href_link(FILENAME_BACKUP'file=' $buInfo->file '&action=delete') . '">' tep_image_button('button_delete.gif'IMAGE_DELETE) . '</a>');
        
$contents[] = array('text' => '<br>' TEXT_INFO_DATE ' ' $buInfo->date);
        
$contents[] = array('text' => TEXT_INFO_SIZE ' ' $buInfo->size);
        
$contents[] = array('text' => '<br>' TEXT_INFO_COMPRESSION ' ' $buInfo->compression);
      }
      break;
  }

  if ( (
tep_not_null($heading)) && (tep_not_null($contents)) ) {
    echo 
'            <td width="25%" valign="top">' "\n";

    
$box = new box;
    echo 
$box->infoBox($heading$contents);

    echo 
'            </td>' "\n";
  }
?>
          </tr>
        </table></td>
      </tr>
    </table></td>
<!-- body_text_eof //-->
  </tr>
</table>
<!-- body_eof //-->

<!-- footer //-->
<?php require(DIR_WS_INCLUDES 'footer.php'); ?>
<!-- footer_eof //-->
<br>
</body>
</html>
<?php require(DIR_WS_INCLUDES 'application_bottom.php'); ?>