public function parseRaw($string, $filters = array()) { $decoda = new Decoda(); foreach ($filters as $filter) { $filterClass = ucfirst($filter) . 'Filter'; if (class_exists($filterClass)) { $filterObj = new $filterClass(); $decoda->addFilter($filterObj); } } $decoda->reset($string); $string = $decoda->parse(); return $string; }
/** * Cargamos la plantilla base. */ public function __construct() { // Cargamos la plantilla base. $this->template = View::factory('template'); // Cargo las noticias. $noticia = Model_Noticia::get_active(); if ($noticia !== NULL) { $this->template->assign('noticia', Decoda::procesar($noticia->contenido)); } unset($noticia); // Cargo nombre del sitio. $model_config = new Model_Configuracion(); $this->template->assign('brand', $model_config->get('nombre', 'Marifa')); // Acciones para menu offline. if (!Usuario::is_login()) { // Seteamos menu offline. $this->template->assign('user_header', View::factory('header/logout')->parse()); } else { $this->template->assign('user_header', $this->make_user_header()->parse()); } $this->template->assign('contenido', ''); // Eventos flash. if (isset($_SESSION['flash_success'])) { $this->template->assign('flash_success', get_flash('flash_success')); } if (isset($_SESSION['flash_error'])) { $this->template->assign('flash_error', get_flash('flash_error')); } // Seteo si es mantenimiento. $m = new Mantenimiento(); $this->template->assign('is_locked', $m->is_locked()); unset($m); }
/** * Parse bbcode into safe HTML * * @access protected * @param string $text * @return string */ protected function _parseBBcode($text) { JLoader::register('Decoda', JPATH_COMPONENT_ADMINISTRATOR . '/libraries/decoda/Decoda.php'); $code = new Decoda($text); $code->setEscapeHtml(!$this->params->get('html.allow', true)); $filters = $this->params->get('bbcode.filters', array('default' => 1, 'text' => 1, 'image' => 1, 'quote' => 1, 'url' => 1, 'video' => 1)); foreach ($filters as $filter => $enabled) { if ($enabled) { $class = ucfirst($filter) . 'Filter'; $code->addFilter(new $class()); } } $whitelist = $this->params->get('bbcode.whitelist', ''); $whitelist = array_map('trim', explode(',', $whitelist)); call_user_func_array(array($code, 'whitelist'), $whitelist); return $code->parse(); }
/** * Listado de suspensiones a usuarios. * @param int $pagina Número de página a mostrar. */ public function action_usuarios($pagina) { if (!Usuario::permiso(Model_Usuario_Rango::PERMISO_USUARIO_SUSPENDER)) { $_SESSION['flash_error'] = 'No tienes permiso para acceder a esa sección.'; Request::redirect('/'); } // Formato de la página. $pagina = (int) $pagina > 0 ? (int) $pagina : 1; // Cantidad de elementos por pagina. $model_configuracion = new Model_Configuracion(); $cantidad_por_pagina = $model_configuracion->get('elementos_pagina', 20); // Cargamos la vista. $vista = View::factory('moderar/gestion/usuarios'); // Modelo de suspensiones. $model_suspension = new Model_Usuario_Suspension(); // Limpio antiguos. Model_Usuario_Suspension::clean(); // Cargamos el listado de posts. $lst = $model_suspension->listado($pagina, $cantidad_por_pagina); if (count($lst) == 0 && $pagina != 1) { Request::redirect('/moderar/gestion/usuarios'); } // Paginación. $total = Model_Usuario_Suspension::cantidad(); $vista->assign('cantidad_pendientes', $total); $paginador = new Paginator($total, $cantidad_por_pagina); $vista->assign('paginacion', $paginador->get_view($pagina, '/moderar/gestion/usuarios/%s/')); unset($total); // Obtenemos datos de las denuncias. foreach ($lst as $k => $v) { $a = $v->as_array(); $a['motivo'] = Decoda::procesar($a['motivo']); $a['usuario'] = $v->usuario()->as_array(); $a['moderador'] = $v->moderador()->as_array(); $lst[$k] = $a; } // Seteamos listado de suspensiones. $vista->assign('suspensiones', $lst); unset($lst); // Seteamos el menu. $this->template->assign('master_bar', parent::base_menu('moderar')); // Cargamos plantilla administracion. $admin_template = View::factory('moderar/template'); $admin_template->assign('contenido', $vista->parse()); unset($portada); $admin_template->assign('top_bar', Controller_Moderar_Home::submenu('gestion_usuarios')); // Asignamos la vista a la plantilla base. $this->template->assign('contenido', $admin_template->parse()); }
/** * Inicio de sessión de un usuario. */ public function action_login() { // Verificamos si el usuario está conectado. if (Usuario::is_login()) { // Lo enviamos al perfil. Request::redirect('/', FALSE, TRUE); } // Asignamos el título. $this->template->assign('title', 'Inicio de Sessión'); // Cargamos la vista del usuario. $view_usuario = View::factory('usuario/login'); $view_usuario->assign('error', NULL); $view_usuario->assign('error_nick', FALSE); $view_usuario->assign('error_password', FALSE); $view_usuario->assign('nick', ''); // Verificamos si se han enviado los datos. if (Request::method() == 'POST') { // Verificamos los datos enviados. // Verificamos estén ambos datos. if (!isset($_POST['nick']) || empty($_POST['nick']) || !isset($_POST['password']) || empty($_POST['password'])) { $view_usuario->assign('error', 'Debe introducir el E-Mail o Usuario y la contraseña para poder acceder.'); $view_usuario->assign('error_nick', !(isset($_POST['nick']) && !empty($_POST['nick']))); $view_usuario->assign('error_password', !(isset($_POST['password']) && !empty($_POST['password']))); $view_usuario->assign('nick', isset($_POST['nick']) ? $_POST['nick'] : ''); } else { // Obtenemos los datos. $nick = $_POST['nick']; $password = $_POST['password']; // Realizamos el login. $model_usuario = new Model_Usuario(); $rst = $model_usuario->login($nick, $password); switch ($rst) { case -1: // Datos inválidos. $view_usuario->assign('error', 'Los datos introducidos son inválidos.'); $view_usuario->assign('error_nick', TRUE); $view_usuario->assign('error_password', TRUE); break; case Model_Usuario::ESTADO_ACTIVA: // Cuenta activa. $_SESSION['flash_success'] = 'Bienvenido.'; Request::redirect('/', FALSE, TRUE); break; case Model_Usuario::ESTADO_PENDIENTE: // Cuenta por activar. $view_usuario->assign('error', 'La cuenta no ha sido validada aún. Si no recibiste el correo de activación haz click <a href="/usuario/pedir_activacion/">aqui</a>'); break; case Model_Usuario::ESTADO_SUSPENDIDA: // Cuenta suspendida. // Obtenemos la suspensión. $suspension = $model_usuario->suspension(); // Obtengo información para formar mensaje. $motivo = Decoda::procesar($suspension->motivo); $moderador = $suspension->moderador()->as_array(); $seconds = $suspension->restante(); // Tiempo restante $restante = sprintf("%d:%02d:%02d", floor($seconds / 3600), floor($seconds % 3600 / 60), $seconds % 60); unset($seconds); $view_usuario->assign('error', sprintf(__('%s te ha suspendido por %s debido a:<br /> %s', FALSE), $moderador['nick'], $restante, $motivo)); break; case Model_Usuario::ESTADO_BANEADA: // Cuenta baneada. $baneo = $model_usuario->baneo(); $view_usuario->assign('error', sprintf(__('%s te ha baneado el %s debido a: <br /> %s', FALSE), $baneo->moderador()->nick, $baneo->fecha->format('d/m/Y H:i:s'), Decoda::procesar($baneo->razon))); } $view_usuario->assign('nick', $nick); } } else { $view_usuario->assign('nick', ''); } // Agregamos el la vista a la plantilla. $this->template->assign('contenido', $view_usuario->parse()); }
/** * Add any hook dependencies. * * @access public * @param Decoda $decoda * @return void */ public function setupHooks(Decoda $decoda) { $decoda->addHook(new CodeHook()); }
function SECURITY($debug, $userlevel, $censor) { if (count($_POST) != 0 || count($_GET) != 0) { if (count($_POST) != 0) { include "plugins/decoda/decoda.php"; foreach ($_POST as $key => $val) { if ($key == 'message') { $code = new Decoda($val); $code->useShorthand(false); $code->makeClickable(true); $code->setupGeshi("use_css = false"); $code->addCensored(array($censor)); $val = $code->parse(true); } $_POST[$key] = $val; if ($debug == 1 && $userlevel == 255) { echo "POST ARRAY - Field : {$key} Value: {$val}<br />"; } } return $_POST; } elseif (count($_GET) != 0) { foreach ($_GET as $key => $val) { $val = addslashes($val); $val = htmlentities($val, ENT_QUOTES); $_GET[$key] = $val; if ($debug == 1 && $userlevel == 255) { echo "GET ARRAY - Field : {$key} Value: {$val}<br />"; } } return $_GET; } else { die("ERROR with the http phaser"); } } if ($debug == 1 && $userlevel == 255) { if (is_array($_SESSION)) { foreach ($_SESSION as $key => $val) { $_SESSION[$key] = $val; echo "SESSION ARRAY - Field : {$key} Value: {$val}<br />"; } } } }
/** * Parse the node and its content into an HTML tag. * * @access public * @param array $tag * @param string $content * @return string */ public function parse(array $tag, $content) { $setup = $this->tag($tag['tag']); $xhtml = $this->getParser()->config('xhtml'); $content = trim($content); if (empty($setup)) { return; } // If content doesn't match the pattern, don't wrap in a tag if (!empty($setup['pattern'])) { if ($setup['testNoDefault'] && !isset($tag['attributes']['default']) && !preg_match($setup['pattern'], $content)) { return sprintf('(Invalid %s)', $tag['tag']); } } // Add linebreaks switch ($setup['lineBreaks']) { case self::NL_REMOVE: $content = str_replace(array("\n", "\r"), "", $content); break; case self::NL_CONVERT: $content = Decoda::nl2br($content, $xhtml); break; } // Format attributes $attributes = array(); $attr = ''; if (!empty($tag['attributes'])) { foreach ($tag['attributes'] as $key => $value) { if (isset($setup['map'][$key])) { $key = $setup['map'][$key]; } if ($key === 'default' || substr($value, 0, 11) === 'javascript:') { continue; } if ($setup['escapeAttributes']) { $attributes[$key] = htmlentities($value, ENT_QUOTES, 'UTF-8'); } else { $attributes[$key] = $value; } } } if (!empty($setup['html'])) { $attributes += $setup['html']; } // Use a template if it exists if (!empty($setup['template'])) { $tag['attributes'] = $attributes; $templateEngine = $this->getParser()->getTemplateEngine(); $templateEngine->setFilter($this); $parsed = $templateEngine->render($tag, $content); if ($setup['lineBreaks'] !== self::NL_PRESERVE) { $parsed = str_replace(array("\n", "\r"), "", $parsed); } return $parsed; } foreach ($attributes as $key => $value) { $attr .= ' ' . $key . '="' . $value . '"'; } // Build HTML tag $html = $setup['tag']; if (is_array($html)) { $html = $html[$xhtml]; } $parsed = '<' . $html . $attr; if ($setup['autoClose']) { $parsed .= $xhtml ? '/>' : '>'; } else { $parsed .= '>'; if ($tag['tag'] == 'url') { $parsed .= ' '; } if (!empty($tag['content'])) { $parsed .= $tag['content']; } else { $parsed .= $content; } $parsed .= '</' . $html . '>'; } return $parsed; }
/** * Procesado rápido de BBCode * @param type $string * @return type */ public static function procesar($string) { // Procesamos BBCode. $decoda = new Decoda($string); return $decoda->parse(FALSE); }
$code = new Decoda($string); $code->parse(); ?> <h2>Lists</h2> <?php $string = '[list] [li]Lorem ipsum dolor sit amet, consectetuer adipiscing elit.[/li] [li]Aliquam laoreet pulvinar sem. Aenean at odio.[/li] [li]Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec elit.[/li] [li]Fusce eget enim. Nullam tellus felis, sodales nec, sodales ac, commodo eu, ante.[/li] [li]Curabitur tincidunt, lacus eget iaculis tincidunt.[/li] [li]Curabitur sed tellus. Donec id dolor.[/li] [/list]'; $code = new Decoda($string); $code->parse(); ?> <h2>Images</h2> <?php $string = '[img]http://www.google.com/intl/en_ALL/images/srpr/logo1w.png[/img] [img width=175 height=50]http://www.google.com/intl/en_ALL/images/srpr/logo1w.png[/img]'; $code = new Decoda($string); $code->parse(); ?> </body> </html>
/** * Validate the Decoda markup. * * @access public * @param string $model * @return boolean */ public function validateDecoda($model) { $censored = array_map('trim', explode(',', $this->settings['censored_words'])); $locale = $this->config['decodaLocales'][Configure::read('Config.language')]; $decoda = new Decoda($this->data[$model]['content']); $decoda->defaults()->setXhtml()->setLocale($locale); $decoda->getHook('Censor')->blacklist($censored); $parsed = $decoda->parse(); $errors = $decoda->getErrors(); if (empty($errors)) { $this->data[$model]['contentHtml'] = $parsed; return true; } $nesting = array(); $closing = array(); $scope = array(); foreach ($errors as $error) { switch ($error['type']) { case Decoda::ERROR_NESTING: $nesting[] = $error['tag']; break; case Decoda::ERROR_CLOSING: $closing[] = $error['tag']; break; case Decoda::ERROR_SCOPE: $scope[] = $error['child'] . ' -> ' . $error['parent']; break; } } if (!empty($nesting)) { return $this->invalidate('content', 'The following tags have been nested in the wrong order: %s', implode(', ', $nesting)); } if (!empty($closing)) { return $this->invalidate('content', 'The following tags have no closing tag: %s', implode(', ', $closing)); } if (!empty($scope)) { return $this->invalidate('content', 'The following tags can not be placed within a specific tag: %s', implode(', ', $scope)); } return true; }
*/ protected function parseDefaults($string) { if (empty($this->allowed)) { $code = $this->markupCode; $result = $this->markupResult; } else { $code = array(); $result = array(); foreach ($this->markupCode as $tag => $regex) { if (in_array($tag, $this->allowed)) { $code[$tag] = $this->markupCode[$tag]; $result[$tag] = $this->markupResult[$tag]; } } } $string = preg_replace($code, $result, $string); return $string; }[/code]'; // Translate $code = new Decoda($string); $code->useShorthand(false); $code->makeClickable(true); //$code->addCensored(array('sit')); $test = $code->parse(true); echo $test; ?> </body> </html>
/** * Mostramos una foto. * @param int $foto ID de la foto. */ public function action_ver($foto) { // Convertimos la foto a ID. $foto = (int) $foto; // Cargamos la foto. $model_foto = new Model_Foto($foto); // Verificamos exista. if (!is_array($model_foto->as_array())) { $_SESSION['flash_error'] = 'La foto a la que intentas acceder no está disponible.'; Request::redirect('/foto/'); } // Verifico el estado. if ($model_foto->usuario_id !== Usuario::$usuario_id && $model_foto->estado !== Model_Foto::ESTADO_ACTIVA && !Usuario::permiso(Model_Usuario_Rango::PERMISO_FOTO_VER_DESAPROBADO) && !Usuario::permiso(Model_Usuario_Rango::PERMISO_FOTO_VER_PAPELERA)) { $_SESSION['flash_error'] == 'La foto a la que intentas acceder no está disponible.'; Request::redirect('/foto/'); } // Asignamos el título. $this->template->assign('title', 'Foto - ' . $model_foto->as_object()->titulo); // Cargamos la vista. $view = View::factory('foto/ver'); // Mi id. $view->assign('me', Usuario::$usuario_id); // Informamos los permisos a la vista. $view->assign('permiso_borrar', Usuario::$usuario_id === $model_foto->usuario_id || Usuario::permiso(Model_Usuario_Rango::PERMISO_FOTO_ELIMINAR)); $view->assign('permiso_editar', Usuario::$usuario_id === $model_foto->usuario_id || Usuario::permiso(Model_Usuario_Rango::PERMISO_FOTO_EDITAR)); $view->assign('permiso_ocultar', Usuario::permiso(Model_Usuario_Rango::PERMISO_FOTO_OCULTAR) || Usuario::permiso(Model_Usuario_Rango::PERMISO_FOTO_VER_DESAPROBADO) || Usuario::permiso(Model_Usuario_Rango::PERMISO_FOTO_VER_DENUNCIAS)); $view->assign('permiso_papelera', Usuario::$usuario_id === $model_foto->usuario_id); // Información del usuario dueño del post. $u_data = $model_foto->usuario()->as_array(); $u_data['seguidores'] = $model_foto->usuario()->cantidad_seguidores(); $u_data['posts'] = $model_foto->usuario()->cantidad_posts(); $u_data['comentarios'] = $model_foto->usuario()->cantidad_comentarios(); $u_data['puntos'] = $model_foto->usuario()->cantidad_puntos(); $view->assign('usuario', $u_data); unset($u_data); // Información de la foto. $ft = $model_foto->as_array(); $ft['descripcion'] = Decoda::procesar($ft['descripcion']); $ft['votos'] = (int) $model_foto->votos(); $ft['favoritos'] = (int) $model_foto->favoritos(); $view->assign('foto', $ft); unset($ft); if (!Usuario::is_login() || $model_foto->as_object()->usuario_id == Usuario::$usuario_id) { $view->assign('es_favorito', TRUE); $view->assign('ya_vote', TRUE); } else { // Computamos la visita si es necesario. if ($model_foto->visitas !== NULL) { $model_foto->agregar_visita(); } $view->assign('es_favorito', $model_foto->es_favorito(Usuario::$usuario_id)); $view->assign('ya_vote', !Usuario::permiso(Model_Usuario_Rango::PERMISO_FOTO_VOTAR) || $model_foto->ya_voto(Usuario::$usuario_id)); } // Verifico si soporta comentarios. $view->assign('puedo_comentar', Usuario::permiso(Model_Usuario_Rango::PERMISO_COMENTARIO_COMENTAR_CERRADO) || $model_foto->soporta_comentarios() && Usuario::permiso(Model_Usuario_Rango::PERMISO_COMENTARIO_COMENTAR)); $view->assign('comentario_eliminar', Usuario::permiso(Model_Usuario_Rango::PERMISO_COMENTARIO_ELIMINAR)); $view->assign('comentario_ocultar', Usuario::permiso(Model_Usuario_Rango::PERMISO_COMENTARIO_OCULTAR)); $view->assign('comentario_editar', Usuario::permiso(Model_Usuario_Rango::PERMISO_COMENTARIO_EDITAR)); // Comentarios del post. $cmts = $model_foto->comentarios(); $l_cmt = array(); foreach ($cmts as $cmt) { $cl_cmt = $cmt->as_array(); $cl_cmt['usuario'] = $cmt->usuario()->as_array(); $l_cmt[] = $cl_cmt; } $view->assign('comentarios', $l_cmt); unset($l_cmt, $cmts); $view->assign('comentario_content', isset($_POST['comentario']) ? $_POST['comentario'] : NULL); $view->assign('comentario_error', get_flash('post_comentario_error')); $view->assign('comentario_success', get_flash('post_comentario_success')); // Menu. $this->template->assign('master_bar', parent::base_menu('fotos')); $this->template->assign('top_bar', $this->submenu('index')); // Asignamos la vista. $this->template->assign('contenido', $view->parse()); }
/** * Listado de noticias. * @param int $pagina Número de página de la cual mostrar noticias. */ public function action_noticias($pagina) { // Formato de la página. $pagina = (int) $pagina > 0 ? (int) $pagina : 1; // Cantidad de elementos por pagina. $model_configuracion = new Model_Configuracion(); $cantidad_por_pagina = $model_configuracion->get('elementos_pagina', 20); // Cargamos la vista. $vista = View::factory('admin/contenido/noticias'); // Modelo de noticias. $model_noticias = new Model_Noticia(); // Cargamos el listado de noticias. $lst = $model_noticias->listado($pagina, $cantidad_por_pagina); // Paginación. $total = $model_noticias->total(); $paginador = new Paginator($total, $cantidad_por_pagina); $vista->assign('paginacion', $paginador->get_view($pagina, '/admin/contenido/noticias/%s/')); // Obtenemos datos de las noticias. foreach ($lst as $k => $v) { $a = $v->as_array(); $a['contenido_raw'] = $a['contenido']; $a['contenido'] = Decoda::procesar($a['contenido']); $a['usuario'] = $v->usuario()->as_array(); $lst[$k] = $a; } // Seteamos listado de noticias. $vista->assign('noticias', $lst); unset($lst); // Seteamos el menu. $this->template->assign('master_bar', parent::base_menu('admin')); // Cargamos plantilla administracion. $admin_template = View::factory('admin/template'); $admin_template->assign('contenido', $vista->parse()); unset($portada); $admin_template->assign('top_bar', Controller_Admin_Home::submenu('contenido_noticias')); // Asignamos la vista a la plantilla base. $this->template->assign('contenido', $admin_template->parse()); }
/** * Información de un post. * @param int $post ID del post a visualizar. */ public function action_index($post) { // Convertimos el post a ID. $post = (int) $post; // Cargamos el post. $model_post = new Model_Post($post); // Verificamos exista. if (!is_array($model_post->as_array())) { $_SESSION['flash_error'] = 'El post al que intentas acceder no está disponible.'; Request::redirect('/'); } // Verifico el estado de post y permisos necesarios para acceder. switch ($model_post->estado) { case Model_Post::ESTADO_BORRADO: $_SESSION['flash_error'] = 'El post al que intentas acceder no existe.'; Request::redirect('/'); break; case Model_Post::ESTADO_PAPELERA: if ($model_post->usuario_id !== Usuario::$usuario_id && !Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_VER_PAPELERA)) { $_SESSION['flash_error'] = 'El post al que intentas acceder no se encuentra disponible.'; Request::redirect('/'); } break; case Model_Post::ESTADO_BORRADOR: if ($model_post->usuario_id !== Usuario::$usuario_id && !Usuario::permiso(Model_Usuario_Rango::PERMISO_SITIO_ADMINISTRAR_CONTENIDO)) { $_SESSION['flash_error'] = 'El post al que intentas acceder no se encuentra disponible.'; Request::redirect('/'); } break; case Model_Post::ESTADO_PENDIENTE: case Model_Post::ESTADO_OCULTO: case Model_Post::ESTADO_RECHAZADO: if ($model_post->usuario_id !== Usuario::$usuario_id && !Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_VER_DESAPROBADO)) { $_SESSION['flash_error'] = 'El post al que intentas acceder no se encuentra disponible.'; Request::redirect('/'); } break; } if ($model_post->as_object()->privado && !Usuario::is_login()) { // Asignamos el título. $this->template->assign('title', 'Post privado'); $view = View::factory('post/privado'); $view->assign('post', $model_post->as_array()); } else { // Asignamos el título. $this->template->assign('title', $model_post->as_object()->titulo); // Cargamos la vista. $view = View::factory('post/index'); // Verifico si debo contabilizar la visita. if (Usuario::$usuario_id != $model_post->as_object()->usuario_id) { $model_post->agregar_vista(); } // Mi id. $view->assign('me', Usuario::$usuario_id); // Verifico si sigo al usuario. if ($model_post->usuario_id !== Usuario::$usuario_id) { $view->assign('sigue_usuario', $model_post->usuario()->es_seguidor(Usuario::$usuario_id)); } else { $view->assign('sigue_usuario', TRUE); } // Información del usuario dueño del post. $u_data = $model_post->usuario()->as_array(); $u_data['seguidores'] = $model_post->usuario()->cantidad_seguidores(); $u_data['posts'] = $model_post->usuario()->cantidad_posts(); $u_data['comentarios'] = $model_post->usuario()->cantidad_comentarios(); $u_data['puntos'] = $model_post->usuario()->cantidad_puntos(); $view->assign('usuario', $u_data); unset($u_data); // Información del post. $pst = $model_post->as_array(); $pst['contenido_raw'] = $pst['contenido']; $pst['contenido'] = Decoda::procesar($pst['contenido']); $pst['seguidores'] = $model_post->cantidad_seguidores(); $pst['puntos'] = $model_post->puntos(); $pst['favoritos'] = $model_post->cantidad_favoritos(); $view->assign('post', $pst); unset($pst); // Verifico las acciones extendidas. $view->assign('modificar_ocultar', Usuario::$usuario_id === $model_post->usuario_id || Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_OCULTAR)); $view->assign('modificar_especiales', Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_FIJAR_PROMOVER)); $view->assign('modificar_aprobar', Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_VER_DESAPROBADO) || Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_VER_DENUNCIAS)); //TODO: ver si en todo momento es correcto permitir modificaciones. $view->assign('modificar_editar', Usuario::$usuario_id === $model_post->usuario_id || Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_EDITAR)); $view->assign('modificar_borrar', Usuario::$usuario_id === $model_post->usuario_id || Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_ELIMINAR)); // Verifico si el usuario puede comentar. $view->assign('podemos_comentar', Usuario::permiso(Model_Usuario_Rango::PERMISO_COMENTARIO_COMENTAR_CERRADO) || $model_post->comentar && Usuario::permiso(Model_Usuario_Rango::PERMISO_COMENTARIO_COMENTAR)); // Verifico si el usuario puede votar comentarios. $view->assign('podemos_votar_comentarios', Usuario::permiso(Model_Usuario_Rango::PERMISO_COMENTARIO_VOTAR)); // Verifico acciones generales. if ($model_post->as_object()->usuario_id == Usuario::$usuario_id) { $view->assign('es_favorito', TRUE); $view->assign('sigo_post', TRUE); $view->assign('puntuacion', FALSE); } else { $view->assign('es_favorito', $model_post->es_favorito(Usuario::$usuario_id)); $view->assign('sigo_post', $model_post->es_seguidor(Usuario::$usuario_id)); if (!Usuario::permiso(Model_Usuario_Rango::PERMISO_POST_PUNTUAR) || $model_post->dio_puntos(Usuario::$usuario_id)) { $view->assign('puntuacion', FALSE); } else { // Obtenemos puntos disponibles. $m_user = Usuario::usuario(); $p_d = $m_user->puntos_disponibles; $p_arr = array(); for ($i = 1; $i <= $p_d; $i++) { $p_arr[] = $i; } $view->assign('puntuacion', $p_arr); unset($m_user, $p_d, $p_arr); } } // Categoria del post. $view->assign('categoria', $model_post->categoria()->as_array()); // Etiquetas. $view->assign('etiquetas', $model_post->etiquetas()); // Acciones posibles sobre comentarios. $view->assign('comentario_eliminar', Usuario::permiso(Model_Usuario_Rango::PERMISO_COMENTARIO_ELIMINAR)); $view->assign('comentario_ocultar', Usuario::permiso(Model_Usuario_Rango::PERMISO_COMENTARIO_OCULTAR)); $view->assign('comentario_editar', Usuario::permiso(Model_Usuario_Rango::PERMISO_COMENTARIO_EDITAR)); // Comentarios del post. $cmts = $model_post->comentarios(NULL); $l_cmt = array(); foreach ($cmts as $cmt) { // Verifico omito los no visibles si el usuario no puede verlos. if ($cmt->estado !== Model_Comentario::ESTADO_VISIBLE && !Usuario::permiso(Model_Usuario_Rango::PERMISO_COMENTARIO_VER_DESAPROBADO)) { continue; } $cl_cmt = $cmt->as_array(); $cl_cmt['contenido_raw'] = $cl_cmt['contenido']; $cl_cmt['contenido'] = Decoda::procesar($cl_cmt['contenido']); if ($cl_cmt['usuario_id'] == Usuario::$usuario_id) { $cl_cmt['vote'] = TRUE; } else { $cl_cmt['vote'] = $cmt->ya_voto(Usuario::$usuario_id); } $cl_cmt['votos'] = $cmt->cantidad_votos(); $cl_cmt['usuario'] = $cmt->usuario()->as_array(); $l_cmt[] = $cl_cmt; } $view->assign('comentarios', $l_cmt); unset($l_cmt, $cmts); $view->assign('comentario_content', isset($_POST['comentario']) ? $_POST['comentario'] : NULL); $view->assign('comentario_error', get_flash('post_comentario_error')); $view->assign('comentario_success', get_flash('post_comentario_success')); } // Menu. $this->template->assign('master_bar', parent::base_menu('posts')); $this->template->assign('top_bar', Controller_Home::submenu('index')); // Asignamos la vista. $this->template->assign('contenido', $view->parse()); }
/** * Vemos un mensaje enviado. * @param int $mensaje ID del mensaje a ver */ public function action_enviado($mensaje) { // Forzamos entero. $mensaje = (int) $mensaje; // Verificamos exista el mensaje. $model_mensaje = new Model_Mensaje($mensaje); if (!is_array($model_mensaje->as_array())) { Request::redirect('/mensaje/'); } // Verificamos sea el emisor. if (Usuario::$usuario_id != $model_mensaje->emisor_id) { Request::redirect('/mensaje/'); } // Asignamos el título. $this->template->assign('title', 'Mensajes - ' . $model_mensaje->asunto); // Cargamos la vista. $view = View::factory('mensaje/enviado'); // Información general del mensaje. $aux = $model_mensaje->as_array(); // Proceso el contenido. $aux['contenido'] = Decoda::procesar($aux['contenido']); // Agrego usuarios. $aux['emisor'] = $model_mensaje->emisor()->as_array(); $aux['receptor'] = $model_mensaje->receptor()->as_array(); $view->assign('mensaje', $aux); unset($aux); // Listado de mensajes hijos. // $view->assign('hijos', $this->listado_conversacion($model_mensaje->padre_id)); // Menu. $this->template->assign('master_bar', parent::base_menu('inicio')); $this->template->assign('top_bar', $this->submenu('nuevo')); // Asignamos la vista. $this->template->assign('contenido', $view->parse()); }