123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546 |
- <?php
- use app\models\AgenciaRole;
- use app\models\CuentaRole;
- use oxusmedia\webAppMulti\webApp;
- use oxusmedia\webAppMulti\controller;
- use oxusmedia\webApp\grid;
- use oxusmedia\webApp\form;
- use oxusmedia\webApp\tabs;
- use oxusmedia\webApp\tab;
- use oxusmedia\webApp\column;
- use oxusmedia\webApp\input;
- use oxusmedia\webApp\hidden;
- use oxusmedia\webApp\password;
- use oxusmedia\webApp\select;
- use oxusmedia\webApp\gridActionButton;
- use oxusmedia\webApp\notificacion;
- class usuario extends controller
- {
- public function index()
- {
- $this->webApp()->requireLoginRedir(webApp::ROLE_ADMIN);
- $this->titulo = 'Usuarios';
- $grid = $this->configGrid();
- $this->render("index", array(
- 'grid' => $grid
- ));
- }
- private function configGrid()
- {
- $grid = new grid('usuarios');
- $grid
- ->setJsonUrl($this->getMethodUrl('data'))
- ->setUniqueIdFields('id')
- ->setColModel(array(
- array(
- 'name' => 'nombre',
- 'width' => 200,
- 'format' => grid::FMT_STRING
- ),
- array(
- 'name' => 'email',
- 'width' => 200,
- 'format' => grid::FMT_STRING
- ),
- array(
- 'name' => 'role',
- 'width' => 150,
- 'format' => grid::FMT_SELECT,
- 'formatoptions' => array('value' => AgenciaRole::getDescripcion())
- ),
- array(
- 'name' => 'ultimoLogin',
- 'label' => 'Última sesión',
- 'format' => grid::FMT_DATETIME
- )
- ))
- ->setDefaultSortName('nombre')
- ->setDefaultSortOrder('asc')
- ->setActions(array(
- new gridActionButton(gridActionButton::ADD, $this->webApp()->getSite() . 'usuario/add'),
- new gridActionButton(gridActionButton::EDIT, $this->webApp()->getSite() . 'usuario/edit'),
- new gridActionButton(gridActionButton::MULTI_DELETE, $this->webApp()->getSite() . 'usuario/delete')
- ));
- return $grid;
- }
- public function add()
- {
- $this->webApp()->requireLogin(webApp::ROLE_ADMIN);
- $form = new form('usuario', array(
- new tabs('tabs', array(
- new tab('datos', array(
- new column(array(
- new input('email', array(
- 'rules' => array(
- 'required' => true,
- 'email' => true
- )
- )),
- new password('pass', array(
- 'label' => 'Contraseña',
- 'rules' => array(
- 'required' => true
- )
- )),
- new input('nombre', array(
- 'rules' => array(
- 'required' => true
- )
- )),
- new select('role', AgenciaRole::getDescripcion(), array(
- 'label' => 'Rol en agencia',
- 'htmlOptions' => array(
- 'onchange' => "changeRol($(this).val());"
- )
- ))
- ))
- ), array(
- 'title' => 'Datos del usuario'
- )),
- new tab('cuentas', array(
- new column($this->getCuentasRoleSelect($col2)),
- new column($col2)
- ))
- ))
- ), array(
- 'action' => $this->webApp()->getSite() . 'usuario/add',
- 'ajax' => true,
- 'gridId' => "usuarios"
- ));
- if (isset($_POST['usuario'])) {
- $form->setAtributes($_POST['usuario']);
- if ($form->validate()) {
- $param = $form->getAtributes();
- $param['pass'] = md5($param['pass']);
- $ctasRoles = $this->getCuentasRoles($param);
- $this->db()->insert('usuarios', $param);
- $id = $this->db()->insertId();
- foreach ($ctasRoles as $cta => $role) {
- if ($role != CuentaRole::ROLE_NONE)
- $this->db()->insert('usuarioscuentas', array(
- 'usuario_id' => $id,
- 'cuenta_id' => $cta,
- 'role' => $role
- ));
- }
- $this->returnJson(array(
- 'error' => 0
- ));
- }
- } else {
- $this->render('form', array(
- 'form' => $form
- ));
- }
- }
- public function edit()
- {
- $this->webApp()->requireLogin(webApp::ROLE_ADMIN);
- $usuario = $this->db()->queryRow('SELECT id, usuario, email, nombre, role FROM usuarios WHERE id = :id', array(
- 'id' => isset($_POST['usuario']['id']) ? $_POST['usuario']['id'] : $_POST['id']
- ));
- if ($usuario) {
- $htmlOptionsAgenciaRole = array(
- 'onchange' => "changeRol($(this).val());"
- );
- if ($usuario->usuario == 'admin')
- $htmlOptionsAgenciaRole['disabled'] = 'disabled';
- $form = new form('usuario', array(
- new tabs('tabs', array(
- new tab('datos', array(
- new column(array(
- new hidden('id'),
- new input('email', array(
- 'rules' => array(
- 'required' => true,
- 'email' => true
- )
- )),
- new password('pass', array(
- 'label' => 'Contraseña',
- 'htmlOptions' => array(
- 'placeholder' => 'dejar vacío para no cambiar la contraseña'
- )
- )),
- new input('nombre', array(
- 'rules' => array(
- 'required' => true
- )
- )),
- new select('role', AgenciaRole::getDescripcion(), array(
- 'label' => 'Rol en agencia',
- 'htmlOptions' => $htmlOptionsAgenciaRole
- ))
- ))
- ), array(
- 'title' => 'Datos del usuario'
- )),
- new tab('cuentas', array(
- new column($this->getCuentasRoleSelect($col2)),
- new column($col2)
- ))
- ))
- ), array(
- 'action' => $this->webApp()->getSite() . 'usuario/edit',
- 'ajax' => true,
- 'gridId' => "usuarios"
- ));
- if (isset($_POST['usuario'])) {
- $form->setAtributes($_POST['usuario']);
- if ($form->validate()) {
- $param = $form->getAtributes();
- if (!empty($param['pass']))
- $param['pass'] = md5($param['pass']);
- else
- unset($param['pass']);
- $ctasRoles = $this->getCuentasRoles($param);
- $this->db()->update('usuarios', $param,
- array(
- 'id' => $param['id']
- )
- );
- foreach ($ctasRoles as $ctaId => $role) {
- if ($role == CuentaRole::ROLE_NONE) {
- $this->db()->delete('usuarioscuentas',
- array(
- 'usuario_id' => $usuario->id,
- 'cuenta_id' => $ctaId
- )
- );
- } else {
- $this->db()->insert('usuarioscuentas', array(
- 'usuario_id' => $usuario->id,
- 'cuenta_id' => $ctaId,
- 'role' => $role
- ), true);
- if ($this->db()->affectedRows() == 0)
- $this->db()->update('usuarioscuentas',
- array(
- 'role' => $role
- ),
- array(
- 'usuario_id' => $usuario->id,
- 'cuenta_id' => $ctaId
- )
- );
- }
- }
- $this->returnJson(array(
- 'error' => 0
- ));
- }
- } else {
- $cuentas = $this->db()->query('SELECT cuentas.*, usuarioscuentas.role FROM cuentas LEFT JOIN usuarioscuentas ON usuarioscuentas.cuenta_id = cuentas.id WHERE usuarioscuentas.usuario_id = :usuario_id', array(
- 'usuario_id' => $usuario->id
- ));
- $form->setAtributes($usuario);
- $ctasRoles = array();
- while ($cta = $this->db()->getRow($cuentas))
- $ctasRoles['cuentarole_' . $cta->id] = $cta->role;
- $form->setAtributes($ctasRoles);
- $this->render('form', array(
- 'form' => $form
- ));
- }
- }
- }
- public function delete()
- {
- $this->webApp()->requireLogin(webApp::ROLE_ADMIN);
- if (isset($_POST['id'])) {
- $db = $this->db();
- $usuario = $db->queryRow('SELECT * FROM usuarios WHERE id IN(:ids) AND usuario = :usuario', array(
- 'usuario' => 'admin',
- 'ids' => implode(',', $_POST['id'])
- ));
- if (!$usuario) {
- $db->query('DELETE FROM usuarioscuentas WHERE usuario_id IN(:ids)', array(
- 'ids' => implode(',', $_POST['id'])
- ));
- $db->query('DELETE FROM usuarios WHERE id IN(:ids)', array(
- 'ids' => implode(',', $_POST['id'])
- ));
- $this->returnJson(array(
- 'error' => 0
- ));
- } else {
- $this->returnJson(array(
- 'error' => 1,
- 'mensaje' => 'No se permite eliminar el usuario admin.'
- ));
- }
- }
- }
- public function data()
- {
- $this->webApp()->requireLogin(webApp::ROLE_ADMIN);
- $grid = $this->configGrid();
- $grid->renderData($this->db(), "SELECT * FROM usuarios");
- }
- public function miperfil()
- {
- $this->webApp()->requireLoginRedir();
- $this->titulo = 'Mi perfil';
- $form = new form('usuario', array(
- new column(array(
- new input('email', array(
- 'rules' => array(
- 'required' => true,
- 'email' => true
- )
- )),
- new password('pass', array(
- 'label' => 'Contraseña',
- 'htmlOptions' => array(
- 'placeholder' => 'dejar vacío para no cambiar la contraseña'
- )
- )),
- new input('nombre', array(
- 'rules' => array(
- 'required' => true
- )
- )),
- new select('theme', array(
- webApp::THEME_LIGHT => 'Claro',
- webApp::THEME_DARKLY => 'Oscuro'
- ), array(
- 'label' => 'Tema'
- ))
- ))
- ));
- if (isset($_POST['usuario'])) {
- $form->setAtributes($_POST['usuario']);
- if ($form->validate()) {
- $param = $form->getAtributes();
- if (!empty($param['pass']))
- $param['pass'] = md5($param['pass']);
- else
- unset($param['pass']);
- $this->db()->update('usuarios', $param,
- array(
- 'id' => $this->webApp()->getUsuarioId()
- )
- );
- $this->webApp()->setTheme($param['theme']);
- $this->notify('Sus datos se actualizaron correctamente', notificacion::SUCCESS);
- }
- } else {
- $usuario = $this->db()->queryRow('SELECT email, nombre, theme FROM usuarios WHERE id = :id', array(
- 'id' => $this->webApp()->getUsuarioId()
- ));
- $form->setAtributes($usuario);
- }
- $this->render("miperfil", array(
- 'form' => $form
- ));
- }
- public function theme()
- {
- $this->webApp()->requireLoginRedir();
- if (isset($_GET['id'])) {
- if ($this->webApp()->setTheme($_GET['id'])) {
- $this->db()->update('usuarios',
- array(
- 'theme' => $_GET['id']
- ),
- array(
- 'id' => $this->webApp()->getUsuarioId()
- )
- );
- }
- $this->redirect($_SERVER['HTTP_REFERER']);
- }
- }
- private function getCuentasRoleSelect(&$col2)
- {
- $cuentas = $this->db()->query('SELECT * FROM cuentas WHERE active = :active ORDER BY cuenta', array(
- 'active' => 1
- ));
- $col1 = array();
- $col2 = array();
- $n = 0;
- while ($c = $this->db()->getRow($cuentas)) {
- $n ++;
- $permiso = new select('cuentarole_' . $c->id . '', CuentaRole::getDescripcion(), array(
- 'label' => $c->cuenta
- ));
- if ($n % 2 != 0)
- $col1[] = $permiso;
- else
- $col2[] = $permiso;
- }
- return $col1;
- }
- private function getCuentasRoles(&$param)
- {
- $arr = array();
- foreach ($param as $f => $v) {
- if (strpos($f, 'cuentarole_') !== false) {
- $arr[str_replace('cuentarole_', '', $f)] = $v;
- unset($param[$f]);
- }
- }
- return $arr;
- }
- }
|