Toggle behavior

By Christian Winther (Jippi)
A small snippet to toggle an ENUM field in a SQL :)

Use

Model Class:

Download code <?php 
class TestModel extends AppModel 
{
    var 
$actsAs = array('Toggle' => array('field' => 'enabled''options' => array('Yes','No'));
}
?>

Code

Model Class:

Download code <?php 
class ToggleBehavior extends ModelBehavior {

    var 
$defaultSettings = array(
        
'field'     => 'active',
        
'options'   => array('Y','N')
    );

    var 
$settings = array();

    
/**
     * Setup callback
     *
     * @param AppModel $model
     * @param array $config
     */
    
function setup(&$model$config = array() )
    {
        
$this->settings[$model->name] = am($this->defaultSettings$config );

        if( 
false === $model->hasField$this->settings[$model->name]['field']))
        {
            
user_error('Model "'.$model->name.'" does not have a field called: '$this->settings[$model->name]['field'], E_USER_ERROR );
        }
    }

    
/**
     * Enter description here...
     *
     * @param AppModel $model
     * @param integer $id
     */
    
function toggle(&$model$id )
    {
        
$config $this->settings[$model->name];

        
$data $model->read($config['field'], $id );
        if( 
false === $data )
        {
            return 
0;
        }

        
$current $data[$model->name][ $config['field'] ];
        
$pos array_search$current$config['options'] );
        
$other $pos === 0;

        if( 
true === $model->saveField$config['field'], $config['options'][$other] ) )
        {
            return 
1;
        }
        return 
0;
    }
}
?>