summaryrefslogtreecommitdiffstats
path: root/system/libraries/Migration.php
diff options
context:
space:
mode:
Diffstat (limited to 'system/libraries/Migration.php')
-rw-r--r--system/libraries/Migration.php60
1 files changed, 31 insertions, 29 deletions
diff --git a/system/libraries/Migration.php b/system/libraries/Migration.php
index 27d7df010..e96791cef 100644
--- a/system/libraries/Migration.php
+++ b/system/libraries/Migration.php
@@ -46,11 +46,11 @@ class CI_Migration {
* @var bool
*/
protected $_migration_enabled = FALSE;
-
+
/**
* Migration numbering type
*
- * @var bool
+ * @var bool
*/
protected $_migration_type = 'sequential';
@@ -78,10 +78,10 @@ class CI_Migration {
/**
* Whether to automatically run migrations
*
- * @var bool
+ * @var bool
*/
protected $_migration_auto_latest = FALSE;
-
+
/**
* Migration basename regex
*
@@ -99,7 +99,7 @@ class CI_Migration {
/**
* Initialize Migration Class
*
- * @param array
+ * @param array $config
* @return void
*/
public function __construct($config = array())
@@ -140,12 +140,12 @@ class CI_Migration {
{
show_error('Migrations configuration file (migration.php) must have "migration_table" set.');
}
-
+
// Migration basename regex
$this->_migration_regex = ($this->_migration_type === 'timestamp')
? '/^\d{14}_(\w+)$/'
: '/^\d{3}_(\w+)$/';
-
+
// Make sure a valid migration numbering type was set.
if ( ! in_array($this->_migration_type, array('sequential', 'timestamp')))
{
@@ -179,22 +179,22 @@ class CI_Migration {
* Calls each migration step required to get to the schema version of
* choice
*
- * @param int Target schema version
+ * @param int $target_version Target schema version
* @return mixed TRUE if already latest, FALSE if failed, int if upgraded
*/
public function version($target_version)
{
$current_version = (int) $this->_get_version();
$target_version = (int) $target_version;
-
+
$migrations = $this->find_migrations();
-
+
if ($target_version > 0 && ! isset($migrations[$target_version]))
{
$this->_error_string = sprintf($this->lang->line('migration_not_found'), $target_version);
return FALSE;
}
-
+
if ($target_version > $current_version)
{
// Moving Up
@@ -211,7 +211,7 @@ class CI_Migration {
{
return TRUE;
}
-
+
$previous = FALSE;
// Validate all available migrations, and run the ones within our target range
@@ -223,7 +223,7 @@ class CI_Migration {
$this->_error_string = sprintf($this->lang->line('migration_sequence_gap'), $number);
return FALSE;
}
-
+
include $file;
$class = 'Migration_'.ucfirst(strtolower($this->_get_migration_name(basename($file, '.php'))));
@@ -238,7 +238,7 @@ class CI_Migration {
$this->_error_string = sprintf($this->lang->line('migration_missing_'.$method.'_method'), $class);
return FALSE;
}
-
+
$previous = $number;
// Run migrations that are inside the target range
@@ -253,7 +253,7 @@ class CI_Migration {
$this->_update_version($current_version);
}
}
-
+
// This is necessary when moving down, since the the last migration applied
// will be the down() method for the next migration up from the target
if ($current_version <> $target_version)
@@ -272,12 +272,12 @@ class CI_Migration {
/**
* Set's the schema to the latest migration
*
- * @return mixed true if already latest, false if failed, int if upgraded
+ * @return mixed TRUE if already latest, FALSE if failed, int if upgraded
*/
public function latest()
{
$migrations = $this->find_migrations();
-
+
if (empty($migrations))
{
$this->_error_string = $this->lang->line('migration_none_found');
@@ -285,7 +285,7 @@ class CI_Migration {
}
$last_migration = basename(end($migrations));
-
+
// Calculate the last migration step from existing migration
// filenames and procceed to the standard version migration
return $this->version($this->_get_migration_number($last_migration));
@@ -296,7 +296,7 @@ class CI_Migration {
/**
* Set's the schema to the migration version set in config
*
- * @return mixed true if already current, false if failed, int if upgraded
+ * @return mixed TRUE if already current, FALSE if failed, int if upgraded
*/
public function current()
{
@@ -325,24 +325,24 @@ class CI_Migration {
public function find_migrations()
{
$migrations = array();
-
+
// Load all *_*.php files in the migrations path
foreach (glob($this->_migration_path.'*_*.php') as $file)
{
$name = basename($file, '.php');
-
+
// Filter out non-migration files
if (preg_match($this->_migration_regex, $name))
{
$number = $this->_get_migration_number($name);
-
+
// There cannot be duplicate migration numbers
if (isset($migrations[$number]))
{
$this->_error_string = sprintf($this->lang->line('migration_multiple_version'), $number);
show_error($this->_error_string);
}
-
+
$migrations[$number] = $file;
}
}
@@ -356,12 +356,13 @@ class CI_Migration {
/**
* Extracts the migration number from a filename
*
- * @return int Numeric portion of a migration filename
+ * @param string $migration
+ * @return int Numeric portion of a migration filename
*/
protected function _get_migration_number($migration)
{
- $parts = explode('_', $migration);
- return (int) $parts[0];
+ return sscanf($migration, '%d', $number)
+ ? $number : 0;
}
// --------------------------------------------------------------------
@@ -369,7 +370,8 @@ class CI_Migration {
/**
* Extracts the migration class name from a filename
*
- * @return string text portion of a migration filename
+ * @param string $migration
+ * @return string text portion of a migration filename
*/
protected function _get_migration_name($migration)
{
@@ -396,7 +398,7 @@ class CI_Migration {
/**
* Stores the current schema version
*
- * @param int Migration reached
+ * @param int $migration Migration reached
* @return void Outputs a report of the migration
*/
protected function _update_version($migration)
@@ -411,7 +413,7 @@ class CI_Migration {
/**
* Enable the use of CI super-global
*
- * @param $var
+ * @param string $var
* @return mixed
*/
public function __get($var)