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; }
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("/"); } }
/** * 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; } }
* 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;
* 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');