URL: https://raw.githubusercontent.com/albinvar/webzone-api/main/installer/installer.php
#!/usr/bin/php -q
dir = "/data/data/com.termux/files/usr/bin";
echo exec("clear");
$this->logo();
$this->packages = ['php', 'curl', 'composer'];
}
/**
* Basic landing interface with ascii logo.
*
* @return void
*/
public function logo()
{
echo PHP_EOL;
echo PHP_EOL;
echo ' _ __ __ ____ __ ____ ' . PHP_EOL;
echo ' | | /| / /__ / / ___ ___ ___ ___ / _/__ ___ / /____ _/ / /__ ____' . PHP_EOL;
echo ' | |/ |/ / -_) _ \/_ // _ \/ _ \/ -_) _/ // _ \(_-updatePackages();
echo PHP_EOL;
print_r("\033[1;33m Checking Requirements..");
echo PHP_EOL . PHP_EOL;
foreach($this->packages as $package)
{
$this->checkCommand($package);
}
echo PHP_EOL;
if(! getopt('c', ['composer']))
{
$this->installationMode = INSTALLATION_NORMAL_MODE;
} else {
$this->installationMode = INSTALLATION_COMPOSER_MODE;
}
}
/**
* Checks if the operating system is termux and abort if not suppoerted with exit code 1
*
* @return bool
*/
public function checkOs(): bool
{
//checks if the os is termux.
$response = shell_exec('echo $PREFIX | grep -o "com.termux"');
//abort if not termux.
return !empty($response) && ($response == "com.termux\n");
}
/**
* Basically checks if a command/package is installed or not.
*
* @param $cmd
* @return void
*/
private function checkCommand($cmd)
{
if(file_exists(PATH."/$cmd"))
{
echo "\033[32m [*] $cmd is installed\n";
} else {
echo "\033[0;32m [*] $cmd is not installed. Installing $cmd.....\n";
exec(sprintf("apt-get install %s -q", $cmd));
echo "\033[0;32m [*] $cmd is installed\n";
}
}
/**
* Updates all packages in clients machine using apt.
*
* @return void
*/
private function updatePackages()
{
echo "\033[0;36m Updating packages, Please wait...\n\n";
exec("apt-get update && apt-get upgrade -y");
echo "\033[0;36m Updation completed \n";
}
/**
* @return void
*/
public function install()
{
if($this->installationMode == INSTALLATION_NORMAL_MODE)
{
$this->normalInstall();
} elseif($this->installationMode == INSTALLATION_COMPOSER_MODE)
{
$this->composerInstall();
}
}
/**
* Installation of project using composer.
*
* @return void
*/
private function composerInstall()
{
echo "\033[0;36m Installing webzone...\n\n \033[0;32m";
exec('PATH=\$PATH:/data/data/com.termux/files/home/.composer/vendor/bin');
exec('composer global require albinvar/termux-webzone');
echo "\n\033[1;33m Webzone Installation Complete.. Try to execute \"webzone\" on terminal. \n";
exec('webzone composer:global -s -qq');
}
/**
* Launches normal installation process.
* latest version of phar/build file is downloaded from GitHub repository.
*
* @return void
*/
private function normalInstall()
{
echo "\033[1;33m Downloading Webzone\n";
echo PHP_EOL;
$this->downloadPMACurl();
}
/**
* Downloading using curl package installed in clients machine.
*
* @return void
*/
private function downloadPMACurl()
{
echo "\033[32m";
$lines = shell_exec("curl -w '\n%{http_code}\n' " . CLI_LINK . " -o $this->dir/" . COMMAND . " --location --remote-header-name --remote-name");
$lines = explode("\n", trim($lines));
$status = $lines[count($lines)-1];
$this->checkDownloadStatus($status);
}
/**
* Checks download status and shows responses based on exceptions if any error occurs.
*
* @param Int $status
* @return void
*/
private function checkDownloadStatus(Int $status)
{
switch ($status) {
case 000:
echo "Cannot connect to Server";
break;
case 200:
echo "\n Downloaded Successfully...!!!\n";
shell_exec("chmod +x $this->dir/" . COMMAND);
echo PHP_EOL;
echo "\033[1;33m Webzone Installation Complete.. Try to execute \"".COMMAND."\" on terminal. \n";
break;
case 404:
echo "File not found on server..";
break;
default:
echo "An Unknown Error occurred...";
}
}
}
/*
* Creates an instance of WebzoneInstaller.
*
*/
$installer = new WebzoneInstaller();
// checks if the client's os is termux.
if($installer->checkOs())
{
$installer->checkInstallations();
} else {
echo PHP_EOL;
echo "\033[1;31m We are sorry, but Webzone is supported for Termux only.\n";
echo PHP_EOL;
exit(1);
}
// launches the installation process with the predefined installation method.
$installer->install();
/*
* Created by @albinvar
*
*/
?>