PageRenderTime 67ms CodeModel.GetById 36ms RepoModel.GetById 1ms app.codeStats 0ms

/includes/xs_news.php

https://github.com/Informpro/icy_phoenix
PHP | 344 lines | 262 code | 53 blank | 29 comment | 43 complexity | ac49ee2c4350b658072eecd2ac0354b2 MD5 | raw file
  1. <?php
  2. /**
  3. *
  4. * @package Icy Phoenix
  5. * @version $Id$
  6. * @copyright (c) 2008 Icy Phoenix
  7. * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  8. *
  9. */
  10. /**
  11. *
  12. * @Extra credits for this file
  13. * Vjacheslav Trushkin (http://www.stsoftware.biz)
  14. * UseLess
  15. *
  16. */
  17. if (!defined('IN_ICYPHOENIX'))
  18. {
  19. die('Hacking attempt');
  20. }
  21. if($config['xs_show_news'] != false)
  22. {
  23. if (!defined('IP_ROOT_PATH')) define('IP_ROOT_PATH', './');
  24. /*
  25. $tempstarttime = $starttime;
  26. $starttime = $tempstarttime;
  27. */
  28. include_once(IP_ROOT_PATH . 'includes/functions_xs_useless.' . PHP_EXT);
  29. // Start script
  30. // Set date format
  31. switch ($config['xs_news_dateformat'])
  32. {
  33. case 0:
  34. $date_format = 'd M Y'; // displays '01 Jan 2005'
  35. break;
  36. case 1:
  37. $date_format = 'M d Y'; // displays 'Jan 01 2005'
  38. break;
  39. case 2:
  40. $date_format = 'd F Y'; // displays '01 January 2005'
  41. break;
  42. case 3:
  43. $date_format = 'F d Y'; // displays 'January 01 2005'
  44. break;
  45. case 4:
  46. $date_format = 'jS M Y'; //displays '1st Jan 2005'
  47. break;
  48. case 5:
  49. $date_format = 'M jS Y'; //displays 'Jan 1st 2005'
  50. break;
  51. case 6:
  52. $date_format = 'jS F Y'; // displays '1st January 2005'
  53. break;
  54. case 7:
  55. $date_format = 'F jS Y'; //displays 'January 1st 2005'
  56. break;
  57. }
  58. // Get contents of News table (cached by MG)
  59. $sql = "SELECT * FROM " . XS_NEWS_TABLE . "
  60. ORDER BY news_date DESC";
  61. $q_news = $db->sql_query($sql, 0, 'xs_news_');
  62. while ($test_row = $db->sql_fetchrow($q_news))
  63. {
  64. $news_rows[] = $test_row;
  65. }
  66. unset($test_row);
  67. // set template
  68. $template->set_filenames(array('news' => 'xs_news_banner.tpl'));
  69. $tick_displayed = 0;
  70. $news_displayed = 0;
  71. if($total_news = sizeof($news_rows))
  72. {
  73. for($i = 0; $i < $total_news; $i++)
  74. {
  75. $news_id = $news_rows[$i]['news_id'];
  76. $news_date = create_date($date_format, $news_rows[$i]['news_date'], $config['board_timezone']);
  77. $news_text = xsm_unprepare_message($news_rows[$i]['news_text']);
  78. $news_display = $news_rows[$i]['news_display'];
  79. $news_smilies = $news_rows[$i]['news_smilies'];
  80. if($news_display)
  81. {
  82. if($news_smilies)
  83. {
  84. $news_text = smilies_news($news_text);
  85. }
  86. $template->assign_block_vars('newsitem', array(
  87. 'NEWS_ITEM_DATE' => $news_date,
  88. 'NEWS_ITEM' => $news_text
  89. )
  90. );
  91. ++$news_displayed;
  92. }
  93. }
  94. }
  95. if($news_displayed == 0)
  96. {
  97. $template->assign_block_vars('newsitem', array(
  98. 'NEWS_ITEM_DATE' => create_date($date_format, time(), $config['board_timezone']),
  99. 'NEWS_ITEM' => $lang['xs_no_news']
  100. )
  101. );
  102. ++$news_displayed;
  103. }
  104. // Should the news subtitle be shown?
  105. if($config['xs_show_news_subtitle'])
  106. {
  107. $template->assign_block_vars('switch_news_subtitle', array());
  108. }
  109. // Should we show the XS News Ticker?
  110. if($config['xs_show_ticker'])
  111. {
  112. $template->assign_block_vars('switch_news_ticker', array());
  113. if($config['xs_show_ticker_subtitle'])
  114. {
  115. $template->assign_block_vars('switch_news_ticker.switch_ticker_subtitle', array());
  116. }
  117. // Get contents of XML table (cached by MG)
  118. $sql = "SELECT * FROM " . XS_NEWS_XML_TABLE . " ORDER BY xml_id ASC";
  119. $q_xml = $db->sql_query($sql, 0, 'xs_news_xml_');
  120. while ($test_row = $db->sql_fetchrow($q_xml))
  121. {
  122. $xml_row[] = $test_row;
  123. }
  124. unset($test_row);
  125. if($total_xml = sizeof($xml_row))
  126. {
  127. for($i = 0; $i < $total_xml; $i++)
  128. {
  129. $xml_id = $xml_row[$i]['xml_id'];
  130. $xml_title = $xml_row[$i]['xml_title'];
  131. $xml_show = $xml_row[$i]['xml_show'];
  132. // $xml_feed = "http://news.bbc.co.uk/rss/newsonline_uk_edition/front_page/rss091.xml";
  133. $xml_feed = xsm_unprepare_message($xml_row[$i]['xml_feed']);
  134. $xml_is_feed = $xml_row[$i]['xml_is_feed'];
  135. $xml_width = $xml_row[$i]['xml_width'];
  136. $xml_height = $xml_row[$i]['xml_height'];
  137. $xml_font = $xml_row[$i]['xml_font'];
  138. $xml_speed = $xml_row[$i]['xml_speed'];
  139. $xml_dir = (($xml_row[$i]['xml_direction'] == 0) ? 'left' : 'right');
  140. if($xml_show)
  141. {
  142. if($xml_is_feed)
  143. {
  144. $rss_channel = array();
  145. $currently_writing = '';
  146. $main = '';
  147. $item_counter = 0;
  148. $xml_feed_error = false;
  149. $xml_error = false;
  150. $xml_error_msg = '';
  151. if(empty($xml_feed))
  152. {
  153. $xml_feed_error = true;
  154. $xml_error_msg = 'No XML Feed URL';
  155. }
  156. $xml_parser = xml_parser_create();
  157. xml_set_element_handler($xml_parser, 'startElement', 'endElement');
  158. xml_set_character_data_handler($xml_parser, 'characterData');
  159. if (!$xml_feed_error)
  160. {
  161. if (($fp = @fopen($xml_feed, 'r')))
  162. {
  163. while ($xml_buffer = @fread($fp, 4096))
  164. {
  165. if (!xml_parse($xml_parser, $xml_buffer, feof($fp)))
  166. {
  167. $xml_error = true;
  168. $xml_error_msg = sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser));
  169. }
  170. }
  171. xml_parser_free($xml_parser);
  172. $news_ticker_content = '';
  173. $item_count = 0;
  174. $news_ticker_id = 'news_ticker_' . $i;
  175. if (isset($rss_channel['items']))
  176. {
  177. if (sizeof($rss_channel['items']) > 0)
  178. {
  179. $item_count = sizeof($rss_channel['items']);
  180. for($j = 0; $j < $item_count; $j++)
  181. {
  182. $title = htmlspecialchars_clean(ip_utf8_decode(strip_tags($rss_channel['items'][$j]['title'])));
  183. //$news_ticker_content .= '<a href="' . $rss_channel['items'][$j]["link"] . '" target="_blank" title="' . $rss_channel['items'][$j]["link"] . '\n' . str_replace("'", "\'", $title) . '" onmouseover="scrollStop(\\\'news_ticker\\\');" onmouseout="scrollStart(\\\'news_ticker\\\');">' . str_replace("'", "\'", $title) . '</a>';
  184. $news_ticker_content .= '<a href="' . $rss_channel['items'][$j]['link'] . '" target="_blank" title="'. $title .'" onmouseover="document.all.' . $news_ticker_id . '.stop();" onmouseout="document.all.' . $news_ticker_id . '.start();">' . $title . '</a>';
  185. if($j != (sizeof($rss_channel['items']) - 1))
  186. {
  187. $news_ticker_content .= '&nbsp;&nbsp;&raquo;&nbsp;&nbsp;';
  188. }
  189. }
  190. }
  191. else
  192. {
  193. $item_count = 1;
  194. $news_ticker_content = 'There are no articles in this feed.';
  195. }
  196. }
  197. $rss_channel_title = (empty($rss_channel['title']) ? 'No Source Info Available' : ('<a href="' . $rss_channel['link'] . '" target="_blank">' . htmlspecialchars_clean(ip_utf8_decode(strip_tags($rss_channel['title']))) . '</a>'));
  198. $template->assign_block_vars('switch_news_ticker.news_ticker_row', array(
  199. 'XS_NEWS_TICKER_FROM' => $rss_channel_title,
  200. 'XS_NEWS_TICKER_ID' => $news_ticker_id,
  201. 'XS_NEWS_TICKER_WIDTH' => $xml_width,
  202. 'XS_NEWS_TICKER_HEIGHT' => $xml_height,
  203. 'XS_NEWS_TICKER_FONTSIZE' => (($xml_font == 0) ? '' : 'style="font-size: ' . intval($xml_font) . 'px;"'),
  204. 'XS_NEWS_TICKER_SPEED' => $xml_speed,
  205. 'XS_NEWS_TICKER_SCROLL_DIR' => $xml_dir,
  206. 'XS_NEWS_TICKER_CONTENTS' => $news_ticker_content,
  207. 'XS_NEWS_TICKER_COLSPAN' => '',
  208. )
  209. );
  210. $template->assign_block_vars('switch_news_ticker.news_ticker_row.switch_show_feed', array());
  211. }
  212. else
  213. {
  214. $xml_error = true;
  215. $xml_error_msg = 'Unable to open the XML input';
  216. }
  217. }
  218. if($xml_error || $xml_feed_error)
  219. {
  220. $news_ticker_id = 'news_ticker_' . $i;
  221. $template->assign_block_vars('switch_news_ticker.news_ticker_row', array(
  222. 'XS_NEWS_TICKER_ID' => $news_ticker_id,
  223. 'XS_NEWS_TICKER_WIDTH' => $xml_width,
  224. 'XS_NEWS_TICKER_HEIGHT' => $xml_height,
  225. 'XS_NEWS_TICKER_FONTSIZE' => (($xml_font == 0) ? '' : 'style="font-size: ' . intval($xml_font) . 'px;"'),
  226. 'XS_NEWS_TICKER_SPEED' => $xml_speed,
  227. 'XS_NEWS_TICKER_SCROLL_DIR' => $xml_dir,
  228. 'XS_NEWS_TICKER_CONTENTS' => '<b>' . $xml_error_msg . '</b>: ' . $xml_feed,
  229. 'XS_NEWS_TICKER_COLSPAN' => 'colspan="2"',
  230. )
  231. );
  232. ++$tick_displayed;
  233. continue;
  234. }
  235. }
  236. else
  237. {
  238. $news_ticker_id = 'news_ticker_' . $i;
  239. $xml_feed = str_replace('<a ', '<a onmouseover="document.all.' . $news_ticker_id . '.stop();" onmouseout="document.all.' . $news_ticker_id . '.start();" ', $xml_feed);
  240. $template->assign_block_vars('switch_news_ticker.news_ticker_row', array(
  241. 'XS_NEWS_TICKER_ID' => $news_ticker_id,
  242. 'XS_NEWS_TICKER_WIDTH' => $xml_width,
  243. 'XS_NEWS_TICKER_HEIGHT' => $xml_height,
  244. 'XS_NEWS_TICKER_FONTSIZE' => (($xml_font == 0) ? '' : 'style="font-size: ' . intval($xml_font) . 'px;"'),
  245. 'XS_NEWS_TICKER_SPEED' => $xml_speed,
  246. 'XS_NEWS_TICKER_SCROLL_DIR' => $xml_dir,
  247. 'XS_NEWS_TICKER_CONTENTS' => $xml_feed,
  248. 'XS_NEWS_TICKER_COLSPAN' => 'colspan="2"',
  249. )
  250. );
  251. } // end if is_feed?
  252. ++$tick_displayed;
  253. } // end if xml_show
  254. } // end for
  255. }
  256. else
  257. {
  258. // No feeds defined
  259. $news_ticker_id = 'news_ticker_0';
  260. $template->assign_block_vars('switch_news_ticker.news_ticker_row', array(
  261. 'XS_NEWS_TICKER_ID' => $news_ticker_id,
  262. 'XS_NEWS_TICKER_WIDTH' => '98%',
  263. 'XS_NEWS_TICKER_HEIGHT' => '20',
  264. 'XS_NEWS_TICKER_FONTSIZE' => '',
  265. 'XS_NEWS_TICKER_SPEED' => '3',
  266. 'XS_NEWS_TICKER_SCROLL_DIR' => 'left',
  267. 'XS_NEWS_TICKER_CONTENTS' => $lang['xs_no_ticker'],
  268. 'XS_NEWS_TICKER_COLSPAN' => 'colspan="2"',
  269. )
  270. );
  271. }
  272. }
  273. if(isset($config['xs_nav_version']))
  274. {
  275. $xml_collapse = "onmouseover=\"showStatus('news_0'); return true;\" onmouseout=\"window.status=' '; return true;\"";
  276. }
  277. else
  278. {
  279. $xml_collapse = "";
  280. }
  281. $template->assign_vars(array(
  282. 'NEWS_TITLE' => $lang['xs_latest_news'],
  283. 'XS_NEWS_VERSION' => sprintf($lang['xs_news_version'], (!empty($config['xs_news_version']) ? $config['xs_news_version'] : 'ver error')),
  284. 'XS_NEWS_TICKERS_TITLE' => (($tick_displayed == 0 || $tick_displayed == 1) ? $lang['xs_news_ticker_title'] : $lang['xs_news_tickers_title']),
  285. 'XS_NEWS_ITEMS_TITLE' => (($news_displayed == 0 || $news_displayed == 1) ? $lang['xs_news_item_title'] : $lang['xs_news_items_title']),
  286. 'XS_NEWS_COLLAPSE' => $xml_collapse,
  287. )
  288. );
  289. $template->assign_var_from_handle('XS_NEWS', 'news');
  290. }
  291. ?>