Untitled
unknown
php
4 years ago
11 kB
9
Indexable
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Install extends CI_Controller {
public function __construct()
{
parent::__construct();
$this->load->helper('form');
$this->lang->load('auth');
$this->load->library(array('session', 'form_validation'));
$this->form_validation->set_error_delimiters($this->config->item('error_start_delimiter', 'ion_auth'), $this->config->item('error_end_delimiter', 'ion_auth'));
if ($this->router->default_controller != 'install') {
redirect(site_url('auth/login'), 'refresh');
}
}
public function index()
{
$this->session->sess_destroy();
$this->data['title'] = 'Welcome';
$this->load->view('install/index', $this->data);
}
public function step($step)
{
switch($step) {
case '1':
$this->data['checks'] = $this->check_requirements();
$this->data['title'] = 'Requirements';
$this->load->view('install/step_one', $this->data);
break;
case '2':
$checks = $this->check_requirements();
if (!$checks['success']) {
redirect(site_url('install/step/1'), 'refresh');
}
if (isset($_POST) && !empty($_POST)) {
$dbauth = array(
'hostname' => $this->input->post('hostname'),
'database' => $this->input->post('database'),
'username' => $this->input->post('username'),
'password' => $this->input->post('password'),
);
$this->session->set_userdata('dbauth', $dbauth);
$connection = $this->check_database_connection();
if ($connection == 'failed') {
$this->session->set_flashdata('message', '<div class="alert alert-default alert-dismissible fade show">Error establishing a database connection<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button></div>');
} else if ($connection == 'dbnotfound') {
$this->session->set_flashdata('message', '<div class="alert alert-default alert-dismissible fade show">Database not found<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button></div>');
} else {
redirect(site_url('install/migrate'), 'refresh');
}
}
$this->data['title'] = 'Database Configuration';
$this->data['message'] = $this->session->flashdata('message');
$this->data['message'] = $this->session->flashdata('message');
$this->data['dbauth'] = $this->session->userdata('dbauth');
$this->data['database'] = $this->session->userdata('database_setup');
$this->load->view('install/step_two', $this->data);
break;
case '3':
if ($this->session->userdata('database_setup') !== 1) {
redirect(site_url('install/step/3'), 'refresh');
}
if (isset($_POST) && !empty($_POST)) {
$this->session->set_userdata('license_key', $this->input->post('license_key'));
$this->session->set_userdata('license', 'extended');
redirect(site_url('install/step/4'), 'refresh');
}
$this->data['license'] = $this->session->userdata('license');
$this->data['license_key'] = $this->session->userdata('license_key');
$this->data['title'] = 'Software License';
$this->data['message'] = $this->session->flashdata('message');
$this->load->view('install/step_three', $this->data);
break;
case '4':
if ($this->session->userdata('license') !== 'regular' && $this->session->userdata('license') !== 'extended') {
redirect(site_url('install/step/3'), 'refresh');
}
$this->load->database();
$this->load->library('ion_auth');
$this->form_validation->set_rules('firstname', $this->lang->line('create_user_validation_fname_label'), 'trim|required');
$this->form_validation->set_rules('lastname', $this->lang->line('create_user_validation_lname_label'), 'trim');
$this->form_validation->set_rules('email', $this->lang->line('create_user_validation_email_label'), 'trim|required|valid_email');
$this->form_validation->set_rules('password', $this->lang->line('create_user_validation_password_label'), 'required|min_length[' . $this->config->item('min_password_length', 'ion_auth') . ']|max_length[' . $this->config->item('max_password_length', 'ion_auth') . ']|matches[passwordconfirm]');
$this->form_validation->set_rules('passwordconfirm', $this->lang->line('create_user_validation_password_confirm_label'), 'required');
if (isset($_POST) && !empty($_POST)) {
$account = array(
'firstname' => $this->input->post('firstname'),
'lastname' => $this->input->post('lastname'),
'email' => strtolower($this->input->post('email')),
'password' => $this->input->post('password'),
'passwordconfirm' => $this->input->post('passwordconfirm'),
);
$this->session->set_userdata('account', $account);
}
if ($this->form_validation->run() === TRUE && $this->ion_auth->register($account['email'], $account['password'], $account['email'], array('first_name' => $account['firstname'], 'last_name' => $account['lastname']), array('1'))) {
$this->session->set_userdata('account_setup', 1);
redirect(site_url('install/step/5'), 'refresh');
}
$this->data['title'] = 'User Account';
$this->data['account'] = $this->session->userdata('account');
$this->data['account_setup'] = $this->session->userdata('account_setup');
$this->data['message'] = (validation_errors() ? validation_errors() : ($this->ion_auth->errors() ? $this->ion_auth->errors() : $this->session->flashdata('message')));
$this->load->view('install/step_four', $this->data);
break;
case '5':
if ($this->session->userdata('account_setup') !== 1) {
redirect(site_url('install/step/4'), 'refresh');
}
$this->change_routes();
$this->load->database();
$this->settings->set('license_key', $this->session->userdata('license_key'));
$this->data['title'] = 'Installation Complete';
$this->data['account'] = $this->session->userdata('account');
$this->load->view('install/step_five', $this->data);
break;
}
}
public function migrate()
{
$this->load->database();
$this->load->library('migration');
$this->migration->latest();
$this->session->set_userdata('database_setup', 1);
redirect(site_url('install/step/3'), 'refresh');
}
public function check_requirements()
{
$checks = array();
$checks['config'] = is_writable(FCPATH . '/application/config');
$checks['cache'] = is_writable(FCPATH . '/application/cache');
$checks['uploads'] = is_writable(FCPATH . '/assets/uploads');
$checks['curl'] = function_exists('curl_version');
$checks['file_get_contents'] = ini_get('allow_url_fopen');
$checks['success'] = $checks['config'] && $checks['cache'] && $checks['uploads'] && $checks['curl'] && $checks['file_get_contents'];
return $checks;
}
public function check_database_connection() {
$dbauth = $this->session->userdata('dbauth');
if (!$dbauth) { return 'failed'; }
$connection = mysqli_connect($dbauth['hostname'], $dbauth['username'], $dbauth['password']);
if (!$connection) {
mysqli_close($connection);
return 'failed';
}
$db_selected = mysqli_select_db($connection, $dbauth['database']);
if (!$db_selected) {
mysqli_close($connection);
return "dbnotfound";
}
mysqli_close($connection);
$config = file_get_contents(FCPATH . '/application/config/database.php');
$config = str_replace('%DBHOST%', $dbauth['hostname'], $config);
$config = str_replace('%DBUSER%', $dbauth['username'], $config);
$config = str_replace('%DBPASS%', $dbauth['password'], $config);
$config = str_replace('%DBNAME%', $dbauth['database'], $config);
file_put_contents(FCPATH . '/application/config/database.php', $config);
$this->check_already_installed();
return 'success';
}
public function change_routes()
{
// Change base url
$data = file(FCPATH . '/application/config/config.php');
function replace_a_line($data) {
if (stristr($data, '$config[\'base_url\']')) {
return '$config[\'base_url\'] = \'' . site_url() . '\';' . "\n";
}
return $data;
}
$data = array_map('replace_a_line',$data);
file_put_contents(FCPATH . '/application/config/config.php', implode('', $data));
// Change default route
$config = file_get_contents(FCPATH . '/application/config/routes.php');
$config = str_replace('install', 'home', $config);
file_put_contents(FCPATH . '/application/config/routes.php', $config);
}
public function check_already_installed()
{
$this->load->database();
$this->load->library('migration');
$migration = $this->db->get('migrations')->row();
if ($migration->version == 5) {
$this->session->set_userdata('database_setup', 1);
$this->session->set_userdata('account_setup', 1);
$license = $this->db->where('name', 'license_key')->get('settings')->row();
$this->session->set_userdata('license_key', $license->value);
$this->session->set_userdata('license', 'extended');
redirect(site_url('install/step/5'), 'refresh');
}
}
}Editor is loading...