Exemplo n.º 1
0
 /**
  * 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);
 }
Exemplo n.º 2
0
 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');
 }
Exemplo n.º 3
0
 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;
     }
 }