Вход Регистрация
Файл: root/modules/db.admin.php
Строк: 323
<?php

/**
* @name        JMY CMS
* @link        http://jmy.su/
* @copyright   Copyright (C) 2012-2015 JMY LTD
* @license     LICENSE.txt (see attached file)
* @version     VERSION.txt (see attached file)
* @author      Komarov Ivan
*/ 
 
if (!defined('ADMIN_ACCESS')) {
    
header('Location: /');
    exit;
}

switch(isset(
$url[2]) ? $url[2] : null
{
    default:
        
$adminTpl->admin_head(_DB_DB);
        
        
$result $db->query("SHOW TABLE STATUS");
        echo 
'<div class="row">
            <div class="col-lg-12">
                <section class="panel">
                    <div class="panel-heading">
                        <b>' 
_BASE_LIST '</b>
                    </div>'
;
        echo 
'<div class="panel-body no-padding">                    
                        <table class="table no-margin">
                            <thead>
                                <tr>                                    
                                    <th><span class="pd-l-sm"></span>' 
_DB_TABLE_NAME '</th>
                                    <th class="col-md-1">' 
_DB_TABLE_CODE '</th>
                                    <th class="col-md-3">' 
_DB_TABLE_NUMB .'</th>
                                    <th class="col-md-2">' 
_DB_TABLE_SIZE '</th>                                    
                                    <th class="col-md-3">' 
_BASE_ACTIONS '</th>                                    
                                </tr>
                            </thead>
                            <tbody>'
;
        while(
$row $db->getRow($result)) 
        {
            if(
eregStrt(DB_PREFIX$row["Name"]))
            {            
            echo 
'
            <tr>
                <td><span class="pd-l-sm"></span>' 
$row["Name"] . '</td>
                <td>' 
$row["Collation"] . '</td>
                <td>' 
$row["Rows"] . '</td>
                <td>' 
formatfilesize($row["Data_length"]+$row["Index_length"]) . '</td>
                <td>
                <a href="{ADMIN}/db/truncate/' 
$row["Name"] . '" onClick="return getConfirm('' . _DB_TRUNCATE. ' '. $row["Name"]. '')">
                <button type="button" class="btn btn-info btn-sm" data-toggle="tooltip" data-placement="top" title="" data-original-title="' 
_BASE_CLEAR .'">C</button>
                </a>
                <a href="{ADMIN}/db/delete/' 
$row["Name"] . '" onClick="return getConfirm('' . _DB_DELETE. ' '. $row["Name"]. '')">
                <button type="button" class="btn btn-danger btn-sm" data-toggle="tooltip" data-placement="top" title="" data-original-title="' 
_BASE_DELETE .'">X</button>
                </a>
                </td>                
            </tr>
            '
;
            }
        }
        echo 
'<tr><td></td><td></td><td></td><td></td></tr></tbody></table></div>';
        echo
'</section></div></div>';
        
$adminTpl->admin_foot();
        break;    

    case 
'optimize':
        
$adminTpl->admin_head(_DB_DB .' | '_DB_OP_NAME);        
        
$result $db->query("SHOW TABLE STATUS");
        echo 
'<div class="row">
            <div class="col-lg-12">
                <section class="panel">
                    <div class="panel-heading">
                        <b>' 
_DB_OP_NAME '</b>
                    </div>
                    <div class="panel-body"><div class="switcher-content">'
;        
        
$adminTpl->open();        
        echo 
'<form id="tablesForm" style="margin:0; padding:0" method="POST" action="{ADMIN}/db/action" role="form" class="form-horizontal parsley-form" data-parsley-validate>
        <div class="form-group">
                    <label class="col-sm-3 control-label">'
_DB_ABOUT .'</label>
                    <div class="col-sm-4">
                        <p class="form-control-static">'
_DB_OP_TEXT .'</p>
                    </div>
        </div>        
        <div class="form-group">
                    <label class="col-sm-3 control-label">'
_DB_CHOICE .'</label>
                    <div class="col-sm-4">'
;
        echo 
'<select name="db_list[]" size="10" multiple>';
        while(
$row $db->getRow($result)) 
        {
            if(
eregStrt(DB_PREFIX$row["Name"]))
            {
                echo 
"<option value="" . $row["Name"] . "" selected>" $row["Name"] . "</option>";
            }
        }
        echo 
'</select>
                    </div>
        </div>
        <div class="form-group">
                    <label class="col-sm-3 control-label"></label>
                    <div class="col-sm-4">
                        <input name="submit" type="submit" class="btn btn-primary btn-parsley" id="sub" value="'
_DB_OP_DO .'" />                        
                    </div>
        </div>'
;
        echo 
'</form></div></div>';  
        echo
'</section></div></div>';        
        
$adminTpl->close();
        
$adminTpl->admin_foot();
        break;    

    case 
'repair':
        
$adminTpl->admin_head(_DB_DB .' | '_DB_RE_NAME);        
        
$result $db->query("SHOW TABLE STATUS");
        echo 
'<div class="row">
            <div class="col-lg-12">
                <section class="panel">
                    <div class="panel-heading">
                        <b>' 
_DB_RE_NAME '</b>
                    </div>
                    <div class="panel-body"><div class="switcher-content">'
;        
        
$adminTpl->open();        
        echo 
'<form id="tablesForm" style="margin:0; padding:0" method="POST" action="{ADMIN}/db/action" role="form" class="form-horizontal parsley-form" data-parsley-validate>
        <div class="form-group">
                    <label class="col-sm-3 control-label">'
_DB_ABOUT .'</label>
                    <div class="col-sm-4">
                        <p class="form-control-static">'
_DB_RE_TEXT .'</p>
                    </div>
        </div>        
        <div class="form-group">
                    <label class="col-sm-3 control-label">'
_DB_CHOICE .'</label>
                    <div class="col-sm-4">'
;
        echo 
'<select name="db_list[]" size="10" multiple>';
        while(
$row $db->getRow($result)) 
        {
            if(
eregStrt(DB_PREFIX$row["Name"]))
            {
                echo 
"<option value="" . $row["Name"] . "" selected>" $row["Name"] . "</option>";
            }
        }
        echo 
'</select>
                    </div>
        </div>
        <div class="form-group">
                    <label class="col-sm-3 control-label"></label>
                    <div class="col-sm-4">
                        <input name="submit" type="submit" class="btn btn-primary btn-parsley" id="sub" value="'
_DB_RE_DO .'" />                        
                    </div>
        </div>'
;
        echo 
'</form></div></div>';  
        echo
'</section></div></div>';        
        
$adminTpl->close();
        
$adminTpl->admin_foot();
        break;    

    case 
'backup':
        
$adminTpl->admin_head(_DB_DB .' | '_DB_BE_NAME);        
        
$result $db->query("SHOW TABLE STATUS");
        echo 
'<div class="row">
            <div class="col-lg-12">
                <section class="panel">
                    <div class="panel-heading">
                        <b>' 
_DB_BE_NAME '</b>
                    </div>
                    <div class="panel-body"><div class="switcher-content">'
;        
        
$adminTpl->open();        
        echo 
'<form id="tablesForm" style="margin:0; padding:0" method="POST" action="{ADMIN}/db/backup_do" role="form" class="form-horizontal parsley-form" data-parsley-validate>
        <div class="form-group">
                    <label class="col-sm-3 control-label">'
_DB_ABOUT .'</label>
                    <div class="col-sm-4">
                        <p class="form-control-static">'
_DB_BE_TEXT .'</p>
                    </div>
        </div>        
        <div class="form-group">
                    <label class="col-sm-3 control-label">'
_DB_CHOICE .'</label>
                    <div class="col-sm-4">'
;
        echo 
'<select name="db_list[]" size="10" multiple>';
        while(
$row $db->getRow($result)) 
        {
            if(
eregStrt(DB_PREFIX$row["Name"]))
            {
                echo 
"<option value="" . $row["Name"] . "" selected>" $row["Name"] . "</option>";
            }
        }
        echo 
'</select>
                    </div>
        </div>
        <div class="form-group">
                    <label class="col-sm-3 control-label"></label>
                    <div class="col-sm-4">
                        <input name="submit" type="submit" class="btn btn-primary btn-parsley" id="sub" value="'
_DB_BE_DO .'" />                        
                    </div>
        </div>'
;
        echo 
'</form></div></div>';  
        echo
'</section></div></div>';        
            
        
        
$dir ROOT "tmp/";
        echo 
'<div class="row">
            <div class="col-lg-12">
                <section class="panel">
                    <div class="panel-heading">
                        <b>' 
_DB_BE_COPY '</b>
                    </div>'
;
        if (
is_dir($dir)) 
        {
            if (
$dh1 opendir($dir)) 
            {
            while ((
$file1 readdir($dh1)) !== false) {
                    if(
eregStrt('db_backup'$file1))
                    {                        
                        
$yes true;
                    }
                }
            
closedir($dh);
            }
            if (
$dh opendir($dir)) 
            {            
                if(isset(
$yes))
                {        
                    echo 
'<div class="panel-body no-padding">                    
                        <table class="table no-margin">
                            <thead>
                                <tr>
                                    <th class="col-md-3"><span class="pd-l-sm"></span>'
_BASE_FILE .'</th>
                                    <th class="col-md-1">' 
_BASE_DATE '</th>
                                    <th class="col-md-1">' 
_DB_TABLE_SIZE '</th>
                                    <th class="col-md-3">' 
_BASE_ACTIONS .'</th>                                    
                                </tr>
                            </thead>
                            <tbody>'
;    
                    while ((
$file readdir($dh)) !== false
                    {
                        if(
eregStrt('db_backup'$file))
                        {
                            echo 
'<tr>
                                    <td><span class="pd-l-sm"></span>' 
$file '</td>
                                    <td>' 
formatDate(filemtime(ROOT 'tmp/' $file)) . '</td>
                                    <td>' 
formatfilesize(filesize(ROOT 'tmp/' $file)) . '</td>
                                    <td>
                                    <a href="{ADMIN}/db/restore/'
.str_replace('.sql.gz'''$file).'" onclick="return getConfirm(''. _DB_BE_RES .' ' . $file . '?')">
                                    <button type="button" class="btn btn-info btn-sm" data-toggle="tooltip" data-placement="top" title="" data-original-title="' 
_BASE_RESTORE .'">R</button>
                                    </a>
                                    <a href="{ADMIN}/db/delBackup/'
.str_replace('.sql.gz'''$file).'" onclick="return getConfirm(''. _DB_BE_DEL .' ' . $file . '?')">
                                    <button type="button" class="btn btn-danger btn-sm" data-toggle="tooltip" data-placement="top" title="" data-original-title="' 
_BASE_DELETE .'">X</button>
                                    </a>
                                    </td>
                                </tr>'
;                            
                        }
                    }
                    echo 
'<tr><td></td><td></td><td></td><td></td></tr></tbody></table></div>';
                }
                else
                {
                    echo 
'<div class="panel-heading">'  _DB_BE_NO '</div></div>';                    
                }
                
closedir($dh);
                
            }
        }        
        echo
'</section></div></div>';
        
$adminTpl->close();    
        
$adminTpl->admin_foot();
        break;
    
    case 
'fix':
        
$adminTpl->admin_head(_DB_DB .' | '_DB_BB_NAME);
        if(!isset(
$url[3]))
        {        
        
$adminTpl->open();
        echo 
'<div class="row">
            <div class="col-lg-12">
                <section class="panel">
                    <div class="panel-heading">
                        <b>' 
_DB_BB_NAME '</b>
                    </div>
                    <div class="panel-body"><div class="switcher-content">                
        <form id="tablesForm" style="margin:0; padding:0" method="POST" action="{ADMIN}/db/doFix" role="form" class="form-horizontal parsley-form" data-parsley-validate>
        <div class="form-group">
                    <label class="col-sm-3 control-label">'
_DB_BB_START .'</label>
                    <div class="col-sm-4">
                        <input class="form-control" type="text" name="lstart" value="0" data-parsley-required="true" data-parsley-trigger="change"/>
                    </div>
        </div>        
        <div class="form-group">
                    <label class="col-sm-3 control-label">'
_DB_BB_END .'</label>
                    <div class="col-sm-4">
                        <input class="form-control" type="text" name="lend" value="100" data-parsley-required="true" data-parsley-trigger="change"/>
                    </div>
        </div>
        <div class="form-group">
                    <label class="col-sm-3 control-label"></label>
                    <div class="col-sm-4">
                        <input name="submit" type="submit" class="btn btn-primary btn-parsley" id="sub" value="'
_DB_BB_DO .'" />                        
                    </div>
        </div>'
;
        echo 
'</form></div></div>';  
        echo
'</section></div></div>';    
        
$adminTpl->close();        
        }
        else 
        {        
        
$adminTpl->info(_BASE_INFO_0);
        }
        
$adminTpl->admin_foot();
        break;
        
    case 
'action':        
        
$tables '';        
        foreach(
$_POST['db_list'] as $table)
        {
            
$tables .= ", `" $table "`";
        }
        
$tables mb_substr($tables1);        
        if(
$_POST['submit'] == _DB_OP_DO)
        {
            
$query "OPTIMIZE TABLE  ";
            
$name _DB_OP_NAME;
        } 
        elseif(
$_POST['submit'] == _DB_RE_DO)  
        {
            
$query "REPAIR TABLE  ";
            
$name _DB_RE_NAME;
        }        
        if(
$db->query($query $tables))
        {    
$adminTpl->admin_head_DB_DB .' | ' $name);
            
$adminTpl->info(_BASE_INFO_0);
            
$adminTpl->admin_foot();
        }        
        break;
        
    case 
'backup_do':
        require_once 
ROOT 'boot/sub_classes/backup.class.php';        
        
$backup_obj = new MySQL_DB_Backup();        
        require 
ROOT 'etc/db.config.php';        
        
$backup_obj->server $dbhost;
        
$backup_obj->port 3306;
        
$backup_obj->username $dbuser;
        
$backup_obj->password $dbpass;
        
$backup_obj->database $dbname;        
        
$backup_obj->tables $_POST['db_list'];        
        
$backup_obj->drop_tables true;
        
$backup_obj->create_tables true;
        
$backup_obj->struct_only false;
        
$backup_obj->locks true;
        
$backup_obj->comments true;
        
$backup_obj->backup_dir 'tmp/';
        
$backup_obj->fname_format 'm_d_Y';
        
$task MSX_SAVE;
        
$use_gzip true;        
        
$filename 'jmy_DB_backup-' date('d-m-Y_H-i') . '.sql.gz';        
        
$result_bk $backup_obj->Execute($task$filename$use_gzip);
        
$adminTpl->admin_head(_DB_DB .' | '_DB_BE_NAME);        
        if (!
$result_bk)
        {
            
$output $backup_obj->error;
            
$adminTpl->info($output '<br>'_DB_BE_ERROR'error');

        }
        else
        {
            
$output 'Operation Completed Successfully At: <b>' date('g:i:s A') . '</b><i> ( Local Server Time )</i>';
            if (
$task == MSX_STRING)
            {
                
$output.= 'n' $result_bk;
            }            
            
$adminTpl->info(_DB_BE_COM .' (tmp/). <a href="/'.ADMIN.'/db/backup" >'_DB_BE_BACK .'</a><br /><br /><a href="/tmp/'.$filename.'" >'_DB_BE_DOWNLOAD .'</a><br /><br /> '_DB_BE_SERVER .' <br />' $output);
        }        
        
$adminTpl->admin_foot();
        break;
        
    case 
'restore':
        
$file $url[3];        
        if (
file_exists('tmp/' $file '.sql.gz')) 
        {
            require 
ROOT 'etc/db.config.php';            
            
$restore_obj = new MySQL_Restore();            
            
$restore_obj->server $dbhost;
            
$restore_obj->username $dbuser;
            
$restore_obj->password $dbpass;
            
$restore_obj->database $dbname;            
            
$adminTpl->admin_head(_DB_DB .' | '_DB_BE_REST);        
            if (!
$restore_obj->Execute('tmp/' $file '.sql.gz'MSR_FILEtruefalse))
            {
                
$adminTpl->info(_DB_BE_REST_NO .' <a href="/'.ADMIN.'/db/backup">'_DB_BE_BACK .'</a>.''error');
            }
            else
            {
                
$adminTpl->info(_DB_BE_REST_OK .' <a href="/'.ADMIN.'/db">'_DB_BE_BACK .'</a>');
            }
            
$adminTpl->admin_foot();
        }
        break;
        
    case 
'delete':
        
$table $url[3];
        
        if(
eregStrt(DB_PREFIX$table))
        {
            
$db->query("DROP TABLE `$table`");
        }
        
        
$adminTpl->admin_head(_DB_DB .' | '_DB_TABLE_DEL);    
        
$adminTpl->info(_DB_TABLE $table _DB_TABLE_DELETE.'  <a href="/'.ADMIN.'/db" >'_DB_BE_BACK .'</a>');
        
$adminTpl->admin_foot();
        break;
        
    case 
'truncate':
        
$table $url[3];
        
        if(
eregStrt(DB_PREFIX$table))
        {
            
$db->query("TRUNCATE TABLE `" $table "`");
        }
        
        
$adminTpl->admin_head(_DB_DB .' | '_DB_CLEAR);    
        
$adminTpl->info(_DB_TABLE $table _DB_CLEAR_OK .' <a href="/'.ADMIN.'/db/">'_DB_BE_BACK .'</a>');
        
$adminTpl->admin_foot();
        break;
        
    case 
'delBackup':
        
$file $url[3];
        
unlink('tmp/' $file '.sql.gz');
        
location(ADMIN.'/db/backup');
        break;    
        
    case 
'doFix':
        
$lstart = isset($_POST['lstart']) ? intval($_POST['lstart']) : (isset($url[3]) ? intval($url[3]) : '');
        
$lend = isset($_POST['lend']) ? intval($_POST['lend']) : (isset($url[4]) ? intval($url[4]) : '');
        
$i 0;
        
$board $db->query("SELECT * FROM " DB_PREFIX "_board_posts");
        while(
$boab $db->getRow($board)) 
        {
            
$messag2e parseBB(html2bb(processText($boab['message'])));
            if(!empty(
$messag2e))
            {
                
$db->query("UPDATE `" DB_PREFIX "_board_posts` SET `message` = '" $db->safesql($messag2e) . "' WHERE `id` ='" $boab['id'] . "' LIMIT 1 ;");
            }
            else
            {
                
write111($boab['id'], 'board');
            }
        }    
        
$langs $db->query("SELECT * FROM " DB_PREFIX "_langs");
        while(
$lan $db->getRow($langs)) 
        {
            
$short parseBB(html2bb(processText($lan['short'])), falsetrue);
            
$full parseBB(html2bb(processText($lan['full'])), falsetrue);
            if(!empty(
$short))
            {
                
$db->query("UPDATE `" DB_PREFIX "_langs` SET `short` = '" $db->safesql($short) . "', `full` = '" $db->safesql($full) . "' WHERE `_id` ='" $lan['_id'] . "' LIMIT 1 ;");
            }
            else
            {
                
write111($lan['_id'], 'news');
            }
        }            
        
$comments $db->query("SELECT * FROM " DB_PREFIX "_comments");
        while(
$comm $db->getRow($comments)) 
        {
            
$text parseBB(html2bb(processText($comm['text'])));
            if(!empty(
$text))
            {
                
$db->query("UPDATE `" DB_PREFIX "_comments` SET `text` = '" $db->safesql($text) . "' WHERE `id` ='" $comm['id'] . "' LIMIT 1 ;");
            }
            else
            {
                
write111($comm['id'], 'comm');
            }
        }
        
$pm $db->query("SELECT * FROM " DB_PREFIX "_pm");
        while(
$ppm $db->getRow($pm)) 
        {
            
$message parseBB(html2bb(processText($ppm['message'])));
            if(!empty(
$message))
            {
                
$db->query("UPDATE `" DB_PREFIX "_pm` SET `message` = '" $db->safesql($message) . "' WHERE `id` ='" $ppm['id'] . "' LIMIT 1 ;");
            }
            else
            {
                
write111($ppm['id'], 'pm');
            }
        }        
        
$blog $db->query("SELECT * FROM " DB_PREFIX "_blog_posts");
        while(
$blb $db->getRow($blog)) 
        {
            
$text parseBB(html2bb(processText($blb['text'])));
            if(!empty(
$text))
            {
                
$db->query("UPDATE `" DB_PREFIX "_blog_posts` SET `text` = '" $db->safesql($text) . "' WHERE `id` ='" $blb['id'] . "' LIMIT 1 ;");
            }
            else
            {
                
write111($blb['id'], 'blog');
            }
        }        
        
$users $db->query("SELECT * FROM `" USER_DB "`.`" USER_PREFIX "_users`");
        while(
$usr $db->getRow($users)) 
        {
            
$signature parseBB(html2bb(processText($usr['signature'])));
            if(!empty(
$signature))
            {
                
$db->query("UPDATE `" USER_DB "`.`" USER_PREFIX "_users` SET `signature` = '" $db->safesql($signature) . "' WHERE `id` ='" $usr['id'] . "' LIMIT 1 ;");
            }
            else
            {
                
write111($usr['id'], 'usr');
            }
        }        
        
location(ADMIN.'/db/fix/ok');
        break;        

}

function 
write111($id$type
{
    
$logPath ROOT 'tmp/errors.log';
    if (
file_exists($logPath)) 
    {
        
$data unserialize(@file_get_contents($logPath));
    }
    
$data[] = array('type' => $type'id' => $id);
    
$data serialize($data);
    
$fp = @fopen($logPath'w');
    
fwrite($fp$data);
    
fclose($fp);
}
Онлайн: 2
Реклама