From 76f306d8393ca767586d3b3ad2f085464ffb85b3 Mon Sep 17 00:00:00 2001 From: nojhan Date: Wed, 23 Apr 2008 19:51:09 +0000 Subject: [PATCH] commentaires, suite (et fin ?) --- RELEASE | 3 + configuration-dist.php | 4 + punbb-1.2.15_extern.php | 391 ++++++++++++++++++++++++++++++++++++++++ strip_manager.php | 2 +- template_default.html | 4 +- 5 files changed, 401 insertions(+), 3 deletions(-) create mode 100644 punbb-1.2.15_extern.php diff --git a/RELEASE b/RELEASE index 51dc5c4..574ad52 100644 --- a/RELEASE +++ b/RELEASE @@ -1,3 +1,6 @@ +SVN : +* possibilité d'ajouter des commentaires avec PunBB (http://www.punbb.org) +* légères modifications du template Version 0.4 : * script d'aide à l'export PNG et au téléchargement : diff --git a/configuration-dist.php b/configuration-dist.php index a67d307..85cf8a8 100644 --- a/configuration-dist.php +++ b/configuration-dist.php @@ -14,6 +14,10 @@ */ class configuration { + /** + * Software version + */ + var $version = 'pre-0.5 (2008-04-22)'; /** * URL of the website diff --git a/punbb-1.2.15_extern.php b/punbb-1.2.15_extern.php new file mode 100644 index 0000000..4908265 --- /dev/null +++ b/punbb-1.2.15_extern.php @@ -0,0 +1,391 @@ + + + Show board statistics: + + + And finally some examples using extern.php to output an RSS 0.91 + feed. + + Output the 15 most recently active topics: + http://host.com/extern.php?action=active&type=RSS + + Output the 15 newest topics from forum with ID=2: + http://host.com/extern.php?action=active&type=RSS&fid=2 + + Below you will find some variables you can edit to tailor the + scripts behaviour to your needs. + + +/***********************************************************************/ + +// The maximum number of topics that will be displayed +$show_max_topics = 60; + +// The length at which topic subjects will be truncated (for HTML output) +$max_subject_length = 30; + +/***********************************************************************/ + +// DO NOT EDIT ANYTHING BELOW THIS LINE! (unless you know what you are doing) + + +define('PUN_ROOT', './'); +@include PUN_ROOT.'config.php'; + +// If PUN isn't defined, config.php is missing or corrupt +if (!defined('PUN')) + exit('The file \'config.php\' doesn\'t exist or is corrupt. Please run install.php to install PunBB first.'); + + +// Make sure PHP reports all errors except E_NOTICE +error_reporting(E_ALL ^ E_NOTICE); + +// Turn off magic_quotes_runtime +set_magic_quotes_runtime(0); + + +// Load the functions script +require PUN_ROOT.'include/functions.php'; + +// Load DB abstraction layer and try to connect +require PUN_ROOT.'include/dblayer/common_db.php'; + +// Load cached config +@include PUN_ROOT.'cache/cache_config.php'; +if (!defined('PUN_CONFIG_LOADED')) +{ + require PUN_ROOT.'include/cache.php'; + generate_config_cache(); + require PUN_ROOT.'cache/cache_config.php'; +} + +// Make sure we (guests) have permission to read the forums +$result = $db->query('SELECT g_read_board FROM '.$db->prefix.'groups WHERE g_id=3') or error('Unable to fetch group info', __FILE__, __LINE__, $db->error()); +if ($db->result($result) == '0') + exit('No permission'); + + +// Attempt to load the common language file +@include PUN_ROOT.'lang/'.$pun_config['o_default_lang'].'/common.php'; +if (!isset($lang_common)) + exit('There is no valid language pack \''.$pun_config['o_default_lang'].'\' installed. Please reinstall a language of that name.'); + +// Check if we are to display a maintenance message +if ($pun_config['o_maintenance'] && !defined('PUN_TURN_OFF_MAINT')) + maintenance_message(); + +if (!isset($_GET['action'])) + exit('No parameters supplied. See extern.php for instructions.'); + + +// +// Converts the CDATA end sequence ]]> into ]]> +// +function escape_cdata($str) +{ + return str_replace(']]>', ']]>', $str); +} + + +// +// Show recent discussions +// +if ($_GET['action'] == 'active' || $_GET['action'] == 'new') +{ + $order_by = ($_GET['action'] == 'active') ? 't.last_post' : 't.posted'; + $forum_sql = ''; + + // Was any specific forum ID's supplied? + if (isset($_GET['fid']) && $_GET['fid'] != '') + { + $fids = explode(',', trim($_GET['fid'])); + $fids = array_map('intval', $fids); + + if (!empty($fids)) + $forum_sql = ' AND f.id IN('.implode(',', $fids).')'; + } + + // Any forum ID's to exclude? + if (isset($_GET['nfid']) && $_GET['nfid'] != '') + { + $nfids = explode(',', trim($_GET['nfid'])); + $nfids = array_map('intval', $nfids); + + if (!empty($nfids)) + $forum_sql = ' AND f.id NOT IN('.implode(',', $nfids).')'; + } + + // Should we output this as RSS? + if (isset($_GET['type']) && strtoupper($_GET['type']) == 'RSS') + { + $rss_description = ($_GET['action'] == 'active') ? $lang_common['RSS Desc Active'] : $lang_common['RSS Desc New']; + $url_action = ($_GET['action'] == 'active') ? '&action=new' : ''; + + // Send XML/no cache headers + header('Content-Type: text/xml'); + header('Expires: '.gmdate('D, d M Y H:i:s').' GMT'); + header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); + header('Pragma: public'); + + // It's time for some syndication! + echo ''."\r\n"; + echo ''."\r\n"; + echo ''."\r\n"; + echo ''."\r\n"; + echo "\t".''.pun_htmlspecialchars($pun_config['o_board_title']).''."\r\n"; + echo "\t".''.$pun_config['o_base_url'].'/'."\r\n"; + echo "\t".''.pun_htmlspecialchars($rss_description.' '.$pun_config['o_board_title']).''."\r\n"; + echo "\t".'en-us'."\r\n"; + + // Fetch 15 topics + $result = $db->query('SELECT t.id, t.poster, t.subject, t.posted, t.last_post, f.id AS fid, f.forum_name FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.moved_to IS NULL'.$forum_sql.' ORDER BY '.$order_by.' DESC LIMIT 15') or error('Unable to fetch topic list', __FILE__, __LINE__, $db->error()); + + while ($cur_topic = $db->fetch_assoc($result)) + { + if ($pun_config['o_censoring'] == '1') + $cur_topic['subject'] = censor_words($cur_topic['subject']); + + echo "\t".''."\r\n"; + echo "\t\t".''.pun_htmlspecialchars($cur_topic['subject']).''."\r\n"; + echo "\t\t".''.$pun_config['o_base_url'].'/viewtopic.php?id='.$cur_topic['id'].$url_action.''."\r\n"; + echo "\t\t".''.$cur_topic['forum_name'].'
'."\r\n".$lang_common['Author'].': '.$cur_topic['poster'].'
'."\r\n".$lang_common['Posted'].': '.date('r', $cur_topic['posted']).'
'."\r\n".$lang_common['Last post'].': '.date('r', $cur_topic['last_post'])).']]>
'."\r\n"; + echo "\t".'
'."\r\n"; + } + + echo '
'."\r\n"; + echo '
'; + } + + + // Output regular HTML + else + { + $show = isset($_GET['show']) ? intval($_GET['show']) : 15; + if ($show < 1 || $show > 50) + $show = 15; + + // Fetch $show topics + $result = $db->query('SELECT t.id, t.subject FROM '.$db->prefix.'topics AS t INNER JOIN '.$db->prefix.'forums AS f ON f.id=t.forum_id LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.moved_to IS NULL'.$forum_sql.' ORDER BY '.$order_by.' DESC LIMIT '.$show) or error('Unable to fetch topic list', __FILE__, __LINE__, $db->error()); + + while ($cur_topic = $db->fetch_assoc($result)) + { + if ($pun_config['o_censoring'] == '1') + $cur_topic['subject'] = censor_words($cur_topic['subject']); + + if (pun_strlen($cur_topic['subject']) > $max_subject_length) + $subject_truncated = pun_htmlspecialchars(trim(substr($cur_topic['subject'], 0, ($max_subject_length-5)))).' …'; + else + $subject_truncated = pun_htmlspecialchars($cur_topic['subject']); + + echo '
  • '.$subject_truncated.'
  • '."\n"; + } + } + + return; +} + + +// +// Show users online +// +else if ($_GET['action'] == 'online' || $_GET['action'] == 'online_full') +{ + // Load the index.php language file + require PUN_ROOT.'lang/'.$pun_config['o_default_lang'].'/index.php'; + + // Fetch users online info and generate strings for output + $num_guests = $num_users = 0; + $users = array(); + $result = $db->query('SELECT user_id, ident FROM '.$db->prefix.'online WHERE idle=0 ORDER BY ident', true) or error('Unable to fetch online list', __FILE__, __LINE__, $db->error()); + + while ($pun_user_online = $db->fetch_assoc($result)) + { + if ($pun_user_online['user_id'] > 1) + { + $users[] = ''.pun_htmlspecialchars($pun_user_online['ident']).''; + ++$num_users; + } + else + ++$num_guests; + } + + echo $lang_index['Guests online'].': '.$num_guests.'
    '; + + if ($_GET['action'] == 'online_full') + echo $lang_index['Users online'].': '.implode(', ', $users).'
    '; + else + echo $lang_index['Users online'].': '.$num_users.'
    '; + + return; +} + + +// +// Show board statistics +// +else if ($_GET['action'] == 'stats') +{ + // Load the index.php language file + require PUN_ROOT.'lang/'.$pun_config['o_default_lang'].'/index.php'; + + // Collect some statistics from the database + $result = $db->query('SELECT COUNT(id)-1 FROM '.$db->prefix.'users') or error('Unable to fetch total user count', __FILE__, __LINE__, $db->error()); + $stats['total_users'] = $db->result($result); + + $result = $db->query('SELECT id, username FROM '.$db->prefix.'users ORDER BY registered DESC LIMIT 1') or error('Unable to fetch newest registered user', __FILE__, __LINE__, $db->error()); + $stats['last_user'] = $db->fetch_assoc($result); + + $result = $db->query('SELECT SUM(num_topics), SUM(num_posts) FROM '.$db->prefix.'forums') or error('Unable to fetch topic/post count', __FILE__, __LINE__, $db->error()); + list($stats['total_topics'], $stats['total_posts']) = $db->fetch_row($result); + + echo $lang_index['No of users'].': '.$stats['total_users'].'
    '; + echo $lang_index['Newest user'].': '.pun_htmlspecialchars($stats['last_user']['username']).'
    '; + echo $lang_index['No of topics'].': '.$stats['total_topics'].'
    '; + echo $lang_index['No of posts'].': '.$stats['total_posts']; + + return; +} + +/***********************************************************************/ +/* PATCH TOPIC EXPORT */ +/***********************************************************************/ + +else if ( $_GET['action'] == 'topic') { + + + $sql = ''; + + if( isset( $_GET['ttitle']) ) { + $sql = 'SELECT + t.id + FROM + '.$db->prefix.'topics AS t + WHERE + t.subject="'.$_GET['ttitle'].'" + + ;'; + + $res = $db->query( $sql ); + $_tid = $db->fetch_row( $res ); + $_GET['tid'] = intval( $_tid[0] ); + + } + + if( $_GET['tid'] > 0 ) { + + $sql = 'SELECT + p.id, p.message, p.poster + FROM + '.$db->prefix.'posts AS p + WHERE + p.topic_id='.$_GET['tid'].' + ORDER BY + p.edited + ;'; + } else { + + error( 'Unable to fetch posts list, you must ask for a topic id or title', __FILE__, __LINE__, $db->error() ); + } + + $result = $db->query($sql) or error('Unable to fetch posts list', __FILE__, __LINE__, $db->error()); + + while ($cur_post = $db->fetch_assoc($result)) + { + if ($pun_config['o_censoring'] == '1') + $cur_post['message'] = censor_words($cur_post['message']); + + $subject_truncated = $cur_post['message']; + if (pun_strlen($cur_post['message']) > $max_subject_length) { + $subject_truncated = pun_htmlspecialchars(trim(substr($cur_post['message'], 0, ($max_subject_length-5)))).' …'; + } else { + $subject_truncated = pun_htmlspecialchars($cur_post['message']); + } + + echo '
  • '.$subject_truncated.'
  • '; + } + +} + +/***********************************************************************/ + +else + exit('Bad request'); diff --git a/strip_manager.php b/strip_manager.php index 518e1c2..8d99468 100644 --- a/strip_manager.php +++ b/strip_manager.php @@ -294,7 +294,7 @@ class strip_manager // if one want to use punbb as forum if( $this->general->use_punbb ) { // lasts posts associated to the strip - $fh = fopen( $this->general->forum.'/extern.php?action=new&fid=1', 'r'); + $fh = fopen( $this->general->forum.'/extern.php?action=topic&tid=1', 'r'); if (!$fh) { // TODO traduction diff --git a/template_default.html b/template_default.html index 6df167a..d31e3d8 100644 --- a/template_default.html +++ b/template_default.html @@ -21,7 +21,7 @@