/** * Verificación de proyecto de trabajo * * @param object $user instancia Model\User del convocador * @param string $action por si es 'select' * @return array(project, projects) */ public static function verifyProject($user, $action) { $projects = Model\Project::ofmine($user->id); // sus proyectos // si no tiene, no debería estar aquí if (empty($projects) || !is_array($projects)) { return array(null, null); } // comprobamos que tenga los permisos para editar y borrar foreach ($projects as $proj) { // comprueba que puede editar sus proyectos if (!ACL::check('/project/edit/' . $proj->id)) { ACL::allow('/project/edit/' . $proj->id . '/', '*', 'user', $user); } // y borrarlos if (!ACL::check('/project/delete/' . $proj->id)) { ACL::allow('/project/delete/' . $proj->id . '/', '*', 'user', $user); } } // si está seleccionando otro proyecto if ($action == 'select' && !empty($_POST['project'])) { $project = Model\Project::get($_POST['project']); } elseif (!empty($_SESSION['project']->id)) { // mantener los datos del proyecto de trabajo $project = Model\Project::get($_SESSION['project']->id); } // si aun no tiene proyecto de trabajo, coge el primero if (empty($project)) { $project = $projects[0]; } // tiene que volver con un proyecto de trabajo if ($project instanceof \Goteo\Model\Project) { $_SESSION['project'] = $project; // lo guardamos en sesión para la próxima verificación } else { Message::Error('No se puede trabajar con el proyecto seleccionado, contacta con nosotros'); $project = null; } // devolvemos lista de proyectos y proyecto de trabajo return array($project, $projects); }
public function create() { if (empty($_SESSION['user'])) { $_SESSION['jumpto'] = '/project/create'; Message::Info(Text::get('user-login-required-to_create')); throw new Redirection(SEC_URL . "/user/login"); } if ($_POST['action'] != 'continue' || $_POST['confirm'] != 'true') { throw new Redirection("/about/howto"); } $project = new Model\Project(); if ($project->create(\GOTEO_NODE)) { $_SESSION['stepped'] = array(); // permisos para editarlo y borrarlo ACL::allow('/project/edit/' . $project->id . '/', '*', 'user', $_SESSION['user']->id); ACL::allow('/project/delete/' . $project->id . '/', '*', 'user', $_SESSION['user']->id); // Evento Feed $log = new Feed(); $log->setTarget($_SESSION['user']->id, 'user'); $log->populate('usuario crea nuevo proyecto', 'admin/projects', \vsprintf('%s ha creado un nuevo proyecto, %s', array(Feed::item('user', $_SESSION['user']->name, $_SESSION['user']->id), Feed::item('project', $project->name, $project->id)))); $log->doAdmin('project'); unset($log); throw new Redirection("/project/edit/{$project->id}"); } throw new \Goteo\Core\Exception('Fallo al crear un nuevo proyecto'); }
public function save(&$errors = array()) { if (!$this->validate($errors)) { return false; } $values = array(':user' => $this->user, ':type' => $this->type, ':item' => $this->item); try { $sql = "REPLACE INTO user_translate (user, type, item) VALUES(:user, :type, :item)"; if (self::query($sql, $values)) { ACL::allow('/translate/' . $this->type . '/' . $this->item . '/*', '*', 'translator', $this->user); return true; } else { $errors[] = 'No se ha creado el registro `user_translate`'; return false; } } catch (\PDOException $e) { $errors[] = Text::_('No se ha guardado correctamente. ') . $e->getMessage(); return false; } }