public function create_database($username, $password) { $db = new MySQLi_connection(DB_HOSTNAME, "mysql", $username, $password); if ($db->connected == false) { $this->output->add_message("Error connecting to database."); return false; } $db->query("begin"); /* Create database */ $query = "create database if not exists %S character set utf8"; if ($db->query($query, DB_DATABASE) == false) { $db->query("rollback"); $this->output->add_message("Error creating database."); return false; } /* Create user */ $query = "select count(*) as count from user where User=%s"; if (($users = $db->execute($query, DB_USERNAME)) === false) { $db->query("rollback"); $this->output->add_message("Error checking for user."); return false; } if ($users[0]["count"] == 0) { $query = "create user %s@%s identified by %s"; if ($db->query($query, DB_USERNAME, DB_HOSTNAME, DB_PASSWORD) == false) { $db->query("rollback"); $this->output->add_message("Error creating user."); return false; } } else { $login_test = new MySQLi_connection(DB_HOSTNAME, DB_DATABASE, DB_USERNAME, DB_PASSWORD); if ($login_test->connected == false) { $db->query("rollback"); $this->output->add_message("Invalid credentials in settings/website.conf."); return false; } } /* Set access rights */ $rights = array("select", "insert", "update", "delete", "create", "drop", "alter", "index", "lock tables", "create view", "show view"); $query = "grant " . implode(", ", $rights) . " on %S.* to %s@%s"; if ($db->query($query, DB_DATABASE, DB_USERNAME, DB_HOSTNAME) == false) { $db->query("rollback"); $this->output->add_message("Error setting access rights."); return false; } /* Commit changes */ $db->query("commit"); $db->query("flush privileges"); unset($db); return true; }