예제 #1
0
파일: post.php 프로젝트: anvnguyen/Goteo
 public static function getAll($position = 'home', $node = \GOTEO_NODE)
 {
     if (!in_array($position, array('home', 'footer'))) {
         $position = 'home';
     }
     $list = array();
     $values = array(':lang' => \LANG);
     if ($node == \GOTEO_NODE || empty($node)) {
         // portada goteo, sacamos todas las de blogs tipo nodo
         // que esten marcadas en la tabla post
         $sqlFilter = " WHERE post.{$position} = 1\n                    AND post.publish = 1\n                    ";
         $sqlField = "post.order as `order`,";
     } else {
         // portada nodo, igualmente las entradas de blogs tipo nodo
         // perosolo la que esten en la tabla de entradas en portada de ese nodo
         $sqlFilter = " WHERE post.id IN (SELECT post FROM post_node WHERE node = :node)\n                    AND post.publish = 1\n                    ";
         $values[':node'] = $node;
         $sqlField = "(SELECT `order` FROM post_node WHERE node = :node AND post = post.id) as `order`,";
     }
     $sql = "\n                SELECT\n                    post.id as id,\n                    post.blog as blog,\n                    IFNULL(post_lang.title, post.title) as title,\n                    IFNULL(post_lang.text, post.text) as `text`,\n                    post.image as `image`,\n                    post.media as `media`,\n                    {$sqlField}\n                    DATE_FORMAT(post.date, '%d-%m-%Y') as date,\n                    DATE_FORMAT(post.date, '%d | %m | %Y') as fecha,\n                    post.publish as publish,\n                    post.author as author,\n                    post.home as home,\n                    post.footer as footer,\n                    blog.type as owner_type,\n                    blog.owner as owner_id\n                FROM    post\n                INNER JOIN blog\n                    ON  blog.id = post.blog\n                LEFT JOIN post_lang\n                    ON  post_lang.id = post.id\n                    AND post_lang.lang = :lang\n                {$sqlFilter}\n                ORDER BY `order` ASC, title ASC\n                ";
     $query = static::query($sql, $values);
     foreach ($query->fetchAll(\PDO::FETCH_CLASS, __CLASS__) as $post) {
         // galeria
         $post->gallery = Image::getAll($post->id, 'post');
         $post->image = $post->gallery[0];
         $post->media = new Media($post->media);
         $post->type = $post->home == 1 ? 'home' : 'footer';
         // datos del autor
         switch ($post->owner_type) {
             case 'project':
                 $proj_blog = Project::getMini($post->owner_id);
                 $post->author = $proj_blog->owner;
                 $post->user = $proj_blog->user;
                 $post->owner_name = $proj_blog->name;
                 $sql = "UPDATE post SET author = '.{$proj_blog->owner}.' WHERE post.id = ?";
                 self::query($sql, array($post->id));
                 break;
             case 'node':
                 $post->user = User::getMini($post->author);
                 // (Nodesys)
                 break;
         }
         $list[$post->id] = $post;
     }
     return $list;
 }
예제 #2
0
 public static function getAll()
 {
     $list = array();
     $sql = "\n                SELECT\n                    glossary.id as id,\n                    IFNULL(glossary_lang.title, glossary.title) as title,\n                    IFNULL(glossary_lang.text, glossary.text) as `text`,\n                    IFNULL(glossary_lang.legend, glossary.legend) as `legend`,\n                    glossary.media as `media`\n                FROM    glossary\n                LEFT JOIN glossary_lang\n                    ON  glossary_lang.id = glossary.id\n                    AND glossary_lang.lang = :lang\n                ";
     $sql .= " ORDER BY title ASC\n                ";
     $query = static::query($sql, array(':lang' => \LANG));
     foreach ($query->fetchAll(\PDO::FETCH_CLASS, __CLASS__) as $glossary) {
         // galeria
         $glossary->gallery = Image::getAll($glossary->id, 'glossary');
         $glossary->image = $glossary->gallery[0];
         // video
         if (!empty($glossary->media)) {
             $glossary->media = new Media($glossary->media);
         }
         $list[$glossary->id] = $glossary;
     }
     return $list;
 }
예제 #3
0
파일: info.php 프로젝트: anvnguyen/Goteo
 public static function getAll($published = false, $node = \GOTEO_NODE)
 {
     $list = array();
     $sql = "\n                SELECT\n                    info.id as id,\n                    IFNULL(info_lang.title, info.title) as title,\n                    IFNULL(info_lang.text, info.text) as `text`,\n                    IFNULL(info_lang.legend, info.legend) as `legend`,\n                    info.media as `media`,\n                    info.publish as `publish`,\n                    info.order as `order`\n                FROM    info\n                LEFT JOIN info_lang\n                    ON  info_lang.id = info.id\n                    AND info_lang.lang = :lang\n                WHERE info.node = :node\n                ";
     if ($published == true) {
         $sql .= " AND info.publish = 1";
     }
     $sql .= " ORDER BY `order` ASC\n                ";
     $query = static::query($sql, array(':node' => $node, ':lang' => \LANG));
     foreach ($query->fetchAll(\PDO::FETCH_CLASS, __CLASS__) as $info) {
         // galeria
         $info->gallery = Image::getAll($info->id, 'info');
         $info->image = $info->gallery[0];
         // video
         if (!empty($info->media)) {
             $info->media = new Media($info->media);
         }
         $list[$info->id] = $info;
     }
     return $list;
 }
예제 #4
0
 public function edit($id, $step = 'userProfile')
 {
     $project = Model\Project::get($id, null);
     // para que tenga todas las imágenes
     $project->gallery = Model\Image::getAll($id, 'project');
     // aunque pueda acceder edit, no lo puede editar si
     if ($project->owner != $_SESSION['user']->id && (isset($_SESSION['admin_node']) && $_SESSION['admin_node'] != \GOTEO_NODE) && (isset($_SESSION['admin_node']) && $project->node != $_SESSION['admin_node']) && !isset($_SESSION['user']->roles['superadmin']) && (isset($_SESSION['user']->roles['checker']) && !Model\User\Review::is_assigned($_SESSION['user']->id, $project->id))) {
         Message::Info('No tienes permiso para editar este proyecto');
         throw new Redirection('/admin/projects');
     }
     // si no tenemos SESSION stepped es porque no venimos del create
     if (!isset($_SESSION['stepped'])) {
         $_SESSION['stepped'] = array('userProfile' => 'userProfile', 'userPersonal' => 'userPersonal', 'overview' => 'overview', 'costs' => 'costs', 'rewards' => 'rewards', 'supports' => 'supports');
     }
     if ($project->status != 1 && !ACL::check('/project/edit/todos')) {
         // solo puede estar en preview
         $step = 'preview';
         $steps = array('preview' => array('name' => Text::get('step-7'), 'title' => Text::get('step-preview'), 'offtopic' => true));
     } else {
         // todos los pasos
         // entrando, por defecto, en el paso especificado en url
         $steps = array('userProfile' => array('name' => Text::get('step-1'), 'title' => Text::get('step-userProfile'), 'offtopic' => true), 'userPersonal' => array('name' => Text::get('step-2'), 'title' => Text::get('step-userPersonal'), 'offtopic' => true), 'overview' => array('name' => Text::get('step-3'), 'title' => Text::get('step-overview')), 'costs' => array('name' => Text::get('step-4'), 'title' => Text::get('step-costs')), 'rewards' => array('name' => Text::get('step-5'), 'title' => Text::get('step-rewards')), 'supports' => array('name' => Text::get('step-6'), 'title' => Text::get('step-supports')), 'preview' => array('name' => Text::get('step-7'), 'title' => Text::get('step-preview'), 'offtopic' => true));
     }
     foreach ($_REQUEST as $k => $v) {
         if (strncmp($k, 'view-step-', 10) === 0 && !empty($v) && !empty($steps[substr($k, 10)])) {
             $step = substr($k, 10);
         }
     }
     if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST)) {
         $errors = array();
         // errores al procesar, no son errores en los datos del proyecto
         foreach ($steps as $id => &$data) {
             if (call_user_func_array(array($this, "process_{$id}"), array(&$project, &$errors))) {
                 // si un process devuelve true es que han enviado datos de este paso, lo añadimos a los pasados
                 if (!in_array($id, $_SESSION['stepped'])) {
                     $_SESSION['stepped'][$id] = $id;
                 }
             }
         }
         // guardamos los datos que hemos tratado y los errores de los datos
         $project->save($errors);
         // hay que mostrar errores en la imagen
         if (!empty($errors['image'])) {
             $project->errors['overview']['image'] = $errors['image'];
             $project->okeys['overview']['image'] = null;
         }
         // si estan enviando el proyecto a revisión
         if (isset($_POST['process_preview']) && isset($_POST['finish'])) {
             $errors = array();
             $old_id = $project->id;
             if ($project->ready($errors)) {
                 if ($_SESSION['project']->id == $old_id) {
                     $_SESSION['project'] = $project;
                 }
                 // email a los de goteo
                 $mailHandler = new Mail();
                 $mailHandler->reply = $project->user->email;
                 $mailHandler->replyName = "{$project->user->name}";
                 $mailHandler->to = \GOTEO_MAIL;
                 $mailHandler->toName = 'Revisor de proyectos';
                 $mailHandler->subject = 'Proyecto ' . $project->name . ' enviado a valoración';
                 $mailHandler->content = '<p>Han enviado un nuevo proyecto a revisión</p><p>El nombre del proyecto es: <span class="message-highlight-blue">' . $project->name . '</span> <br />y se puede ver en <span class="message-highlight-blue"><a href="' . SITE_URL . '/project/' . $project->id . '">' . SITE_URL . '/project/' . $project->id . '</a></span></p>';
                 $mailHandler->html = true;
                 $mailHandler->template = 0;
                 if ($mailHandler->send($errors)) {
                     Message::Info(Text::get('project-review-request_mail-success'));
                 } else {
                     Message::Error(Text::get('project-review-request_mail-fail'));
                     Message::Error(implode('<br />', $errors));
                 }
                 unset($mailHandler);
                 // email al autor
                 // Obtenemos la plantilla para asunto y contenido
                 $template = Template::get(8);
                 // Sustituimos los datos
                 $subject = str_replace('%PROJECTNAME%', $project->name, $template->title);
                 // En el contenido:
                 $search = array('%USERNAME%', '%PROJECTNAME%');
                 $replace = array($project->user->name, $project->name);
                 $content = \str_replace($search, $replace, $template->text);
                 $mailHandler = new Mail();
                 $mailHandler->to = $project->user->email;
                 $mailHandler->toName = $project->user->name;
                 $mailHandler->subject = $subject;
                 $mailHandler->content = $content;
                 $mailHandler->html = true;
                 $mailHandler->template = $template->id;
                 if ($mailHandler->send($errors)) {
                     Message::Info(Text::get('project-review-confirm_mail-success'));
                 } else {
                     Message::Error(Text::get('project-review-confirm_mail-fail'));
                     Message::Error(implode('<br />', $errors));
                 }
                 unset($mailHandler);
                 // Evento Feed
                 $log = new Feed();
                 $log->setTarget($project->id);
                 $log->populate('El proyecto ' . $project->name . ' se ha enviado a revision', '/project/' . $project->id, \vsprintf('%s ha inscrito el proyecto %s para <span class="red">revisión</span>, el estado global de la información es del %s', array(Feed::item('user', $project->user->name, $project->user->id), Feed::item('project', $project->name, $project->id), Feed::item('relevant', $project->progress . '%'))));
                 $log->doAdmin('project');
                 unset($log);
                 throw new Redirection("/dashboard?ok");
             }
         }
     } elseif ($_SERVER['REQUEST_METHOD'] === 'POST' && empty($_POST)) {
         throw new Error(Error::INTERNAL, 'FORM CAPACITY OVERFLOW');
     }
     //re-evaluar el proyecto
     $project->check();
     // variables para la vista
     $viewData = array('project' => $project, 'steps' => $steps, 'step' => $step);
     // segun el paso añadimos los datos auxiliares para pintar
     switch ($step) {
         case 'userProfile':
             $owner = Model\User::get($project->owner, null);
             // si es el avatar por defecto no lo mostramos aqui
             if ($owner->avatar->id == 1) {
                 unset($owner->avatar);
             }
             $viewData['user'] = $owner;
             $viewData['interests'] = Model\User\Interest::getAll();
             if ($_POST) {
                 foreach ($_POST as $k => $v) {
                     if (!empty($v) && preg_match('/web-(\\d+)-edit/', $k, $r)) {
                         $viewData[$k] = true;
                     }
                 }
                 if (!empty($_POST['web-add'])) {
                     $last = end($owner->webs);
                     if ($last !== false) {
                         $viewData["web-{$last->id}-edit"] = true;
                     }
                 }
             }
             break;
         case 'userPersonal':
             $viewData['account'] = Model\Project\Account::get($project->id);
             break;
         case 'overview':
             $viewData['categories'] = Model\Project\Category::getAll();
             //                    $viewData['currently'] = Model\Project::currentStatus();
             //                    $viewData['scope'] = Model\Project::scope();
             break;
         case 'costs':
             $viewData['types'] = Model\Project\Cost::types();
             if ($_POST) {
                 foreach ($_POST as $k => $v) {
                     if (!empty($v) && preg_match('/cost-(\\d+)-edit/', $k, $r)) {
                         $viewData[$k] = true;
                     }
                 }
                 if (!empty($_POST['cost-add'])) {
                     $last = end($project->costs);
                     if ($last !== false) {
                         $viewData["cost-{$last->id}-edit"] = true;
                     }
                 }
             }
             break;
         case 'rewards':
             $viewData['stypes'] = Model\Project\Reward::icons('social');
             $viewData['itypes'] = Model\Project\Reward::icons('individual');
             $viewData['licenses'] = Model\Project\Reward::licenses();
             //                    $viewData['types'] = Model\Project\Support::types();
             if ($_POST) {
                 foreach ($_POST as $k => $v) {
                     if (!empty($v) && preg_match('/((social)|(individual))_reward-(\\d+)-edit/', $k)) {
                         $viewData[$k] = true;
                     }
                 }
                 if (!empty($_POST['social_reward-add'])) {
                     $last = end($project->social_rewards);
                     if ($last !== false) {
                         $viewData["social_reward-{$last->id}-edit"] = true;
                     }
                 }
                 if (!empty($_POST['individual_reward-add'])) {
                     $last = end($project->individual_rewards);
                     if ($last !== false) {
                         $viewData["individual_reward-{$last->id}-edit"] = true;
                     }
                 }
             }
             break;
         case 'supports':
             $viewData['types'] = Model\Project\Support::types();
             if ($_POST) {
                 foreach ($_POST as $k => $v) {
                     if (!empty($v) && preg_match('/support-(\\d+)-edit/', $k, $r)) {
                         $viewData[$k] = true;
                     }
                 }
                 if (!empty($_POST['support-add'])) {
                     $last = end($project->supports);
                     if ($last !== false) {
                         $viewData["support-{$last->id}-edit"] = true;
                     }
                 }
             }
             break;
         case 'preview':
             $success = array();
             if (empty($project->errors)) {
                 $success[] = Text::get('guide-project-success-noerrors');
             }
             if ($project->finishable) {
                 $success[] = Text::get('guide-project-success-minprogress');
                 $success[] = Text::get('guide-project-success-okfinish');
             }
             $viewData['success'] = $success;
             $viewData['types'] = Model\Project\Cost::types();
             break;
     }
     $view = new View("view/project/edit.html.php", $viewData);
     return $view;
 }
예제 #5
0
파일: post.php 프로젝트: kenjs/Goteo
 public static function getList($filters = array(), $published = true)
 {
     $values = array(':lang' => \LANG);
     $list = array();
     $sql = "\n                SELECT\n                    post.id as id,\n                    post.blog as blog,\n                    IFNULL(post_lang.title, post.title) as title,\n                    IFNULL(post_lang.text, post.text) as `text`,\n                    IFNULL(post_lang.legend, post.legend) as `legend`,\n                    post.image as `image`,\n                    post.media as `media`,\n                    DATE_FORMAT(post.date, '%d-%m-%Y') as fecha,\n                    post.publish as publish,\n                    post.home as home,\n                    post.footer as footer,\n                    post.author as author,\n                    blog.type as owner_type,\n                    blog.owner as owner_id\n                FROM    post\n                INNER JOIN blog\n                    ON  blog.id = post.blog\n                LEFT JOIN post_lang\n                    ON  post_lang.id = post.id\n                    AND post_lang.lang = :lang\n                ";
     if (in_array($filters['show'], array('all', 'home', 'footer'))) {
         $sql .= " WHERE blog.id IS NOT NULL\n                ";
     } elseif ($filters['show'] == 'updates') {
         $sql .= " WHERE blog.type = 'project'\n                ";
     } else {
         $sql .= " WHERE blog.type = 'node'\n                ";
     }
     if (!empty($filters['blog'])) {
         $sql .= " AND post.blog = :blog\n                ";
         $values[':blog'] = $filters['blog'];
     }
     if (!empty($filters['tag'])) {
         $sql .= " AND post.id IN (SELECT post FROM post_tag WHERE tag = :tag)\n                ";
         $values[':tag'] = $filters['tag'];
     }
     if (!empty($filters['author'])) {
         $sql .= " AND post.author = :author\n                ";
         $values[':author'] = $filters['author'];
     }
     // solo las publicadas
     if ($published || $filters['show'] == 'published') {
         $sql .= " AND post.publish = 1\n                ";
         if (empty($filters['blog'])) {
             $sql .= " AND blog.owner IN (SELECT id FROM node WHERE active = 1)\n                    AND blog.owner != 'testnode'\n                ";
         }
     }
     // solo las del propio blog
     if ($filters['show'] == 'owned') {
         $sql .= " AND blog.owner = :node\n                ";
         $values[':node'] = $filters['node'];
     }
     // solo las de la portada
     if ($filters['show'] == 'home') {
         if ($filters['node'] == \GOTEO_NODE) {
             $sql .= " AND post.home = 1\n                    ";
         } else {
             $sql .= " AND post.id IN (SELECT post FROM post_node WHERE node = :node)\n                    ";
             $values[':node'] = $filters['node'];
         }
     }
     if ($filters['show'] == 'footer') {
         if ($filters['node'] == \GOTEO_NODE) {
             $sql .= " AND post.footer = 1\n                    ";
         }
     }
     $sql .= "\n                ORDER BY post.date DESC, post.id DESC\n                ";
     $query = static::query($sql, $values);
     foreach ($query->fetchAll(\PDO::FETCH_CLASS, __CLASS__) as $post) {
         // galeria
         $post->gallery = Image::getAll($post->id, 'post');
         $post->image = $post->gallery[0];
         // video
         if (isset($post->media)) {
             $post->media = new Media($post->media);
         }
         $post->num_comments = Post\Comment::getCount($post->id);
         // datos del autor del  post
         switch ($post->owner_type) {
             case 'project':
                 $proj_blog = Project::getMini($post->owner_id);
                 $post->author = $proj_blog->owner;
                 $post->user = $proj_blog->user;
                 $post->owner_name = $proj_blog->name;
                 break;
             case 'node':
                 $post->user = User::getMini($post->author);
                 $node_blog = Node::get($post->owner_id);
                 $post->owner_name = $node_blog->name;
                 break;
         }
         $list[$post->id] = $post;
     }
     return $list;
 }