private function modificar_user() { if (FS_DEMO and $this->user->nick != $this->suser->nick) { $this->new_error_msg('En el modo <b>demo</b> sólo puedes modificar los datos de TU usuario. Esto es así para evitar malas prácticas entre usuarios que prueban la demo.'); } else { if (!$this->allow_modify) { $this->new_error_msg('No tienes permiso para modificar estos datos.'); } else { $user_no_more_admin = FALSE; $error = FALSE; if ($_POST['spassword'] != '') { if ($_POST['spassword'] == $_POST['spassword2']) { $this->suser->set_password($_POST['spassword']); } else { $this->new_error_msg('Las contraseñas no coinciden.'); $error = TRUE; } } $this->suser->email = $_POST['email']; if (isset($_POST['scodagente'])) { $this->suser->codagente = NULL; if ($_POST['scodagente'] != '') { $this->suser->codagente = $_POST['scodagente']; } } /* * Propiedad admin: solamente un admin puede cambiarla. */ if ($this->user->admin) { /* * El propio usuario no puede decidir dejar de ser administrador. */ if ($this->user->nick != $this->suser->nick) { /* * Si un usuario es administrador y deja de serlo, hay que darle acceso * a algunas páginas, en caso contrario no podrá continuar */ if ($this->suser->admin and !isset($_POST['sadmin'])) { $user_no_more_admin = TRUE; } $this->suser->admin = isset($_POST['sadmin']); } } $this->suser->fs_page = NULL; if (isset($_POST['udpage'])) { $this->suser->fs_page = $_POST['udpage']; } if (isset($_POST['css'])) { $this->suser->css = $_POST['css']; } if ($error) { } else { if ($this->suser->save()) { if (!$this->user->admin) { /// si no eres administrador, no puedes cambiar los permisos } else { if (!$this->suser->admin) { /// para cada página, comprobamos si hay que darle acceso o no foreach ($this->all_pages() as $p) { /** * Creamos un objeto fs_access con los datos del usuario y la página. * Si tiene acceso guardamos, sino eliminamos. Así no tenemos que comprobar uno a uno * si ya estaba en la base de datos. Eso lo hace el modelo. */ $a = new fs_access(array('fs_user' => $this->suser->nick, 'fs_page' => $p->name, 'allow_delete' => FALSE)); if (isset($_POST['allow_delete'])) { $a->allow_delete = in_array($p->name, $_POST['allow_delete']); } if ($user_no_more_admin) { /* * Si un usuario es administrador y deja de serlo, hay que darle acceso * a algunas páginas, en caso contrario no podrá continuar. */ $a->save(); } else { if (!isset($_POST['enabled'])) { /** * No se ha marcado ningún checkbox de autorizado, así que eliminamos el acceso * a todas las páginas. Una a una. */ $a->delete(); } else { if (in_array($p->name, $_POST['enabled'])) { /// la página ha sido marcada como autorizada. $a->save(); if (is_null($this->suser->fs_page) and $p->show_on_menu) { $this->suser->fs_page = $p->name; $this->suser->save(); } } else { /// la página no está marcada como autorizada. $a->delete(); } } } } } } $this->new_message("Datos modificados correctamente."); } else { $this->new_error_msg("¡Imposible modificar los datos!"); } } } } }
public function process() { $this->show_fs_toolbar = FALSE; $this->ppage = $this->page->get('admin_users'); $this->agente = new agente(); $this->ejercicio = new ejercicio(); $user_no_more_admin = FALSE; $this->suser = FALSE; if (isset($_GET['snick'])) { $this->suser = $this->user->get($_GET['snick']); } if ($this->suser) { $this->page->title = $this->suser->nick; if (isset($_POST['ncodagente'])) { $age0 = new agente(); $age0->codagente = $_POST['ncodagente']; $age0->nombre = $_POST['nnombre']; $age0->apellidos = $_POST['napellidos']; $age0->dnicif = $_POST['ndnicif']; $age0->telefono = $_POST['ntelefono']; $age0->email = $_POST['nemail']; if ($age0->save()) { $this->new_message("Empleado " . $age0->codagente . " guardado correctamente."); $this->suser->codagente = $_POST['ncodagente']; if ($this->suser->save()) { $this->new_message("Empleado " . $age0->codagente . " asignado correctamente."); } else { $this->new_error_msg("¡Imposible asignar el agente!"); } } else { $this->new_error_msg("¡Imposible guardar el agente!"); } } else { if (isset($_POST['spassword']) or isset($_POST['scodagente']) or isset($_POST['sadmin'])) { if ($_POST['spassword'] != '') { $this->suser->set_password($_POST['spassword']); } if ($_POST['template'] != '') { $this->suser->template = $_POST['template']; } if (isset($_POST['scodagente'])) { if ($_POST['scodagente'] == '') { $this->suser->codagente = NULL; } else { $this->suser->codagente = $_POST['scodagente']; } } /* * El propio usuario no puede decidir dejar de ser administrador. */ if ($this->user->nick != $this->suser->nick) { /* * Si un usuario es administrador y deja de serlo, hay que darle acceso * a algunas páginas, en caso contrario no podrá continuar */ if ($this->suser->admin and !isset($_POST['sadmin'])) { $user_no_more_admin = TRUE; } $this->suser->admin = isset($_POST['sadmin']); } $this->suser->fs_page = NULL; if (isset($_POST['udpage'])) { $this->suser->fs_page = $_POST['udpage']; } $this->suser->codejercicio = NULL; if (isset($_POST['ejercicio'])) { $this->suser->codejercicio = $_POST['ejercicio']; } if (FS_DEMO and $this->user->nick != $this->suser->nick) { $this->new_error_msg('En el modo <b>demo</b> sólo puedes modificar los datos de TU usuario. Esto es así para evitar malas prácticas entre usuarios que prueban la demo.'); $this->suser = $this->user->get($_GET['snick']); } else { if ($this->suser->save()) { if (!$this->suser->admin) { foreach ($this->all_pages() as $p) { $a = new fs_access(array('fs_user' => $this->suser->nick, 'fs_page' => $p->name)); if ($user_no_more_admin) { $a->save(); } else { if (!isset($_POST['enabled'])) { $a->delete(); } else { if (!$p->enabled and in_array($p->name, $_POST['enabled'])) { $a->save(); } else { if ($p->enabled and !in_array($p->name, $_POST['enabled'])) { $a->delete(); } } } } } } $this->new_message("Datos modificados correctamente."); } else { $this->new_error_msg("¡Imposible modificar los datos!"); } } } } /// si el usuario no tiene acceso a ninguna página, entonces hay que informar del problema. if (!$this->suser->admin) { $sin_paginas = TRUE; foreach ($this->all_pages() as $p) { if ($p->enabled) { $sin_paginas = FALSE; break; } } if ($sin_paginas) { $this->new_advice('No has autorizado a este usuario a acceder a ninguna' . ' página y por tanto no podrá hacer nada. Puedes darle acceso a alguna página' . ' desde el panel de más abajo.'); } } $fslog = new fs_log(); $this->user_log = $fslog->all_from($this->suser->nick); } else { $this->new_error_msg("Usuario no encontrado."); } }