Exemplo n.º 1
0
 public function index($project = null)
 {
     if (empty($project)) {
         throw new Redirection('/discover', Redirection::PERMANENT);
     }
     if ($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST['message'])) {
         $projectData = Model\Project::getMini($project);
         if ($projectData->status < 3) {
             \Goteo\Library\Message::Error(Text::get('project-messages-closed'));
             throw new Redirection("/project/{$project}");
         }
         $message = new Model\Message(array('user' => $_SESSION['user']->id, 'project' => $project, 'thread' => $_POST['thread'], 'message' => $_POST['message']));
         if ($message->save($errors)) {
             $support = Model\Message::isSupport($_POST['thread']);
             // Evento Feed
             $log = new Feed();
             $log->setTarget($projectData->id);
             if (empty($_POST['thread'])) {
                 // nuevo hilo
                 $log_html = \vsprintf('%s ha creado un tema en %s del proyecto %s', array(Feed::item('user', $_SESSION['user']->name, $_SESSION['user']->id), Feed::item('message', Text::get('project-menu-messages'), $projectData->id . '/messages#message' . $message->id), Feed::item('project', $projectData->name, $projectData->id)));
             } else {
                 // respuesta
                 // si una respuesta a un mensaje de colaboraicón
                 if (!empty($support)) {
                     $log_html = \vsprintf('Nueva colaboración de %s con %s en el proyecto %s', array(Feed::item('user', $_SESSION['user']->name, $_SESSION['user']->id), Feed::item('message', $support, $projectData->id . '/messages#message' . $_POST['thread']), Feed::item('project', $projectData->name, $projectData->id)));
                 } else {
                     // es una respuesta a un hilo normal
                     $log_html = \vsprintf('%s ha respondido en %s del proyecto %s', array(Feed::item('user', $_SESSION['user']->name, $_SESSION['user']->id), Feed::item('message', Text::get('project-menu-messages'), $projectData->id . '/messages#message' . $message->id), Feed::item('project', $projectData->name, $projectData->id)));
                 }
             }
             $log->populate('usuario escribe mensaje/respuesta en Mensajes del proyecto', '/admin/projects', $log_html);
             $log->doAdmin('user');
             // Evento público
             if (empty($_POST['thread'])) {
                 $log_html = Text::html('feed-messages-new_thread', Feed::item('message', Text::get('project-menu-messages'), $projectData->id . '/messages#message' . $message->id), Feed::item('project', $projectData->name, $projectData->id));
             } else {
                 // si una respuesta a un mensaje de colaboraicón
                 if (!empty($support)) {
                     $log_html = Text::html('feed-message_support-response', Feed::item('message', $support, $projectData->id . '/messages#message' . $_POST['thread']), Feed::item('project', $projectData->name, $projectData->id));
                 } else {
                     // es una respuesta a un hilo normal
                     $log_html = Text::html('feed-messages-response', Feed::item('message', Text::get('project-menu-messages'), $projectData->id . '/messages#message' . $message->id), Feed::item('project', $projectData->name, $projectData->id));
                 }
             }
             $log->populate($_SESSION['user']->name, '/user/profile/' . $_SESSION['user']->id, $log_html, $_SESSION['user']->avatar->id);
             $log->doPublic('community');
             unset($log);
             if (!empty($_POST['thread'])) {
                 // aqui el owner es el autor del mensaje thread
                 $thread = Model\Message::get($_POST['thread']);
                 // Si no tiene estas notiicaciones bloqueadas en sus preferencias
                 $sql = "\n                            SELECT user_prefer.threads\n                            FROM user_prefer\n                            WHERE user = :user\n                            ";
                 $query = Model\Project::query($sql, array(':user' => $thread->user->id));
                 $spam = $query->fetchColumn(0);
                 if (!$spam) {
                     // Mail al autor del thread
                     // Obtenemos la plantilla para asunto y contenido
                     $template = Template::get(12);
                     // Sustituimos los datos
                     $subject = str_replace('%PROJECTNAME%', $projectData->name, $template->title);
                     $response_url = SITE_URL . '/user/profile/' . $_SESSION['user']->id . '/message';
                     $project_url = SITE_URL . '/project/' . $projectData->id . '/messages#message' . $message->id;
                     $search = array('%MESSAGE%', '%OWNERNAME%', '%USERNAME%', '%PROJECTNAME%', '%PROJECTURL%', '%RESPONSEURL%');
                     $replace = array($_POST['message'], $thread->user->name, $_SESSION['user']->name, $projectData->name, $project_url, $response_url);
                     $content = \str_replace($search, $replace, $template->text);
                     $mailHandler = new Mail();
                     $mailHandler->to = $thread->user->email;
                     $mailHandler->toName = $thread->user->name;
                     $mailHandler->subject = $subject;
                     $mailHandler->content = $content;
                     $mailHandler->html = true;
                     $mailHandler->template = $template->id;
                     $mailHandler->send($errors);
                     unset($mailHandler);
                 }
             } else {
                 // mensaje al autor del proyecto
                 // Obtenemos la plantilla para asunto y contenido
                 $template = Template::get(30);
                 // Sustituimos los datos
                 $subject = str_replace('%PROJECTNAME%', $projectData->name, $template->title);
                 $response_url = SITE_URL . '/user/profile/' . $_SESSION['user']->id . '/message';
                 $project_url = SITE_URL . '/project/' . $projectData->id . '/messages#message' . $message->id;
                 $search = array('%MESSAGE%', '%OWNERNAME%', '%USERNAME%', '%PROJECTNAME%', '%PROJECTURL%', '%RESPONSEURL%');
                 $replace = array($_POST['message'], $projectData->user->name, $_SESSION['user']->name, $projectData->name, $project_url, $response_url);
                 $content = \str_replace($search, $replace, $template->text);
                 $mailHandler = new Mail();
                 $mailHandler->to = $projectData->user->email;
                 $mailHandler->toName = $projectData->user->name;
                 $mailHandler->subject = $subject;
                 $mailHandler->content = $content;
                 $mailHandler->html = true;
                 $mailHandler->template = $template->id;
                 $mailHandler->send($errors);
                 unset($mailHandler);
             }
         }
     }
     throw new Redirection("/project/{$project}/messages#message" . $message->id, Redirection::TEMPORARY);
 }
Exemplo n.º 2
0
 /**
  * Graba las colaboraciones con lo recibido por POST
  * 
  * @param object $project Instancia de proyecto de trabajo
  * @param array $errors (por referncia)
  * @return object $project Instancia de proyecto modificada
  */
 public static function process_supports($project, &$errors = array())
 {
     // tratar colaboraciones existentes
     foreach ($project->supports as $key => $support) {
         // quitar las colaboraciones marcadas para quitar
         if (!empty($_POST["support-{$support->id}-remove"])) {
             unset($project->supports[$key]);
             continue;
         }
         if (isset($_POST['support-' . $support->id . '-support'])) {
             $support->support = $_POST['support-' . $support->id . '-support'];
             $support->description = $_POST['support-' . $support->id . '-description'];
             $support->type = $_POST['support-' . $support->id . '-type'];
             if (!empty($support->thread)) {
                 // actualizar ese mensaje
                 $msg = Model\Message::get($support->thread);
                 $msg->date = date('Y-m-d');
                 $msg->message = "{$support->support}: {$support->description}";
                 $msg->blocked = true;
                 $msg->save();
             } else {
                 // grabar nuevo mensaje
                 $msg = new Model\Message(array('user' => $project->owner, 'project' => $project->id, 'date' => date('Y-m-d'), 'message' => "{$support->support}: {$support->description}", 'blocked' => true));
                 if ($msg->save()) {
                     // asignado a la colaboracion como thread inicial
                     $support->thread = $msg->id;
                     // Evento Feed
                     $log = new Feed();
                     $log->setTarget($project->id);
                     $log->populate('usuario pone una nueva colaboracion en su proyecto (dashboard)', '/admin/projects', \vsprintf('%s ha publicado una nueva %s en el proyecto %s, con el título "%s"', array(Feed::item('user', $_SESSION['user']->name, $_SESSION['user']->id), Feed::item('message', 'Colaboración'), Feed::item('project', $project->name, $project->id), Feed::item('update', $support->support, $project->id . '/messages#message' . $msg->id))));
                     $log->doAdmin('user');
                     // evento público, si el proyecto es público
                     if ($project->status > 2) {
                         $log->populate($_SESSION['user']->name, '/user/profile/' . $_SESSION['user']->id, Text::html('feed-new_support', Feed::item('project', $project->name, $project->id), Feed::item('update', $support->support, $project->id . '/messages#message' . $msg->id)), $_SESSION['user']->avatar->id);
                         $log->doPublic('community');
                     }
                     unset($log);
                 }
             }
         }
     }
     // añadir nueva colaboracion (no hacemos lo del mensaje porque esta sin texto)
     if (!empty($_POST['support-add'])) {
         $new_support = new Model\Project\Support(array('project' => $project->id, 'support' => 'Nueva colaboración', 'type' => 'task', 'description' => ''));
         if ($new_support->save($errors)) {
             $project->supports[] = $new_support;
             $_POST['support-' . $new_support->id . '-edit'] = true;
         } else {
             $project->supports[] = new Model\Project\Support(array('project' => $project->id, 'support' => 'Nueva colaboración', 'type' => 'task', 'description' => ''));
         }
     }
     // guardamos los datos que hemos tratado y los errores de los datos
     $project->save($errors);
     return $project;
 }
Exemplo n.º 3
0
 private function process_supports(&$project, &$errors)
 {
     if (!isset($_POST['process_supports'])) {
         return false;
     }
     // tratar colaboraciones existentes
     foreach ($project->supports as $key => $support) {
         // quitar las colaboraciones marcadas para quitar
         if (!empty($_POST["support-{$support->id}-remove"])) {
             unset($project->supports[$key]);
             continue;
         }
         if (isset($_POST['support-' . $support->id . '-support'])) {
             $support->support = $_POST['support-' . $support->id . '-support'];
             $support->description = $_POST['support-' . $support->id . '-description'];
             $support->type = $_POST['support-' . $support->id . '-type'];
             if (!empty($support->thread)) {
                 // actualizar ese mensaje
                 $msg = Model\Message::get($support->thread);
                 $msg->date = date('Y-m-d');
                 $msg->message = "{$support->support}: {$support->description}";
                 $msg->blocked = true;
                 $msg->save($errors);
             } else {
                 // grabar nuevo mensaje
                 $msg = new Model\Message(array('user' => $project->owner, 'project' => $project->id, 'date' => date('Y-m-d'), 'message' => "{$support->support}: {$support->description}", 'blocked' => true));
                 if ($msg->save($errors)) {
                     // asignado a la colaboracion como thread inicial
                     $support->thread = $msg->id;
                 }
             }
         }
     }
     // añadir nueva colaboracion
     if (!empty($_POST['support-add'])) {
         $project->supports[] = new Model\Project\Support(array('project' => $project->id, 'support' => 'Nueva colaboración', 'type' => 'task', 'description' => ''));
     }
     return true;
 }
Exemplo n.º 4
0
 public function publish(&$errors = array())
 {
     try {
         $sql = "UPDATE project SET passed = NULL, status = :status, published = :published WHERE id = :id";
         self::query($sql, array(':status' => 3, ':published' => date('Y-m-d'), ':id' => $this->id));
         // borramos mensajes anteriores que sean de colaboraciones
         self::query("DELETE FROM message WHERE id IN (SELECT thread FROM support WHERE project = ?)", array($this->id));
         // creamos los hilos de colaboración en los mensajes
         foreach ($this->supports as $id => $support) {
             $msg = new Message(array('user' => $this->owner, 'project' => $this->id, 'date' => date('Y-m-d'), 'message' => "{$support->support}: {$support->description}", 'blocked' => true));
             if ($msg->save()) {
                 // asignado a la colaboracion como thread inicial
                 $sql = "UPDATE support SET thread = :message WHERE id = :support";
                 self::query($sql, array(':message' => $msg->id, ':support' => $support->id));
             }
             unset($msg);
         }
         return true;
     } catch (\PDOException $e) {
         $errors[] = Text::_('No se ha grabado correctamente. ') . $e->getMessage();
         return false;
     }
 }