<?php
/**
CrugeSystem

Es una division del sistema que incopora reglas, grupos, metodos de autenticacion etc.

parametros de configuracion:

$sessionmaxdurationmins			marca el tiempo de expiracion del objeto CrugeSession
$sessionmaxsameipconnections	umbral de sesiones activas de misma IP, si supera no crea sesion
$sessionreusesessions			si es 1, reutiliza la sesion si esta no ha expirado
$sessionmaxsessionsperday		limitador de sesiones diarias globales. -1 = cualquiera.
$sessionmaxsessionsperuser		limitador de sesiones diarias por usuario. -1 = cualquiera.
$systemnonewsessions			si es 1, no admite sesiones nuevas
$systemdown						si es 1, no admite el uso de ninguna sesion

$registerusingcaptcha			1 si quiere usar captcha para registro de usuarios
$registerusingactivation		0 activa de inmediato, 1 envia mail, 2 activa manualmente
$registerusingterms				1 muestra los $terms como requisito para activar boton submit
$registerusingtermslabel		etiqueta del checkbox
$terms							los terminos para registrarse
$defaultroleforregistration		el rol que se aplicara por defecto a los usuarios registrados
$registrationonlogin			1 o 0, para que aparezca el link de "registration" en el form login
 * @author: Christian Salazar H. <christiansalazarh@gmail.com> @salazarchris74
 * @license protected/modules/cruge/LICENSE
 */
class CrugeSystem extends CActiveRecord implements ICrugeSystem
{

    public function get($attribute)
    {
        if (isset($this[$attribute])) {
            return trim($this[$attribute]);
        }
        // es posible que esta excepcion aparezca tras el commit:
        //	https://bitbucket.org/christiansalazarh/cruge/changeset/a1b8d66ae2
        //
        throw new CrugeException("se detecto una solicitud de atributo invalido a CrugeSystem.  este error se debe a que estas pidiendo un atributo que no esta presente en la tabla: " . $this->tableName(
        ));
    }

    public function getn($attribute)
    {
        return (1 * ($this->get($attribute)));
    }

    public static function findSystem($systemName)
    {
        return self::model()->findByAttributes(array('name' => trim($systemName)));
    }

    /*
        entrega un array de ICrugeSystem
    */
    public static function listModels()
    {
        return self::model()->findAll();
    }

    public function getShortName()
    {
        return $this->name;
    }

    public function getLargeName()
    {
        return $this->largename;
    }

    /*
        @returns boolean true si el sistema esta disponible para iniciar sesion
    */
    public function isAvailableForLogin()
    {
        return ($this->getn('systemdown') != 1);
    }

    /**
     * @return string the associated database table name
     */
    public function tableName()
    {
        return CrugeUtil::getTableName('system');
    }

    public function getPrimaryKey()
    {
        return $this->idsystem;
    }


    /**
     * Returns the static model of the specified AR class.
     * @return CrugeSystem the static model class
     */
    public static function model($className = __CLASS__)
    {
        return parent::model($className);
    }

    /**
     * @return array validation rules for model attributes.
     */
    public function rules()
    {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
            array('name', 'required'),
            array('name', 'length', 'max' => 45),
            array('systemdown', 'safe',),
            array('systemnonewsessions', 'safe',),
            array('sessionmaxdurationmins', 'required',),
            array(
                'sessionmaxdurationmins',
                'numerical',
                'min' => 0,
                'max' => '9999'
            ,
                'message' => CrugeTranslator::t('Use un valor entre 0 y 9999')
            ),
            array('registerusingactivation', 'safe',),
            array('registerusingterms', 'safe',),
            array('registerusingtermslabel', 'safe',),
            array('registerusingtermslabel', 'length', 'max' => 100),
            array('registerusingcaptcha', 'safe',),
            array('defaultroleforregistration', 'safe',),
            array('terms', 'safe',),
            array('registrationonlogin', 'safe',),
        );
    }

    /**
     * @return array relational rules.
     */
    public function relations()
    {
        // NOTE: you may need to adjust the relation name and the related
        // class name for the relations automatically generated below.
        return array();
    }

    /**
     * @return array customized attribute labels (name=>label)
     */
    public function attributeLabels()
    {
        return array(
            'idsystem' => 'Idsystem',
            'name' => 'Name',
            'systemdown' => CrugeTranslator::t("Detener Sistema"),
            'systemnonewsessions' => CrugeTranslator::t("No Admitir Nuevas Sesiones"),
            'sessionmaxdurationmins' => CrugeTranslator::t("Minutos de Duracion de la Sesion"),
            'registerusingactivation' => CrugeTranslator::t("Activacion del usuario registrado"),
            'defaultroleforregistration' => CrugeTranslator::t("Asignar Rol a usuarios registrados"),
            'registerusingterms' => CrugeTranslator::t("Registrarse usando terminos"),
            'registerusingtermslabel' => CrugeTranslator::t("Etiqueta"),
            'registrationonlogin' => CrugeTranslator::t("Ofrecer opciĆ³n de Registrarse en pantalla de Login"),
            'registerusingcaptcha' => CrugeTranslator::t("Registrarse usando captcha"),
            'terms' => CrugeTranslator::t("Terminos y Condiciones de Registro"),
        );
    }

    /**
     * Retrieves a list of models based on the current search/filter conditions.
     * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions.
     */
    public function search()
    {
        // Warning: Please modify the following code to remove attributes that
        // should not be searched.

        $criteria = new CDbCriteria;

        $criteria->compare('idsystem', $this->idsystem);
        $criteria->compare('name', $this->name, true);

        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
        ));
    }
}