<?php
/*******************************************************************************
* MUSPA
*
* Copyright (C) 2004 MUSPA Project
*
* Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo
* sob os termos da Licença Pública Geral GNU conforme publicada pela Free
* Software Foundation; tanto a versão 2 da Licença, como (a seu critério)
* qualquer versão posterior.
*
* Este programa é distribuído na expectativa de que seja útil, porém, SEM
* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU
* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral do
* GNU para mais detalhes.
*
* Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto com
* este programa; se não, escreva para a Free Software Foundation, Inc., no
* endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA.
*
*******************************************************************************/
require "../../config.php";
require "../../include/db.php";
error_reporting(E_ALL);
if (!isset($_GET['type']))
die('Você precisa especificar a váriavel "type".');
$type = $_GET['type'];
if ($type == 'list')
DisPlayList();
elseif ($type == 'content')
DisplayContent();
else
die('O valor da variável "type" é inválido.');
/**
* Imprime a lista de noticias
* Note: Se este arquivo ficar muito grande, talvez eu possa por as funções
* DisplayList() e DisplayContent() cada uma em um arquivo diferente.
*/
function DisplayList()
{
if (!isset($_GET['secao']))
die('Variável "secao" faltando. '
.'Você precisa especificar pelo menos uma seção de notícia.');
if (!isset($_GET['end']))
die('Variável "end" faltando. '
.'Você precisa especificar quantas seções serão mostradas.');
$end = (int)$_GET['end'];
if (!$end)
die('A variável "end" precisa ser um número maior que zero.');
// Váriaveis opcionais
$start = isset($_GET['start']) ? (int)$_GET['start'] : 0;
$basedir = isset($_GET['basedir']) ? $_GET['basedir'] : "";
$aRawSecoes = explode(',', $_GET['secao']);
$aSecoes = array();
foreach($aRawSecoes as $secao)
{
$secao = (int)$secao;
if ($secao <= 0)
continue;
else
$aSecao[] = $secao;
}
if (!count($aSecao))
die('As seções que você especificou são inválidas, você precisa especificar o ID das seções que deseja mostrar.');
$secao = "";
if (count($aSecao) == 1)
$secao = "= ".$aSecao[0];
else
$secao = "IN (".implode(',', $aSecao).")";
// Finalmente cria a conexão com o DB e faz a query...
$db = new db(DB_HOST, DB_USER, DB_PWD, DB_DB);
// Pega todos os modelos que irão aparecer
$db->query('SELECT N.modelo, M.html '
.' FROM '.PRE_TABLE.'noticia_noticias N, '.PRE_TABLE.'noticia_modelos M '
.' WHERE N.modelo = M.id AND '
.' N.secao '.$secao.' GROUP BY N.modelo LIMIT '.$end, __FILE__, __LINE__);
if (!$db->numRows())
return;
// array que guarda para cada modelo, a data hora, e o substituto dela.
$aDataHora = array();
$dataQuery = "";
$j = 0;
while ($row = $db->fetchAssoc())
{
// Procura quantas formatações de data o cara colocou.
if ($found = preg_match_all('/\{DATAHORA\|?([^\}]*)\}/', $row['html'], $match))
{
for ($i = 0; $i < $found; $i++)
{
$aDataHora[$row['modelo']][0][] = $match[0][$i];
$aDataHora[$row['modelo']][1][] = 'datahora_'.$j;
$dataQuery .= ', DATE_FORMAT(N.datahora, "'.$db->escapeString($match[1][$i]).'") AS datahora_'.$j;
$j++;
}
}
}
$db->query('SELECT N.id, N.modelo, N.olho, N.titulo, '
.' N.fonte, N.minitexto, N.conteudo, N.datahora,'
.' I.url AS capaimg, M.html AS html,'
.' S.nome AS secao '.$dataQuery
.' FROM '.PRE_TABLE.'noticia_noticias N '
.' INNER JOIN '.PRE_TABLE.'noticia_modelos M ON (N.modelo = M.id)'
.' INNER JOIN '.PRE_TABLE.'noticia_secoes S ON (N.secao = S.id)'
.' LEFT JOIN '.PRE_TABLE.'noticia_imagens I ON (N.capaimg = I.id)'
.' WHERE N.secao '.$secao
.' ORDER BY N.fixed DESC, N.datahora DESC'
.' LIMIT '.$end
, __FILE__, __LINE__);
$row = $db->fetchAssoc();
$db->reset();
while($row = $db->fetchAssoc())
{
$modelo = $row['html'];
$modelo = str_replace('{OLHO}', $row['olho'], $modelo);
$modelo = str_replace('{TITULO}', $row['titulo'], $modelo);
if (isset($aDataHora[$row['modelo']]))
{
$aTemp = $aDataHora[$row['modelo']];
$len = count($aTemp[0]);
for($i = 0; $i < $len; $i++)
{
$modelo = str_replace($aTemp[0][$i], $row[$aTemp[1][$i]], $modelo);
}
}
$modelo = str_replace('{SECAO}', $row['secao'], $modelo);
$modelo = str_replace('{FONTE}', $row['fonte'], $modelo);
$modelo = str_replace('{MINITEXTO}', $row['minitexto'], $modelo);
$modelo = str_replace('{CONTEUDO}', $row['conteudo'], $modelo);
if ($row['capaimg'])
$modelo = str_replace('{CAPAIMG}', '<img src="'
.$basedir.INSTALL_DIR.'/modules/noticia/imagens/'.$row['capaimg']
.'" alt="" />', $modelo);
else
$modelo = str_replace('{CAPAIMG}', '', $modelo);
$modelo = str_replace('{LINK}', $basedir
.INSTALL_DIR.'/modules/noticia/?type=content&id='.$row['id'],
$modelo);
// echo "<PRE>".(++$i)."</pre>";
echo $modelo;
}
}
/**
* Imprime o conteudo da noticia
*/
function DisplayContent()
{
$id = isset($_GET['id']) ? (int)$_GET['id'] : die("Erro: Você precisa especificar o ID da notícia.");
$db = new db(DB_HOST, DB_USER, DB_PWD, DB_DB);
$db->query("SELECT N.id, N.modelo, N.olho, N.titulo, "
." N.fonte, N.minitexto, N.conteudo, N.datahora,"
." I.url AS capaimg, M.html AS modelo,"
." S.nome AS secao, S.arqconteudo"
." FROM ".PRE_TABLE."noticia_noticias N "
." INNER JOIN ".PRE_TABLE."noticia_modelos M ON (N.modelo = M.id)"
." INNER JOIN ".PRE_TABLE."noticia_secoes S ON (N.secao = S.id)"
." LEFT JOIN ".PRE_TABLE."noticia_imagens I ON (N.capaimg = I.id)"
." WHERE N.id=".$id
, __FILE__, __LINE__);
// TODO!
// Deixar uma opção para o cara poder escolher um arquivo de template com
// esta mensagem, para ele poder exibir uma página com o estilo do site quando
// ocorrer o erro...
if (!$db->numRows())
die('Não foi encontrada nenhuma notícia com este ID');
$row = $db->fetchAssoc();
if (!file_exists($row['arqconteudo']))
die('O arquivo de conteúdo não foi encontrado ('.$row['arqconteudo'].')');
$row['conteudo'] = str_replace('{IMGPATH}', 'imagens/', $row['conteudo']);
extract($row, EXTR_PREFIX_ALL, 'muspa');
include $row['arqconteudo'];
}