diff options
Diffstat (limited to 'engine/lib/upgrades/create_upgrade.php')
| -rw-r--r-- | engine/lib/upgrades/create_upgrade.php | 152 | 
1 files changed, 152 insertions, 0 deletions
| diff --git a/engine/lib/upgrades/create_upgrade.php b/engine/lib/upgrades/create_upgrade.php new file mode 100644 index 000000000..b34f31b7e --- /dev/null +++ b/engine/lib/upgrades/create_upgrade.php @@ -0,0 +1,152 @@ +<?php +/** + * Creates an upgrade file for Elgg. + * + * Run this from the command line: + * 	php create_upgrade.php upgrade_name + */ + +error_reporting(E_NOTICE); + +// only allow from the command line. +if (php_sapi_name() != 'cli') { +	die('Upgrades can only be created from the command line.'); +} + +if (count($argv) < 2) { +	elgg_create_upgrade_show_usage('No upgrade name.'); +} + +$name = $argv[1]; + +if (strlen($name) > 24) { +	elgg_create_upgrade_show_usage('Upgrade names cannot be longer than 24 characters.'); +} + +require_once '../../../version.php'; +require_once '../elgglib.php'; +$upgrade_path = dirname(__FILE__); + +$upgrade_name = strtolower($name); +$upgrade_name = str_replace(array(' ', '-'), '_', $upgrade_name); +$upgrade_release = str_replace(array(' ', '-'), '_', $release); +$time = time(); +$upgrade_rnd = substr(md5($time), 0, 16); +$upgrade_date = date('Ymd', $time); + +// determine the inc count +$upgrade_inc = 0; +$files = elgg_get_file_list($upgrade_path); +sort($files); + +foreach ($files as $filename) { +	$filename = basename($filename); +	$date = (int)substr($filename, 0, 8); +	$inc = (int)substr($filename, 8, 2); + +	if ($upgrade_date == $date) { +		if ($inc >= $upgrade_inc) { +			$upgrade_inc = $inc + 1; +		} +	} +} + +// zero-pad +// if there are more than 10 upgrades in a day, someone needs talking to. +if ($upgrade_inc < 10) { +	$upgrade_inc = "0$upgrade_inc"; +} + +$upgrade_version = $upgrade_date . $upgrade_inc; + +// make filename +if (substr($release, 0, 3) == '1.7') { +	// 1.7 upgrades are YYYYMMDDXX +	$upgrade_name = $upgrade_version . '.php'; +} else { +	// 1.8+ upgrades are YYYYMMDDXX-release-friendly_name-rnd +	$upgrade_name = $upgrade_version . "-$upgrade_release-$name-$upgrade_rnd.php"; +} + +$upgrade_file = $upgrade_path . '/' . $upgrade_name; + +if (is_file($upgrade_file)) { +	elgg_create_upgrade_show_usage("Upgrade file $upgrade_file already exists. This script has failed you."); +} + +$upgrade_code = <<<___UPGRADE +<?php +/** + * Elgg $release upgrade $upgrade_version + * $name + * + * Description + */ + +// upgrade code here. + +___UPGRADE; + +$h = fopen($upgrade_file, 'wb'); + +if (!$h) { +	die("Could not open file $upgrade_file"); +} + +if (!fwrite($h, $upgrade_code)) { +	die("Could not write to $upgrade_file"); +} else { +	elgg_set_version_dot_php_version($upgrade_version); +	echo <<<___MSG + +Created upgrade file and updated version.php. + +Upgrade file: $upgrade_name +Version:      $upgrade_version + +___MSG; +} + +fclose($h); + + +function elgg_set_version_dot_php_version($version) { +	$file = '../../../version.php'; +	$h = fopen($file, 'r+b'); + +	if (!$h) { +		return false; +	} + +	$out = ''; + +	while (($line = fgets($h)) !== false) { +		$find = "/\\\$version[ ]?=[ ]?[0-9]{10};/"; +		$replace = "\$version = $version;"; +		$out .= preg_replace($find, $replace, $line); +	} + +	rewind($h); + +	fwrite($h, $out); +	fclose($h); +	return true; +} + +/** + * Shows the usage for the create_upgrade script and dies(). + * + * @param string $msg Optional message to display + * @return void + */ +function elgg_create_upgrade_show_usage($msg = '') { +	$text = <<<___MSG +$msg + +Example: +	php create_upgrade.php my_upgrade + +___MSG; + +	die($text); +} | 
