예제 #1
0
 /**
  * Paginador por sql
  *	
  * @param string $model nombre del modelo
  * @param string $sql consulta sql
  *
  * page: numero de pagina a mostrar (por defecto la pagina 1)
  * per_page: cantidad de elementos por pagina (por defecto 10 items por pagina)
  *			
  *	
  * Retorna un PageObject que tiene los siguientes atributos:
  *  next: numero de pagina siguiente, si no hay pagina siguiente entonces es false
  *  prev: numero de pagina anterior, si no hay pagina anterior entonces es false
  *  current: numero de pagina actual
  *  total: total de paginas que se pueden mostrar
  *  items: array de items de la pagina
  *  count: Total de registros
  *
  * Ejemplos:
  *  $page = paginate_by_sql('usuario', 'SELECT * FROM usuario' , 'per_page: 5', "page: $page_num");
  *	
  * @return object
  **/
 public static function paginate_by_sql($model, $sql)
 {
     $params = Util::getParams(func_get_args());
     $page_number = isset($params['page']) ? $params['page'] : 1;
     $per_page = isset($params['per_page']) ? $params['per_page'] : 10;
     $start = $per_page * ($page_number - 1);
     /**
      * Si es una cadena, instancio el modelo
      **/
     if (is_string($params[0])) {
         $m = Util::camelcase($params[0]);
         $model = ActiveRecord::get($m);
     }
     /**
      * Instancia del objeto contenedor de pagina
      **/
     $page = new stdClass();
     /**
      * Cuento las apariciones atraves de una tabla derivada
      **/
     $n = $model->count_by_sql("SELECT COUNT(*) FROM ({$sql}) AS t");
     $page->items = $model->find_all_by_sql($model->limit($sql, "offset: {$start}", "limit: {$per_page}"));
     /**
      * Se efectuan los calculos para las paginas
      **/
     $page->next = $start + $per_page < $n ? $page_number + 1 : false;
     $page->prev = $page_number > 1 ? $page_number - 1 : false;
     $page->current = $page_number;
     $page->total = $n % $per_page ? (int) ($n / $per_page) + 1 : $n / $per_page;
     $page->count = $n;
     $page->per_page = $per_page;
     return $page;
 }
예제 #2
0
파일: tags.php 프로젝트: raalveco/Escuela
/**
 * Crea una lista SELECT
 *
 * @param string $name
 * @param array, string $data
 *
 * selected: opcion seleccionada
 * include_blank: incluir opcion con valor nulo, se muestra en la opcion el texto aqui indicado
 *
 * Para el select basado en activerecord:
 * option: lista de campos separados por coma para colocar en la opcion (por defecto es el id)
 * separator: separador de valores para los campos de la opcion
 * value: indica el campo que servira de valor para la opcion (por defecto es el id)
 * conditions: condiciones de busqueda
 *
 * @return string
 *
 * Ejemplos:
 * select_tag('marca_id', 'Marca', 'conditions: tipo="2"', 'option: nombre')
 * select_tag('marca_id', 'Marca', 'SELECT * FROM marca WHERE tipo="2"', 'option: nombre')
 * select_tag('sexo', array('M' => 'Masculino', 'F' => 'Femenino'), 'include_blank: Seleccione uno...')
 */
function select_tag($name, $data = array())
{
    $params = is_array($name) ? $name : Util::getParams(func_get_args());
    /**
     * Obtengo id, name y value
     **/
    $params = array_merge(get_id_and_name($params[0]), $params);
    if (!isset($params['selected'])) {
        $value = get_value_from_action($params[0]);
        if ($value) {
            $params['selected'] = $value;
        }
    }
    if (!isset($params[1])) {
        return xhtml_start_tag('select', $params);
    }
    if (isset($params['selected'])) {
        $selected = $params['selected'];
        unset($params['selected']);
    }
    if (isset($params['separator'])) {
        $separator = $params['separator'];
        unset($params['separator']);
    } else {
        $separator = '';
    }
    $options = '';
    if (isset($params['include_blank'])) {
        $options .= "\t" . xhtml_tag('option', array('value' => ''), "content: {$params['include_blank']}");
        unset($params['include_blank']);
    }
    if (is_array($params[1])) {
        if (isset($params[1][0]) && is_object($params[1][0])) {
            if (isset($params['option'])) {
                $fields = array_map('trim', explode(',', $params['option']));
                unset($params['option']);
            } else {
                $fields = array('id');
            }
            foreach ($params[1] as $item) {
                $value = $item->primary_key[0];
                $vals = array();
                foreach ($fields as $option) {
                    array_push($vals, $item->{$option});
                }
                $k = $item->{$value};
                $v = implode($vals, $separator);
                if (isset($selected) && $selected == $k) {
                    $options .= "\t" . option_tag($k, $v, 'selected: selected');
                } else {
                    $options .= "\t" . option_tag($k, $v);
                }
            }
        } else {
            foreach ($params[1] as $k => $v) {
                if (isset($selected) && $selected == $k) {
                    $options .= option_tag($k, $v, 'selected: selected');
                } else {
                    $options .= option_tag($k, $v);
                }
            }
        }
    } elseif (is_string($params[1])) {
        if (isset($params['option'])) {
            $fields = array_map('trim', explode(',', $params['option']));
            unset($params['option']);
        } else {
            $fields = array('id');
        }
        /**
         * combo creado a partir de un modelo
         **/
        $m = ActiveRecord::get($params[1]);
        if (isset($params['value'])) {
            $value = $params['value'];
            unset($params['value']);
        } else {
            $m2 = clone $m;
            $m2->dump_model();
            $value = $m2->primary_key[0];
        }
        if (isset($params[2]) && $params[2]) {
            $items = $m2->find_all_by_sql($params[2]);
        } else {
            /**
             * Arreglo que contiene los argumentos para el find
             **/
            $find_args = array();
            /**
             * Asignando parametros de busqueda
             **/
            if (isset($params['conditions'])) {
                array_push($find_args, "conditions: {$params['conditions']}");
                unset($params['conditions']);
            }
            if (isset($params['columns'])) {
                array_push($find_args, "columns: {$params['columns']}");
                unset($params['columns']);
            }
            if (isset($params['join'])) {
                array_push($find_args, "join: {$params['join']}");
                unset($params['join']);
            }
            if (isset($params['group'])) {
                array_push($find_args, "group: {$params['group']}");
                unset($params['group']);
            }
            if (isset($params['having'])) {
                array_push($find_args, "having: {$params['having']}");
                unset($params['having']);
            }
            if (isset($params['order'])) {
                array_push($find_args, "order: {$params['order']}");
                unset($params['order']);
            }
            if (isset($params['distinct'])) {
                array_push($find_args, "distinct: {$params['distinct']}");
                unset($params['distinct']);
            }
            if (isset($params['limit'])) {
                array_push($find_args, "limit: {$params['limit']}");
                unset($params['limit']);
            }
            if (isset($params['offset'])) {
                array_push($find_args, "limit: {$params['offset']}");
                unset($params['offset']);
            }
            $items = call_user_func_array(array($m2, 'find'), $find_args);
        }
        foreach ($items as $item) {
            $vals = array();
            foreach ($fields as $option) {
                array_push($vals, $item->{$option});
            }
            $k = $item->{$value};
            $v = implode($vals, $separator);
            if (isset($selected) && $selected == $k) {
                $options .= "\t" . option_tag($k, $v, 'selected: selected');
            } else {
                $options .= "\t" . option_tag($k, $v);
            }
        }
    }
    return xhtml_tag('select', $params, "content: {$options}");
}
예제 #3
0
 /**
  * Autentica un usuario usando el adaptador
  *
  * @return boolean
  */
 public function authenticate()
 {
     $where_condition = array();
     foreach ($this->compare_attributes as $field => $value) {
         $value = addslashes($value);
         $where_condition[] = "{$field} = '{$value}'";
     }
     $result = Load::model($this->class)->count(join(" AND ", $where_condition));
     if ($result) {
         $model = ActiveRecord::get($this->class)->find_first(join(" AND ", $where_condition));
         $identity = array();
         foreach ($model->fields as $field) {
             /**
              * Trata de no incluir en la identidad el password del usuario
              */
             if (!in_array($field, array('password', 'clave', 'contrasena', 'passwd', 'pass'))) {
                 $identity[$field] = $model->{$field};
             }
         }
         $this->identity = $identity;
     }
     return $result;
 }