Example #1
0
 public static function projList($user)
 {
     $lists = array();
     // mis proyectos
     $projects = Model\Project::ofmine($user->id);
     if (!empty($projects)) {
         $lists['my_projects'] = Listing::get($projects);
     }
     // proyectos que cofinancio
     $invested = Model\User::invested($user->id, false);
     if (!empty($invested)) {
         $lists['invest_on'] = Listing::get($invested);
     }
     return $lists;
 }
Example #2
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);
 }
Example #3
0
 /**
  * Perfil público de usuario.
  *
  * @param string $id    Nombre de usuario
  */
 public function profile($id, $show = 'profile', $category = null)
 {
     if (!in_array($show, array('profile', 'investors', 'sharemates', 'message'))) {
         $show = 'profile';
     }
     $user = Model\User::get($id, LANG);
     if (!$user instanceof Model\User || $user->hide) {
         throw new Error('404', Text::html('fatal-error-user'));
     }
     //--- para usuarios públicos---
     if (empty($_SESSION['user'])) {
         // la subpágina de mensaje también está restringida
         if ($show == 'message') {
             $_SESSION['jumpto'] = '/user/profile/' . $id . '/message';
             Message::Info(Text::get('user-login-required-to_message'));
             throw new Redirection(SEC_URL . "/user/login");
         }
         // a menos que este perfil sea de un vip, no pueden verlo
         if (!isset($user->roles['vip'])) {
             $_SESSION['jumpto'] = '/user/profile/' . $id . '/' . $show;
             Message::Info(Text::get('user-login-required-to_see'));
             throw new Redirection(SEC_URL . "/user/login");
         }
         /*
          // subpágina de cofinanciadores
          if ($show == 'investors') {
          Message::Info(Text::get('user-login-required-to_see-supporters'));
          throw new Redirection('/user/profile/' .  $id);
          }
         */
     }
     //--- el resto pueden seguir ---
     // impulsor y usuario solamente pueden comunicarse si:
     if ($show == 'message') {
         $is_author = false;
         // si es autor de un proyecto publicado
         $is_investor = false;
         // si es cofinanciador
         $is_messeger = false;
         // si es participante
         // si el usuario logueado es impulsor (autro de proyecto publicado
         $user_created = Model\Project::ofmine($_SESSION['user']->id, true);
         if (!empty($user_created)) {
             $is_author = true;
         }
         // si el usuario del perfil es cofin. o partic.
         // proyectos que es cofinanciador este usuario (el del perfil)
         $user_invested = Model\User::invested($id, true);
         foreach ($user_invested as $a_project) {
             if ($a_project->owner == $_SESSION['user']->id) {
                 $is_investor = true;
                 break;
             }
         }
         // proyectos que es participante este usuario (el del perfil) (que ha enviado algún mensaje)
         $user_messeged = Model\Message::getMesseged($id, true);
         foreach ($user_messeged as $a_project) {
             if ($a_project->owner == $_SESSION['user']->id) {
                 $is_messeger = true;
                 break;
             }
         }
         // si el usuario logueado es el usuario cofin./partic.
         // si el usuario del perfil es impulsor de un proyecto cofinanciado o en el que ha participado
         // proyectos que es cofinanciador el usuario logueado
         $user_invested = Model\User::invested($_SESSION['user']->id, true);
         foreach ($user_invested as $a_project) {
             if ($a_project->owner == $id) {
                 $is_investor = true;
                 break;
             }
         }
         // proyectos que es participante el usuario logueado (que ha enviado algún mensaje)
         $user_messeged = Model\Message::getMesseged($_SESSION['user']->id, true);
         foreach ($user_messeged as $a_project) {
             if ($a_project->owner == $id) {
                 $is_messeger = true;
                 break;
             }
         }
         if (!$is_investor && !$is_messeger && !$is_author) {
             Message::Info(Text::get('user-message-restricted'));
             throw new Redirection('/user/profile/' . $id);
         } else {
             $_SESSION['message_autorized'] = true;
         }
     }
     // vip profile
     $viewData = array();
     $viewData['user'] = $user;
     $projects = Model\Project::ofmine($id, true);
     $viewData['projects'] = $projects;
     //mis cofinanciadores
     // array de usuarios con:
     //  foto, nombre, nivel, cantidad a mis proyectos, fecha ultimo aporte, nº proyectos que cofinancia
     $investors = array();
     foreach ($projects as $kay => $project) {
         // quitamos los caducados
         if ($project->status == 0) {
             unset($projects[$kay]);
             continue;
         }
         foreach (Model\Invest::investors($project->id) as $key => $investor) {
             // convocadores no, gracias
             if (!empty($investor->campaign)) {
                 continue;
             }
             if (\array_key_exists($investor->user, $investors)) {
                 // ya está en el array, quiere decir que cofinancia este otro proyecto
                 // , añadir uno, sumar su aporte, actualizar la fecha
                 ++$investors[$investor->user]->projects;
                 $investors[$investor->user]->amount += $investor->amount;
                 $investors[$investor->user]->date = $investor->date;
             } else {
                 $investors[$investor->user] = (object) array('user' => $investor->user, 'name' => $investor->name, 'projects' => 1, 'avatar' => $investor->avatar, 'worth' => $investor->worth, 'amount' => $investor->amount, 'date' => $investor->date);
             }
         }
     }
     $viewData['investors'] = $investors;
     // comparten intereses
     $viewData['shares'] = Model\User\Interest::share($id, $category);
     if ($show == 'sharemates' && empty($viewData['shares'])) {
         $show = 'profile';
     }
     if (!empty($category)) {
         $viewData['category'] = $category;
     }
     // proyectos que cofinancio
     $invested = Model\User::invested($id, true);
     // agrupacion de proyectos que cofinancia y proyectos suyos
     $viewData['lists'] = array();
     if (!empty($invested)) {
         $viewData['lists']['invest_on'] = Listing::get($invested, 2);
     }
     if (!empty($projects)) {
         $viewData['lists']['my_projects'] = Listing::get($projects, 2);
     }
     return new View('view/user/' . $show . '.html.php', $viewData);
 }