示例#1
0
 public function _updateModels()
 {
     global $pdo;
     $moddir = $this->extdir . '/models';
     $matchs = null;
     $sqlTables = $pdo->query('show tables');
     $inTables = array();
     $defTables = array();
     while ($line = $sqlTables->fetch()) {
         $inTables[$line[0]] = array();
     }
     foreach (scandir($moddir) as $modfile) {
         if (preg_match('`^(.*)\\.yml$`', $modfile, $matchs)) {
             $def = spyc_load_file($moddir . '/' . $modfile);
             $defTables[$def['name']] = $def;
         }
     }
     //Ajout des tables
     $addTables = array_diff_key($defTables, $inTables);
     foreach ($addTables as $table) {
         $pdo->execute(mdle_sql_create($table));
     }
     $checkTables = array_intersect_key($defTables, $inTables);
     $modTables = array();
     foreach ($checkTables as $table => $def) {
         $sql = $pdo->query("SHOW COLUMNS FROM {$table}");
         $fields = array();
         $modify_fields = array();
         while ($c = $sql->fetch()) {
             $fields[] = $c['Field'];
             if ($c['Type'] != mdle_field_type($defTables[$table], $c['Field'])) {
                 $modify_fields[] = $c['Field'];
             } elseif (isset($defTables[$table]['fields'][$c['Field']]['null']) && $c['Null'] != 'YES') {
                 $modify_fields[] = $c['Field'];
             }
         }
         $del_fields = array_diff($fields, array_keys($defTables[$table]['fields']));
         $add_fields = array_diff(array_keys($defTables[$table]['fields']), $fields);
         if (count($add_fields) + count($del_fields) + count($modify_fields) != 0) {
             $modTables[] = array('table' => $table, 'add' => $add_fields, 'del' => $del_fields, 'modify' => $modify_fields);
         }
     }
     foreach ($modTables as $tdef) {
         $sql = 'ALTER TABLE `' . $tdef['table'] . "`";
         $first = true;
         foreach ($tdef['del'] as $col) {
             if ($first) {
                 $first = false;
             } else {
                 $sql .= ',';
             }
             $sql .= "\n    DEL `{$col}`";
         }
         foreach ($tdef['add'] as $col) {
             if ($first) {
                 $first = false;
             } else {
                 $sql .= ',';
             }
             $sql .= "\n    ADD `{$col}` ";
             $sql .= mdle_sql_fielddef($defTables[$tdef['table']], $col);
         }
         foreach ($tdef['modify'] as $col) {
             if ($first) {
                 $first = false;
             } else {
                 $sql .= ',';
             }
             $sql .= "\n    MODIFY `{$col}` ";
             $sql .= mdle_sql_fielddef($defTables[$tdef['table']], $col);
         }
         $pdo->query($sql);
     }
     return true;
 }
示例#2
0
         if ($first) {
             $first = false;
         } else {
             $sql .= ',';
         }
         $sql .= "\n    ADD `{$col}` ";
         $sql .= mdle_sql_fielddef($define_tables[$tdef['table']], $col);
     }
     foreach ($tdef['modify'] as $col) {
         if ($first) {
             $first = false;
         } else {
             $sql .= ',';
         }
         $sql .= "\n    MODIFY `{$col}` ";
         $sql .= mdle_sql_fielddef($define_tables[$tdef['table']], $col);
     }
     $sql_queries[] = $sql;
 }
 if (isset($_POST['installed'])) {
     $pdo->beginTransaction();
     foreach ($sql_queries as $sql) {
         if ($pdo->exec($sql) === false) {
             $valid['installed_base'] = false;
         }
     }
     // Ajout du compte admin
     $sql = $pdo->prepare('SELECT * FROM users WHERE user_name = ?');
     $sql->bindValue(1, $_SESSION['admin_user']);
     $sql->execute();
     if ($sql->rowCount() == 0 && $_SESSION['admin_user'] != '' && $_SESSION['admin_pass'] != '') {
示例#3
0
function mdle_sql_create($table)
{
    $sql = 'CREATE TABLE `' . $table['name'] . "` (\n";
    $first = true;
    foreach (array_keys($table['fields']) as $col) {
        if ($first) {
            $first = false;
        } else {
            $sql .= ",\n";
        }
        $sql .= '    `' . $col . '` ' . mdle_sql_fielddef($table, $col);
    }
    if (isset($table['key'])) {
        $sql .= ",\n    PRIMARY KEY(`{$table['key']}`)";
    }
    if (isset($table['indexes'])) {
        foreach ($table['indexes'] as $name => $index) {
            $sql .= ",\n    ";
            if ($index['type'] == 'unique') {
                $sql .= 'UNIQUE KEY';
            } elseif ($index['type'] == 'index') {
                $sql .= 'KEY';
            } else {
                echo '<br><br><strong>Type index inconnu</strong><br>';
                var_dump($index);
            }
            $sql .= ' `' . $name . '`';
            if (is_array($index['fields'])) {
                $sql .= ' (`' . implode('`, `', $index['fields']) . '`)';
            } else {
                $sql .= ' (`' . $index['fields'] . '`)';
            }
        }
    }
    $sql .= "\n)";
    return $sql;
}