Ejemplo n.º 1
0
 public function reviews($option = 'summary', $action = 'list', $id = null)
 {
     $user = $_SESSION['user'];
     $errors = array();
     $reviews = Model\Review::assigned($user->id);
     // si no hay proyectos asignados no tendria que estar aqui
     if (count($reviews) == 0) {
         throw new Redirection('/review/activity');
     }
     $review = $_SESSION['review'];
     if ($action == 'ready' && !empty($id)) {
         $ready = new Model\User\Review(array('user' => $user->id, 'id' => $id));
         if ($ready->ready($errors)) {
             $message = Text::_('Se ha dado por terminada tu revisión');
             $review = Model\Review::getData($review->id);
             // Evento Feed
             $log = new Feed();
             $log->setTarget($review->project, 'project');
             $log->populate('revisión cerrada (revisor)', '/review/reviews', \vsprintf('El revisor %s ha %s la revisión de %s', array(Feed::item('user', $_SESSION['user']->name, $_SESSION['user']->id), Feed::item('relevant', 'Finalizado'), Feed::item('project', $review->name, $review->project))));
             $log->doAdmin('admin');
             unset($log);
         }
     }
     if (empty($review)) {
         $review = $reviews[0];
     }
     if ($action == 'select' && !empty($_POST['review'])) {
         // otra revisión de trabajo
         $review = Model\Review::getData($_POST['review']);
     } elseif ($action == 'open' && !empty($id)) {
         // otra revisión de trabajo por url
         $review = Model\Review::getData($id);
     }
     $_SESSION['review'] = $review;
     if ($option == 'evaluate') {
         //Text::get
         if ($review->ready == 1) {
             Message::Info(Text::get('review-closed-alert'));
         } else {
             Message::Info(Text::get('review-ajax-alert'));
         }
     }
     // view data basico para esta seccion
     $viewData = array('menu' => self::menu(), 'message' => $message, 'section' => __FUNCTION__, 'option' => $option, 'action' => $action, 'reviews' => $reviews, 'review' => $review, 'errors' => $errors, 'success' => $success);
     if ($option == 'evaluate' || $option == 'report') {
         $viewData['evaluation'] = Model\Review::getEvaluation($review->id, $user->id);
     }
     return new View('view/review/index.html.php', $viewData);
 }
Ejemplo n.º 2
0
 public static function get($project)
 {
     $query = static::query("\n                    SELECT *\n                    FROM    review\n                    WHERE project = :project\n                    ", array(':project' => $project));
     if ($review = $query->fetchObject(__CLASS__)) {
         $review->checkers = User\Review::checkers($review->id);
     } else {
         $review = new self(array('project' => $project));
     }
     return $review;
 }
Ejemplo n.º 3
0
 private function view($id, $show, $post = null)
 {
     $project = Model\Project::get($id, LANG);
     // recompensas
     foreach ($project->individual_rewards as &$reward) {
         $reward->none = false;
         $reward->taken = $reward->getTaken();
         // cofinanciadores quehan optado por esta recompensas
         // si controla unidades de esta recompensa, mirar si quedan
         if ($reward->units > 0 && $reward->taken >= $reward->units) {
             $reward->none = true;
         }
     }
     // mensaje cuando, sin estar en campaña, tiene fecha de publicación, es que la campaña ha sido cancelada
     if ($project->status < 3 && !empty($project->published)) {
         Message::Info(Text::get('project-unpublished'));
     } elseif ($project->status < 3) {
         // mensaje de no publicado siempre que no esté en campaña
         Message::Info(Text::get('project-not_published'));
     }
     // solamente se puede ver publicamente si...
     $grant = false;
     if ($project->status > 2) {
         // está publicado
         $grant = true;
     } elseif ($project->owner == $_SESSION['user']->id) {
         // es el dueño
         $grant = true;
     } elseif (ACL::check('/project/edit/todos')) {
         // es un admin
         $grant = true;
     } elseif (ACL::check('/project/view/todos')) {
         // es un usuario con permiso
         $grant = true;
     } elseif (isset($_SESSION['user']->roles['checker']) && Model\User\Review::is_assigned($_SESSION['user']->id, $project->id)) {
         // es un revisor y lo tiene asignado
         $grant = true;
     }
     // (Callsys)
     // si lo puede ver
     if ($grant) {
         $viewData = array('project' => $project, 'show' => $show);
         // sus entradas de novedades
         $blog = Model\Blog::get($project->id);
         // si está en modo preview, ponemos  todas las entradas, incluso las no publicadas
         if (isset($_GET['preview']) && $_GET['preview'] == $_SESSION['user']->id) {
             $blog->posts = Model\Blog\Post::getAll($blog->id, null, false);
         }
         $viewData['blog'] = $blog;
         // tenemos que tocar esto un poquito para motrar las necesitades no economicas
         if ($show == 'needs-non') {
             $viewData['show'] = 'needs';
             $viewData['non-economic'] = true;
         }
         // -- Mensaje azul molesto para usuarios no registrados
         if (($show == 'messages' || $show == 'updates') && empty($_SESSION['user'])) {
             Message::Info(Text::html('user-login-required'));
         }
         //tenemos que tocar esto un poquito para gestionar los pasos al aportar
         if ($show == 'invest') {
             // si no está en campaña no pueden estar aqui ni de coña
             if ($project->status != 3) {
                 Message::Info(Text::get('project-invest-closed'));
                 throw new Redirection('/project/' . $id, Redirection::TEMPORARY);
             }
             $viewData['show'] = 'supporters';
             /* pasos de proceso aporte
              *
              * 1, 'start': ver y seleccionar recompensa (y cantidad)
              * 2, 'login': loguear con usuario/contraseña o con email (que crea el usuario automáticamente)
              * 3, 'confirm': confirmar los datos y saltar a la pasarela de pago
              * 4, 'ok'/'fail': al volver de la pasarela de pago, la confirmación nos dice si todo bien o algo mal
              * 5, 'continue': recuperar aporte incompleto (variante de confirm)
              */
             // usamos la variable de url $post para movernos entre los pasos
             $step = isset($post) && in_array($post, array('start', 'login', 'confirm', 'continue')) ? $post : 'start';
             // si llega confirm ya ha terminado el proceso de aporte
             if (isset($_GET['confirm']) && \in_array($_GET['confirm'], array('ok', 'fail'))) {
                 unset($_SESSION['invest-amount']);
                 // confirmación
                 $step = $_GET['confirm'];
             } else {
                 // si no, a ver en que paso estamos
                 if (isset($_GET['amount'])) {
                     $_SESSION['invest-amount'] = $_GET['amount'];
                 }
                 // si el usuario está validado, recuperamos posible amount y mostramos
                 if ($_SESSION['user'] instanceof Model\User) {
                     $step = 'confirm';
                 } elseif ($step != 'start' && empty($_SESSION['user'])) {
                     // si no está validado solo puede estar en start
                     Message::Info(Text::get('user-login-required-to_invest'));
                     $step = 'start';
                 } elseif ($step == 'start') {
                     // para cuando salte
                     $_SESSION['jumpto'] = SEC_URL . '/project/' . $id . '/invest/#continue';
                 } else {
                     $step = 'start';
                 }
             }
             $viewData['step'] = $step;
         }
         if ($show == 'updates') {
             $viewData['post'] = $post;
             $viewData['owner'] = $project->owner;
         }
         if ($show == 'messages' && $project->status < 3) {
             Message::Info(Text::get('project-messages-closed'));
         }
         return new View('view/project/view.html.php', $viewData);
     } else {
         // no lo puede ver
         throw new Redirection("/");
     }
 }
Ejemplo n.º 4
0
 public function set_review_comment($user, $review)
 {
     // comprobar que tiene asignada esta revision
     if (Model\User\Review::is_legal($user, $review)) {
         $comment = new Model\User\Review(array('user' => $user, 'id' => $review));
         $parts = explode('-', $_POST['campo']);
         if (in_array($parts[0], array('project', 'owner', 'reward')) && in_array($parts[1], array('evaluation', 'recommendation'))) {
             $section = $parts[0];
             $field = $parts[1];
             $text = $_POST['valor'];
             if ($comment->setComment($section, $field, $text)) {
                 $result = 'Grabado';
             } else {
                 $result = 'Error';
             }
             header('HTTP/1.1 200 Ok');
             echo $result;
             die;
         } else {
             header('HTTP/1.1 400 Bad request');
             die;
         }
     } else {
         header('HTTP/1.1 403 Forbidden');
         die;
     }
 }
Ejemplo n.º 5
0
 public static function process($action = 'list', $id = null, $filters = array())
 {
     $node = isset($_SESSION['admin_node']) ? $_SESSION['admin_node'] : \GOTEO_NODE;
     $errors = array();
     switch ($action) {
         case 'add':
         case 'edit':
             // el get se hace con el id del proyecto
             $review = Model\Review::get($id);
             $project = Model\Project::getMini($review->project);
             if (empty($id) || $action == 'edit' && !$review instanceof Model\Review) {
                 Message::Error(Text::get('admin-reviews-error-noview-revision'));
                 throw new Redirection('/admin/reviews');
             }
             if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['save'])) {
                 // instancia
                 $review->id = $_POST['id'];
                 $review->project = $_POST['project'];
                 $review->to_checker = $_POST['to_checker'];
                 $review->to_owner = $_POST['to_owner'];
                 if ($review->save($errors)) {
                     switch ($action) {
                         case 'add':
                             Message::Info(Text::get('admin-reviews-info-success-revision'));
                             // Evento Feed
                             $log = new Feed();
                             $log->setTarget($project->id);
                             $log->populate(Text::_('valoración iniciada (admin)'), '/admin/reviews', \vsprintf('El admin %s ha %s la valoración de %s', array(Feed::item('user', $_SESSION['user']->name, $_SESSION['user']->id), Feed::item('relevant', Text::_('Iniciado')), Feed::item('project', $project->name, $project->id))));
                             $log->doAdmin('admin');
                             unset($log);
                             throw new Redirection('/admin/reviews/?project=' . urlencode($project->id));
                             break;
                         case 'edit':
                             Message::Info(Text::get('admin-reviews-info-revision-save'));
                             throw new Redirection('/admin/reviews');
                             break;
                     }
                 } else {
                     Message::Error(Text::get('admin-reviews-error-save-fail'), implode(', ', $errors));
                 }
             }
             return new View('view/admin/index.html.php', array('folder' => 'reviews', 'file' => 'edit', 'action' => $action, 'review' => $review, 'project' => $project));
             break;
         case 'close':
             // el get se hace con el id del proyecto
             $review = Model\Review::getData($id);
             // marcamos la revision como completamente cerrada
             if (Model\Review::close($id, $errors)) {
                 Message::Info(Text::get('admin-reviews-info-reviewclose'));
                 // Evento Feed
                 $log = new Feed();
                 $log->setTarget($review->project);
                 $log->populate(Text::_('valoración finalizada (admin)'), '/admin/reviews', \vsprintf('El admin %s ha dado por %s la valoración de %s', array(Feed::item('user', $_SESSION['user']->name, $_SESSION['user']->id), Feed::item('relevant', Text::_('Finalizada')), Feed::item('project', $review->name, $review->project))));
                 $log->doAdmin('admin');
                 unset($log);
             } else {
                 Message::Error(Text::get('admin-reviews-error-reviewclose-fail') . implode(', ', $errors));
             }
             throw new Redirection('/admin/reviews');
             break;
         case 'unready':
             // se la reabrimos para que pueda seguir editando
             // la id de revision llega en $id
             // la id del usuario llega por get
             $user = $_GET['user'];
             if (!empty($user)) {
                 $user_rev = new Model\User\Review(array('id' => $id, 'user' => $user));
                 $user_rev->unready($errors);
                 if (!empty($errors)) {
                     Message::Error(implode(', ', $errors));
                 }
             }
             throw new Redirection('/admin/reviews');
             break;
         case 'assign':
             // asignamos la revision a este usuario
             // la id de revision llega en $id
             // la id del usuario llega por get
             $user = $_GET['user'];
             if (!empty($user)) {
                 $assignation = new Model\User\Review(array('id' => $id, 'user' => $user));
                 if ($assignation->save($errors)) {
                     $userData = Model\User::getMini($user);
                     $reviewData = Model\Review::getData($id);
                     Message::Info(Text::get('admin-reviews-info-assigned'));
                     // Evento Feed
                     $log = new Feed();
                     $log->setTarget($userData->id, 'user');
                     $log->populate(Text::_('asignar revision (admin)'), '/admin/reviews', \vsprintf('El admin %s ha %s a %s la revisión de %s', array(Feed::item('user', $_SESSION['user']->name, $_SESSION['user']->id), Feed::item('relevant', Text::_('Asignado')), Feed::item('user', $userData->name, $userData->id), Feed::item('project', $reviewData->name, $reviewData->project))));
                     $log->setTarget($userData->id, 'user');
                     $log->doAdmin('admin');
                     unset($log);
                 } else {
                     Message::Error(implode(', ', $errors));
                 }
             }
             throw new Redirection('/admin/reviews');
             break;
         case 'unassign':
             // se la quitamos a este revisor
             // la id de revision llega en $id
             // la id del usuario llega por get
             $user = $_GET['user'];
             if (!empty($user)) {
                 $assignation = new Model\User\Review(array('id' => $id, 'user' => $user));
                 if ($assignation->remove($errors)) {
                     $userData = Model\User::getMini($user);
                     $reviewData = Model\Review::getData($id);
                     Message::Info(Text::get('admin-reviews-info-deallocated'));
                     // Evento Feed
                     $log = new Feed();
                     $log->setTarget($userData->id, 'user');
                     $log->populate(Text::_('Desasignar revision (admin)'), '/admin/reviews', \vsprintf('El admin %s ha %s a %s la revisión de %s', array(Feed::item('user', $_SESSION['user']->name, $_SESSION['user']->id), Feed::item('relevant', Text::_('Desasignado')), Feed::item('user', $userData->name, $userData->id), Feed::item('project', $reviewData->name, $reviewData->project))));
                     $log->doAdmin('admin');
                     unset($log);
                 } else {
                     Message::Error(implode(', ', $errors));
                 }
             }
             throw new Redirection('/admin/reviews');
             break;
         case 'report':
             // mostramos los detalles de revision
             // ojo que este id es la id del proyecto, no de la revision
             $review = Model\Review::get($id);
             $review = Model\Review::getData($review->id);
             $evaluation = array();
             foreach ($review->checkers as $user => $user_data) {
                 $evaluation[$user] = Model\Review::getEvaluation($review->id, $user);
             }
             return new View('view/admin/index.html.php', array('folder' => 'reviews', 'file' => 'report', 'review' => $review, 'evaluation' => $evaluation));
             break;
     }
     // si hay proyecto filtrado, no filtramos estado
     if (!empty($filters['project'])) {
         unset($filters['status']);
     }
     $list = Model\Review::getList($filters, $node);
     $projects = Model\Review::getProjects($node);
     $status = array('unstarted' => Text::_('No iniciada'), 'open' => Text::_('Abierta'), 'closed' => Text::_('Cerrada'));
     $checkers = Model\User::getAll(array('role' => 'checker'));
     return new View('view/admin/index.html.php', array('folder' => 'reviews', 'file' => 'list', 'list' => $list, 'filters' => $filters, 'projects' => $projects, 'status' => $status, 'checkers' => $checkers));
 }