mirror of
https://github.com/xevidos/codiad.git
synced 2024-11-11 05:36:34 +01:00
465 lines
11 KiB
PHP
465 lines
11 KiB
PHP
|
<?php
|
||
|
|
||
|
ini_set('display_errors', 1);
|
||
|
ini_set('display_startup_errors', 1);
|
||
|
error_reporting(E_ALL);
|
||
|
|
||
|
require_once('../../common.php');
|
||
|
require_once('./class.update.php');
|
||
|
|
||
|
checkSession();
|
||
|
if ( ! checkAccess() ) {
|
||
|
echo "Error, you do not have access to update Codiad.";
|
||
|
exit;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Initiate the update class so we do not have to redefine their
|
||
|
* variables.
|
||
|
*/
|
||
|
|
||
|
class updater {
|
||
|
|
||
|
/**
|
||
|
* Telaaedifex Codiad updater
|
||
|
*
|
||
|
* This updater will extract an archive and then update each file
|
||
|
* with file put contents.
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Constants
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Properties
|
||
|
*/
|
||
|
|
||
|
public $archive = "";
|
||
|
public $path = "";
|
||
|
public $protocol = "";
|
||
|
|
||
|
|
||
|
function __construct() {
|
||
|
|
||
|
$update = new Update();
|
||
|
$this->archive = $update->archive;
|
||
|
$this->path = Common::getConstant('BASE_PATH');
|
||
|
$this->protocol = $this->check_protocol();
|
||
|
|
||
|
//Trigger update
|
||
|
$this->update();
|
||
|
}
|
||
|
|
||
|
function check_protocol() {
|
||
|
|
||
|
if( extension_loaded( 'curl' ) ) {
|
||
|
|
||
|
//Curl is loaded
|
||
|
return "curl";
|
||
|
} elseif( ini_get('allow_url_fopen') ) {
|
||
|
|
||
|
//Remote get file is enabled
|
||
|
return "fopen";
|
||
|
} else {
|
||
|
|
||
|
//None are enabled exit.
|
||
|
return "none";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function copyr( $source, $dest ) {
|
||
|
// Check for symlinks
|
||
|
if (is_link($source)) {
|
||
|
return symlink(readlink($source), $dest);
|
||
|
}
|
||
|
|
||
|
// Simple copy for a file
|
||
|
if (is_file($source)) {
|
||
|
return copy($source, $dest);
|
||
|
}
|
||
|
|
||
|
// Make destination directory
|
||
|
if (!is_dir($dest)) {
|
||
|
mkdir($dest);
|
||
|
}
|
||
|
|
||
|
// Loop through the folder
|
||
|
$dir = dir( $source );
|
||
|
while (false !== $entry = $dir->read()) {
|
||
|
// Skip pointers
|
||
|
if ($entry == '.' || $entry == '..') {
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
// Deep copy directories
|
||
|
$this->copyr("$source/$entry", "$dest/$entry");
|
||
|
}
|
||
|
|
||
|
// Clean up
|
||
|
$dir->close();
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////
|
||
|
// Download latest archive
|
||
|
//////////////////////////////////////////////////////////////////
|
||
|
|
||
|
function download() {
|
||
|
|
||
|
switch( $this->protocol ) {
|
||
|
|
||
|
case( "curl" ):
|
||
|
|
||
|
$filepath = $this->path . "/update.zip";
|
||
|
if( file_exists( $filepath ) ) {
|
||
|
unlink( $filepath );
|
||
|
}
|
||
|
$curl = curl_init();
|
||
|
curl_setopt($curl, CURLOPT_URL, $this->archive);
|
||
|
//curl_setopt($curl, CURLOPT_POSTFIELDS, "");
|
||
|
curl_setopt($curl, CURLOPT_HEADER, 0);
|
||
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
|
||
|
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
|
||
|
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
|
||
|
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13');
|
||
|
$raw_file_data = curl_exec($curl);
|
||
|
curl_close($curl);
|
||
|
|
||
|
file_put_contents( $filepath, $raw_file_data );
|
||
|
return ( filesize( $filepath ) > 0 ) ? true : false;
|
||
|
break;
|
||
|
|
||
|
case( "fopen" ):
|
||
|
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function extract() {
|
||
|
|
||
|
if ( ! extension_loaded( 'zip' ) ) {
|
||
|
|
||
|
echo "<script>document.getElementById('progress').innerHTML = '<p class=\"error_box\">Error, the php zip extension does not seem to be installed. Can not continue with update. Please install the <a href=\"http://php.net/manual/en/book.zip.php\" target=\"_blank\">php zip extension</a></p>'> ... </p>';</script>";
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
$zip = new ZipArchive;
|
||
|
if ( $zip->open( $this->path . "/update.zip" ) === TRUE ) {
|
||
|
|
||
|
$zip->extractTo( $this->path );
|
||
|
$zip->close();
|
||
|
|
||
|
return true;
|
||
|
} else {
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function remove_directory( $path ) {
|
||
|
|
||
|
$files = glob($path . '/*');
|
||
|
foreach ($files as $file) {
|
||
|
|
||
|
is_dir($file) ? $this->remove_directory($file) : unlink($file);
|
||
|
}
|
||
|
rmdir($path);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
function update() {
|
||
|
|
||
|
echo "<script>document.getElementById('progress').innerHTML = '<p class=\"status_box\">Downloading latest version ... </p>';</script>";
|
||
|
if ( ! $this->download() ) {
|
||
|
|
||
|
echo "<script>document.getElementById('progress').innerHTML += '<br><p class=\"error_box\">Error downloading latest version</p>';</script>";
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
echo "<script>document.getElementById('progress').innerHTML = '<p class=\"status_box\">Extracting update ... </p>';</script>";
|
||
|
if ( ! $this->extract() ) {
|
||
|
|
||
|
echo "<script>document.getElementById('progress').innerHTML += '<br><p class=\"error_box\">Error extracting update</p>';</script>";
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
echo "<script>document.getElementById('progress').innerHTML = '<p class=\"status_box\">Updating ... </p>';</script>";
|
||
|
|
||
|
$src = $this->path . "/codiad-master/";
|
||
|
$src_folder = $this->path . "/codiad-master";
|
||
|
$dest = $this->path . "/";
|
||
|
|
||
|
$this->copyr( $src, $dest );
|
||
|
|
||
|
|
||
|
echo "<script>document.getElementById('progress').innerHTML = '<p class=\"status_box\">Removing Update ... </p>';</script>";
|
||
|
$this->remove_directory( $src );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
?>
|
||
|
<!DOCTYPE HTML>
|
||
|
<html>
|
||
|
<head>
|
||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
|
<title>Codiad Update</title>
|
||
|
<style>
|
||
|
html {
|
||
|
|
||
|
}
|
||
|
|
||
|
body{
|
||
|
|
||
|
background-color: #1a1a1a;
|
||
|
color: #fff;
|
||
|
font: normal 13px 'Ubuntu', sans-serif;
|
||
|
height: 100%;
|
||
|
overflow: hidden;
|
||
|
width: 100%;
|
||
|
}
|
||
|
|
||
|
.title {
|
||
|
|
||
|
color: #666;
|
||
|
display: block;
|
||
|
//float: left;
|
||
|
//font-size: 15px;
|
||
|
font-weight: 500;
|
||
|
margin: 10px;
|
||
|
text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.6);
|
||
|
}
|
||
|
|
||
|
#progress {
|
||
|
|
||
|
position: fixed;
|
||
|
top: 50%;
|
||
|
left: 50%;
|
||
|
transform: translate(-50%, -50%);
|
||
|
}
|
||
|
|
||
|
</style>
|
||
|
<script>
|
||
|
|
||
|
</script>
|
||
|
</head>
|
||
|
<body>
|
||
|
<h1 class="title" style="text-align: center;">
|
||
|
Telaaedifex Codiad Updater
|
||
|
</h1>
|
||
|
<div id="progress">
|
||
|
Starting Update ...
|
||
|
</div>
|
||
|
</body>
|
||
|
</html>
|
||
|
<?php
|
||
|
new updater();
|
||
|
?><?php
|
||
|
|
||
|
ini_set('display_errors', 1);
|
||
|
ini_set('display_startup_errors', 1);
|
||
|
error_reporting(E_ALL);
|
||
|
|
||
|
require_once('../../common.php');
|
||
|
require_once('./class.update.php');
|
||
|
|
||
|
checkSession();
|
||
|
if ( ! checkAccess() ) {
|
||
|
echo "Error, you do not have access to update Codiad.";
|
||
|
exit;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Initiate the update class so we do not have to redefine their
|
||
|
* variables.
|
||
|
*/
|
||
|
|
||
|
class updater {
|
||
|
|
||
|
/**
|
||
|
* Telaaedifex Codiad updater
|
||
|
*
|
||
|
* This updater will extract an archive and then update each file
|
||
|
* with file put contents.
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Constants
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Properties
|
||
|
*/
|
||
|
|
||
|
public $archive = "";
|
||
|
public $path = "";
|
||
|
public $protocol = "";
|
||
|
|
||
|
|
||
|
function __construct() {
|
||
|
|
||
|
$update = new Update();
|
||
|
$this->archive = $update->archive;
|
||
|
$this->path = Common::getConstant('BASE_PATH');
|
||
|
$this->protocol = $this->check_protocol();
|
||
|
|
||
|
//Trigger update
|
||
|
$this->update();
|
||
|
}
|
||
|
|
||
|
function check_protocol() {
|
||
|
|
||
|
if( extension_loaded( 'curl' ) ) {
|
||
|
|
||
|
//Curl is loaded
|
||
|
return "curl";
|
||
|
} elseif( ini_get('allow_url_fopen') ) {
|
||
|
|
||
|
//Remote get file is enabled
|
||
|
return "fopen";
|
||
|
} else {
|
||
|
|
||
|
//None are enabled exit.
|
||
|
return "none";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////
|
||
|
// Download latest archive
|
||
|
//////////////////////////////////////////////////////////////////
|
||
|
|
||
|
function download() {
|
||
|
|
||
|
switch( $this->protocol ) {
|
||
|
|
||
|
case( "curl" ):
|
||
|
|
||
|
$filepath = $this->path . "/update.zip";
|
||
|
$curl = curl_init();
|
||
|
curl_setopt($curl, CURLOPT_URL, $this->archive);
|
||
|
//curl_setopt($curl, CURLOPT_POSTFIELDS, "");
|
||
|
curl_setopt($curl, CURLOPT_HEADER, 0);
|
||
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
|
||
|
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
|
||
|
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
|
||
|
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13');
|
||
|
$raw_file_data = curl_exec($curl);
|
||
|
curl_close($curl);
|
||
|
|
||
|
file_put_contents( $filepath, $raw_file_data );
|
||
|
return ( filesize( $filepath ) > 0 ) ? true : false;
|
||
|
break;
|
||
|
|
||
|
case( "fopen" ):
|
||
|
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function extract() {
|
||
|
|
||
|
if ( ! extension_loaded( 'zip' ) ) {
|
||
|
|
||
|
echo "<script>document.getElementById('progress').innerHTML = '<p class=\"error_box\">Error, the php zip extension does not seem to be installed. Can not continue with update. Please install the <a href=\"http://php.net/manual/en/book.zip.php\" target=\"_blank\">php zip extension</a></p>'> ... </p>';</script>";
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
$zip = new ZipArchive;
|
||
|
if ( $zip->open( $this->path . "/update.zip", ZipArchive::OVERWRITE ) === TRUE ) {
|
||
|
|
||
|
$zip->extractTo( $this->path );
|
||
|
$zip->close();
|
||
|
|
||
|
return true;
|
||
|
} else {
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function update() {
|
||
|
|
||
|
echo "<script>document.getElementById('progress').innerHTML = '<p class=\"status_box\">Downloading latest version ... </p>';</script>";
|
||
|
if ( ! $this->download() ) {
|
||
|
|
||
|
echo "<script>document.getElementById('progress').innerHTML += '<br><p class=\"error_box\">Error downloading latest version</p>';</script>";
|
||
|
}
|
||
|
|
||
|
echo "<script>document.getElementById('progress').innerHTML = '<p class=\"status_box\">Extracting update ... </p>';</script>";
|
||
|
if ( ! $this->extract() ) {
|
||
|
|
||
|
echo "<script>document.getElementById('progress').innerHTML += '<br><p class=\"error_box\">Error extracting update</p>';</script>";
|
||
|
}
|
||
|
|
||
|
echo "<script>document.getElementById('progress').innerHTML = '<p class=\"status_box\">Updating ... </p>';</script>";
|
||
|
try {
|
||
|
|
||
|
exec( "cp -a " );
|
||
|
} catch ( exception $e ) {
|
||
|
|
||
|
echo "<script>document.getElementById('progress').innerHTML = '<p class=\"error_box\">Update Failed ... </p>';</script>";
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
echo "<script>document.getElementById('progress').innerHTML = '<p class=\"status_box\">Removing Update ... </p>';</script>";
|
||
|
exec( "rm -rf " . $this->path . "/update.zip;rm -rf " . $this->path . "/codiad-master" );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
?>
|
||
|
<!DOCTYPE HTML>
|
||
|
<html>
|
||
|
<head>
|
||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
|
<title>Codiad Update</title>
|
||
|
<style>
|
||
|
html {
|
||
|
|
||
|
}
|
||
|
|
||
|
body{
|
||
|
|
||
|
background-color: #1a1a1a;
|
||
|
color: #fff;
|
||
|
font: normal 13px 'Ubuntu', sans-serif;
|
||
|
height: 100%;
|
||
|
overflow: hidden;
|
||
|
width: 100%;
|
||
|
}
|
||
|
|
||
|
.title {
|
||
|
|
||
|
color: #666;
|
||
|
display: block;
|
||
|
//float: left;
|
||
|
//font-size: 15px;
|
||
|
font-weight: 500;
|
||
|
margin: 10px;
|
||
|
text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.6);
|
||
|
}
|
||
|
|
||
|
#progress {
|
||
|
|
||
|
position: fixed;
|
||
|
top: 50%;
|
||
|
left: 50%;
|
||
|
transform: translate(-50%, -50%);
|
||
|
}
|
||
|
|
||
|
</style>
|
||
|
<script>
|
||
|
|
||
|
</script>
|
||
|
</head>
|
||
|
<body>
|
||
|
<h1 class="title" style="text-align: center;">
|
||
|
Telaaedifex Codiad Updater
|
||
|
</h1>
|
||
|
<div id="progress">
|
||
|
Starting Update ...
|
||
|
</div>
|
||
|
</body>
|
||
|
</html>
|
||
|
<?php
|
||
|
new updater();
|
||
|
?>
|