a:8:{s:4:"name";s:14:"fgr_punbb_info";s:6:"author";s:12:"fathersGrave";s:10:"author_uri";s:29:"mailto:fathersgrave@yandex.ru";s:7:"version";s:5:"0.01a";s:11:"description";s:23:"PunBB forum info plugin";s:4:"help";s:989:"

	<p><u><strong>PunBB info plugin</strong></u></p>
	<p>PunBB forum could be found <a href="http://www.punbb.org" target="_blank">here</a>.</p>
	<p><strong>Tag:</strong> &lt;txp:fgr_punbb_info /&gt;</p>
	<strong>Attributes:</strong><br />

<table border="0" align="center" cellpadding="4" cellspacing="0">
  <tr> 
    <td>action=</td>
    <td>&quot;active&quot;</td>
    <td>show most recently active topics (default)</td>
  </tr>
  <tr> 
    <td rowspan="3">&nbsp;</td>
    <td>&quot;new&quot;</td>

    <td>show newest topics</td>
  </tr>
  <tr> 
    <td>&quot;online&quot;</td>
    <td>show users online</td>
  </tr>
  <tr> 
    <td>&quot;stats&quot;</td>

    <td>show board statistics</td>
  </tr>
  <tr> 
    <td>show=</td>
    <td>1-50</td>
    <td>number of topics to show (default: 15)</td>
  </tr>

  <tr> 
    <td>fid=</td>
    <td>&lt;numeric&gt;</td>
    <td>a forum ID (if no ID specified, topics from all guest-readable forums 
      will be shown)</td>
  </tr>
</table>

	
";s:4:"code";s:1267:"
	function fgr_punbb_info($atts)
{	
/* 	Please, type your punbb forum url (with trailing slash):  		  */
	
	$forum_url = "http://www.bloodygoodproductions.com/forum/";
	
/* 	Thank you! 						  */

	

	if (is_array($atts)) extract($atts);
	
	if (isset($action)) {
		switch ($action) { 
                                    case "active": 
                                    case "new":
                                    case "online":
                                    case "stats":
		           $vars = "?action=".$action;
		           break;
                                    default:
	return "plugin txp:fgr_punbb_info> incorrect action specified";
                                }
                }
	else $vars = "?action=active";
	
	if (isset($show)) {
		if (is_numeric($show) && $show <= 50) {
		$vars .= "&show=$show";
		}
		else return "plugin txp:fgr_punbb_info> wrong number of posts to show specified";
	}
	
	if (isset($fid)) {
		if (is_numeric($fid)) {
		$vars .= "&fid=$fid";
		}
		else return "plugin txp:fgr_punbb_info> wrong forum id specified";
	}
		
	$url = $forum_url."extern.php".$vars;

               ob_start();
           require($url);
              $out = ob_get_contents();
              ob_end_clean();
              return $out;

}
";s:3:"md5";s:32:"92519f42baedb2dc54178f70f125833c";}