Ejemplo n.º 1
0
Archivo: rss.php Proyecto: isbkch/Goteo
 public function index()
 {
     // sacamos su blog
     $blog = Model\Blog::get(\GOTEO_NODE, 'node');
     $tags = Model\Blog\Post\Tag::getAll();
     /*
                 echo '<pre>'.print_r($tags, 1).'</pre>';
                 echo '<pre>'.print_r($blog->posts, 1).'</pre>';
                 die;
     * 
     */
     // al ser xml no usaremos vista
     // usaremos FeedWriter
     // configuracion
     $config = array('title' => 'Goteo Rss', 'description' => 'Blog Goteo.org rss', 'link' => SITE_URL, 'indent' => 6);
     $data = array('tags' => $tags, 'posts' => $blog->posts);
     \header("Content-Type: application/rss+xml");
     echo Library\Rss::get($config, $data, $_GET['format']);
     // le preparamos los datos y se los pasamos
 }
Ejemplo n.º 2
0
 public function index($post = null)
 {
     if (!empty($post)) {
         $show = 'post';
         // -- Mensaje azul molesto para usuarios no registrados
         if (empty($_SESSION['user'])) {
             $_SESSION['jumpto'] = '/blog/' . $post;
             Message::Info(Text::html('user-login-required'));
         }
     } else {
         $show = 'list';
     }
     // sacamos su blog
     $blog = Model\Blog::get(\GOTEO_NODE, 'node');
     $filters = array();
     if (isset($_GET['tag'])) {
         $tag = Model\Blog\Post\Tag::get($_GET['tag']);
         if (!empty($tag->id)) {
             $filters['tag'] = $tag->id;
         }
     } else {
         $tag = null;
     }
     if (isset($_GET['author'])) {
         $author = Model\User::getMini($_GET['author']);
         if (!empty($author->id)) {
             $filters['author'] = $author->id;
         }
     } else {
         $author = null;
     }
     if (!empty($filters)) {
         $blog->posts = Model\Blog\Post::getList($filters);
     }
     if (isset($post) && !isset($blog->posts[$post]) && $_GET['preview'] != $_SESSION['user']->id) {
         throw new \Goteo\Core\Redirection('/blog');
     }
     // segun eso montamos la vista
     return new View('view/blog/index.html.php', array('blog' => $blog, 'show' => $show, 'filters' => $filters, 'post' => $post, 'owner' => \GOTEO_NODE));
 }
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
Archivo: blog.php Proyecto: kenjs/Goteo
 public static function process($action = 'list', $id = null, $filters = array())
 {
     $errors = array();
     $node = empty($_SESSION['admin_node']) ? \GOTEO_NODE : $_SESSION['admin_node'];
     $blog = Model\Blog::get($node, 'node');
     if (!$blog instanceof \Goteo\Model\Blog) {
         $blog = new Model\Blog(array('type' => 'node', 'owner' => $node, 'active' => 1));
         if ($blog->save($errors)) {
             Message::Info(Text::get('admin-blog-info-initialize'));
         } else {
             Message::Error(Text::get('admin-blog-error-initialize'));
             throw new Redirection('/admin');
         }
     } elseif (!$blog->active) {
         Message::Error(Text::get('admin-blog-error-no_blog'));
         throw new Redirection('/admin');
     }
     // primero comprobar que tenemos blog
     if (!$blog instanceof Model\Blog) {
         Message::Error(Text::get('admin-blog-error-not_found'));
         throw new Redirection('/admin');
     }
     $url = '/admin/blog';
     if ($_SERVER['REQUEST_METHOD'] == 'POST') {
         if (empty($_POST['blog'])) {
             Message::Error(Text::get('admin-blog-error_missing_blog'));
             break;
         }
         $editing = false;
         if (!empty($_POST['id'])) {
             $post = Model\Blog\Post::get($_POST['id']);
         } else {
             $post = new Model\Blog\Post();
         }
         // campos que actualizamos
         $fields = array('id', 'blog', 'title', 'text', 'image', 'media', 'legend', 'date', 'publish', 'home', 'footer', 'allow', 'author');
         foreach ($fields as $field) {
             $post->{$field} = $_POST[$field];
         }
         // tratar la imagen y ponerla en la propiedad image
         if (!empty($_FILES['image_upload']['name'])) {
             $post->image = $_FILES['image_upload'];
             $editing = true;
         }
         // tratar las imagenes que quitan
         foreach ($post->gallery as $key => $image) {
             if (!empty($_POST["gallery-{$image->id}-remove"])) {
                 $image->remove('post');
                 unset($post->gallery[$key]);
                 if ($post->image == $image->id) {
                     $post->image = '';
                 }
                 $editing = true;
             }
         }
         if (!empty($post->media)) {
             $post->media = new Model\Project\Media($post->media);
         }
         $post->tags = $_POST['tags'];
         // si tenemos un nuevio tag hay que añadirlo
         if (!empty($_POST['new-tag_save']) && !empty($_POST['new-tag'])) {
             // grabar el tag en la tabla de tag,
             $new_tag = new Model\Blog\Post\Tag(array('id' => '', 'name' => $_POST['new-tag']));
             if ($new_tag->save($errors)) {
                 $post->tags[] = $new_tag->id;
                 // asignar al post
             } else {
                 Message::Error(implode('<br />', $errors));
             }
             $editing = true;
             // seguir editando
         }
         /// este es el único save que se lanza desde un metodo process_
         if ($post->save($errors)) {
             if ($action == 'edit') {
                 Message::Info(Text::get('admin-blog-info-updates-saved'));
             } else {
                 Message::Info(Text::get('admin-blog-info-add_new'));
                 $id = $post->id;
             }
             $action = $editing ? 'edit' : 'list';
             if ((bool) $post->publish) {
                 // Evento Feed
                 $log = new Feed();
                 $log->setTarget('goteo', 'blog');
                 $log->populate('nueva entrada blog Goteo (admin)', '/admin/blog', \vsprintf('El admin %s ha %s en el blog Goteo la entrada "%s"', array(Feed::item('user', $_SESSION['user']->name, $_SESSION['user']->id), Feed::item('relevant', 'Publicado'), Feed::item('blog', $post->title, $post->id))));
                 $log->doAdmin('admin');
                 // evento público
                 $log->unique = true;
                 $log->populate($post->title, '/blog/' . $post->id, Text::recorta($post->text, 250), $post->gallery[0]->id);
                 $log->doPublic('goteo');
                 unset($log);
             } else {
                 //sino lo quitamos
                 \Goteo\Core\Model::query("DELETE FROM feed WHERE url = '/blog/{$post->id}' AND scope = 'public' AND type = 'goteo'");
             }
         } else {
             Message::Error(Text::get('admin-blog-error-save-fail') . ':<br />' . \implode('<br />', $errors));
         }
     }
     switch ($action) {
         case 'list':
             // lista de entradas
             // obtenemos los datos
             $filters['node'] = $node;
             $show = array('all' => 'Todas las entradas existentes', 'published' => 'Solamente las publicadas en el blog', 'owned' => 'Solamente las del propio nodo', 'home' => 'Solamente las de portada', 'entries' => 'Solamente las de cierto nodo', 'updates' => 'Solamente las de proyectos');
             // filtro de blogs de proyectos/nodos
             switch ($filters['show']) {
                 case 'updates':
                     $blogs = Model\Blog::getListProj();
                     break;
                 case 'entries':
                     $blogs = Model\Blog::getListNode();
                     break;
             }
             if (!in_array($filters['show'], array('entries', 'updates')) || !isset($blogs[$filters['blog']])) {
                 unset($filters['blog']);
             }
             $posts = Model\Blog\Post::getList($filters, false);
             $homes = Model\Post::getList('home', $node);
             $footers = Model\Post::getList('footer', $node);
             if ($node == \GOTEO_NODE) {
                 $show['footer'] = 'Solamente las del footer';
             }
             return new View('view/admin/index.html.php', array('folder' => 'blog', 'file' => 'list', 'posts' => $posts, 'filters' => $filters, 'show' => $show, 'blogs' => $blogs, 'homes' => $homes, 'footers' => $footers, 'node' => $node));
             break;
         case 'add':
             // nueva entrada con wisiwig
             // obtenemos datos basicos
             $post = new Model\Blog\Post(array('blog' => $blog->id, 'date' => date('Y-m-d'), 'publish' => false, 'allow' => true, 'tags' => array(), 'author' => $_SESSION['user']->id));
             $message = 'Añadiendo una nueva entrada';
             return new View('view/admin/index.html.php', array('folder' => 'blog', 'file' => 'edit', 'action' => 'add', 'post' => $post, 'tags' => Model\Blog\Post\Tag::getAll(), 'message' => $message));
             break;
         case 'edit':
             if (empty($id)) {
                 Message::Error(Text::get('admin-blog-error-nopost'));
                 throw new Redirection('/admin/blog');
                 break;
             } else {
                 $post = Model\Blog\Post::get($id);
                 if (!$post instanceof Model\Blog\Post) {
                     Message::Error(Text::get('admin-blog-error-break_entry'));
                     $action = 'list';
                     break;
                 } elseif ($node != \GOTEO_NODE && $post->owner_type == 'node' && $post->owner_id != $node) {
                     Message::Error(Text::get('admin-blog-error-noedit'));
                     throw new Redirection('/admin/blog/list');
                 }
             }
             $message = 'Editando una entrada existente';
             return new View('view/admin/index.html.php', array('folder' => 'blog', 'file' => 'edit', 'action' => 'edit', 'post' => $post, 'tags' => Model\Blog\Post\Tag::getAll(), 'message' => $message));
             break;
         case 'remove':
             // eliminar una entrada
             $tempData = Model\Blog\Post::get($id);
             if ($node != \GOTEO_NODE && $tempData->owner_type == 'node' && $tempData->owner_id != $node) {
                 Message::Error(Text::get('admin-blog-error-nodelete'));
                 throw new Redirection('/admin/blog');
             }
             if (Model\Blog\Post::delete($id)) {
                 // Evento Feed
                 $log = new Feed();
                 $log->setTarget('goteo', 'blog');
                 $log->populate('Quita entrada de blog (admin)', '/admin/blog', \vsprintf('El admin %s ha %s la entrada "%s" del blog de Goteo', array(Feed::item('user', $_SESSION['user']->name, $_SESSION['user']->id), Feed::item('relevant', 'Quitado'), Feed::item('blog', $tempData->title))));
                 $log->doAdmin('admin');
                 unset($log);
                 Message::Info(Text::get('admin-blog-info-deleted_entry'));
             } else {
                 Message::Error(Text::get('admin-blog-error-delete-fail'));
             }
             throw new Redirection('/admin/blog/list');
             break;
             // acciones portada
         // acciones portada
         case 'reorder':
             // lista de entradas en portada
             // obtenemos los datos
             $posts = Model\Post::getAll('home', $node);
             return new View('view/admin/index.html.php', array('folder' => 'blog', 'file' => 'order', 'posts' => $posts));
             break;
         case 'up':
             if ($node != \GOTEO_NODE) {
                 Model\Post::up_node($id, $node);
             } else {
                 Model\Post::up($id, 'home');
             }
             throw new Redirection('/admin/blog/reorder');
             break;
         case 'down':
             if ($node != \GOTEO_NODE) {
                 Model\Post::up_node($id, $node);
             } else {
                 Model\Post::down($id, 'home');
             }
             throw new Redirection('/admin/blog/reorder');
             break;
         case 'add_home':
             // siguiente orden
             if ($node != \GOTEO_NODE) {
                 $next = Model\Post::next_node($node);
                 $data = (object) array('post' => $id, 'node' => $node, 'order' => $next);
                 if (Model\Post::update_node($data, $errors)) {
                     Message::Info(Text::get('admin-blog-info-add-home'));
                 } else {
                     Message::Error(Text::get('admin-blog-error-any-problem') . ':<br />' . \implode('<br />', $errors));
                 }
             } else {
                 $next = Model\Post::next('home');
                 $post = new Model\Post(array('id' => $id, 'order' => $next, 'home' => 1));
                 if ($post->update($errors)) {
                     Message::Info(Text::get('admin-blog-info-add-home'));
                 } else {
                     Message::Error(Text::get('admin-blog-error-any-problem') . ':<br />' . \implode('<br />', $errors));
                 }
             }
             throw new Redirection('/admin/blog/list');
             break;
         case 'remove_home':
             // se quita de la portada solamente
             $ok = false;
             if ($node != \GOTEO_NODE) {
                 $ok = Model\Post::remove_node($id, $node);
             } else {
                 $ok = Model\Post::remove($id, 'home');
             }
             if ($ok) {
                 Message::Info(Text::get('admin-blog-info-removecover'));
             } else {
                 Message::Error(Text::get('admin-blog-error-cover-deletefail'));
             }
             throw new Redirection('/admin/blog/list');
             break;
             // acciones footer (solo para superadmin y admins de goteo
         // acciones footer (solo para superadmin y admins de goteo
         case 'footer':
             if ($node == \GOTEO_NODE) {
                 // lista de entradas en el footer
                 // obtenemos los datos
                 $posts = Model\Post::getAll('footer');
                 return new View('view/admin/index.html.php', array('folder' => 'blog', 'file' => 'footer', 'posts' => $posts));
             } else {
                 throw new Redirection('/admin/blog/list');
             }
             break;
         case 'up_footer':
             if ($node == \GOTEO_NODE) {
                 Model\Post::up($id, 'footer');
                 throw new Redirection('/admin/blog/footer');
             } else {
                 throw new Redirection('/admin/blog');
             }
             break;
         case 'down_footer':
             if ($node == \GOTEO_NODE) {
                 Model\Post::down($id, 'footer');
                 throw new Redirection('/admin/blog/footer');
             } else {
                 throw new Redirection('/admin/blog');
             }
             break;
         case 'add_footer':
             if ($node == \GOTEO_NODE) {
                 // siguiente orden
                 $next = Model\Post::next('footer');
                 $post = new Model\Post(array('id' => $id, 'order' => $next, 'footer' => 1));
                 if ($post->update($errors)) {
                     Message::Info(Text::get('admin-blog-info-footer-complete'));
                 } else {
                     Message::Error(Text::get('admin-blog-error-any-problem') . ':<br />' . \implode('<br />', $errors));
                 }
             }
             throw new Redirection('/admin/blog');
             break;
         case 'remove_footer':
             if ($node == \GOTEO_NODE) {
                 // se quita del footer solamente
                 if (Model\Post::remove($id, 'footer')) {
                     Message::Info(Text::get('admin-blog-info-footer-delete'));
                 } else {
                     Message::Error(Text::get('admin-blog-error-footer-deletefail'));
                 }
             }
             throw new Redirection('/admin/blog/list');
             break;
     }
 }
Ejemplo n.º 5
0
 /**
  * Verifica que todo está correcto para publicar novedades
  * 
  * @param type $project Instancia de proyecto de trabajo
  * @return \Goteo\Controller\Dashboard\Blog
  * @throws Redirection a Mis Proyectos si hay algo mal
  */
 public static function verifyBlog($project)
 {
     $errors = array();
     // tenemos proyecto de trabajo, comprobar si el proyecto esta en estado de tener blog
     if ($project->status < 3 || $project->status == 6) {
         Message::Error(Text::get('dashboard-project-blog-wrongstatus'));
         throw new Redirection('/dashboard/projects/summary');
     }
     // si no tiene registro de blog se lo creamos
     $blog = Model\Blog::get($project->id);
     if (!$blog instanceof Model\Blog) {
         $blog = new Model\Blog(array('id' => '', 'type' => 'project', 'owner' => $project->id, 'active' => true, 'project' => $project->id, 'posts' => array()));
         if (!$blog->save($errors)) {
             Message::Error(Text::get('dashboard-project-blog-fail'));
             Message::Error(implode('<br />', $errors));
             throw new Redirection('/dashboard/projects/summary');
         }
     } elseif (!$blog->active) {
         Message::Error(Text::get('dashboard-project-blog-inactive'));
         throw new Redirection('/dashboard/projects/summary');
     }
     return $blog;
 }
Ejemplo n.º 6
0
 public function translates($option = 'overview', $action = 'list', $id = null)
 {
     $user = $_SESSION['user'];
     $errors = array();
     $langs = \Goteo\Library\i18n\Lang::getAll();
     if ($action == 'lang' && !empty($_POST['lang'])) {
         $_SESSION['translate_lang'] = $_POST['lang'];
     } elseif (empty($_SESSION['translate_lang'])) {
         $_SESSION['translate_lang'] = 'en';
     }
     $projects = Model\User\Translate::getMyProjects($user->id);
     // al seleccionar controlamos: translate_type
     if ($action == 'select' && !empty($_POST['type'])) {
         unset($_SESSION['translate_project']);
         // quitamos el proyecto de traducción
         $type = $_POST['type'];
         if (!empty($_POST[$type])) {
             $_SESSION['translate_type'] = $type;
             $_SESSION['translate_' . $type] = $_POST[$type];
         } else {
             $_SESSION['translate_type'] = 'profile';
         }
     }
     // view data basico para esta seccion
     $viewData = array('menu' => self::menu(), 'section' => __FUNCTION__, 'option' => $option, 'action' => $action, 'langs' => $langs, 'projects' => $projects, 'errors' => $errors, 'success' => $success);
     // aqui, segun lo que este traduciendo, necesito tener un proyecto de trabajo, una convocatoria o mi perfil personal
     switch ($_SESSION['translate_type']) {
         case 'project':
             try {
                 // si lo que tenemos en sesion no es una instancia de proyecto (es una id de proyecto)
                 if ($_SESSION['translate_project'] instanceof Model\Project) {
                     $project = Model\Project::get($_SESSION['translate_project']->id, $_SESSION['translate_lang']);
                 } else {
                     $project = Model\Project::get($_SESSION['translate_project'], $_SESSION['translate_lang']);
                 }
             } catch (\Goteo\Core\Error $e) {
                 $project = null;
             }
             if (!$project instanceof Model\Project) {
                 Message::Error('Ha fallado al cargar los datos del proyecto');
                 $_SESSION['translate_type'] = 'profile';
                 throw new Redirection('/dashboard/translates');
             }
             $_SESSION['translate_project'] = $project;
             $project->lang_name = $langs[$project->lang]->name;
             unset($viewData['langs'][$project->lang]);
             // quitamos el idioma original
             //// Control de traduccion de proyecto
             if ($option == 'updates') {
                 // sus novedades
                 $blog = Model\Blog::get($project->id);
                 if ($action != 'edit') {
                     $action = 'list';
                 }
             }
             // tratar lo que llega por post para guardar los datos
             if ($_SERVER['REQUEST_METHOD'] == 'POST') {
                 switch ($option) {
                     case 'profile':
                         if ($action == 'save') {
                             $user = Model\User::get($_POST['id'], $_SESSION['translate_lang']);
                             $user->about_lang = $_POST['about'];
                             $user->keywords_lang = $_POST['keywords'];
                             $user->contribution_lang = $_POST['contribution'];
                             $user->lang = $_SESSION['translate_lang'];
                             $user->saveLang($errors);
                         }
                         break;
                     case 'overview':
                         if ($action == 'save') {
                             $project->description_lang = $_POST['description'];
                             $project->motivation_lang = $_POST['motivation'];
                             $project->video_lang = $_POST['video'];
                             $project->about_lang = $_POST['about'];
                             $project->goal_lang = $_POST['goal'];
                             $project->related_lang = $_POST['related'];
                             $project->reward_lang = $_POST['reward'];
                             $project->keywords_lang = $_POST['keywords'];
                             $project->media_lang = $_POST['media'];
                             $project->subtitle_lang = $_POST['subtitle'];
                             $project->lang_lang = $_SESSION['translate_lang'];
                             $project->saveLang($errors);
                         }
                         break;
                     case 'costs':
                         if ($action == 'save') {
                             foreach ($project->costs as $key => $cost) {
                                 if (isset($_POST['cost-' . $cost->id . '-cost'])) {
                                     $cost->cost_lang = $_POST['cost-' . $cost->id . '-cost'];
                                     $cost->description_lang = $_POST['cost-' . $cost->id . '-description'];
                                     $cost->lang = $_SESSION['translate_lang'];
                                     $cost->saveLang($errors);
                                 }
                             }
                         }
                         break;
                     case 'rewards':
                         if ($action == 'save') {
                             foreach ($project->social_rewards as $k => $reward) {
                                 if (isset($_POST['social_reward-' . $reward->id . '-reward'])) {
                                     $reward->reward_lang = $_POST['social_reward-' . $reward->id . '-reward'];
                                     $reward->description_lang = $_POST['social_reward-' . $reward->id . '-description'];
                                     $reward->other_lang = $_POST['social_reward-' . $reward->id . '-other'];
                                     $reward->lang = $_SESSION['translate_lang'];
                                     $reward->saveLang($errors);
                                 }
                             }
                             foreach ($project->individual_rewards as $k => $reward) {
                                 if (isset($_POST['individual_reward-' . $reward->id . '-reward'])) {
                                     $reward->reward_lang = $_POST['individual_reward-' . $reward->id . '-reward'];
                                     $reward->description_lang = $_POST['individual_reward-' . $reward->id . '-description'];
                                     $reward->other_lang = $_POST['individual_reward-' . $reward->id . '-other'];
                                     $reward->lang = $_SESSION['translate_lang'];
                                     $reward->saveLang($errors);
                                 }
                             }
                         }
                         break;
                     case 'supports':
                         if ($action == 'save') {
                             // tratar colaboraciones existentes
                             foreach ($project->supports as $key => $support) {
                                 if (isset($_POST['support-' . $support->id . '-support'])) {
                                     // guardamos los datos traducidos
                                     $support->support_lang = $_POST['support-' . $support->id . '-support'];
                                     $support->description_lang = $_POST['support-' . $support->id . '-description'];
                                     $support->lang = $_SESSION['translate_lang'];
                                     $support->saveLang($errors);
                                     // actualizar el Mensaje correspondiente, solamente actualizar
                                     $msg = Model\Message::get($support->thread);
                                     $msg->message_lang = "{$support->support_lang}: {$support->description_lang}";
                                     $msg->lang = $_SESSION['translate_lang'];
                                     $msg->saveLang($errors);
                                 }
                             }
                         }
                         break;
                     case 'updates':
                         if (empty($_POST['blog']) || empty($_POST['id'])) {
                             break;
                         }
                         $post = Model\Blog\Post::get($_POST['id']);
                         $post->title_lang = $_POST['title'];
                         $post->text_lang = $_POST['text'];
                         $post->media_lang = $_POST['media'];
                         $post->legend_lang = $_POST['legend'];
                         $post->lang = $_SESSION['translate_lang'];
                         $post->saveLang($errors);
                         $action = 'edit';
                         break;
                 }
             }
             switch ($option) {
                 case 'profile':
                     $viewData['user'] = Model\User::get($project->owner, $_SESSION['translate_lang']);
                     break;
                 case 'overview':
                     break;
                 case 'costs':
                     if ($_POST) {
                         foreach ($_POST as $k => $v) {
                             if (!empty($v) && preg_match('/cost-(\\d+)-edit/', $k, $r)) {
                                 $viewData[$k] = true;
                             }
                         }
                     }
                     break;
                 case 'rewards':
                     if ($_POST) {
                         foreach ($_POST as $k => $v) {
                             if (!empty($v) && preg_match('/((social)|(individual))_reward-(\\d+)-edit/', $k)) {
                                 $viewData[$k] = true;
                                 break;
                             }
                         }
                     }
                     break;
                 case 'supports':
                     if ($_POST) {
                         foreach ($_POST as $k => $v) {
                             if (!empty($v) && preg_match('/support-(\\d+)-edit/', $k, $r)) {
                                 $viewData[$k] = true;
                                 break;
                             }
                         }
                     }
                     break;
                     // publicar actualizaciones
                 // publicar actualizaciones
                 case 'updates':
                     $viewData['blog'] = $blog;
                     if ($action == 'edit') {
                         $post = Model\Blog\Post::get($id, $_SESSION['translate_lang']);
                         $viewData['post'] = $post;
                     } else {
                         $posts = array();
                         foreach ($blog->posts as $post) {
                             $posts[] = Model\Blog\Post::get($post->id, $_SESSION['translate_lang']);
                         }
                         $viewData['posts'] = $posts;
                     }
                     break;
             }
             $viewData['project'] = $project;
             //// FIN Control de traduccion de proyecto
             break;
         default:
             // profile
             $viewData['option'] = 'profile';
             unset($langs['es']);
             if ($_SERVER['REQUEST_METHOD'] == 'POST') {
                 if ($action == 'save') {
                     $user = Model\User::get($_POST['id'], $_SESSION['translate_lang']);
                     $user->about_lang = $_POST['about'];
                     $user->keywords_lang = $_POST['keywords'];
                     $user->contribution_lang = $_POST['contribution'];
                     $user->lang = $_SESSION['translate_lang'];
                     $user->saveLang($errors);
                 }
             }
             $viewData['user'] = Model\User::get($user->id, $_SESSION['translate_lang']);
     }
     if (!empty($errors)) {
         Message::Error('HA HABIDO ERRORES: <br />' . implode('<br />', $errors));
     }
     return new View('view/dashboard/index.html.php', $viewData);
 }