mirror of
https://github.com/slawkens/myaac.git
synced 2025-04-27 17:59:22 +02:00

Its a salut to nginx and other web server nutzer (not apache), as they can now simply redirect all requests with simple rule to index.php, and php will take care of all redirects. .htaccess just now redirects everything to index.php with simple 3 lines. * change accountmanagement links to use friendly_urls * fixed creating new forum thread * some fixes in account changecomment action * show info when account name/number or password is empty on login * fixed showing account login errors * added new twig function getLink that convert link taking into account config.friendly_urls * internalLayoutLink -> getLink
471 lines
15 KiB
PHP
471 lines
15 KiB
PHP
<?php
|
|
/**
|
|
* News
|
|
*
|
|
* @package MyAAC
|
|
* @author Gesior <jerzyskalski@wp.pl>
|
|
* @author Slawkens <slawkens@gmail.com>
|
|
* @copyright 2017 MyAAC
|
|
* @version 0.4.3
|
|
* @link http://my-aac.org
|
|
*/
|
|
defined('MYAAC') or die('Direct access not allowed!');
|
|
|
|
if(isset($_GET['archive']))
|
|
{
|
|
$title = 'News Archive';
|
|
|
|
$categories = array();
|
|
foreach($db->query(
|
|
'SELECT id, name, icon_id FROM ' . TABLE_PREFIX . 'news_categories WHERE hidden != 1') as $cat)
|
|
{
|
|
$categories[$cat['id']] = array(
|
|
'name' => $cat['name'],
|
|
'icon_id' => $cat['icon_id']
|
|
);
|
|
}
|
|
|
|
// display big news by id
|
|
if(isset($_GET['id']))
|
|
{
|
|
$field_name = 'date';
|
|
if($_REQUEST['id'] < 100000)
|
|
$field_name = 'id';
|
|
|
|
$news = $db->query('SELECT * FROM '.$db->tableName(TABLE_PREFIX . 'news').' WHERE `type` = 1 AND `hidden` != 1 AND `' . $field_name . '` = ' . (int)$_REQUEST['id'] . '');
|
|
if($news->rowCount() == 1)
|
|
{
|
|
$news = $news->fetch();
|
|
$author = '';
|
|
$query = $db->query('SELECT `name` FROM `players` WHERE id = ' . $db->quote($news['player_id'] . ' LIMIT 1;'));
|
|
if($query->rowCount() > 0) {
|
|
$query = $query->fetch();
|
|
$author = $query['name'];
|
|
}
|
|
|
|
$content_ = $news['body'];
|
|
$firstLetter = '';
|
|
if($content_[0] != '<')
|
|
{
|
|
$tmp = $template_path.'/images/letters/' . $content_[0] . '.gif';
|
|
if(file_exists($tmp)) {
|
|
$firstLetter = '<img src="' . $tmp . '" alt="' . $content_[0] . '" border="0" align="bottom">';
|
|
$content_ = $firstLetter . substr($content_, 1);
|
|
}
|
|
}
|
|
|
|
echo $twig->render('news.html.twig', array(
|
|
'title' => stripslashes($news['title']),
|
|
'content' => $content_,
|
|
'date' => $news['date'],
|
|
'icon' => $categories[$news['category']]['icon_id'],
|
|
'author' => $config['news_author'] ? $author : '',
|
|
'comments' => $news['comments'] != 0 ? getForumThreadLink($news['comments']) : null,
|
|
'news_date_format' => $config['news_date_format']
|
|
));
|
|
}
|
|
else
|
|
echo "This news doesn't exist or is hidden.<br/>";
|
|
?>
|
|
<center>
|
|
<table cellspacing="0" cellpadding="0" border="0"><form method="post" action="<?php echo getLink('news/archive'); ?>"><tbody><tr><td>
|
|
<input width="120" height="18" border="0" type="image" src="<?php echo $template_path; ?>/images/buttons/sbutton_back.gif" alt="Back" name="Back">
|
|
</form></td></tr></tbody></table>
|
|
</center>
|
|
<?php
|
|
return;
|
|
}
|
|
?>
|
|
|
|
<?php
|
|
|
|
$newses = array();
|
|
$news_DB = $db->query('SELECT * FROM '.$db->tableName(TABLE_PREFIX . 'news').' WHERE `type` = 1 AND `hidden` != 1 ORDER BY `date` DESC');
|
|
foreach($news_DB as $news)
|
|
{
|
|
$newses[] = array(
|
|
'link' => ($config['friendly_urls']) . getLink('news') . '/archive/' . $news['id'],
|
|
'icon_id' => $categories[$news['category']]['icon_id'],
|
|
'title' => stripslashes($news['title']),
|
|
'date' => $news['date']
|
|
);
|
|
}
|
|
|
|
echo $twig->render('news.archive.html.twig', array(
|
|
'newses' => $newses
|
|
));
|
|
|
|
return;
|
|
}
|
|
|
|
$title = 'Latest News';
|
|
|
|
$news_cached = false;
|
|
// some constants, used mainly by database (cannot by modified without schema changes)
|
|
define('TITLE_LIMIT', 100);
|
|
define('BODY_LIMIT', 65535); // maximum news body length
|
|
|
|
$canEdit = hasFlag(FLAG_CONTENT_NEWS) || superAdmin();
|
|
if($canEdit)
|
|
{
|
|
if(!empty($action))
|
|
{
|
|
$id = isset($_REQUEST['id']) ? $_REQUEST['id'] : NULL;
|
|
$p_title = isset($_REQUEST['title']) ? $_REQUEST['title'] : NULL;
|
|
$body = isset($_REQUEST['body']) ? stripslashes($_REQUEST['body']) : NULL;
|
|
$comments = isset($_REQUEST['comments']) ? $_REQUEST['comments'] : NULL;
|
|
$type = isset($_REQUEST['type']) ? (int)$_REQUEST['type'] : NULL;
|
|
$category = isset($_REQUEST['category']) ? (int)$_REQUEST['category'] : NULL;
|
|
$player_id = isset($_REQUEST['player_id']) ? (int)$_REQUEST['player_id'] : NULL;
|
|
|
|
$forum_section = isset($_REQUEST['forum_section']) ? $_REQUEST['forum_section'] : NULL;
|
|
$errors = array();
|
|
|
|
if($action == 'add') {
|
|
if(isset($forum_section) && $forum_section != '-1') {
|
|
$forum_add = Forum::add($p_title, $body, $forum_section, $player_id, $account_logged->getId(), $errors);
|
|
}
|
|
|
|
if(News::add($p_title, $body, $type, $category, $player_id, isset($forum_add) && $forum_add != 0 ? $forum_add : 0, $errors)) {
|
|
$p_title = $body = $comments = '';
|
|
$type = $category = $player_id = 0;
|
|
}
|
|
}
|
|
else if($action == 'delete') {
|
|
News::delete($id, $errors);
|
|
}
|
|
else if($action == 'edit')
|
|
{
|
|
if(isset($id) && !isset($p_title)) {
|
|
$news = News::get($id);
|
|
$p_title = $news['title'];
|
|
$body = $news['body'];
|
|
$comments = $news['comments'];
|
|
$type = $news['type'];
|
|
$category = $news['category'];
|
|
$player_id = $news['player_id'];
|
|
}
|
|
else {
|
|
if(News::update($id, $p_title, $body, $type, $category, $player_id, $comments, $errors)) {
|
|
$action = $p_title = $body = $comments = '';
|
|
$type = $category = $player_id = 0;
|
|
}
|
|
}
|
|
}
|
|
else if($action == 'hide') {
|
|
News::toggleHidden($id, $errors);
|
|
}
|
|
|
|
if(!empty($errors))
|
|
echo $twig->render('error_box.html.twig', array('errors' => $errors));
|
|
|
|
if($cache->enabled())
|
|
{
|
|
$cache->set('news_' . $template_name . '_' . NEWS, '', 120);
|
|
$cache->set('news_' . $template_name . '_' . TICKET, '', 120);
|
|
}
|
|
}
|
|
}
|
|
else if($cache->enabled())
|
|
$news_cached = News::getCached(NEWS);
|
|
|
|
if(!$news_cached)
|
|
{
|
|
$categories = array();
|
|
foreach($db->query(
|
|
'SELECT id, name, icon_id FROM ' . TABLE_PREFIX . 'news_categories WHERE hidden != 1') as $cat)
|
|
{
|
|
$categories[$cat['id']] = array(
|
|
'name' => $cat['name'],
|
|
'icon_id' => $cat['icon_id']
|
|
);
|
|
}
|
|
|
|
$tickers =
|
|
$db->query(
|
|
'SELECT * FROM ' . $db->tableName(TABLE_PREFIX . 'news') . ' WHERE ' . $db->fieldName('type') . ' = ' . TICKET .
|
|
($canEdit ? '' : ' AND ' . $db->fieldName('hidden') . ' != 1') .
|
|
' ORDER BY ' . $db->fieldName('date') . ' DESC' .
|
|
' LIMIT ' . $config['news_ticker_limit']);
|
|
|
|
if($tickers->rowCount() > 0)
|
|
{
|
|
$rows = 0;
|
|
$tickers_to_add = '';
|
|
foreach($tickers as $news)
|
|
{
|
|
$admin_options = '';
|
|
if($canEdit)
|
|
{
|
|
$admin_options = '<a href="?subtopic=news&action=edit&id=' . $news['id'] . '" title="Edit">
|
|
<img src="images/edit.png"/>
|
|
Edit
|
|
</a>
|
|
<a id="delete" href="' . BASE_URL . '?subtopic=news&action=delete&id=' . $news['id'] . '" onclick="return confirm(\'Are you sure?\');" title="Delete">
|
|
<img src="images/del.png"/>
|
|
Delete
|
|
</a>
|
|
<a href="?subtopic=news&action=hide&id=' . $news['id'] . '" title="' . ($news['hidden'] != 1 ? 'Hide' : 'Show') . '">
|
|
<img src="images/' . ($news['hidden'] != 1 ? 'success' : 'error') . '.png"/>
|
|
' . ($news['hidden'] != 1 ? 'Hide' : 'Show') . '
|
|
</a>';
|
|
}
|
|
$tickers_to_add .= '<div id="TickerEntry-'.$rows.'" class="Row" onclick=\'TickerAction("TickerEntry-'.$rows.'")\'>
|
|
<div class="' . (is_int($rows / 2) ? "Odd" : "Even") . '">
|
|
<div class="NewsTickerIcon" style="background-image: url('.$template_path.'/images/news/icon_'.$categories[$news['category']]['icon_id'].'_small.gif);"></div>
|
|
<div id="TickerEntry-'.$rows.'-Button" class="NewsTickerExtend" style="background-image: url('.$template_path.'/images/general/plus.gif);"></div>
|
|
<div class="NewsTickerText">
|
|
<span class="NewsTickerDate">'.date("j M Y", $news['date']).' -</span>
|
|
<div id="TickerEntry-'.$rows.'-ShortText" class="NewsTickerShortText">';
|
|
//if admin show button to delete (hide) ticker
|
|
$tickers_to_add .= short_text(strip_tags($news['body']), 100).'</div>
|
|
<div id="TickerEntry-'.$rows.'-FullText" class="NewsTickerFullText">';
|
|
//if admin show button to delete (hide) ticker
|
|
$tickers_to_add .= $news['body'] . $admin_options . '</div>
|
|
</div>
|
|
</div>
|
|
</div>';
|
|
$rows++;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
$tickers_to_add = News::getCached(TICKET);
|
|
|
|
if(isset($tickers_to_add[0]))
|
|
{
|
|
//show table with tickers
|
|
$news_content = '<div id="newsticker" class="Box">
|
|
<div class="Corner-tl" style="background-image: url('.$template_path.'/images/content/corner-tl.gif);"></div>
|
|
<div class="Corner-tr" style="background-image: url('.$template_path.'/images/content/corner-tr.gif);"></div>
|
|
<div class="Border_1" style="background-image: url('.$template_path.'/images/content/border-1.gif);"></div>
|
|
<div class="BorderTitleText" style="background-image: url('.$template_path.'/images/content/title-background-green.gif);"></div>
|
|
<img class="Title" src="'.$template_path.'/images/header/headline-newsticker.gif" alt="Contentbox headline">
|
|
<div class="Border_2">
|
|
<div class="Border_3">
|
|
<div class="BoxContent" style="background-image: url('.$template_path.'/images/content/scroll.gif);">';
|
|
|
|
//add tickers list
|
|
$news_content .= $tickers_to_add;
|
|
//koniec
|
|
$news_content .= '</div>
|
|
</div>
|
|
</div>
|
|
<div class="Border_1" style="background-image: url('.$template_path.'/images/content/border-1.gif);"></div>
|
|
<div class="CornerWrapper-b"><div class="Corner-bl" style="background-image: url('.$template_path.'/images/content/corner-bl.gif);"></div></div>
|
|
<div class="CornerWrapper-b"><div class="Corner-br" style="background-image: url('.$template_path.'/images/content/corner-br.gif);"></div></div>
|
|
</div>';
|
|
|
|
if($cache->enabled() && !$news_cached && !$canEdit)
|
|
$cache->set('news_' . $template_name . '_' . TICKET, $tickers_to_add, 120);
|
|
}
|
|
|
|
if(!$news_cached)
|
|
{
|
|
ob_start();
|
|
if($canEdit)
|
|
{
|
|
if($action == 'edit') {
|
|
$player = new OTS_Player();
|
|
$player->load($player_id);
|
|
}
|
|
|
|
$account_players = $account_logged->getPlayersList();
|
|
$account_players->orderBy('group_id', POT::ORDER_DESC);
|
|
|
|
echo $twig->render('news.add.html.twig', array(
|
|
'action' => $action,
|
|
'news_link' => getLink(PAGE),
|
|
'news_link_form' => getLink('news/' . ($action == 'edit' ? 'edit' : 'add')),
|
|
'news_id' => isset($id) ? $id : null,
|
|
'title' => isset($p_title) ? $p_title : '',
|
|
'body' => isset($body) ? $body : '',
|
|
'type' => isset($type) ? $type : null,
|
|
'player' => isset($player) && $player->isLoaded() ? $player : null,
|
|
'player_id' => isset($player_id) ? $player_id : null,
|
|
'account_players' => $account_players,
|
|
'category' => isset($category) ? $category : 0,
|
|
'categories' => $categories,
|
|
'forum_boards' => getForumBoards(),
|
|
'forum_section' => isset($forum_section) ? $forum_section : null
|
|
));
|
|
}
|
|
|
|
$newses =
|
|
$db->query(
|
|
'SELECT * FROM '.$db->tableName(TABLE_PREFIX . 'news').
|
|
' WHERE type = ' . NEWS .
|
|
($canEdit ? '' : ' AND hidden != 1') .
|
|
' ORDER BY date' .
|
|
' DESC LIMIT ' . $config['news_limit']);
|
|
if($newses->rowCount() > 0)
|
|
{
|
|
foreach($newses as $news)
|
|
{
|
|
$author = '';
|
|
$query = $db->query('SELECT `name` FROM `players` WHERE id = ' . $db->quote($news['player_id'] . ' LIMIT 1'));
|
|
if($query->rowCount() > 0) {
|
|
$query = $query->fetch();
|
|
$author = $query['name'];
|
|
}
|
|
|
|
$admin_options = '';
|
|
if($canEdit)
|
|
{
|
|
$admin_options = '<br/><br/><a href="?subtopic=news&action=edit&id=' . $news['id'] . '" title="Edit">
|
|
<img src="images/edit.png"/>Edit
|
|
</a>
|
|
<a id="delete" href="' . BASE_URL . '?subtopic=news&action=delete&id=' . $news['id'] . '" onclick="return confirm(\'Are you sure?\');" title="Delete">
|
|
<img src="images/del.png"/>Delete
|
|
</a>
|
|
<a href="?subtopic=news&action=hide&id=' . $news['id'] . '" title="' . ($news['hidden'] != 1 ? 'Hide' : 'Show') . '">
|
|
<img src="images/' . ($news['hidden'] != 1 ? 'success' : 'error') . '.png"/>
|
|
' . ($news['hidden'] != 1 ? 'Hide' : 'Show') . '
|
|
</a>';
|
|
}
|
|
|
|
$content_ = $news['body'];
|
|
$firstLetter = '';
|
|
if($content_[0] != '<')
|
|
{
|
|
$tmp = $template_path.'/images/letters/' . $content_[0] . '.gif';
|
|
if(file_exists($tmp)) {
|
|
$firstLetter = '<img src="' . $tmp . '" alt="' . $content_[0] . '" border="0" align="bottom">';
|
|
$content_ = $firstLetter . substr($content_, 1);
|
|
}
|
|
}
|
|
|
|
echo $twig->render('news.html.twig', array(
|
|
'title' => stripslashes($news['title']),
|
|
'content' => $content_ . $admin_options,
|
|
'date' => $news['date'],
|
|
'icon' => $categories[$news['category']]['icon_id'],
|
|
'author' => $config['news_author'] ? $author : '',
|
|
'comments' => $news['comments'] != 0 ? getForumThreadLink($news['comments']) : null,
|
|
'news_date_format' => $config['news_date_format']
|
|
));
|
|
}
|
|
}
|
|
|
|
$tmp_content = ob_get_contents();
|
|
ob_end_clean();
|
|
|
|
if($cache->enabled() && !$canEdit)
|
|
$cache->set('news_' . $template_name . '_' . NEWS, $tmp_content, 120);
|
|
|
|
echo $tmp_content;
|
|
}
|
|
else
|
|
echo $news_cached;
|
|
|
|
class News
|
|
{
|
|
static public function verify($title, $body, &$errors)
|
|
{
|
|
if(!isset($title[0]) || !isset($body[0])) {
|
|
$errors[] = 'Please fill all inputs.';
|
|
return false;
|
|
}
|
|
|
|
if(strlen($title) > TITLE_LIMIT) {
|
|
$errors[] = 'News title cannot be longer than ' . TITLE_LIMIT . ' characters.';
|
|
return false;
|
|
}
|
|
|
|
if(strlen($body) > BODY_LIMIT) {
|
|
$errors[] = 'News content cannot be longer than ' . BODY_LIMIT . ' characters.';
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
static public function add($title, $body, $type, $category, $player_id, $comments, &$errors)
|
|
{
|
|
global $db;
|
|
if(!News::verify($title, $body, $errors))
|
|
return false;
|
|
|
|
$db->insert(TABLE_PREFIX . 'news', array('title' => $title, 'body' => $body, 'type' => $type, 'date' => time(), 'category' => $category, 'player_id' => isset($player_id) ? $player_id : 0, 'comments' => $comments));
|
|
return true;
|
|
}
|
|
|
|
static public function get($id) {
|
|
global $db;
|
|
return $db->select(TABLE_PREFIX . 'news', array('id' => $id));
|
|
}
|
|
|
|
static public function update($id, $title, $body, $type, $category, $player_id, $comments, &$errors)
|
|
{
|
|
global $db;
|
|
if(!News::verify($title, $body, $errors))
|
|
return false;
|
|
|
|
$db->update(TABLE_PREFIX . 'news', array('title' => $title, 'body' => $body, 'type' => $type, 'category' => $category, 'last_modified_by' => isset($player_id) ? $player_id : 0, 'last_modified_date' => time(), 'comments' => $comments), array('id' => $id));
|
|
return true;
|
|
}
|
|
|
|
static public function delete($id, &$errors)
|
|
{
|
|
global $db;
|
|
if(isset($id))
|
|
{
|
|
if($db->select(TABLE_PREFIX . 'news', array('id' => $id)) !== false)
|
|
$db->delete(TABLE_PREFIX . 'news', array('id' => $id));
|
|
else
|
|
$errors[] = 'News with id ' . $id . ' does not exists.';
|
|
}
|
|
else
|
|
$errors[] = 'News id not set.';
|
|
|
|
return !count($errors);
|
|
}
|
|
|
|
static public function toggleHidden($id, &$errors)
|
|
{
|
|
global $db;
|
|
if(isset($id))
|
|
{
|
|
$query = $db->select(TABLE_PREFIX . 'news', array('id' => $id));
|
|
if($query !== false)
|
|
$db->update(TABLE_PREFIX . 'news', array('hidden' => ($query['hidden'] == 1 ? 0 : 1)), array('id' => $id));
|
|
else
|
|
$errors[] = 'News with id ' . $id . ' does not exists.';
|
|
}
|
|
else
|
|
$errors[] = 'News id not set.';
|
|
|
|
return !count($errors);
|
|
}
|
|
|
|
static public function getCached($type)
|
|
{
|
|
global $cache, $config, $template_name;
|
|
if($cache->enabled())
|
|
{
|
|
$tmp = '';
|
|
if($cache->fetch('news_' . $template_name . '_' . $type, $tmp) && isset($tmp[0])) {
|
|
return $tmp;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|
|
|
|
class Forum
|
|
{
|
|
static public function add($title, $body, $section_id, $player_id, $account_id, &$errors)
|
|
{
|
|
global $db;
|
|
$thread_id = 0;
|
|
if($db->insert(TABLE_PREFIX . 'forum', array('first_post' => 0, 'last_post' => time(), 'section' => $section_id, 'replies' => 0, 'views' => 0, 'author_aid' => isset($account_id) ? $account_id : 0, 'author_guid' => isset($player_id) ? $player_id : 0, 'post_text' => $body, 'post_topic' => $title, 'post_smile' => 0, 'post_date' => time(), 'last_edit_aid' => 0, 'edit_date' => 0, 'post_ip' => $_SERVER['REMOTE_ADDR']))) {
|
|
$thread_id = $db->lastInsertId();
|
|
$db->query("UPDATE `" . TABLE_PREFIX . "forum` SET `first_post`=".(int) $thread_id." WHERE `id` = ".(int) $thread_id);
|
|
}
|
|
|
|
return $thread_id;
|
|
}
|
|
}
|
|
?>
|