示例#1
0
文件: projects.php 项目: isbkch/Goteo
 /**
  * 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;
 }