<?php
/*	ICrugeStoredUser

	permite abstraer al sistema de un ORDBM que no sea CActiveRecord, para inyectarle
	los metodos requeridos.
	
	@author: Christian Salazar H. <christiansalazarh@gmail.com> @salazarchris74
	@license protected/modules/cruge/LICENSE
*/
interface ICrugeStoredUser
{
    /* es un loadModel de uso multiple. $modo puede ser: 'iduser','username' o 'email' para
        indicar por cual campo se quiere cargar el modelo.
        @returns ICrugeStoredUser
    */
    public static function loadModel($id, $modo = 'iduser');

    /*
        filters es un array 'attribute'=>'value', que se usa para que se entreguen
        aquellos registros que cumplan con.
    */
    public static function listModels($param = array());

    /* entrega un array con los nombres de los atributos clave para orden,
        colocar de primero el primaryKey
    */
    public static function getSortFieldNames();

    /**
    @retuns string nombre de usuario (para login).
     */
    public function getUserName();

    public function getEmail();


    /*
        devuelve el nombre del atributo state, para efectos de listas y reportes,
        es decir para que no muestre un codigo sino el texto
    */
    public function getStateName();

    public function tableName();

    public function getPrimaryKey();

    /*
        recibe un array de instancias de ICrugeField previamente cargada de valores
    */
    public function setFields($arFields);

    /*
        devuelve una lista de campos previamente establecidos con setFields
    */
    public function getFields();

    /*
        debe redefinirse el metodo validate(), para que incluya la validacion
        de cada uno de sus campos extra
    */
    public function validate($attributes = null, $clearErrors = true);

    /*
        debe redefinirse para que incluya a cada uno de sus campos extra
    */
    public function setAttributes($values, $safeOnly = true);

    /*
        debe redefinirse para que guarde el valor de cada uno de sus campos extra
        @see saveFields()
    */
    public function save($runValidation = true, $attributes = null);

    /*
        debe llamarse despues de parent::save() para que guarde
        cada uno de sus campos
    */
    public function saveFields();
}