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); }
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; }
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("/"); } }
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; } }
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)); }