Changeset 298

Show
Ignore:
Timestamp:
07/30/07 16:21:13 (1 year ago)
Author:
bermiferrer
Message:

Adding support for going up and down on migrations. Closes #11.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/lib/AkInstaller.php

    r292 r298  
    5252    } 
    5353 
     54    function up($version = null, $options = array()) 
     55    { 
     56        return $this->_upgradeOrDowngrade('up', $version, $options); 
     57    } 
     58 
    5459 
    5560    function uninstall($version = null, $options = array()) 
     61    { 
     62        return $this->_upgradeOrDowngrade('down', $version, $options); 
     63    } 
     64 
     65    function down($version = null, $options = array()) 
    5666    { 
    5767        return $this->_upgradeOrDowngrade('down', $version, $options); 
     
    7484        if($action == 'up'){ 
    7585            $newest_version = max($available_versions); 
    76             $version = is_numeric($version) ? $version : $newest_version; 
    77  
    78             if($version <= $newest_version && $version > $current_version){ 
    79                 $versions = array_slice($available_versions, array_shift(array_keys($available_versions,$current_version))+($current_version ? 1 : 0)); 
    80             } 
    81  
     86            $version = isset($version[0]) && is_numeric($version[0]) ? $version[0] : $newest_version; 
     87            $versions = range($current_version+1,$version); 
     88             
     89            if($current_version > $version){ 
     90                echo Ak::t("You can't upgrade to version %version, when you are currently on version %current_version", array('%version'=>$version,'%current_version'=>$current_version)); 
     91                return false; 
     92            } 
    8293        }else{ 
    83             $version = is_numeric($version) ? $version : 1; 
    84             $installed_versions = array_slice(array_reverse($available_versions), array_shift(array_keys(array_reverse($available_versions),$current_version))); 
    85             $versions = array_slice($installed_versions, array_shift(array_keys($installed_versions,$current_version))); 
    86             if(!in_array($version, $versions)){ 
     94            $version = !empty($version[0]) && is_numeric($version[0]) ? $version[0] : 0; 
     95            $versions = range($current_version, empty($version) ? 1 : $version+1); 
     96 
     97            if($current_version < $version){ 
     98                echo Ak::t("You can't downgrade to version %version, when you just have installed version %current_version", array('%version'=>$version,'%current_version'=>$current_version)); 
    8799                return false; 
    88100            } 
     101        } 
     102 
     103        if($current_version == $version){ 
     104            echo Ak::t("Can't go $action to version %version, you're already on version %version", array('%version'=>$version)); 
     105            return false; 
    89106        } 
    90107 
     
    545562        return file_exists($path) ? $path : false; 
    546563    } 
    547      
     564 
    548565    function _ensureColumnNameCompatibility($columns) 
    549566    { 
     
    560577        $invalid_columns = $this->_getInvalidColumnNames(); 
    561578        if(in_array($column_name, $invalid_columns)){ 
    562              
     579 
    563580            $method_name_part = AkInflector::camelize($column_name); 
    564581            require_once(AK_LIB_DIR.DS.'AkActiveRecord.php'); 
     
    603620    function usage() 
    604621    { 
    605         return Ak::t("Description: 
     622        echo Ak::t("Description: 
    606623    Database migrations is a sort of SCM like subversion, but for database settings. 
    607624 
  • trunk/lib/constants.php

    r297 r298  
    162162    // ini_set('session.cookie_domain', AK_COOKIE_DOMAIN); 
    163163 
     164    defined('AK_INSECURE_APP_DIRECTORY_LAYOUT') ? null : define('AK_INSECURE_APP_DIRECTORY_LAYOUT', false); 
     165 
     166    if(!defined('AK_ASSET_URL_PREFIX')){ 
     167        defined('AK_ASSET_URL_PREFIX') ? null : define('AK_ASSET_URL_PREFIX', AK_INSECURE_APP_DIRECTORY_LAYOUT ? AK_SITE_URL_SUFFIX.str_replace(array(AK_BASE_DIR,'\\','//'),array('','/','/'), AK_PUBLIC_DIR) : AK_SITE_URL_SUFFIX); 
     168    } 
     169 
     170 
    164171}else{ 
    165172    defined('AK_PROTOCOL') ? null : define('AK_PROTOCOL','http://'); 
     
    170177    defined('AK_CURRENT_URL') ? null : define('AK_CURRENT_URL', 'http://localhost/'); 
    171178    defined('AK_COOKIE_DOMAIN') ? null : define('AK_COOKIE_DOMAIN', AK_HOST); 
     179     
     180    defined('AK_ASSET_URL_PREFIX') ? null : define('AK_ASSET_URL_PREFIX', ''); 
    172181} 
    173182 
     
    179188 
    180189defined('AK_ASSET_HOST') ? null : define('AK_ASSET_HOST',''); 
    181  
    182 defined('AK_INSECURE_APP_DIRECTORY_LAYOUT') ? null : define('AK_INSECURE_APP_DIRECTORY_LAYOUT', false); 
    183  
    184 if(!defined('AK_ASSET_URL_PREFIX')){ 
    185     defined('AK_ASSET_URL_PREFIX') ? null : define('AK_ASSET_URL_PREFIX', AK_INSECURE_APP_DIRECTORY_LAYOUT ? AK_SITE_URL_SUFFIX.str_replace(array(AK_BASE_DIR,'\\','//'),array('','/','/'), AK_PUBLIC_DIR) : AK_SITE_URL_SUFFIX); 
    186 } 
    187190 
    188191defined('AK_DEV_MODE') ? null : define('AK_DEV_MODE', AK_ENVIRONMENT == 'development'); 
  • trunk/script/migrate

    r2 r298  
    3838 
    3939if($installer_name == 'Installer'){ 
    40     echo "\n  You must supply a valid installer name  \n"; 
     40    $files = Ak::dir(AK_APP_DIR.DS.'installers'); 
     41    if(empty($files)){ 
     42        echo Ak::t("\n  Could not find installers at %dir  \n", array('%dir'=>AK_APP_DIR.DS.'installers')); 
     43 
     44    }else{ 
     45        echo Ak::t("\n  You must supply a valid installer name like : \n"); 
     46        echo Ak::t("\n  > ./script/migrate my_installer_name install\n\n"); 
     47        echo Ak::t("  Available installers are:  \n\n"); 
     48        foreach($files as $file){ 
     49            if(preg_match('/(.*)_installer\.php$/', $file, $match)){ 
     50                echo ' * '.$match[1]."\n"; 
     51            }         
     52        } 
     53        echo "\n"; 
     54    } 
    4155}elseif(!file_exists($file)){ 
    4256    echo Ak::t("\n\n  Could not locate the installer file %file\n\n",array('%file'=>$file));