Вход Регистрация
Файл: source/app/objects/admin/table/Table.php
Строк: 296
<?php

class AdminTable {

    private 
$da;
    private 
$savant;

    public function 
__construct($da) {
        
$auth Auth::singleton();
        
$auth->checkToolManagement();

        
$this->da $da;
        
$this->savant = new Savant3();
        
$this->savant->setPath('template'dirname(__FILE__));
    }

    public function 
browse() {
        global 
$config_database;
        
$this->savant->config_database $config_database;
        
$dao = new Dao($this->da);
        
$this->savant->tables $dao->listTables();

        return 
$this->savant->getOutput('browse.tpl.php');
    }

    public function 
delete() {
        if (!isset(
$_POST['table']))
            exit;
        
        
$comDao = new GenericDao('crud_components'$this->da);
        
$params = array();
        
$params['conditions'] = array('component_table = ?',array($_POST['table']));
        
$coms $comDao->findFirst($params);
        if (!empty(
$coms)) exit;
        
        
$dao = new Dao($this->da);
        
$sql 'DROP TABLE IF EXISTS `' $_POST['table'] . '`';
        
$dao->execute($sql);
        
$_GET['table'] = $_POST['table'];

        global 
$config_database;

        if (isset(
$_GET['table']) &&
                
trim($_GET['table']) != '') {
            if (
file_exists(__DATABASE_CONFIG_PATH__ '/' $config_database['default']["database"] . '/' $_GET['table'])) {
                
removeDir(__DATABASE_CONFIG_PATH__ '/' $config_database['default']["database"] . '/' $_GET['table']);
            }
            if (
file_exists(__DATABASE_CONFIG_PATH__ '/' $config_database['default']["database"] . '/' $_GET['table'] . '.php')) {
                @
unlink(__DATABASE_CONFIG_PATH__ '/' $config_database['default']["database"] . '/' $_GET['table'] . '.php');
            }
        }
    }

    public function 
add() {
        
$dao = new Dao($this->da);
        
$this->savant->tables $dao->listTables();

        
$cs = array();
        
$cs[''] = '';
        
$dao = new Dao($this->da);
        
$rs $dao->query('SHOW CHARACTER SET');
        while (
$row $rs->fetchAssoc()) {
            
$cs[$row['Charset']] = $row['Charset'];
        }

        
asort($cs);

        
$en = array();
        
$en[''] = '';
        
$rs $dao->query('SHOW ENGINES');
        while (
$row $rs->fetchAssoc()) {
            
$en[$row['Engine']] = $row['Engine'];
        }
        
$this->savant->engines $en;

        
$collations = array();

        foreach (
$cs as $key => $value) {
            if (!empty(
$value)) {
                
$collations[$key] = array();
                
$rs $dao->query("SHOW COLLATION LIKE '" $value "%'");
                if (!empty(
$rs)) {
                    while (
$row $rs->fetchAssoc()) {
                        
$collations[$key][$row['Collation']] = $row['Collation'];
                    }
                }
            }
        }
        
$this->savant->collations $collations;

        if (isset(
$_GET['table']) && in_array($_GET['table'], $this->savant->tables)) {
            global 
$config_database;
            
$tblInfo = array();
            
$rs $dao->query("SHOW TABLE STATUS FROM `" $config_database['default']['database'] . "` WHERE `name` = '" $_GET['table'] . "'");
            if (!empty(
$rs)) {
                while (
$row $rs->fetchAssoc()) {
                    
$tblInfo[] = $row;
                }
                
$this->savant->table_info $tblInfo[0];
            }

            
$colInfo = array();
            
$rs $dao->query("SHOW FULL COLUMNS FROM `" $_GET['table'] . "`");
            if (!empty(
$rs)) {
                while (
$row $rs->fetchAssoc()) {
                    
$colInfo[] = $row;
                }
                
$this->savant->columns_info $colInfo;
            }
        }


        return 
$this->savant->getOutput('add.tpl.php');
    }

    public function 
insert() {
        
$lang Lang::singleton();
        
$var = array();
        
$errors = array();

        
$dao = new Dao($this->da);

        if (
trim($_POST['table_name']) == '') {
            
$errors[] = $lang->line('please_enter_value_for_table_name');
        }




        
$comma ",";
        
$sql "CREATE TABLE `" $_POST['table_name'] . "` (n";


        
$keys = array();
        foreach (
$_POST['fields'] as $i => $v) {
            if (isset(
$v['key'])) {
                
$keys[] = $v['name'];
            }
            if (
$i == (count($_POST['fields']) - 1)) {
                if (
count($keys) <= 0) {
                    
$comma "";
                } else {
                    
$comma ",";
                }
            }
            if (
trim($v['length_value']) == '') {
                switch (
strtolower(trim($v['type']))) {
                    case 
'bit':
                        
$v['length_value'] = '1';
                        break;
                    case 
'tinyint':
                        
$v['length_value'] = '4';
                        break;
                    case 
'smallint':
                        
$v['length_value'] = '6';
                        break;
                    case 
'mediumint':
                        
$v['length_value'] = '9';
                        break;
                    case 
'int':
                        
$v['length_value'] = '11';
                        break;
                    case 
'bigint':
                        
$v['length_value'] = '20';
                        break;
                    case 
'decimal':
                        
$v['length_value'] = '10,0';
                        break;
                    case 
'char':
                        
$v['length_value'] = '50';
                        break;
                    case 
'varchar':
                        
$v['length_value'] = '255';
                        break;
                    case 
'binary':
                        
$v['length_value'] = '50';
                        break;
                    case 
'varbinary':
                        
$v['length_value'] = '255';
                        break;
                    case 
'year':
                        
$v['length_value'] = '4';
                        break;
                }
            }
            if (
trim($v['length_value']) != '') {
                
$v['length_value'] = " (" $v['length_value'] . ") ";
            }

            
$null '';
            if (!isset(
$v['is_null'])) {
                
$null " NOT NULL ";
            } else {
                
$null " NULL ";
            }

            
$def "";
            if (
trim($v['def']) != "") {
                switch (
trim($v['def'])) {
                    case 
'NULL':
                        if (
$null != " NOT NULL ") {
                            
$def " DEFAULT NULL ";
                        }
                        break;
                    case 
'USER_DEFINED':
                        
$def " DEFAULT '" str_replace("'""'"$v['user_def']) . "' ";
                        break;
                    case 
'CURRENT_TIMESTAMP':
                        
$def " DEFAULT CURRENT_TIMESTAMP ";
                        break;
                }
            }

            if (
in_array($v['name'], $keys)) {
                
$null " NOT NULL ";

                if (
$def == " DEFAULT NULL ") {
                    
$def "";
                }
            }

            
$ai '';
            if (isset(
$v['ai'])) {
                
$ai " AUTO_INCREMENT ";
            }

            
$collation "";
            if (
trim($v['collation']) != '') {
                
$ary explode('_'trim($v['collation']));
                
$collation " CHARACTER SET " $ary[0] . " COLLATE " trim($v['collation']) . " ";
            }

            
$sql .= "`" $v['name'] . "` " $v['type'] . $v['length_value'] . $collation $null $def $ai $comma " n";

            if (
$i == (count($_POST['fields']) - 1)) {
                if (
count($keys) > 0) {
                    
$sql .= "PRIMARY KEY (`" implode('`,`'$keys) . "`) n";
                }
            }
        }

        if (
trim($_POST['storage_engine']) != '') {
            
$_POST['storage_engine'] = " ENGINE = " $_POST['storage_engine'] . " ";
        }
        if (
trim($_POST['collation']) != '') {
            
$ary explode('_'trim($_POST['collation']));
            
$_POST['collation'] = " DEFAULT CHARACTER SET = " $ary[0] . " DEFAULT COLLATE = " $_POST['collation'];
        }
        if (
trim($_POST['table_comment']) != '') {
            
$_POST['table_comment'] = " COMMENT = '" str_replace("'""'"$_POST['table_comment']) . "' ";
        }

        
$sql .= ")" $_POST['storage_engine'] . $_POST['collation'] . $_POST['table_comment'];

        if (
count($errors) <= 0) {
            try {
                
$dao->execute($sql);
            } catch (
Exception $e) {
                
$errors[] = $e->getMessage();
            }
        }

        if (
count($errors) > 0) {
            
$var['error'] = 1;
            
$var['messages'] = $errors;
        } else {
            
$var['error'] = 0;
        }

        echo 
json_encode($var);
    }

    public function 
update() {
        
$var = array();
        
$errors = array();
        
$dao = new Dao($this->da);
        
$tables $dao->listTables();
        if (
in_array($_POST['table_name_id'], $tables)) {
            try {
                global 
$config_database;
                
$tblInfo = array();
                
$rs $dao->query("SHOW TABLE STATUS FROM `" $config_database['default']['database'] . "` WHERE `name` = '" $_POST['table_name_id'] . "'");
                if (!empty(
$rs)) {
                    while (
$row $rs->fetchAssoc()) {
                        
$tblInfo $row;
                    }
                }

                
$colInfo = array();
                
$fields = array();
                
$oldKey = array();
                
$rs $dao->query("SHOW FULL COLUMNS FROM `" $_POST['table_name_id'] . "`");
                if (!empty(
$rs)) {
                    while (
$row $rs->fetchAssoc()) {
                        
$colInfo[] = $row;
                        
$fields[] = $row['Field'];
                        if (!empty(
$row['Key'])) {
                            
$oldKey[] = $row['Field'];
                        }
                    }
                }


                
$keys = array();
                
$prevColumn '';
                
$newColumns = array();
                
$q = array();
                foreach (
$_POST['fields'] as $i => $v) {
                    
$sql "";
                    if (isset(
$v['key'])) {
                        
$keys[] = $v['name'];
                    }
                    if (
trim($v['length_value']) == '') {
                        switch (
strtolower(trim($v['type']))) {
                            case 
'bit':
                                
$v['length_value'] = '1';
                                break;
                            case 
'tinyint':
                                
$v['length_value'] = '4';
                                break;
                            case 
'smallint':
                                
$v['length_value'] = '6';
                                break;
                            case 
'mediumint':
                                
$v['length_value'] = '9';
                                break;
                            case 
'int':
                                
$v['length_value'] = '11';
                                break;
                            case 
'bigint':
                                
$v['length_value'] = '20';
                                break;
                            case 
'decimal':
                                
$v['length_value'] = '10,0';
                                break;
                            case 
'char':
                                
$v['length_value'] = '50';
                                break;
                            case 
'varchar':
                                
$v['length_value'] = '255';
                                break;
                            case 
'binary':
                                
$v['length_value'] = '50';
                                break;
                            case 
'varbinary':
                                
$v['length_value'] = '255';
                                break;
                            case 
'year':
                                
$v['length_value'] = '4';
                                break;
                        }
                    }
                    if (
trim($v['length_value']) != '') {
                        
$v['length_value'] = " (" $v['length_value'] . ") ";
                    }

                    
$null '';
                    if (!isset(
$v['is_null'])) {
                        
$null " NOT NULL ";
                    } else {
                        
$null " NULL ";
                    }

                    
$def "";
                    if (
trim($v['def']) != "") {
                        switch (
trim($v['def'])) {
                            case 
'NULL':
                                if (
$null != " NOT NULL ") {
                                    
$def " DEFAULT NULL ";
                                }
                                break;
                            case 
'USER_DEFINED':
                                
$def " DEFAULT '" str_replace("'""'"$v['user_def']) . "' ";
                                break;
                            case 
'CURRENT_TIMESTAMP':
                                
$def " DEFAULT CURRENT_TIMESTAMP ";
                                break;
                        }
                    }

                    if (
in_array($v['name'], $keys)) {
                        
$null " NOT NULL ";

                        if (
$def == " DEFAULT NULL ") {
                            
$def "";
                        }
                    }

                    
$ai '';
                    if (isset(
$v['ai'])) {
                        
$ai " AUTO_INCREMENT ";
                    }

                    
$collation "";
                    if (
trim($v['collation']) != '') {
                        
$ary explode('_'trim($v['collation']));
                        
$collation " CHARACTER SET " $ary[0] . " COLLATE " trim($v['collation']) . " ";
                    }

                    if (isset(
$v['key']) && $ai != '') {
                        
$q[$v['name']] = $v['type'] . $v['length_value'] . $collation $null $def $ai;
                        
$ai '';
                    }

                    if (!empty(
$v['id'])) {
                        if (
$v['name'] == $v['id']) {
                            
$sql .= "ALTER TABLE `" $_POST['table_name_id'] . "` MODIFY COLUMN `" $v['name'] . "` " $v['type'] . $v['length_value'] . $collation $null $def $ai;
                        } else {
                            
$sql .= "ALTER TABLE `" $_POST['table_name_id'] . "` CHANGE COLUMN `" $v['id'] . "` `" $v['name'] . "` " $v['type'] . $v['length_value'] . $collation $null $def $ai $prevColumn;
                        }
                    } else {
                        
$sql .= "ALTER TABLE `" $_POST['table_name_id'] . "` ADD COLUMN `" $v['name'] . "` " $v['type'] . $v['length_value'] . $collation $null $def $ai $prevColumn;
                    }

                    
$dao->execute($sql);
                    
$prevColumn " AFTER `" $v['name'] . "`";
                    
$newColumns[] = $v['name'];
                }

                foreach (
$fields as $field) {
                    if (!
in_array($field$newColumns)) {
                        
$sql "ALTER TABLE `" $_POST['table_name_id'] . "` DROP COLUMN `" $field "`";
                        
$dao->execute($sql);
                    }
                }

                
$crs array_diff($oldKey$keys);
                if (!empty(
$crs) || count($oldKey) != count($keys)) {
                    if (
count($keys) > 0) {
                        if (empty(
$oldKey)) {
                            
$dao->execute("ALTER TABLE `" $_POST['table_name_id'] . "` ADD PRIMARY KEY(`" implode('`,`'$keys) . "`)");
                        } else {
                            
$dao->execute("ALTER TABLE `" $_POST['table_name_id'] . "` DROP PRIMARY KEY, ADD PRIMARY KEY(`" implode('`,`'$keys) . "`)");
                        }
                    } else {
                        if (
count($oldKey) > 0) {
                            
$newKeys = array();
                            
$rs $dao->query("SHOW FULL COLUMNS FROM `" $_POST['table_name_id'] . "`");
                            if (!empty(
$rs)) {
                                while (
$row $rs->fetchAssoc()) {
                                    if (!empty(
$row['Key'])) {
                                        
$newKeys[] = $row['Field'];
                                    }
                                }
                            }
                            if (!empty(
$newKeys)) {
                                
$dao->execute("ALTER TABLE `" $_POST['table_name_id'] . "` DROP PRIMARY KEY");
                            }
                        }
                    }
                }

                if (!empty(
$q)) {
                    foreach (
$q as $name => $v1) {
                        
$dao->execute("ALTER TABLE `" $_POST['table_name_id'] . "` MODIFY COLUMN `" $name "` " $v1);
                    }
                }


                if (
strtolower($_POST['storage_engine']) != strtolower($tblInfo['Engine'])) {
                    
$sql "ALTER TABLE `" $_POST['table_name_id'] . "` ENGINE = " $_POST['storage_engine'];
                    
$dao->execute($sql);
                }

                if (
strtolower($_POST['collation']) != strtolower($tblInfo['Collation'])) {
                    
$ary explode('_'trim($_POST['collation']));
                    
$sql "ALTER TABLE `" $_POST['table_name_id'] . "` CONVERT TO CHARACTER SET " $ary[0] . " COLLATE " $_POST['collation'];
                    
$dao->execute($sql);
                }

                
$sql "ALTER TABLE `" $_POST['table_name_id'] . "` COMMENT = '" $_POST['table_comment'] . "'";
                
$dao->execute($sql);

                if (
strtolower($_POST['table_name_id']) != strtolower($_POST['table_name'])) {
                    
$sql "RENAME TABLE `" $_POST['table_name_id'] . "` TO  `" $_POST['table_name'] . "`";
                    
$dao->execute($sql);
                }
            } catch (
Exception $e) {
                
$errors[] = $e->getMessage();
            }
        }

        if (
count($errors) > 0) {
            
$var['error'] = 1;
            
$var['messages'] = $errors;
        } else {
            
$var['error'] = 0;
            
$_GET['table'] = $_POST['table_name_id'];
        }

        echo 
json_encode($var);
    }

}
Онлайн: 1
Реклама