View file install/content/temps/installation.phtml

File size: 17.95Kb
<?php 
# @*************************************************************************@
# @ Software author: Mansur Altamirov (Mansur_TL)							@
# @ Author_url 1: https://www.instagram.com/mansur_tl                       @
# @ Author_url 2: http://codecanyon.net/user/mansur_tl                      @
# @ Author E-mail: vayart.help@gmail.com                                    @
# @*************************************************************************@
# @ ColibriSM - The Ultimate Modern Social Media Sharing Platform           @
# @ Copyright (c) 2020 - 2021 ColibriSM. All rights reserved.               @
# @*************************************************************************@

if (isset($_POST['install'])) {

	require_once(PROJ_RP . '/core/libs/DB/vendor/autoload.php');

	$errors             = array();
	$form_fields        = array(
		'sql_host'      => ((empty($_POST['sql_host'])) ? null : strval($_POST['sql_host'])),
		'sql_user'      => ((empty($_POST['sql_user'])) ? null : strval($_POST['sql_user'])),
		'sql_pass'      => ((empty($_POST['sql_pass'])) ? null : strval($_POST['sql_pass'])),
		'sql_db_name'   => ((empty($_POST['sql_db_name'])) ? null : strval($_POST['sql_db_name'])),
		'site_url'      => ((empty($_POST['site_url'])) ? null : strval($_POST['site_url'])),
		'site_name'     => ((empty($_POST['site_name'])) ? null : strval($_POST['site_name'])),
		'site_desc'     => ((empty($_POST['site_desc'])) ? null : strval($_POST['site_desc'])),
		'site_seokw'    => ((empty($_POST['site_seokw'])) ? null : strval($_POST['site_seokw'])),
		'site_title'    => ((empty($_POST['site_title'])) ? null : strval($_POST['site_title'])),
		'site_email'    => ((empty($_POST['site_email'])) ? null : strval($_POST['site_email'])),
		'site_password' => ((empty($_POST['site_password'])) ? null : strval($_POST['site_password'])),
	);

	$_SESSION['sql_host']      = $sql_host      = $form_fields['sql_host'];
	$_SESSION['sql_user']      = $sql_user      = $form_fields['sql_user'];
	$_SESSION['sql_pass']      = $sql_pass      = $form_fields['sql_pass'];
	$_SESSION['sql_db_name']   = $sql_db_name   = $form_fields['sql_db_name'];
	$_SESSION['site_url']      = $site_url      = $form_fields['site_url'];
	$_SESSION['site_name']     = $site_name     = $form_fields['site_name'];
	$_SESSION['site_desc']     = $site_desc     = $form_fields['site_desc'];
	$_SESSION['site_seokw']    = $site_seokw    = $form_fields['site_seokw'];
	$_SESSION['site_title']    = $site_title    = $form_fields['site_title'];
	$_SESSION['site_email']    = $site_email    = $form_fields['site_email'];
	$_SESSION['site_password'] = $site_password = $form_fields['site_password'];


	$mysqlcon = mysqli_connect($sql_host, $sql_user, $sql_pass, $sql_db_name);
	$db       = new MysqliDb($mysqlcon);
	
	if (mysqli_connect_errno()) {
		$errors[] = "Failed to connect to MySQL: " . mysqli_connect_error();
	}

	else if (empty($site_url)) {
       $errors[] = "The site url field is required!";
   	}

	else if (filter_var($site_url, FILTER_VALIDATE_URL) != true) {
       $errors[] = "The site url you entered is not valid!";
   	}

	else if (empty($site_name)) {
       $errors[] = "The site name field is required. Please enter your site name!";
   	}

	else if (mb_strlen($site_name) > 32) {
       $errors[] = "The site name you entered is too long!";
   	}

	else if (empty($site_desc) != true && mb_strlen($site_desc) > 250) {
       $errors[] = "The site description you entered is too long! Max length is 250 characters";
   	}

	else if (empty($$site_seokw) != true && mb_strlen($site_seokw) > 250) {
       $errors[] = "The site SEO keywords you entered is too long! Max length is 250 characters";
   	}

	else if (empty($site_title)) {
       $errors[] = "The title field is required. Please enter your site title!";
   	}

	else if (mb_strlen($site_title) > 55) {
       $errors[] = "The site title you entered is too long!";
   	}
   	
	else if (empty($site_email)) {
       $errors[] = "The site email field is required. Please enter your site email address!";
   	}

	else if (filter_var($site_email, FILTER_VALIDATE_EMAIL) != true) {
       $errors[] = "The site email address you entered is not valid. Please enter a valid email address!";
   	}

   	else if (empty($site_password)) {
       $errors[] = "Please enter an admin password!";
   	}

   	else if (mb_strlen($site_password) < 6) {
       $errors[] = "An admin password must be at least 6 characters!";
   	}

   	else if (mb_strlen($site_password) > 20) {
       $errors[] = "The admin password you entered is too long!";
   	}

   	else {
		$settings_file_content = '<?php
# @*************************************************************************@
# @ Software author: Mansur Altamirov (Mansur_TL)							@
# @ Author_url 1: https://www.instagram.com/mansur_tl                       @
# @ Author_url 2: http://codecanyon.net/user/mansur_tl                      @
# @ Author E-mail: vayart.help@gmail.com                                    @
# @*************************************************************************@
# @ ColibriSM - The Ultimate Modern Social Media Sharing Platform           @
# @ Copyright (c) 2020 - 2021 ColibriSM. All rights reserved.               @
# @*************************************************************************@


# MySQL db host name
$sql_db_host = "' . $sql_host . '";

# MySQL db User
$sql_db_user = "' . $sql_user . '";

# MySQL db Password
$sql_db_pass = "' . $sql_pass . '";

# MySQL db Name
$sql_db_name = "' . $sql_db_name. '";

# Site URL
$site_url    = "' . $site_url . '"; // E.g (https://www.mysite.com)
?>';

		$config_file = file_put_contents(PROJ_RP . '/core/settings.php', trim($settings_file_content));
		if ($config_file) {
			$db_sql_query  = file_get_contents(PROJ_RP . '/colibri-db.sql');
			$insert_status = true;

			preg_match_all('/\{\%begin\%\}(.+?)\{\%end\%\}/is',$db_sql_query, $matches, PREG_PATTERN_ORDER);

			if (isset($matches[1]) && is_array($matches[1])) {
				
				$set_names   = $mysqlcon->query("SET NAMES utf8");
				$set_charset = $mysqlcon->set_charset('utf8mb4');
				$set_charset = $mysqlcon->query("SET collation_connection = utf8mb4_unicode_ci");

				foreach ($matches[1] as $query) {
		        	$query_status = mysqli_query($mysqlcon, $query);

		        	if (empty($query_status)) {
		        		$errors[]      = mysqli_error($mysqlcon);
		        		$errors[]      = "Error at: <code>$query</code>";
		        		$insert_status = false;

						foreach ($cl_tables as $t_name) {
							try {
								mysqli_query($mysqlcon,"DROP TABLE `{$t_name}`");
							} catch (Exception $e) { /*pass*/ }
						}

						break;
		        	}
		        }

		        if ($insert_status) {
					$site_name  = mysqli_real_escape_string($mysqlcon, $site_name);
					$site_desc  = mysqli_real_escape_string($mysqlcon, $site_desc);
					$site_seokw = mysqli_real_escape_string($mysqlcon, $site_seokw);
					$site_title = mysqli_real_escape_string($mysqlcon, $site_title);
					$site_email = mysqli_real_escape_string($mysqlcon, $site_email);
					$db         = $db->where('name','name');
					$qr         = $db->update('cl_configs',array('value' => $site_name));

					if (empty($site_desc) != true) {
						$db = $db->where('name','description');
						$qr = $db->update('cl_configs',array('value' => htmlspecialchars($site_desc)));
					}
					
					if (empty($site_seokw) != true) {
						$db = $db->where('name','keywords');
						$qr = $db->update('cl_configs',array('value' => $site_seokw));
					}

					$db = $db->where('name','title');
					$qr = $db->update('cl_configs',array('value' => $site_title));
					$db = $db->where('name','email');
					$qr = $db->update('cl_configs',array('value' => $site_email));
					$insert_data      = array(
						'fname'       => 'Site',
						'lname'       => 'Admin',
						'username'    => 'administrator',
						'email'       => $site_email,
						'admin'       => '1',
						'active'      => '1',
						'country_id'  => '1',
						'verified'    => '1',
						'start_up'    => 'done',
						'language'    => 'english',
						'last_active' => time(),
						'joined'      => time(),
						'ip_address'  => '0.0.0.0',
						'password'    => password_hash($site_password, PASSWORD_DEFAULT)
					);

					$user_id = $db->insert('cl_users', $insert_data);
					$success = true;
				}
			}

			else {
				$errors[] = "Error found while installing, please contact us.";
			}
		}
   	}
}
?>
<div class="main-cont-inner">
	<?php if (empty($success) != true): ?>
		<div class="cont-header">
			<div class="row">
				<div class="col-6">
					<h2>
						<span class="icon">
							<svg role="img" xmlns="http://www.w3.org/2000/svg" width="48px" height="48px" viewBox="0 0 24 24" aria-labelledby="circleOkIconTitle" stroke="#2329D6" stroke-width="1" stroke-linecap="square" stroke-linejoin="miter" fill="none" color="#2329D6"> <title id="circleOkIconTitle">OK</title> <polyline points="7 13 10 16 17 9"/> <circle cx="12" cy="12" r="10"/> </svg>
						</span>
						<span class="text">
							Installed
						</span>
					</h2>
				</div>
				<div class="col-6">
					<div class="go-back">
						<a href="<?php echo($site_url); ?>">
							<svg role="img" xmlns="http://www.w3.org/2000/svg" width="48px" height="48px" viewBox="0 0 24 24" aria-labelledby="arrowRightTopIconTitle" stroke="#2329D6" stroke-width="1" stroke-linecap="square" stroke-linejoin="miter" fill="none" color="#2329D6"> <title id="arrowRightTopIconTitle">Arrow Right Top</title> <path d="M19 13V5h-8"/> <path stroke-linecap="round" d="M19 5l-1 1"/> <path d="M18 6L5 19"/> </svg>
						</a>
					</div>
				</div>
			</div>
		</div>
		<div class="cont-body">
			<div class="installation">
				<div class="form-content">
					<div class="success">
						<h2>Congratulations!</h2>
						<p>
							Your site has been successfully installed and ready to go.
						</p>
						<a href="<?php echo($site_url); ?>" class="lets-go d-block">
							<button class="btn btn-success">
								Let's Go!
							</button>
						</a>
					</div>
				</div>
			</div>
		</div>
	<?php else: ?>
		<div class="cont-header">
			<div class="row">
				<div class="col-6">
					<h2>
						<span class="icon">
							<svg role="img" xmlns="http://www.w3.org/2000/svg"  viewBox="0 0 24 24" aria-labelledby="downloadIconTitle"  stroke-width="1.8" stroke-linecap="square" stroke-linejoin="miter" fill="none" >  <path d="M12,3 L12,16"/> <polyline points="7 12 12 17 17 12"/> <path d="M20,21 L4,21"/> </svg>
						</span>
						<span class="text">
							Installation
						</span>
					</h2>
				</div>
				<div class="col-6">
					<div class="go-back">
						<a href="?p=requirements">
							<svg role="img" xmlns="http://www.w3.org/2000/svg"  viewBox="0 0 24 24" aria-labelledby="arrowLeftIconTitle"  stroke-width="1.8" stroke-linecap="square" stroke-linejoin="miter" fill="none" >  <path d="M9 6l-6 6 6 6"/> <path d="M21 12H4"/> <path stroke-linecap="round" d="M3 12h1"/> </svg>
						</a>
					</div>
				</div>
			</div>
		</div>
		<div class="cont-body">
			<div class="installation">
				<form id="install-site" class="form" method="post" action="?p=installation">
					<div class="installation-def-title">
						<p>
							Please provide the following info, to begin installing your site.	
						</p>
					</div>
					<div class="form-content">
						<?php if (empty($errors) != true): ?>
							<div class="row">
								<div class="col-12">
									<div class="errors">
										<?php foreach ($errors as $err): ?>
											<p>
												<?php echo($err); ?>
											</p>
										<?php endforeach; ?>
									</div>
								</div>
							</div>
						<?php endif; ?>
						<div class="row">
							<div class="col-12">
								<div class="form-group-title">
									<div>
										Database credentials
									</div>
								</div>
							</div>
						</div>
						
						<div class="row">
							<div class="col-6">
								<div class="form-group">
									<label class="form-input-label">
										SQL host name
									</label>
									<div class="form-input">
										<input value="<?php echo ((isset($_SESSION['sql_host'])) ? $_SESSION['sql_host'] : ''); ?>" class="form-control" type="text" name="sql_host" placeholder="Enter your DB host name. E.g 127.0.0.1">
									</div>
								</div>
							</div>
							<div class="col-6">
								<div class="form-group">
									<label class="form-input-label">
										SQL username
									</label>
									<div class="form-input">
										<input value="<?php echo ((isset($_SESSION['sql_user'])) ? $_SESSION['sql_user'] : ''); ?>" class="form-control" type="text" name="sql_user" placeholder="Enter your DB user name. E.g root_user">
									</div>
								</div>
							</div>
						</div>
						<div class="row">
							<div class="col-6">
								<div class="form-group">
									<label class="form-input-label">
										SQL password
									</label>
									<div class="form-input">
										<input value="<?php echo ((isset($_SESSION['sql_pass'])) ? $_SESSION['sql_pass'] : ''); ?>" class="form-control" type="text" name="sql_pass" placeholder="Enter your DB user password..">
									</div>
								</div>
							</div>
							<div class="col-6">
								<div class="form-group">
									<label class="form-input-label">
										SQL database name
									</label>
									<div class="form-input">
										<input value="<?php echo ((isset($_SESSION['sql_db_name'])) ? $_SESSION['sql_db_name'] : ''); ?>" class="form-control" type="text" name="sql_db_name" placeholder="Enter your DB name. E.g. highexpress_db">
									</div>
								</div>
							</div>
						</div>
						<hr>
						<div class="row">
							<div class="col-12">
								<div class="form-group-title">
									<div>
										Website URL
									</div>
								</div>
							</div>
						</div>
						<div class="row">
							<div class="col-12">
								<div class="form-group">
									<label class="form-input-label">
										Site url
									</label>
									<div class="form-input">
										<input value="<?php echo ((isset($_SESSION['site_url'])) ? $_SESSION['site_url'] : ''); ?>" class="form-control" type="text" name="site_url" placeholder="Enter your site url address. E.g. http(s)://www.domain-name.com">
									</div>
								</div>
							</div>
						</div>
						<hr>
						<div class="row">
							<div class="col-12">
								<div class="form-group-title">
									<div>
										Website name
									</div>
								</div>
							</div>
						</div>
						<div class="row">
							<div class="col-12">
								<div class="form-group">
									<label class="form-input-label">
										Site name
									</label>
									<div class="form-input">
										<input value="<?php echo ((isset($_SESSION['site_name'])) ? $_SESSION['site_name'] : ''); ?>" class="form-control" type="text" name="site_name" placeholder="Enter your site name.">
									</div>
								</div>
							</div>
							<div class="col-12">
								<div class="form-group">
									<label class="form-input-label">
										Site title
									</label>
									<div class="form-input">
										<input value="<?php echo ((isset($_SESSION['site_title'])) ? $_SESSION['site_title'] : ''); ?>" class="form-control" type="text" name="site_title" placeholder="Enter your site title">
									</div>
								</div>
							</div>
						</div>
						<hr>
						<div class="row">
							<div class="col-12">
								<div class="form-group-title">
									<div>
										SEO keywords & description 
									</div>
								</div>
							</div>
						</div>
						<div class="row">
							<div class="col-12">
								<div class="form-group">
									<label class="form-input-label">
										SEO keywords (Optional)
									</label>
									<div class="form-input">
										<input value="<?php echo ((isset($_SESSION['site_seokw'])) ? $_SESSION['site_seokw'] : ''); ?>" class="form-control" type="text" name="site_seokw" placeholder="Enter your site SEO keywords">
									</div>
								</div>
							</div>
							<div class="col-12">
								<div class="form-group">
									<label class="form-input-label">
										Site description (Optional)
									</label>
									<div class="form-input">
										<textarea class="form-control" name="site_desc" placeholder="Enter your site description"><?php echo ((isset($_SESSION['site_desc'])) ? $_SESSION['site_desc'] : ''); ?></textarea>
									</div>
									<small class="info-message">
										If you have not yet defined the description of your site, then you can skip these fields, as you can do this later through the admin panel
									</small>
								</div>
							</div>
						</div>
						<hr>
						<div class="row">
							<div class="col-12">
								<div class="form-group-title">
									<div>
										Admin user credentials
									</div>
								</div>
							</div>
						</div>
						<div class="row">
							<div class="col-6">
								<div class="form-group">
									<label class="form-input-label">
										Site E-mail
									</label>
									<div class="form-input">
										<input value="<?php echo ((isset($_SESSION['site_email'])) ? $_SESSION['site_email'] : ''); ?>" class="form-control" type="text" name="site_email" placeholder="Enter your site E-mail address">
									</div>
								</div>
							</div>
							<div class="col-6">
								<div class="form-group">
									<label class="form-input-label">
										Enter a password for admin
									</label>
									<div class="form-input">
										<input class="form-control" type="text" name="site_password" placeholder="Enter a password">
									</div>
								</div>
							</div>
							<div class="col-12">
								<div class="form-group">
									<small class="info-message">
										Please note that this email and password will be requested to Log-in the site as an administrator!
									</small>
								</div>
							</div>
						</div>
					</div>
					<div class="next-action">
						<div class="ml-auto">
							<button type="submit" class="btn btn-info" name="install">
								Install
							</button>
							<button disabled="true" type="button" class="btn btn-info d-none">
								Please wait...
							</button>
						</div>
					</div>
				</form>
			</div>
		</div>
	<?php endif; ?>
</div>