Seditio Source
Root |
./othercms/dle15_0/upload/engine/inc/upgrade.php
<?php
/*
=====================================================
 DataLife Engine - by SoftNews Media Group
-----------------------------------------------------
 http://dle-news.ru/
-----------------------------------------------------
 Copyright (c) 2004-2021 SoftNews Media Group
=====================================================
 This code is protected by copyright
=====================================================
 File: upgrade.php
-----------------------------------------------------
 Use: DLE upgrade
=====================================================
*/

if( !defined( 'DATALIFEENGINE' ) OR !defined( 'LOGGED_IN' ) ) {
   
header( "HTTP/1.1 403 Forbidden" );
   
header ( 'Location: ../../' );
    die(
"Hacking attempt!" );
}

if(
$member_id['user_group'] != 1){ msg("error", $lang['addnews_denied'], $lang['db_denied']); }

include_once (
DLEPlugins::Check(ENGINE_DIR . '/classes/zipextract.class.php'));

function
convert_file( $file ) {
   
   
$string = @file_get_contents($file);
   
    if(!
$string) return false;

    if(
function_exists( 'mb_convert_encoding' ) ) {
       
$string = mb_convert_encoding( $string, "utf-8", "windows-1251" );
    } elseif(
function_exists( 'iconv' ) ) {
       
$string = iconv("windows-1251", "utf-8", $string);
    }

    if(
$string ) {
       
file_put_contents ($file, $string, LOCK_EX);
    }

    return
true;
}

function
need_convert_file( $file ) {
   
   
$string = @file_get_contents($file);
   
    if(!
$string) return false;

    if(
function_exists( 'mb_convert_encoding' ) ) {

       
$sample = mb_convert_encoding( $string, "utf-8", "utf-8" );

    } elseif(
function_exists( 'iconv' ) ) {
   
       
$sample = iconv("utf-8", "utf-8", $string);
   
    }

    if (
md5($sample) == md5($string)) return false;

    return
true;
}

function
table_convert( $table ) {
    global
$db;
   
   
$table = $db->safesql( $table );
   
   
$db->query( "ALTER TABLE `{$table}` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci" );

}

function
need_table_convert( $table ) {
    global
$db;
   
   
$table = $db->safesql( $table );
   
   
$sql = $db->query( "SHOW FULL COLUMNS FROM `$table`" );
   
    while (
$row = $db->get_row($sql) ) {

        if (
$row['Collation'] ) {
           
            list(
$charset ) = explode( '_', $row['Collation'] );
           
$charset = strtolower( $charset );

            if (
$charset !== 'utf8mb4' ) {
                return
true;
            }
        }
       
    }
   
   
$row = $db->super_query( "SHOW TABLE STATUS LIKE '{$table}'" );
    list(
$table_charset ) = explode( '_', $row['Collation'] );
   
$table_charset = strtolower( $table_charset );
   
    if (
$table_charset != 'utf8mb4') {
        return
true;
    }
   
    return
false;
   
}

function
files_check_chmod( $dir,  $bad_files = array() ) {
   
    if (
$dh = @opendir( $dir ) ) {
       
        while (
false !== ( $file = readdir($dh) ) ) {
           
            if (
$file == '.' or $file == '..' or $file == '.svn' or $file == '.DS_store' ) {
                    continue;
            }
       
            if (
is_dir( $dir . "/" . $file ) ) {

               
$bad_files = files_check_chmod( $dir . "/" . $file, $bad_files );
               
            } else {
               
                if (
preg_match( "#.*\.(php|txt|tpl)#i", $file ) ) {
                   
$folder = str_replace(ROOT_DIR, "",$dir);
                   
                    if(!
is_writable($dir . "/" . $file)) {
                       
$bad_files[] = $folder . "/" . $file;
                    }
                }
            }
        }
    }
   
    return
$bad_files;
}

function
get_files( $dir,  $files = array() ) {
   
    if (
$dh = @opendir( $dir ) ) {
       
        while (
false !== ( $file = readdir($dh) ) ) {
           
            if (
$file == '.' or $file == '..' or $file == '.svn' or $file == '.DS_store' ) {
                    continue;
            }
       
            if (
is_dir( $dir . "/" . $file ) ) {

               
$files = get_files( $dir . "/" . $file, $files );
               
            } else {
               
                if (
preg_match( "#.*\.(php|txt|tpl)#i", $file ) ) {
                   
$folder = str_replace(ROOT_DIR, "",$dir);
                   
$files[] = $folder . "/" . $file;
                }
            }
        }
    }
   
    return
$files;
}

if(
$_REQUEST['action'] == "upgrade_files" ) {
   
        if(
$_REQUEST['user_hash'] == "" OR $_REQUEST['user_hash'] != $dle_login_hash ) {
            die(
"Hacking attempt! User not found" );
        }
   
       
$distr_file = ENGINE_DIR . "/cache/system/" . md5('ugrdistr'.SECURE_AUTH_KEY) . ".zip";
       
       
$done = 0;

        try {
           
           
$fs = new dle_zip_extract( $distr_file );
           
$total = $fs->zip->numFiles;
           
           
$offset = intval($_POST['offset']);
           
            if(
$_SESSION['distr']['ftp'] )    {
               
$fs->FtpConnect( $_SESSION['distr']['ftp'] );
            }
           
           
$done = $fs->ExtractZipArchive($offset, 100);
           
            if (
function_exists('opcache_reset')) {
               
opcache_reset();
            }
       
        } catch (
Exception $e ) {
   
           
$response['error'] = $e->getMessage();
            echo
json_encode($response);
            die();
           
        }
       
        if( !isset(
$_SESSION['files_errors']) ) $_SESSION['files_errors'] = array();
   
        if(
$done )    {
           
$offset = $offset + $done;
        } else {
           
$offset = $total;
        }
       
        if(
$offset >= $total){
           
$fs->FixHtaccess();
            @
unlink(ENGINE_DIR.'/data/snap.db');
           
clear_all_caches();
        }
       
        if(
$_SESSION['distr']['ftp'] )    {
           
$fs->DisconnectFTP();
        }
       
        if(
count($fs->errors_list) ) $_SESSION['files_errors'] = array_merge($_SESSION['files_errors'], $fs->errors_list);
       
        echo
"{\"status\": \"ok\", \"offset\": \"{$offset}\"}";
        die();


} elseif(
$_REQUEST['action'] == "checkftp" ) {
   
    if(
$_REQUEST['user_hash'] == "" OR $_REQUEST['user_hash'] != $dle_login_hash ) {
        die(
"Hacking attempt! User not found" );
    }
   
    try {
       
       
$fs = new dle_zip_extract();
       
$fs->FtpConnect( $_POST['ftp'] );
       
    } catch (
Exception $e ) {
       
       
$response['error'] = $e->getMessage();
        echo
json_encode($response);
        die();
    }

   
$_SESSION['distr']['ftp'] = $_POST['ftp'];
   
    echo
"{\"status\": \"ok\"}";
    die();
   
} elseif(
$_REQUEST['action'] == "download" ) {
   
    if ( !isset(
$_SESSION['distr'] ) )    {
       
header( "Location: ?mod=upgrade" );
        die();
    }
   
   
$no_access = files_check_chmod(ROOT_DIR."/engine" );


    if(
$_REQUEST['subaction'] == "manual" OR !class_exists('ZipArchive') ) {
       
       
echoheader( "<i class=\"fa fa-database position-left\"></i><span class=\"text-semibold\">{$lang['upgr_dbtitle_2']}</span>", $lang['upgr_dbtitle_3']);
       
       
$lang['upgr_ftp_10'] = str_replace("{link}", "<a href=\"{$_SESSION['distr']['link']}\" target=\"_blank\">{$lang['upgr_ftp_11']} {$_SESSION['distr']['version']}</a>", $lang['upgr_ftp_10']);
       
        echo <<<HTML
   <div class="panel panel-default">
      <div class="panel-heading">
       
{$lang['upgr_dbtitle_2']}
      </div>
        <div class="panel-body">
           
{$lang['upgr_ftp_9']}
        </div>
        <div class="panel-body">
            <ol>
{$lang['upgr_ftp_10']}</ol>
        </div>
      <div class="panel-footer">
         <a href="?mod=upgrade&action=dbupgrade&to=
{$_SESSION['distr']['version']}" class="btn bg-teal btn-sm btn-raised"><i class="fa fa-forward position-left"></i>{$lang['upgr_next']}</a>
       </div>
    </div>
HTML;

        if( !
class_exists('ZipArchive') ) {
            echo
"<div class=\"alert alert-warning alert-styled-left alert-arrow-left alert-component\">{$lang['upgr_f_error_19']}</div>";
        }
       
       
echofooter();
       
    } elseif(
count($no_access) AND !isset( $_SESSION['distr']['ftp'] ) ) {
       
       
echoheader( "<i class=\"fa fa-database position-left\"></i><span class=\"text-semibold\">{$lang['upgr_dbtitle_2']}</span>", $lang['upgr_dbtitle_3']);

       
$root = ROOT_DIR;

        echo <<<HTML
   <form class="form-horizontal" id="ftpserver">
    <div class="panel panel-default">
      <div class="panel-heading">
       
{$lang['upgr_dbtitle_2']}
      </div>
        <div class="panel-body">
           
{$lang['upgr_ftp_1']}
        </div>
        <div class="panel-body">
            <div class="form-group">
                <label class="control-label col-sm-2">
{$lang['upgr_ftp_2']}</label>
                <div class="col-sm-10">
                    <label class="radio-inline position-left"><input class="icheck" type="radio" name="ftp[type]" value="ftp" checked>FTP</label>
                    <label class="radio-inline position-left"><input class="icheck" type="radio" name="ftp[type]" value="sslftp">SSL FTP</label>
                    <label class="radio-inline position-left"><input class="icheck" type="radio" name="ftp[type]" value="ssh2">SFTP SSH2</label>
                </div>
            </div>
            <div class="form-group">
                <label class="control-label col-sm-2">
{$lang['upgr_ftp_3']}</label>
                <div class="col-sm-10">
                    <input type="text" class="form-control width-350 position-left" name="ftp[server]">
                    <span class="position-left">
{$lang['upgr_ftp_4']}</span>
                    <input type="text" class="form-control position-left" name="ftp[port]" style="width:45px" value="21">
                </div>
            </div>
            <div class="form-group">
                <label class="control-label col-sm-2">
{$lang['upgr_ftp_5']}</label>
                <div class="col-sm-10">
                    <input type="text" class="form-control width-350 position-left" name="ftp[username]">
                </div>
            </div>
            <div class="form-group">
                <label class="control-label col-sm-2">
{$lang['upgr_ftp_6']}</label>
                <div class="col-sm-10">
                    <input type="text" class="form-control width-350 position-left" name="ftp[password]">
                </div>
            </div>
            <div class="form-group">
                <label class="control-label col-sm-2">
{$lang['upgr_ftp_7']}</label>
                <div class="col-sm-10">
                    <input type="text" class="form-control width-450 position-left" name="ftp[path]" value="
{$root}">
                </div>
            </div>
        </div>
      <div class="panel-footer">
         <button id="button" onclick="check_ftp(); return false;" type="button" class="btn bg-teal btn-sm btn-raised position-left"><i class="fa fa-forward position-left"></i>
{$lang['upgr_next']}</button>
         <a href="?mod=upgrade&action=download&subaction=manual" class="btn bg-brown-600 btn-sm btn-raised"><i class="fa fa-download position-left"></i>
{$lang['upgr_ftp_8']}</a>
       </div>
    <script>
    <!--
    function check_ftp() {
   
        var formData = new FormData($('#ftpserver')[0]);
       
        ShowLoading('');
        $('#button').attr("disabled", "disabled");
       
        $.ajax({
            url: "?mod=upgrade&action=checkftp&user_hash=
{$dle_login_hash}",
            data: formData,
            processData: false,
            contentType: false,
            type: 'POST',
            dataType: 'json',
            success: function(data) {
           
                HideLoading('');
               
                if (data.status == "ok") {
                    setTimeout("window.location = '?mod=upgrade&action=download'", 300 );
                } else {
                    $('#button').attr("disabled", false);
                    DLEalert(data.error, '
{$lang['all_info']}');
                       
                }
            }
        });
   
        return false;
    }
    //-->
    </script>
    </div>
    </form>
HTML;

       
echofooter();
       
    } else {
       
       
$distr_file = ENGINE_DIR . "/cache/system/" . md5('ugrdistr'.SECURE_AUTH_KEY) . ".zip";
        @
unlink( $distr_file );

       
$arrContextOptions=array(
           
"ssl"=>array(
               
"verify_peer"=>false,
               
"verify_peer_name"=>false,
            ),
        );

        if ( !@
copy($_SESSION['distr']['link'], $distr_file, stream_context_create($arrContextOptions) ) ) {
           
msg( "error", $lang['addnews_error'], $lang['upgr_f_error_8'], array('javascript:location.reload(true);' => $lang['upgr_btn_1'], '?mod=upgrade&action=download&subaction=manual' => $lang['upgr_ftp_8'] ) );
        }
       
        if(
md5_file($distr_file) != $_SESSION['distr']['crc']) {
           
msg( "error", $lang['addnews_error'], $lang['upgr_f_error_9'], array('javascript:location.reload(true);' => $lang['upgr_btn_1'], '?mod=upgrade&action=download&subaction=manual' => $lang['upgr_ftp_8'] ) );
        }
       
       
$fs = new dle_zip_extract( $distr_file );
       
$total = $fs->zip->numFiles;

       
echoheader( "<i class=\"fa fa-database position-left\"></i><span class=\"text-semibold\">{$lang['upgr_dbtitle_2']}</span>", $lang['upgr_dbtitle_3']);
       
        echo <<<HTML
           <div class="panel panel-default">
              <div class="panel-heading">
               
{$lang['upgr_ftp_12']}
              </div>
                <div class="panel-body">
                    <div class="progress"><div id="progressbar" class="progress-bar progress-blue" style="width:0%;"><span></span></div></div>
                    <div class="text-size-small">
{$lang['upgr_ftp_14']} <span id="files_ok"></span> <span id="status"></span></div>
                </div>
                <div class="panel-body">
                    <div id="ajaxerror"></div>
                    <div class="text-muted text-size-small">
{$lang['upgr_ftp_13']}</div>
                </div>    
                <div class="panel-footer">
                    <button id="button" type="button" class="btn bg-teal btn-sm btn-raised" disabled><i class="fa fa-forward position-left"></i>
{$lang['upgr_next']}</button>
                </div>
            </div>
<script>

    var total =
{$total};
    var offset = 0;

    function upgrade_files(offset)  {

        $('#ajaxerror').html('');

        $.post("?user_hash=
{$dle_login_hash}", { mod: 'upgrade', action: 'upgrade_files', offset: offset },
            function(data){
                if (data) {
                    if (data.status == "ok") {
                   
                        offset = data.offset;

                        $('#files_ok').text(offset);
                       
                        var proc = Math.round( (100 * data.offset) / total );
   
                        if ( proc > 100 ) proc = 100;
   
                        $('#progressbar').css( "width", proc + '%' );

                         if (data.offset >= total)
                         {
                            setTimeout("window.location = '?mod=upgrade&action=dbupgrade&to=
{$_SESSION['distr']['version']}'", 100 );
                           
                         } else { setTimeout("upgrade_files(" + data.offset + ")", 300 ); }
   
   
                    } else if( data.error ) { $('#status').text(data.error); }
   
                }
            }, "json").fail(function(jqXHR, textStatus, errorThrown ) {

                var error_status = '';
           
                if (jqXHR.status < 200 || jqXHR.status >= 300) {
                  error_status = 'HTTP Error: ' + jqXHR.status;
                } else {
                    error_status = 'Invalid JSON: ' + jqXHR.responseText;
                }
       
                $('#status').html('
{$lang['upgr_error']}');
                $('#ajaxerror').html('<div class="alert alert-danger alert-styled-left alert-bordered">' + error_status + '</div>');
                $('#button').attr("disabled", false);
           
        });
   
        return false;
   
    }

    $(function() {
       
        $('#button').click(function() {
            $('#button').attr("disabled", "disabled");
            upgrade_files(offset);
            return false;
        });
       
        setTimeout("upgrade_files(offset)", 300 );
    });
</script>
HTML;

       
echofooter();
    }
   

   
} elseif(
$_REQUEST['action'] == "checklicense" ) {

    if(
$_REQUEST['user_hash'] == "" OR $_REQUEST['user_hash'] != $dle_login_hash ) {
        die(
"Hacking attempt! User not found" );
    }
   
    if(
strlen(trim((string)$_REQUEST['dle_key'])) != 29 ){
        echo
"{\"error\": \"{$lang['upgr_f_error_5']}\"}";
        die();
    }
   
   
$params = array(
       
'action' => 'info',
       
'domain' => $_SERVER['HTTP_HOST'],
       
'key' => (string)$_REQUEST['dle_key'],
       
'version' => VERSIONID,
       
'build' => BUILDID,
       
'site_key' => get_domen_hash()
    );

   
$data = http_get_contents("https://dle-news.ru/extras/upgrade/index.php?".http_build_query($params, '', '&') );

    if(
$data !== false ) {

       
$data = json_decode ($data, true);

        if(
is_array($data) ) {

            if( isset(
$data['error']) AND $data['error']) {
               
                if(
$data['error'] == "-3" ) $data['error'] = $lang['upgr_f_error_2'];
                if(
$data['error'] == "-2" ) $data['error'] = $lang['upgr_f_error_3'];
                if(
$data['error'] == "-1" ) $data['error'] = $lang['upgr_f_error_4'];
               
                echo
"{\"error\": \"{$data['error']}\"}";
                die();
            }
           
            if(
$data['distr']['version'] ) {
                   
                if(
version_compare(VERSIONID, $data['distr']['version'], '>') ) {
                    echo
"{\"error\": \"{$lang['upgr_f_error_6']}\"}";
                    die();
                }
               
                if(
version_compare(VERSIONID, $data['distr']['version'], '==') AND version_compare(BUILDID, $data['distr']['build'], '>=') AND !defined('DEMOVERSION') ) {
                    echo
"{\"error\": \"{$lang['upgr_f_error_6']}\"}";
                    die();
                }

               
$_SESSION['distr'] = $data['distr'];
                echo
"{\"status\": \"ok\"}";
                die();
               
            }
           
        }
       
    }

    echo
"{\"error\": \"{$lang['upgr_f_error_1']}\"}";
    die();
   
} elseif(
$_REQUEST['action'] == "dbupgradecheck" ) {

    if ( !
$_SESSION['db_upgrade'] )    {
       
header( "Location: ?mod=main" );
        die();
    }
   
    unset(
$_SESSION['db_upgrade']);
   
    if(
is_array( $_SESSION['query_errors'] ) ) $errors_query = count( $_SESSION['query_errors'] ); else $errors_query = 0;    
    if(
is_array( $_SESSION['files_errors'] ) ) $errors_files = count( $_SESSION['files_errors'] ); else $errors_files = 0;
   
   
$lang['upgr_db_success'] = str_replace("{version}", $config['version_id'], $lang['upgr_db_success']);

    if(
COLLATE != "utf8" AND COLLATE != "utf8mb4") {
       
        if( !
$errors_query AND !$errors_files ) {
           
           
$_SESSION['db_convert'] = 1;
            unset(
$_SESSION['query_errors']);
            unset(
$_SESSION['files_errors']);
           
header( "Location: ?mod=upgrade&action=dodbconvert&user_hash={$dle_login_hash}" );
            die();
        }
       
       
$next_link = '?mod=upgrade&action=dbconvert';
       
    } else
$next_link = '?mod=main';
   
    if( !
$errors_query AND !$errors_files ) {
       
        unset(
$_SESSION['query_errors']);
        unset(
$_SESSION['files_errors']);
       
       
msg( "success", $lang['all_info'], $lang['upgr_db_success'], array( $next_link => $lang['upgr_next']) );
    }
   
   
echoheader( "<i class=\"fa fa-database position-left\"></i><span class=\"text-semibold\">{$lang['upgr_dbtitle_2']}</span>", $lang['upgr_dbtitle_3']);
       
   
$errors = "<div class=\"panel-body\">".$lang['upgr_db_success']."</div>";
   
$errors .= "<div class=\"panel-body\">".$lang['upgr_db_errors']."</div>";
   
$sql_errors = "";
   
$file_errors = "";

    if(
$errors_files) {
        foreach (
$_SESSION['files_errors'] as $value) {
           
$file_errors .= "<div class=\"quote\"><b>{$lang['upgr_file']}</b> {$value['file']}<br /><b>{$lang['upgr_db_errt']}</b> {$value['error']}</div>";
        }
       
       
$errors .= "<div class=\"panel-body\"><div class=\"text-size-small pre-scrollable\">".$file_errors."</div></div>";
    }
   
    if(
$errors_query) {
        foreach (
$_SESSION['query_errors'] as $value) {
           
$sql_errors .= "<div class=\"quote\"><b>{$lang['upgr_db_query']}</b> {$value['query']}<br /><b>{$lang['upgr_db_errt']}</b> {$value['error']}</div>";
        }
       
       
$errors .= "<div class=\"panel-body\"><div class=\"text-size-small pre-scrollable\">".$sql_errors."</div></div>";
    }
   
   
        echo <<<HTML
   <div class="panel panel-default">
      <div class="panel-heading">
       
{$lang['upgr_dbtitle_2']}
      </div>
     
{$errors}
      <div class="panel-footer">
         <a href="
{$next_link}" class="btn bg-teal btn-sm btn-raised position-left"><i class="fa fa-forward position-left"></i>{$lang['upgr_next']}</a>
       </div>
    </div>
HTML;

    unset(
$_SESSION['query_errors']);
    unset(
$_SESSION['files_errors']);
       
   
echofooter();
    die();
   
} elseif(
$_REQUEST['action'] == "dodbupgrade" ) {
   
    if ( !
$_SESSION['db_upgrade'] )    {
       
header( "Location: ?mod=upgrade&action=dbupgrade" );
        die();
    }
   
    if(
$config['version_id'] == VERSIONID ) {
        echo
"{\"status\": \"ok\", \"version\":\"{$config['version_id']}\"}";
        die();
    }
       
   
$row = $db->super_query("SHOW TABLE STATUS WHERE Name = '" . PREFIX . "_post'");
   
$storage_engine = $row['Engine'];
   
    if (
strtolower($storage_engine) == "innodb" ) {
       
$storage_engine = "InnoDB";
    } else
$storage_engine = "MyISAM";

    if( isset(
$_SESSION['distr']) ) {
       
$config['key'] = md5( get_domen_hash() . DINITVERSION );
        unset(
$_SESSION['distr']);
    }

    if(
file_exists( ENGINE_DIR . "/inc/upgrade/" . totranslit($config['version_id']) . ".php" ) ) {
        include (
ENGINE_DIR . "/inc/upgrade/" . totranslit($config['version_id']) . ".php" );
    }
   
    if( !isset(
$_SESSION['query_errors']) ) $_SESSION['query_errors'] = array();
   
    if(
count($db->query_errors_list) ) $_SESSION['query_errors'] = array_merge($_SESSION['query_errors'], $db->query_errors_list);

   
clear_all_caches();
    @
unlink(ENGINE_DIR.'/data/snap.db');
   
    echo
"{\"status\": \"ok\", \"version\":\"{$config['version_id']}\"}";
    die();
   
} elseif(
$_REQUEST['action'] == "dbsettingsconvert" ) {
   
    if ( !
$_SESSION['db_convert'] )    {
       
header( "Location: ?mod=upgrade&action=dbconvert" );
        die();
    }

    if(
$_REQUEST['user_hash'] == "" OR $_REQUEST['user_hash'] != $dle_login_hash ) {
        die(
"Hacking attempt! User not found" );
    }
   
   
$config_dbhost = DBHOST;
   
$config_dbname = DBNAME;
   
$config_dbuser = DBUSER;
   
$config_dbpasswd = DBPASS;
   
$config_dbprefix = PREFIX;
   
$config_userprefix = USERPREFIX;
   
$auth_key = SECURE_AUTH_KEY;
   
   
$config_dbcollate = "utf8mb4";
   
$config_dbpasswd = str_replace ('"', '\"', str_replace ("$", "\\$", $config_dbpasswd) );

   
$dbconfig = <<<HTML
<?PHP
   
define ("DBHOST", "
{$config_dbhost}");
   
define ("DBNAME", "
{$config_dbname}");
   
define ("DBUSER", "
{$config_dbuser}");
   
define ("DBPASS", "
{$config_dbpasswd}");  
   
define ("PREFIX", "
{$config_dbprefix}");
   
define ("USERPREFIX", "
{$config_userprefix}");
   
define ("COLLATE", "
{$config_dbcollate}");
   
define('SECURE_AUTH_KEY', '
{$auth_key}');
   
\$db = new db;
   
?>
HTML;
   
   
$handler = fopen(ENGINE_DIR.'/data/dbconfig.php', "w");
   
fwrite($handler, $dbconfig);
   
fclose($handler);
   
    unset(
$_SESSION['db_convert']);
   
clear_all_caches();
   
    echo
"{\"status\": \"ok\"}";
    die();    

} elseif(
$_REQUEST['action'] == "settingsconvert" ) {

    if ( !
$_SESSION['db_convert'] )    {
       
header( "Location: ?mod=upgrade&action=dbconvert" );
        die();
    }

    if(
$_REQUEST['user_hash'] == "" OR $_REQUEST['user_hash'] != $dle_login_hash ) {
        die(
"Hacking attempt! User not found" );
    }
   
   
$config['charset'] = "utf-8";
   
$handler = fopen(ENGINE_DIR.'/data/config.php', "w");
   
fwrite($handler, "<?PHP \n\n//System Configurations\n\n\$config = array (\n\n");
    foreach(
$config as $name => $value)
    {
       
fwrite($handler, "'{$name}' => \"{$value}\",\n\n");
    }
   
fwrite($handler, ");\n\n?>");
   
fclose($handler);

   
$config_dbhost = DBHOST;
   
$config_dbname = DBNAME;
   
$config_dbuser = DBUSER;
   
$config_dbpasswd = DBPASS;
   
$config_dbprefix = PREFIX;
   
$config_userprefix = USERPREFIX;
   
$auth_key = SECURE_AUTH_KEY;
   
   
$config_dbcollate = "utf8mb4";
   
$config_dbpasswd = str_replace ('"', '\"', str_replace ("$", "\\$", $config_dbpasswd) );

   
$dbconfig = <<<HTML
<?PHP
   
define ("DBHOST", "
{$config_dbhost}");
   
define ("DBNAME", "
{$config_dbname}");
   
define ("DBUSER", "
{$config_dbuser}");
   
define ("DBPASS", "
{$config_dbpasswd}");  
   
define ("PREFIX", "
{$config_dbprefix}");
   
define ("USERPREFIX", "
{$config_userprefix}");
   
define ("COLLATE", "
{$config_dbcollate}");
   
define('SECURE_AUTH_KEY', '
{$auth_key}');
   
\$db = new db;
   
?>
HTML;
   
   
$handler = fopen(ENGINE_DIR.'/data/dbconfig.php', "w");
   
fwrite($handler, $dbconfig);
   
fclose($handler);

   
$settings_files = get_files(ROOT_DIR."/engine/data");
   
    foreach(
$settings_files as $file) {
        if(
need_convert_file(ROOT_DIR.$file) ) {
           
convert_file(ROOT_DIR.$file);
        }
    }

    unset(
$_SESSION['db_convert']);
   
   
clear_all_caches();
   
    echo
"{\"status\": \"ok\"}";
    die();

} elseif(
$_REQUEST['action'] == "templateconvert" ) {

    if ( !
$_SESSION['db_convert'] )    {
       
header( "Location: ?mod=upgrade&action=dbconvert" );
        die();
    }

    if(
$_REQUEST['user_hash'] == "" OR $_REQUEST['user_hash'] != $dle_login_hash ) {
        die(
"Hacking attempt! User not found" );
    }

   
$template_files = get_files(ROOT_DIR."/templates");
   
    foreach(
$template_files as $file) {
        if(
need_convert_file(ROOT_DIR.$file) ) {
           
convert_file(ROOT_DIR.$file);
        }
    }
   
    echo
"{\"status\": \"ok\"}";
    die();

} elseif(
$_REQUEST['action'] == "tableconvert" ) {
   
    if(
$_REQUEST['user_hash'] == "" OR $_REQUEST['user_hash'] != $dle_login_hash ) {
        die(
"Hacking attempt! User not found" );
    }
   
    if ( !
$_SESSION['db_convert'] )    {
       
header( "Location: ?mod=upgrade&action=dbconvert" );
        die();
    }

   
$table = trim(totranslit($_POST['table'], false, false));
   
    if(!
$table) die('error');
   
    if(
need_table_convert( $table ) ) {
       
table_convert( $table );
    }
   
    echo
"{\"status\": \"ok\"}";
    die();
   
} elseif(
$_REQUEST['action'] == "dodbconvert" ) {

    if ( !
$_SESSION['db_convert'] )    {
       
header( "Location: ?mod=upgrade&action=dbconvert" );
        die();
    }

    if(
$_REQUEST['user_hash'] == "" OR $_REQUEST['user_hash'] != $dle_login_hash ) {
       
msg( "error", $lang['addnews_error'], $lang['sess_error'] );
    }
   

   
$tables = array();
   
$sql = $db->query( "SHOW TABLES" );
   
    while (
$row = $db->get_array($sql) ) {
        if(
substr($row[0], 0, strlen( PREFIX ) ) == PREFIX ) {
            if(
need_table_convert($row[0]) ) $tables[] = $row[0];
        }
    }
   
    if(!
count($tables) ) msg( "warning", $lang['all_info'], $lang['upgr_all_conv'] );
   
   
$total = $totaltables = count($tables);
   
$tables = "['".implode("','", $tables)."']";

    if(
$_REQUEST['subaction'] != "onlymb4" ) {
       
       
$total = $total+2;
       
       
$convert_files = <<<HTML
       function convert_templates()  {
       
            step ++;
           
            $('#wconvert').html('
{$lang['upgr_templ_conv']}');
            $('#ajaxerror').html('');
           
            $.post("?user_hash=
{$dle_login_hash}", { mod: 'upgrade', action: 'templateconvert' },
                function(data){
       
                    if (data) {
       
                        if (data.status == "ok") {
       
                            var proc = Math.round( (100 * step) / total );
       
                            if ( proc > 100 ) proc = 100;
       
                            $('#progressbar').css( "width", proc + '%' );
                           
                            setTimeout("convert_settings()", 300 );
       
                        }
       
                    }
                }, "json").fail(function(jqXHR, textStatus, errorThrown ) {

                var error_status = '';
           
                if (jqXHR.status < 200 || jqXHR.status >= 300) {
                  error_status = 'HTTP Error: ' + jqXHR.status;
                } else {
                    error_status = 'Invalid JSON: ' + jqXHR.responseText;
                }
       
                $('#status').html('
{$lang['upgr_error']}');
                $('#ajaxerror').html('<div class="alert alert-danger alert-styled-left alert-bordered">' + error_status + '</div>');
                $('#button').attr("disabled", false);
           
            });
       
            return false;
       
        }
       
        function convert_settings()  {
       
            step ++;
           
            $('#wconvert').html('
{$lang['upgr_sett_conv']}');
            $('#ajaxerror').html('');
           
            $.post("?user_hash=
{$dle_login_hash}", { mod: 'upgrade', action: 'settingsconvert' },
                function(data){
       
                    if (data) {
       
                        if (data.status == "ok") {
                            var proc = Math.round( (100 * step) / total );
       
                            if ( proc > 100 ) proc = 100;
       
                            $('#progressbar').css( "width", proc + '%' );
                           
                            setTimeout("window.location = '?mod=main'", 300 );
       
                        }
       
                    }
                }, "json").fail(function(jqXHR, textStatus, errorThrown ) {

                    var error_status = '';
               
                    if (jqXHR.status < 200 || jqXHR.status >= 300) {
                      error_status = 'HTTP Error: ' + jqXHR.status;
                    } else {
                        error_status = 'Invalid JSON: ' + jqXHR.responseText;
                    }
           
                    $('#status').html('
{$lang['upgr_error']}');
                    $('#ajaxerror').html('<div class="alert alert-danger alert-styled-left alert-bordered">' + error_status + '</div>');
                    $('#button').attr("disabled", false);
           
            });
       
            return false;
       
        }
HTML;

    } else {
$convert_files = ""; $total = $total+1; }
   
   
echoheader( "<i class=\"fa fa-database position-left\"></i><span class=\"text-semibold\">{$lang['upgr_dbtitle']}</span>", $lang['upgr_dbtitle_1']);

    echo <<<HTML
<script>

    var total =
$total;
    var totaltables =
$totaltables;
    var tables =
{$tables};
    var step = 0;
    var table_info = '
{$lang['upgr_table_conv']}';

    function convert_tables()  {
   
        var table = tables[step];
        step ++;
       
        $('#wconvert').html(table_info + ' <b>' + table + '</b>');
        $('#ajaxerror').html('');
       
        $.post("?user_hash=
{$dle_login_hash}", { mod: 'upgrade', action: 'tableconvert', table: table },
            function(data){
   
                if (data) {
   
                    if (data.status == "ok") {
   
                        var proc = Math.round( (100 * step) / total );
   
                        if ( proc > 100 ) proc = 100;
   
                        $('#progressbar').css( "width", proc + '%' );

                         if (step >= totaltables)
                         {
                            if (typeof convert_templates == 'function') {
                           
                                setTimeout("convert_templates()", 300 );
                               
                            } else {
                           
                                setTimeout("convert_dbsettings()", 300 );
                               
                            }
                           
                         } else { setTimeout("convert_tables()", 300 ); }
   
   
                    }
   
                }
            }, "json").fail(function(jqXHR, textStatus, errorThrown ) {

                var error_status = '';
           
                if (jqXHR.status < 200 || jqXHR.status >= 300) {
                  error_status = 'HTTP Error: ' + jqXHR.status;
                } else {
                    error_status = 'Invalid JSON: ' + jqXHR.responseText;
                }
       
                $('#status').html('
{$lang['upgr_error']}');
                $('#ajaxerror').html('<div class="alert alert-danger alert-styled-left alert-bordered">' + error_status + '</div>');
                $('#button').attr("disabled", false);
           
        });
   
        return false;
   
    }
   
    function convert_dbsettings()  {
       
        step ++;
           
        $('#wconvert').html('
{$lang['upgr_sett_conv']}');
        $('#ajaxerror').html('');
       
        $.post("?user_hash=
{$dle_login_hash}", { mod: 'upgrade', action: 'dbsettingsconvert' },
            function(data){
   
                if (data) {
       
                    if (data.status == "ok") {
                        var proc = Math.round( (100 * step) / total );
       
                        if ( proc > 100 ) proc = 100;
       
                        $('#progressbar').css( "width", proc + '%' );
                       
                        setTimeout("window.location = '?mod=main'", 300 );
       
                    }
       
                }
               
            }, "json").fail(function(jqXHR, textStatus, errorThrown ) {

                var error_status = '';
           
                if (jqXHR.status < 200 || jqXHR.status >= 300) {
                  error_status = 'HTTP Error: ' + jqXHR.status;
                } else {
                    error_status = 'Invalid JSON: ' + jqXHR.responseText;
                }
       
                $('#status').html('
{$lang['upgr_error']}');
                $('#ajaxerror').html('<div class="alert alert-danger alert-styled-left alert-bordered">' + error_status + '</div>');
                $('#button').attr("disabled", false);
           
        });
       
        return false;
       
    }
   
{$convert_files}

    $(function() {
       
        $('#button').click(function() {
            $('#button').attr("disabled", "disabled");
            $('#status').html('');
            convert_tables();
            return false;
        });
       
        setTimeout("convert_tables()", 300 );
    });

</script>
<div class="panel panel-default">
  <div class="panel-heading">
   
{$lang['upgr_dbtitle_1']}
  </div>
    <div class="panel-body">
        <div class="progress"><div id="progressbar" class="progress-bar progress-blue" style="width:0%;"><span></span></div></div>
        <div class="text-size-small"><span id="wconvert"></span> <span id="status"></span></div>
    </div>

    <div class="panel-body">
        <div id="ajaxerror"></div>
        <div class="text-muted text-size-small">
{$lang['upgr_noclose']}</div>
    </div>    
    <div class="panel-footer">
        <button id="button" type="button" class="btn bg-teal btn-sm btn-raised" disabled><i class="fa fa-forward position-left"></i>
{$lang['upgr_next']}</button>
    </div>
</div>
HTML;

   
echofooter();

} elseif(
$_REQUEST['action'] == "dbconvert" ) {

    if(
COLLATE == "utf8mb4" ) msg( "warning", $lang['all_info'], $lang['upgr_all_conv'] );
   
   
echoheader( "<i class=\"fa fa-database position-left\"></i><span class=\"text-semibold\">{$lang['upgr_dbtitle']}</span>", $lang['upgr_dbtitle_1']);
   
   
$_SESSION['db_convert'] = 1;
   
   
$bad_files = files_check_chmod(ROOT_DIR."/engine/data" );
   
$bad_files = array_merge($bad_files, files_check_chmod(ROOT_DIR."/templates" ) );

   
$errors = "";

    if(
version_compare($db->mysql_version, '5.5.3', '<') ) {
       
$lang['upgr_minsql'] = str_replace("{version}", $db->mysql_version, $lang['upgr_minsql']);
       
$errors = "<div class=\"panel-body\">".$lang['upgr_minsql']."</div>";
    }

    if(
$_REQUEST['subaction'] == "onlymb4" ) {
       
$subaction = "<input type=\"hidden\" name=\"subaction\" value=\"onlymb4\">";
       
$lang['upgr_dbtitle_1'] = str_replace("utf-8", "utf8mb4", $lang['upgr_dbtitle_1']);
       
$lang['upgr_dbinfo'] = str_replace("utf-8", "utf8mb4", $lang['upgr_dbinfo']);
    } else
$subaction = "";
   
    if(
count($bad_files)) {
       
       
$list = <<<HTML
         <div>{$lang['upgr_file_2']}</div>
          <div class="table-responsive pre-scrollable">
            <table class="table table-striped table-xs table-framed"><thead><tr><th>
{$lang['upgr_file']}</th><th style="width:150px;">CHMOD</th></thead><tbody>
HTML;
        foreach(
$bad_files as $file){
           
$list .= "<tr><td>$file</td><td><span class=\"text-danger\">{$lang['upgr_file_1']}</span></td></tr>";
        }
         
       
$list .= <<<HTML
         </tbody></table></div>
HTML;

       
$errors .= "<div class=\"panel-body\">".$list."</div>";
    }
   
    if(
$errors ) {
       
       
$errors .= "<div class=\"panel-body\">".$lang['upgr_c_err']."</div>";
       
$button= "<button onclick=\"location.reload(true); return false;\" class=\"btn bg-danger btn-sm btn-raised position-left\"><i class=\"fa fa-refresh position-left\"></i>{$lang['upgr_btn_1']}</button>";

    } else
$button= "<button type=\"submit\" class=\"btn bg-teal btn-sm btn-raised position-left\"><i class=\"fa fa-exchange position-left\"></i>{$lang['upgr_btn_2']}</button>";
   
    echo <<<HTML
<form method="get" class="form-horizontal">
<input type="hidden" name="mod" value="upgrade">
<input type="hidden" name="action" value="dodbconvert">
<input type="hidden" name="user_hash" value="
{$dle_login_hash}">
{$subaction}
<div class="panel panel-default">
  <div class="panel-heading">
   
{$lang['upgr_dbtitle_1']}
  </div>
    <div class="panel-body">
       
{$lang['upgr_dbinfo']}
    </div>
   
{$errors}
    <div class="panel-footer">
       
{$button}
    </div>
</div>
</form>
HTML;

   
echofooter();
   
} else {
   
   
$errors = "";
   
$bad_files = files_check_chmod(ROOT_DIR."/engine/data" );

    if( !
is_writable( ROOT_DIR."/engine/data" ) ) $bad_files[] = "/engine/data/";
    if( !
is_writable( ROOT_DIR."/engine/cache" ) ) $bad_files[] = "/engine/cache/";
    if( !
is_writable( ROOT_DIR."/engine/cache/system" ) ) $bad_files[] = "/engine/cache/system/";
   
    if(
COLLATE != "utf8" AND COLLATE != "utf8mb4") {
       
$bad_files = array_merge($bad_files, files_check_chmod(ROOT_DIR."/templates" ) );
    }

    if(
version_compare($db->mysql_version, '5.5.3', '<') ) {
       
$lang['upgr_minsql'] = str_replace("{version}", $db->mysql_version, $lang['upgr_minsql']);
       
$errors .= "<div class=\"text-danger\">".$lang['upgr_minsql']."</div>";
    }
   
   
$lang['upgr_info'] = str_replace("{oldversion}", $config['version_id'], $lang['upgr_info']);
   
$lang['upgr_info'] = str_replace("{newversion}", VERSIONID, $lang['upgr_info']);
   
   
$phpv = phpversion();
   
    if (
version_compare($phpv, '5.4', '<') ) {
       
$lang['upgr_err_1'] = str_replace("{version}", $phpv, $lang['upgr_err_1']);
       
$errors .= "<div class=\"text-danger\">".$lang['upgr_err_1']."</div>";
    }

    if(
$errors) $errors = "<div class=\"panel-body\">".$errors."</div>";

    if(
count($bad_files)) {
       
       
$list = <<<HTML
         <div>{$lang['upgr_file_2']}</div>
          <div class="table-responsive pre-scrollable">
            <table class="table table-striped table-xs table-framed"><thead><tr><th>
{$lang['upgr_file']}</th><th style="width:150px;">CHMOD</th></thead><tbody>
HTML;
        foreach(
$bad_files as $file){
           
$list .= "<tr><td>$file</td><td><span class=\"text-danger\">{$lang['upgr_file_1']}</span></td></tr>";
        }
         
       
$list .= <<<HTML
         </tbody></table></div>
HTML;

       
$errors .= "<div class=\"panel-body\">".$list."</div>";
    }

    if(
$errors) {
       
       
echoheader( "<i class=\"fa fa-database position-left\"></i><span class=\"text-semibold\">{$lang['upgr_dbtitle_2']}</span>", $lang['upgr_dbtitle_3']);
       
       
$errors .= "<div class=\"panel-body\">".$lang['upgr_c_err']."</div>";

        echo <<<HTML
   <div class="panel panel-default">
      <div class="panel-heading">
       
{$lang['upgr_dbtitle_2']}
      </div>
     
{$errors}
      <div class="panel-footer">
         <button onclick="location.reload(true); return false;" class="btn bg-danger btn-sm btn-raised position-left"><i class="fa fa-refresh position-left"></i>
{$lang['upgr_btn_1']}</button>
       </div>
    </div>
HTML;

       
echofooter();
   
    } elseif(
$_REQUEST['action'] == "dbupgrade" ) {

       
$_SESSION['db_upgrade'] = 1;
       
        if (
function_exists('opcache_reset')) {
           
opcache_reset();
        }
       
        if(isset(
$_REQUEST['to']) AND $_REQUEST['to'] AND VERSIONID != $_REQUEST['to']) {
           
msg("info", $lang['all_info'], $lang['upgr_f_error_7'], array('javascript:location.reload(true);' => $lang['upgr_btn_1'], 'javascript:history.go(-1)' => $lang['func_msg'] ));
        }
       
        if(!
version_compare( $config['version_id'], VERSIONID , '<')) {
           
            if( isset(
$_REQUEST['to']) AND $_REQUEST['to']) {
               
header( "Location: ?mod=upgrade&action=dbupgradecheck" );
                die();
            } else {
               
msg("info", $lang['all_info'], $lang['upgr_all_upg']);
            }
           
        }

        if( !
file_exists( ENGINE_DIR . "/inc/upgrade/" . totranslit($config['version_id']) . ".php" )) {
           
           
$lang['upgr_no_upg_files'] = str_replace("{version}", $config['version_id'], $lang['upgr_no_upg_files']);
           
msg("error", $lang['addnews_denied'], $lang['upgr_no_upg_files']);
           
        }
       
        if(
$_REQUEST['to'] ) {
           
$autostart = "setTimeout(\"db_upgrade()\", 100 );";
        } else
$autostart = "";
       
       
$versions = array();
       
$files = glob( ENGINE_DIR . "/inc/upgrade/*.php");
       
        foreach (
$files as $file) {
           
$version = basename ( $file, ".php" );
           
            if(
intval($version) AND version_compare( $version, $config['version_id'] , '>=') ) {
               
$versions[] = $version;
            }
           
        }
       
       
$total = count($versions);
       
       
$versions[] = $actualversion = VERSIONID;
       
       
sort($versions, SORT_NUMERIC);
       
       
$versions = "['".implode("','", $versions)."']";

       
echoheader( "<i class=\"fa fa-database position-left\"></i><span class=\"text-semibold\">{$lang['upgr_dbtitle_2']}</span>", $lang['upgr_dbtitle_3']);
   
        echo <<<HTML
<script>

    var actualversion = '
{$actualversion}';
    var total =
{$total};
    var versions =
{$versions};
    var step = 0;
    var versions_info = '
{$lang['upgr_db_ver']}';

    function db_upgrade()  {
   
        var version = versions[step+1];
        step ++;
       
        $('#button').attr("disabled", "disabled");
        $('#wconvert').html(versions_info + ' <b>' + version + '</b>');
        $('#ajaxerror').html('');
       
        $.post("?user_hash=
{$dle_login_hash}", { mod: 'upgrade', action: 'dodbupgrade' },
            function(data){
   
                if (data) {
   
                    if (data.status == "ok") {
   
                        var proc = Math.round( (100 * step) / total );
   
                        if ( proc > 100 ) proc = 100;
   
                        $('#progressbar').css( "width", proc + '%' );

                         if (data.version == actualversion)
                         {

                            setTimeout("window.location = '?mod=upgrade&action=dbupgradecheck'", 1000 );

                         } else { setTimeout("db_upgrade()", 1000 ); }
   
   
                    }
   
                }
            }, "json").fail(function(jqXHR, textStatus, errorThrown ) {

                var error_status = '';
           
                if (jqXHR.status < 200 || jqXHR.status >= 300) {
                  error_status = 'HTTP Error: ' + jqXHR.status;
                } else {
                    error_status = 'Invalid JSON: ' + jqXHR.responseText;
                }
       
                $('#status').html('
{$lang['upgr_error']}');
                $('#ajaxerror').html('<div class="alert alert-danger alert-styled-left alert-bordered">' + error_status + '</div>');
                $('#button').attr("disabled", false);
           
        });
   
        return false;
   
    }
   
    $(function() {
       
        $('#button').click(function() {
            $('#button').attr("disabled", "disabled");
            db_upgrade();
            return false;
        });
       
       
{$autostart}

    });

</script>

    <div class="panel panel-default">
      <div class="panel-heading">
       
{$lang['upgr_dbtitle_2']}
      </div>
        <div class="panel-body">
           
{$lang['upgr_info']}
        </div>
        <div class="panel-body">
            <div class="progress"><div id="progressbar" class="progress-bar progress-blue" style="width:0%;"><span></span></div></div>
            <div class="text-size-small"><span id="wconvert"></span> <span id="status"></span></div>
        </div>
        <div class="panel-body">
            <div id="ajaxerror"></div>
            <div class="text-muted text-size-small">
{$lang['upgr_noclose_2']}</div>
        </div>    
        <div class="panel-footer">
            <button id="button" type="button" class="btn bg-teal btn-sm btn-raised"><i class="fa fa-forward position-left"></i>
{$lang['upgr_next']}</button>
        </div>
    </div>
HTML;

       
echofooter();

    } else {

       
echoheader( "<i class=\"fa fa-database position-left\"></i><span class=\"text-semibold\">{$lang['upgr_dbtitle_2']}</span>", $lang['upgr_dbtitle_3']);
       
        echo <<<HTML
   <div class="panel panel-default">
      <div class="panel-heading">
       
{$lang['upgr_dbtitle_2']}
      </div>
        <div class="panel-body">
           
{$lang['upgr_act_info']}<br /><br /><input type="text" name="sitekey" id="sitekey" placeholder="{$lang['trial_key']}" class="classic width-400 mr-10"><button onclick="dle_activation( 'key' ); return false;" class="btn bg-teal btn-raised btn-sm">{$lang['upgr_next']}</button><br /><br /><div id="result_info">{$lang['key_format']} <b>XXXXX-XXXXX-XXXXX-XXXXX-XXXXX</b></div>
        </div>
    </div>
    <div id="ajaxerror"></div>
    <script>
    <!--
    function dle_activation ( code ){
   
        var dle_key = document.getElementById('sitekey').value ;
       
        document.getElementById( 'result_info' ).innerHTML = '
{$lang['nl_sinfo']}';
       
        $('#ajaxerror').html('');
       
        $.post("?user_hash=
{$dle_login_hash}", { mod: 'upgrade', action: 'checklicense', dle_key: dle_key  }, function(data){

            if (data) {
   
                if (data.status == "ok") {
                    setTimeout("window.location = '?mod=upgrade&action=download'", 300 );
                } else {
               
                    document.getElementById( 'result_info' ).innerHTML = '
{$lang['key_format']} <b>XXXXX-XXXXX-XXXXX-XXXXX-XXXXX</b>';
                    DLEalert(data.error, '
{$lang['all_info']}');
                   
                }
   
            }
       
        }, "json").fail(function(jqXHR, textStatus, errorThrown ) {

                var error_status = '';
           
                if (jqXHR.status < 200 || jqXHR.status >= 300) {
                  error_status = 'HTTP Error: ' + jqXHR.status;
                } else {
                    error_status = 'Invalid JSON: ' + jqXHR.responseText;
                }
       
                $('#status').html('
{$lang['upgr_error']}');
                $('#ajaxerror').html('<div class="alert alert-danger alert-styled-left alert-bordered">' + error_status + '</div>');
           
        });
   
        return false;
    }
    //-->
    </script>
HTML;

       
echofooter();
       
    }

}

?>