Пример #1
0
/**
 * @param classConfig $config
 */
function init_update(&$config)
{
    $update_file = SN_ROOT_PHYSICAL . "includes/update" . DOT_PHP_EX;
    if (file_exists($update_file)) {
        if (filemtime($update_file) > $config->db_loadItem('var_db_update') || $config->db_loadItem('db_version') < DB_VERSION) {
            if (defined('IN_ADMIN')) {
                sn_db_transaction_start();
                // Для защиты от двойного запуска апдейта - начинаем транзакцию. Так запись в базе будет блокирована
                if (SN_TIME_NOW >= $config->db_loadItem('var_db_update_end')) {
                    $config->db_saveItem('var_db_update_end', SN_TIME_NOW + ($config->upd_lock_time ? $config->upd_lock_time : 300));
                    sn_db_transaction_commit();
                    require_once $update_file;
                    sys_refresh_tablelist();
                    $current_time = time();
                    $config->db_saveItem('var_db_update', $current_time);
                    $config->db_saveItem('var_db_update_end', $current_time);
                } elseif (filemtime($update_file) > $config->var_db_update) {
                    $timeout = $config->var_db_update_end - SN_TIME_NOW;
                    die("Обновляется база данных. Рассчетное время окончания - {$timeout} секунд (время обновления может увеличиваться). Пожалуйста, подождите...<br />\n            Obnovljaetsja baza dannyh. Rasschetnoe vremya okonchanija - {$timeout} secund. Pozhalujsta, podozhdute...<br />\n            Database update in progress. Estimated update time {$timeout} seconds (can increase depending on update process). Please wait...");
                }
                sn_db_transaction_rollback();
            } else {
                die('Происходит обновление сервера - пожалуйста, подождите...<br />
          Proishodit obnovlenie servera - pozhalujsta, podozhdute...<br />
          Server upgrading now - please wait...<br />
          <a href="admin/overview.php">Admin link</a>');
            }
        }
    }
}