/** * 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; }