silverstripe-installer/tools/lib/tools.php

151 lines
3.2 KiB
PHP

<?php
/**
Interfaces to various external modules or binaries
*/
class HTTP {
static function available() {
return function_exists('curl_init');
}
static function get($url, $dst = null) {
$hndl = curl_init($url); $fhndl = null;
curl_setopt($hndl, CURLOPT_FOLLOWLOCATION, true);
// Unfortunately, ssl isn't set up right by default in php for windows
if (strpos(PHP_OS, "WIN") !== false) curl_setopt($hndl, CURLOPT_SSL_VERIFYPEER, false);
if ($dst) {
$fhndl = fopen($dst, 'wb');
curl_setopt($hndl, CURLOPT_FILE, $fhndl);
}
else {
curl_setopt($hndl, CURLOPT_RETURNTRANSFER, true);
}
$res = curl_exec($hndl);
if (!$res) {
throw new Exception("Downloading ".$url." failed - curl says: ".curl_error($hndl));
}
curl_close($hndl);
if ($fhndl) fclose($fhndl);
return $res;
}
}
class SVN {
static function available() {
exec('svn --version', $out, $rv);
return $rv === 0;
}
static function isSVNRepo() {
return is_dir('.svn');
}
static function export($repo, $out) {
`svn export $repo $out`;
}
static function checkout($repo, $out) {
`svn checkout $repo $out`;
}
}
class GIT {
static function available() {
exec('git --version', $out, $rv);
return $rv === 0;
}
static function isGITRepo() {
return is_dir('.git');
}
static function add($dir) {
`git add $dir`;
}
static function ignore($dir) {
$hndl = fopen('.gitignore', 'a');
fwrite($hfnl, $dir."\n");
fclose($hndl);
}
static function checkout($repo, $branch, $out) {
if ($branch) `git clone -b $branch $repo $out`;
else `git clone -b $branch $repo $out`;
}
}
class Piston {
static function available() {
exec('piston --version', $out, $rv);
return $rv === 0;
}
static function import($src, $branch, $dest) {
if ($branch) `piston import --commit $branch $src $dest`;
else `piston import $src $dest`;
}
}
class Zip {
static function available() {
return class_exists('ZipArchive');
}
static function import($src, $dest, $skipdirs = 0, $subdir = null) {
$zip = new ZipArchive;
$res = $zip->open($src);
if ($res === TRUE) {
if ($skipdirs) {
$tmpdir = tempnam(sys_get_temp_dir(), 'phpinstaller-') . '.ext';
mkdir($tmpdir, 0700);
mkdir($dest);
$zip->extractTo($tmpdir);
for($i = 0; $i < $zip->numFiles; $i++){
$name = $srcname = $zip->getNameIndex($i);
$parts = array();
while ($name && $name != '.' && $name != '/') {
array_unshift($parts, basename($name));
$name = dirname($name);
}
if ($subdir) {
// We only need to move the level after the level after the skipdirs level, presuming that level after the skipdirs level == $subdir
if (count($parts) != $skipdirs+2) continue;
if ($parts[$skipdirs] != $subdir) continue;
$dstname = $parts[$skipdirs+1];
}
else {
// We only need to move the very next level after the skipdirs level
if (count($parts) != $skipdirs+1) continue;
$dstname = $parts[$skipdirs];
}
rename($tmpdir.'/'.$srcname, $dest.'/'.$dstname);
}
}
else {
$zip->extractTo($dest);
}
$zip->close();
} else {
throw new Exception('Could not extract zip at '.$src.' to '.$dest);
}
}
}