2017-09-17 12:04:30 +01:00
< ? php
namespace BtwInstaller ;
class BlueTwilightUpdater
{
private $baseDirectory ;
private $composerSignature ;
public function __construct ()
{
$this -> baseDirectory = dirname ( __DIR__ );
chdir ( $this -> baseDirectory );
putenv ( 'HOME=' . $this -> baseDirectory );
// Display errors so installer never gets a WSOD!
ini_set ( 'display_errors' , true );
}
public function run ()
{
if ( strtoupper ( $_SERVER [ 'REQUEST_METHOD' ]) == 'POST' )
{
// Handle post
$this -> runUpdate ();
exit ();
}
?>
< html >
< head >
< title > Blue Twilight Update </ title >
</ head >
< body >
< h1 > Blue Twilight Update </ h1 >
< p > This update routine ensures your Blue Twilight Composer packages are up - to - date .</ p >
< p > To get started , simply click the button below .</ p >
< p style = " font-weight: bold; color: #ff0000; " > This can take a few minutes so please be patient , and only click the button once !</ p >
< form method = " post " >
< button type = " submit " > Update Composer and dependencies for me </ button >
</ form >
< hr />
< h2 > Got Composer ? </ h2 >
< p > If you already have Composer installed , however , you may want to use that instead . Just run the below commands on your server , changing the path to Composer as appropriate :</ p >
< p >< em > Please note : & quot ; composer . phar & quot ; may actually be & quot ; composer & quot ; on your system .</ em ></ p >
< pre >
cd < ? php echo $this -> baseDirectory ; ?>
php artisan clear - compiled
/ path / to / composer . phar install
</ pre >
</ body >
</ html >
< ? php
}
private function runUpdate ()
{
?>
< h1 > Updating Blue Twilight Composer packages </ h1 >
< ul >
< ? php
$steps = [
[ 'Removing compiled cache' , 'removeCompiledCached' ],
2018-07-15 21:32:17 +01:00
[ 'Fetching Composer signature' , 'fetchComposerSignature' ],
[ 'Installing Composer' , 'installComposer' ],
2017-09-17 12:04:30 +01:00
[ 'Updating dependencies using Composer' , 'runComposer' ]
];
$successful = true ;
foreach ( $steps as $step )
{
echo sprintf ( " <li>%s...</li>%s " , $step [ 0 ], PHP_EOL );
$result = call_user_func ([ $this , $step [ 1 ]]);
if ( ! $result )
{
$successful = false ;
break ;
}
}
if ( $successful )
{
header ( 'Location: admin' );
exit ();
}
?>
</ ul >
< ? php
}
2018-07-15 21:32:17 +01:00
private function fetchComposerSignature ()
{
if ( ! boolval ( ini_get ( 'allow_url_fopen' )))
{
$this -> echoError ( 'allow_url_fopen is disabled so we cannot use Composer' );
echo '<br/>' ;
$this -> echoError ( 'You will need to install the vendor libraries manually - <a href="https://github.com/pandy06269/blue-twilight/wiki/Install-Vendor-libraries-manually" target="_blank">see this page for more details</a>' );
return false ;
}
$signatureUrl = 'https://composer.github.io/installer.sig' ;
$this -> composerSignature = trim ( file_get_contents ( $signatureUrl ));
if ( strlen ( $this -> composerSignature ) == 0 )
{
$this -> echoError ( sprintf ( " Failed downloading the Composer signature from %s " , $signatureUrl ));
return false ;
}
else
{
$this -> echoOK ( $this -> composerSignature );
}
return true ;
}
2017-09-17 12:04:30 +01:00
private function removeCompiledCached ()
{
ob_start ();
system ( 'php artisan clear-compiled' , $rc );
$result = ob_get_clean ();
echo nl2br ( $result );
if ( $rc != 0 )
{
2017-09-17 12:30:36 +01:00
$this -> echoError ( 'clear-compiled command failed' );
return false ;
}
2017-09-17 12:33:10 +01:00
ob_start ();
2017-09-17 12:30:36 +01:00
system ( 'php artisan cache:clear' , $rc );
$result = ob_get_clean ();
echo nl2br ( $result );
if ( $rc != 0 )
{
$this -> echoError ( 'cache:clear command failed' );
return false ;
}
2017-09-17 16:04:07 +01:00
ob_start ();
system ( 'php artisan config:clear' , $rc );
$result = ob_get_clean ();
echo nl2br ( $result );
if ( $rc != 0 )
{
$this -> echoError ( 'config:clear command failed' );
return false ;
}
2017-09-17 12:33:10 +01:00
ob_start ();
2017-09-17 12:30:36 +01:00
system ( 'php artisan view:clear' , $rc );
$result = ob_get_clean ();
echo nl2br ( $result );
if ( $rc != 0 )
{
$this -> echoError ( 'view:clear command failed' );
2017-09-17 12:04:30 +01:00
return false ;
}
$this -> echoOK ();
return true ;
}
private function echoError ( $message )
{
echo sprintf ( " <span style= \" color: #ff0000; \" >%s.</span>%s " , $message , PHP_EOL );
}
private function echoOK ( $message = '' )
{
echo " <span style= \" color: #008800; \" >OK " ;
if ( strlen ( $message ) > 0 )
{
echo sprintf ( '... %s' , $message );
}
echo '</span>' . PHP_EOL ;
}
2018-07-15 21:32:17 +01:00
private function installComposer ()
{
$rc = - 1 ;
ob_start ();
system ( 'php -r "copy(\'https://getcomposer.org/installer\', \'composer-setup.php\');"' , $rc );
$result = ob_get_clean ();
echo nl2br ( $result );
if ( $rc != 0 )
{
$this -> echoError ( 'Failed to fetch Composer' );
return false ;
}
ob_start ();
system ( sprintf ( 'php -r "if (hash_file(\'SHA384\', \'composer-setup.php\') === \'%s\') { echo \'Installer verified\'; } else { echo \'Installer corrupt\'; unlink(\'composer-setup.php\'); } echo PHP_EOL;"' , $this -> composerSignature ), $rc );
$result = ob_get_clean ();
echo nl2br ( $result );
if ( $rc != 0 )
{
$this -> echoError ( 'Composer verification failed' );
return false ;
}
ob_start ();
system ( 'php composer-setup.php' , $rc );
$result = ob_get_clean ();
echo nl2br ( $result );
if ( $rc != 0 )
{
$this -> echoError ( 'Failed to install Composer' );
return false ;
}
ob_start ();
system ( 'php -r "unlink(\'composer-setup.php\');"' , $rc );
$result = ob_get_clean ();
echo nl2br ( $result );
if ( $rc != 0 )
{
$this -> echoError ( 'Failed to remove Composer setup file' );
return false ;
}
$this -> echoOK ();
return true ;
}
2017-09-17 12:04:30 +01:00
private function runComposer ()
{
ob_start ();
system ( 'php composer.phar install' , $rc );
$result = ob_get_clean ();
echo nl2br ( $result );
if ( $rc != 0 )
{
$this -> echoError ( 'Updating Composer packages failed' );
return false ;
}
$this -> echoOK ();
return true ;
}
}
$installer = new BlueTwilightUpdater ();
$installer -> run ();