예제 #1
0
파일: blog.php 프로젝트: anvnguyen/Goteo
 public static function get($owner, $type = 'project')
 {
     $query = static::query("\n                    SELECT\n                        id,\n                        type,\n                        owner,\n                        active\n                    FROM    blog\n                    WHERE owner = :owner\n                    AND type = :type\n                    ", array(':owner' => $owner, ':type' => $type));
     $blog = $query->fetchObject(__CLASS__);
     switch ($blog->type) {
         case 'node':
             $blog->node = $blog->owner;
             break;
         case 'project':
             $blog->project = $blog->owner;
             break;
     }
     if ($blog->node == \GOTEO_NODE) {
         $blog->posts = Blog\Post::getAll();
     } elseif (!empty($blog->id)) {
         $blog->posts = Blog\Post::getAll($blog->id);
     } else {
         $blog->posts = array();
     }
     return $blog;
 }
예제 #2
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("/");
     }
 }
예제 #3
0
파일: projects.php 프로젝트: isbkch/Goteo
 /**
  * Gestiona las acciones de gestión de updates
  * 
  * @param type $action (por referencia)
  * @param type $id del post a gestionar
  * @param type $blog id del blog del proyecto
  * @param type $errors (por referencia)
  * @return instancia de Post para las acciones add y edit , array de Posts para las acciones delete y list
  */
 public static function prepare_updates(&$action, $id, $blog)
 {
     // segun la accion
     switch ($action) {
         case 'none':
             $posts = array();
             break;
         case 'add':
             $post = new Model\Blog\Post(array('blog' => $blog, 'date' => date('Y-m-d'), 'publish' => false, 'allow' => true));
             return array($post, null);
             break;
         case 'edit':
             if (empty($id)) {
                 Message::Error(Text::get('dashboard-project-updates-nopost'));
                 $action = 'list';
                 break;
             } else {
                 $post = Model\Blog\Post::get($id);
                 if (!$post instanceof Model\Blog\Post) {
                     Message::Error(Text::get('dashboard-project-updates-postcorrupt'));
                     $action = 'list';
                     break;
                 }
                 return array($post, null);
             }
             break;
         case 'delete':
             $post = Model\Blog\Post::get($id);
             if ($post->delete($id)) {
                 Message::Info(Text::get('dashboard-project-updates-deleted'));
             } else {
                 Message::Error(Text::get('dashboard-project-updates-delete_fail'));
             }
             $posts = Model\Blog\Post::getAll($blog, null, false);
             $action = 'list';
             return array(null, $posts);
             break;
         default:
             $posts = Model\Blog\Post::getAll($blog, null, false);
             $action = 'list';
             return array(null, $posts);
             break;
     }
 }
예제 #4
0
 *  Goteo is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Affero General Public License for more details.
 *
 *  You should have received a copy of the GNU Affero General Public License
 *  along with Goteo.  If not, see <http://www.gnu.org/licenses/agpl.txt>.
 *
 */
use Goteo\Library\Text, Goteo\Model\Blog\Post;
$blog = $this['blog'];
$list = array();
switch ($this['type']) {
    case 'posts':
        $title = Text::get('blog-side-last_posts');
        $items = Post::getAll($blog->id, 7);
        // enlace a la entrada
        foreach ($items as $item) {
            $list[] = '<a href="/blog/' . $item->id . '"> ' . Text::recorta($item->title, 100) . '</a>';
        }
        break;
    case 'tags':
        $title = Text::get('blog-side-tags');
        $items = Post\Tag::getList($blog->id);
        // enlace a la lista de entradas con filtro tag
        foreach ($items as $item) {
            if ($item->used > 0) {
                $list[] = '<a href="/blog/?tag=' . $item->id . '">' . $item->name . '</a>';
            }
        }
        break;
예제 #5
0
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Affero General Public License for more details.
 *
 *  You should have received a copy of the GNU Affero General Public License
 *  along with Goteo.  If not, see <http://www.gnu.org/licenses/agpl.txt>.
 *
 */
use Goteo\Library\Text, Goteo\Model\Blog\Post, Goteo\Core\View;
$bodyClass = 'news';
$read_more = Text::get('regular-read_more');
// noticias
$news = $this['news'];
// últimas entradas del blog goteo
$list = array();
$title = Text::get('blog-side-last_posts');
$items = Post::getAll(1, 7);
// enlace a la entrada
foreach ($items as $item) {
    $list[] = '<a href="/blog/' . $item->id . '"> ' . Text::recorta($item->title, 100) . '</a>';
}
// paginacion
require_once 'library/pagination/pagination.php';
$pagedResults = new \Paginated($news, 7, isset($_GET['page']) ? $_GET['page'] : 1);
include 'view/prologue.html.php';
include 'view/header.html.php';
?>
<div id="sub-header-secondary">
    <div class="clearfix">
        <h2>GOTEO<span class="red">NEWS</span></h2>
        <?php 
echo new View('view/header/share.html.php');