示例#1
0
 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;
 }
示例#2
0
 /**
  * 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();
 }
示例#4
0
文件: gestion.php 项目: 4bs4/marifa
 /**
  * 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());
 }
示例#5
0
文件: usuario.php 项目: 4bs4/marifa
 /**
  * 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&uacute;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());
 }
示例#6
0
 /**
  * Add any hook dependencies.
  *
  * @access public
  * @param Decoda $decoda
  * @return void
  */
 public function setupHooks(Decoda $decoda)
 {
     $decoda->addHook(new CodeHook());
 }
示例#7
0
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 />";
            }
        }
    }
}
示例#8
0
 /**
  * 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 .= '&nbsp;';
         }
         if (!empty($tag['content'])) {
             $parsed .= $tag['content'];
         } else {
             $parsed .= $content;
         }
         $parsed .= '</' . $html . '>';
     }
     return $parsed;
 }
示例#9
0
文件: decoda.php 项目: 4bs4/marifa
 /**
  * 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);
 }
示例#10
0
$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>
示例#11
0
 /**
  * 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;
 }
示例#12
0
 */
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>
示例#13
0
文件: foto.php 项目: 4bs4/marifa
 /**
  * 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());
 }
示例#14
0
文件: contenido.php 项目: 4bs4/marifa
 /**
  * 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());
 }
示例#15
0
文件: post.php 项目: 4bs4/marifa
 /**
  * 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());
 }
示例#16
0
文件: mensaje.php 项目: 4bs4/marifa
 /**
  * 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());
 }