/**
  * Execute the feed and return the HTML to show on the page.  
  * Can be called from ACP or front end, so the plugin needs to setup any appropriate lang files, skin files, etc.
  *
  * @access	public
  * @param	array 				Block data
  * @return	string				Block HTML to display or cache
  */
 public function executeFeed($block)
 {
     $this->lang->loadLanguageFile(array('public_ccs'), 'ccs');
     $config = unserialize($block['block_config']);
     $where = array();
     //-----------------------------------------
     // Set up filtering clauses
     //-----------------------------------------
     switch ($config['content']) {
         case 'entries':
             if ($config['filters']['filter_blogid']) {
                 $where[] = "e.blog_id=" . $config['filters']['filter_blogid'];
             }
             if ($config['filters']['filter_visibility'] != 'either') {
                 $where[] = "e.entry_status='" . ($config['filters']['filter_visibility'] == 'open' ? 'published' : 'draft') . "'";
             }
             if ($config['filters']['filter_featured']) {
                 $where[] = "e.entry_featured=1";
             }
             if ($config['filters']['filter_submitted']) {
                 $timestamp = @strtotime($config['filters']['filter_submitted']);
                 if ($timestamp) {
                     $where[] = "e.entry_date > " . $timestamp;
                 }
             }
             if ($config['filters']['filter_submitter'] == 'myself') {
                 $where[] = "e.entry_author_id = " . $this->memberData['member_id'];
             } else {
                 if ($config['filters']['filter_submitter'] == 'friends') {
                     //-----------------------------------------
                     // Get page builder for friends
                     //-----------------------------------------
                     require_once IPSLib::getAppDir('ccs') . '/sources/pages.php';
                     $pageBuilder = new pageBuilder($this->registry);
                     $friends = $pageBuilder->getFriends();
                     if (count($friends)) {
                         $where[] = "e.entry_author_id IN( " . implode(',', $friends) . ")";
                     } else {
                         return '';
                     }
                 } else {
                     if ($config['filters']['filter_submitter'] != '') {
                         $member = IPSMember::load($config['filters']['filter_submitter'], 'basic');
                         if ($member['member_id']) {
                             $where[] = "e.entry_author_id = " . $member['member_id'];
                         } else {
                             return '';
                         }
                     }
                 }
             }
             break;
         case 'comments':
             if ($config['filters']['filter_visibility'] != 'either') {
                 $where[] = "c.comment_queued=" . ($config['filters']['filter_visibility'] == 'open' ? 0 : 1);
             }
             if ($config['filters']['filter_submitted']) {
                 $timestamp = @strtotime($config['filters']['filter_submitted']);
                 if ($timestamp) {
                     $where[] = "c.comment_date > " . $timestamp;
                 }
             }
             if ($config['filters']['filter_submitter'] == 'myself') {
                 $where[] = "c.member_id = " . $this->memberData['member_id'];
             } else {
                 if ($config['filters']['filter_submitter'] == 'friends') {
                     //-----------------------------------------
                     // Get page builder for friends
                     //-----------------------------------------
                     require_once IPSLib::getAppDir('ccs') . '/sources/pages.php';
                     $pageBuilder = new pageBuilder($this->registry);
                     $friends = $pageBuilder->getFriends();
                     if (count($friends)) {
                         $where[] = "c.member_id IN( " . implode(',', $friends) . ")";
                     } else {
                         return '';
                     }
                 } else {
                     if ($config['filters']['filter_submitter'] != '') {
                         $member = IPSMember::load($config['filters']['filter_submitter'], 'basic');
                         if ($member['member_id']) {
                             $where[] = "c.member_id = " . $member['member_id'];
                         } else {
                             return '';
                         }
                     }
                 }
             }
             break;
         case 'blogs':
             if ($config['filters']['filter_owner'] == 'myself') {
                 $where[] = "b.member_id = " . $this->memberData['member_id'];
             } else {
                 if ($config['filters']['filter_owner'] == 'friends') {
                     //-----------------------------------------
                     // Get page builder for friends
                     //-----------------------------------------
                     require_once IPSLib::getAppDir('ccs') . '/sources/pages.php';
                     $pageBuilder = new pageBuilder($this->registry);
                     $friends = $pageBuilder->getFriends();
                     if (count($friends)) {
                         $where[] = "b.member_id IN( " . implode(',', $friends) . ")";
                     } else {
                         return '';
                     }
                 } else {
                     if ($config['filters']['filter_owner'] != '') {
                         $member = IPSMember::load($config['filters']['filter_owner'], 'basic');
                         if ($member['member_id']) {
                             $where[] = "b.member_id = " . $member['member_id'];
                         } else {
                             return '';
                         }
                     }
                 }
             }
             if ($config['filters']['filter_type'] != 'either') {
                 $where[] = "b.blog_type='" . $config['filters']['filter_type'] . "'";
             }
             if (!$config['filters']['filter_private']) {
                 $where[] = "b.blog_private=0";
             }
             if ($config['filters']['filter_guests']) {
                 $where[] = "b.blog_allowguests=1";
             }
             break;
     }
     $order = '';
     switch ($config['content']) {
         case 'entries':
             switch ($config['sortby']) {
                 case 'name':
                     $order .= "e.entry_name ";
                     break;
                 case 'trackbacks':
                     $order .= "e.entry_trackbacks ";
                     break;
                 default:
                 case 'submitted':
                     $order .= "e.entry_date ";
                     break;
                 case 'comments':
                     $order .= "e.entry_num_comments ";
                     break;
                 case 'lastcomment':
                     $order .= "e.entry_last_comment_date ";
                     break;
                 case 'rand':
                     $order .= "RAND() ";
                     break;
             }
             break;
         case 'comments':
             switch ($config['sortby']) {
                 default:
                 case 'post_date':
                     $order .= "c.comment_date ";
                     break;
             }
             break;
         case 'blogs':
             switch ($config['sortby']) {
                 case 'name':
                     $order .= "b.blog_name ";
                     break;
                 case 'entries':
                     $order .= "entry_count ";
                     break;
                 default:
                 case 'last_entry':
                     $order .= "e.entry_date ";
                     break;
                 case 'views':
                     $order .= "b.blog_num_views ";
                     break;
                 case 'pinned':
                     $order .= "b.blog_pinned ";
                     break;
                 case 'rate':
                     $order .= "(b.blog_rating_total/b.blog_rating_count) ";
                     break;
                 case 'rand':
                     $order .= "RAND() ";
                     break;
             }
             break;
     }
     $order .= $config['sortorder'];
     //-----------------------------------------
     // Run the query and get the results
     //-----------------------------------------
     $content = array();
     switch ($config['content']) {
         case 'entries':
             $this->DB->build(array('select' => 'e.*', 'from' => array('blog_entries' => 'e'), 'where' => implode(' AND ', $where), 'order' => $order, 'limit' => array($config['offset_a'], $config['offset_b']), 'add_join' => array(array('select' => 'b.*', 'from' => array('blog_blogs' => 'b'), 'where' => 'e.blog_id=b.blog_id', 'type' => 'left'), array('select' => 'm.*, m.member_id as mid', 'from' => array('members' => 'm'), 'where' => 'm.member_id=e.entry_author_id', 'type' => 'left'), array('select' => 'pp.*', 'from' => array('profile_portal' => 'pp'), 'where' => 'pp.pp_member_id=m.member_id', 'type' => 'left'), array('select' => 'pf.*', 'from' => array('pfields_content' => 'pf'), 'where' => 'pf.member_id=m.member_id', 'type' => 'left'), array('select' => 's.*', 'from' => array('sessions' => 's'), 'where' => 's.member_id=m.member_id', 'type' => 'left'))));
             $outer = $this->DB->execute();
             while ($r = $this->DB->fetch($outer)) {
                 //-----------------------------------------
                 // Normalization
                 //-----------------------------------------
                 $r['member_id'] = $r['mid'];
                 $r['url'] = $this->registry->output->buildSEOUrl($this->settings['board_url'] . '/index.php?app=blog&module=display&section=blog&blogid=' . $r['blog_id'] . '&showentry=' . $r['entry_id'], 'none');
                 $r['date'] = $r['entry_date'];
                 $r['content'] = $r['entry'];
                 $r['title'] = $r['entry_name'];
                 IPSText::getTextClass('bbcode')->parse_html = $r['entry_html_state'] ? 1 : 0;
                 IPSText::getTextClass('bbcode')->parse_nl2br = $r['entry_html_state'] == 2 ? 1 : 0;
                 IPSText::getTextClass('bbcode')->parse_smilies = $r['entry_use_emo'] ? 1 : 0;
                 IPSText::getTextClass('bbcode')->parsing_section = 'blog_entry';
                 IPSText::getTextClass('bbcode')->parsing_mgroup = $r['member_group_id'];
                 IPSText::getTextClass('bbcode')->parsing_mgroup_others = $r['mgroup_others'];
                 $r['content'] = IPSText::getTextClass('bbcode')->memberViewImages($r['content']);
                 $r['content'] = IPSText::getTextClass('bbcode')->preDisplayParse($r['content']);
                 $r = IPSMember::buildDisplayData($r);
                 $content[] = $r;
             }
             break;
         case 'comments':
             $this->DB->build(array('select' => 'c.*', 'from' => array('blog_comments' => 'c'), 'where' => implode(' AND ', $where), 'order' => $order, 'limit' => array($config['offset_a'], $config['offset_b']), 'add_join' => array(array('select' => 'e.*', 'from' => array('blog_entries' => 'e'), 'where' => 'c.entry_id=e.entry_id', 'type' => 'left'), array('select' => 'b.*', 'from' => array('blog_blogs' => 'b'), 'where' => 'b.blog_id=e.blog_id', 'type' => 'left'), array('select' => 'm.*, m.member_id as mid', 'from' => array('members' => 'm'), 'where' => 'm.member_id=c.member_id', 'type' => 'left'), array('select' => 'pp.*', 'from' => array('profile_portal' => 'pp'), 'where' => 'pp.pp_member_id=m.member_id', 'type' => 'left'), array('select' => 'pf.*', 'from' => array('pfields_content' => 'pf'), 'where' => 'pf.member_id=m.member_id', 'type' => 'left'), array('select' => 's.*', 'from' => array('sessions' => 's'), 'where' => 's.member_id=m.member_id', 'type' => 'left'))));
             $outer = $this->DB->execute();
             while ($r = $this->DB->fetch($outer)) {
                 //-----------------------------------------
                 // Normalization
                 //-----------------------------------------
                 $r['member_id'] = $r['mid'];
                 $r['url'] = $this->registry->output->buildSEOUrl($this->settings['board_url'] . '/index.php?app=blog&module=display&section=blog&blogid=' . $r['blog_id'] . '&showentry=' . $r['entry_id'], 'none');
                 $r['date'] = $r['comment_date'];
                 $r['content'] = $r['comment_text'];
                 $r['title'] = $r['entry_name'];
                 IPSText::getTextClass('bbcode')->parse_html = $r['comment_html_state'] ? 1 : 0;
                 IPSText::getTextClass('bbcode')->parse_bbcode = 1;
                 IPSText::getTextClass('bbcode')->parse_nl2br = $r['comment_html_state'] == 2 ? 1 : 0;
                 IPSText::getTextClass('bbcode')->parse_smilies = $r['comment_use_emo'] ? 1 : 0;
                 IPSText::getTextClass('bbcode')->parsing_section = 'blog_comment';
                 IPSText::getTextClass('bbcode')->parsing_mgroup = $r['member_group_id'];
                 IPSText::getTextClass('bbcode')->parsing_mgroup_others = $r['mgroup_others'];
                 $r['content'] = IPSText::getTextClass('bbcode')->memberViewImages($r['content']);
                 $r['content'] = IPSText::getTextClass('bbcode')->preDisplayParse($r['content']);
                 $r = IPSMember::buildDisplayData($r);
                 $content[] = $r;
             }
             break;
         case 'blogs':
             $this->DB->build(array('select' => 'b.*', 'from' => array('blog_blogs' => 'b'), 'where' => implode(' AND ', $where), 'order' => $order, 'limit' => array($config['offset_a'], $config['offset_b']), 'group' => 'b.blog_id', 'add_join' => array(array('select' => 'COUNT(e.entry_id) as entry_count, MAX(e.entry_id) as max_entry_id', 'from' => array('blog_entries' => 'e'), 'where' => 'e.blog_id=b.blog_id', 'type' => 'left'), array('select' => 'et.*', 'from' => array('blog_entries' => 'et'), 'where' => 'et.entry_id=max_entry_id', 'type' => 'left'), array('select' => 'm.*, m.member_id as mid', 'from' => array('members' => 'm'), 'where' => 'm.member_id=e.member_id', 'type' => 'left'), array('select' => 'pp.*', 'from' => array('profile_portal' => 'pp'), 'where' => 'pp.pp_member_id=m.member_id', 'type' => 'left'), array('select' => 'pf.*', 'from' => array('pfields_content' => 'pf'), 'where' => 'pf.member_id=m.member_id', 'type' => 'left'), array('select' => 's.*', 'from' => array('sessions' => 's'), 'where' => 's.member_id=m.member_id', 'type' => 'left'))));
             $outer = $this->DB->execute();
             while ($r = $this->DB->fetch($outer)) {
                 //-----------------------------------------
                 // Normalization
                 //-----------------------------------------
                 $r['member_id'] = $r['mid'];
                 $r['url'] = $this->registry->output->buildSEOUrl($this->settings['board_url'] . '/index.php?app=blog&module=display&section=blog&blogid=' . $r['blog_id'], 'none');
                 $r['title'] = $r['blog_name'];
                 $r['date'] = $r['entry_date'];
                 $r['content'] = $r['blog_desc'];
                 $r = IPSMember::buildDisplayData($r);
                 $content[] = $r;
             }
             break;
     }
     //-----------------------------------------
     // Return formatted content
     //-----------------------------------------
     $feedConfig = $this->returnFeedInfo();
     $templateBit = $feedConfig['templateBit'] . '_' . $block['block_id'];
     if ($config['hide_empty'] and !count($content)) {
         return '';
     }
     return $this->registry->output->getTemplate('ccs')->{$templateBit}($block['block_name'], $content);
 }
 /**
  * Execute the feed and return the HTML to show on the page.  
  * Can be called from ACP or front end, so the plugin needs to setup any appropriate lang files, skin files, etc.
  *
  * @access	public
  * @param	array 				Block data
  * @return	string				Block HTML to display or cache
  */
 public function executeFeed($block)
 {
     $this->lang->loadLanguageFile(array('public_ccs'), 'ccs');
     $config = unserialize($block['block_config']);
     $where = array();
     //-----------------------------------------
     // Set up filtering clauses
     //-----------------------------------------
     if ($config['filters']['filter_cats']) {
         if ($config['content'] != 'cats') {
             $where[] = "f.file_cat IN(" . $config['filters']['filter_cats'] . ")";
         }
     }
     switch ($config['content']) {
         case 'files':
             if ($config['filters']['filter_visibility'] != 'either') {
                 $where[] = "f.file_open=" . ($config['filters']['filter_visibility'] == 'open' ? 1 : 0);
             }
             if ($config['filters']['filter_broken'] != 'either') {
                 $where[] = "f.file_broken=" . ($config['filters']['filter_broken'] == 'broken' ? 1 : 0);
             }
             if ($config['filters']['filter_submitted']) {
                 $timestamp = @strtotime($config['filters']['filter_submitted']);
                 if ($timestamp) {
                     $where[] = "f.file_submitted > " . $timestamp;
                 }
             }
             if ($config['filters']['filter_submitter'] == 'myself') {
                 $where[] = "f.file_submitter = " . $this->memberData['member_id'];
             } else {
                 if ($config['filters']['filter_submitter'] == 'friends') {
                     //-----------------------------------------
                     // Get page builder for friends
                     //-----------------------------------------
                     require_once IPSLib::getAppDir('ccs') . '/sources/pages.php';
                     $pageBuilder = new pageBuilder($this->registry);
                     $friends = $pageBuilder->getFriends();
                     if (count($friends)) {
                         $where[] = "f.file_submitter IN( " . implode(',', $friends) . ")";
                     } else {
                         return '';
                     }
                 } else {
                     if ($config['filters']['filter_submitter'] != '') {
                         $member = IPSMember::load($config['filters']['filter_submitter'], 'basic');
                         if ($member['member_id']) {
                             $where[] = "f.file_submitter = " . $member['member_id'];
                         } else {
                             return '';
                         }
                     }
                 }
             }
             break;
         case 'comments':
             if ($config['filters']['filter_visibility'] != 'either') {
                 $where[] = "c.comment_open=" . ($config['filters']['filter_visibility'] == 'open' ? 1 : 0);
             }
             if ($config['filters']['filter_submitted']) {
                 $timestamp = @strtotime($config['filters']['filter_submitted']);
                 if ($timestamp) {
                     $where[] = "c.comment_date > " . $timestamp;
                 }
             }
             break;
     }
     $order = '';
     switch ($config['content']) {
         case 'files':
             switch ($config['sortby']) {
                 case 'title':
                     $order .= "f.file_name ";
                     break;
                 case 'views':
                     $order .= "f.file_views ";
                     break;
                 default:
                 case 'submitted':
                     $order .= "f.file_submitted ";
                     break;
                 case 'updated':
                     $where[] = "f.file_updated > 0 ";
                     $order .= "f.file_updated ";
                     break;
                 case 'downloads':
                     $order .= "f.file_downloads ";
                     break;
                 case 'size':
                     $order .= "f.file_size ";
                     break;
                 case 'rate':
                     $order .= "f.file_rating ";
                     break;
                 case 'rand':
                     $order .= "RAND() ";
                     break;
             }
             break;
         case 'comments':
             switch ($config['sortby']) {
                 default:
                 case 'post_date':
                     $order .= "c.comment_date ";
                     break;
             }
             break;
     }
     $order .= $config['sortorder'];
     //-----------------------------------------
     // Run the query and get the results
     //-----------------------------------------
     $content = array();
     switch ($config['content']) {
         case 'files':
             $this->DB->build(array('select' => 'f.*', 'from' => array('downloads_files' => 'f'), 'where' => implode(' AND ', $where), 'order' => $order, 'limit' => array($config['offset_a'], $config['offset_b']), 'add_join' => array(array('select' => 'c.*', 'from' => array('downloads_categories' => 'c'), 'where' => 'c.cid=f.file_cat', 'type' => 'left'), array('select' => 'm.*, m.member_id as mid', 'from' => array('members' => 'm'), 'where' => 'm.member_id=f.file_submitter', 'type' => 'left'), array('select' => 'pp.*', 'from' => array('profile_portal' => 'pp'), 'where' => 'pp.pp_member_id=m.member_id', 'type' => 'left'), array('select' => 'pf.*', 'from' => array('pfields_content' => 'pf'), 'where' => 'pf.member_id=m.member_id', 'type' => 'left'), array('select' => 's.*', 'from' => array('sessions' => 's'), 'where' => 's.member_id=m.member_id', 'type' => 'left'))));
             $this->DB->execute();
             while ($r = $this->DB->fetch()) {
                 //-----------------------------------------
                 // Normalization
                 //-----------------------------------------
                 $r['member_id'] = $r['mid'];
                 $r['url'] = $this->registry->output->buildSEOUrl($this->settings['board_url'] . '/index.php?app=downloads&showfile=' . $r['file_id'], 'none');
                 $r['date'] = $r['file_submitted'];
                 $r['content'] = $r['file_desc'];
                 $r['title'] = $r['file_name'];
                 $coptions = unserialize($r['coptions']);
                 IPSText::getTextClass('bbcode')->parse_html = $coptions['opt_html'];
                 IPSText::getTextClass('bbcode')->parse_bbcode = $coptions['opt_bbcode'];
                 IPSText::getTextClass('bbcode')->parse_nl2br = 1;
                 IPSText::getTextClass('bbcode')->parsing_section = 'idm_submit';
                 IPSText::getTextClass('bbcode')->parsing_mgroup = $r['member_group_id'];
                 IPSText::getTextClass('bbcode')->parsing_mgroup_others = $r['mgroup_others'];
                 $r['content'] = IPSText::getTextClass('bbcode')->preDisplayParse($r['content']);
                 $r['content'] = IPSText::getTextClass('bbcode')->memberViewImages($r['content']);
                 $r = IPSMember::buildDisplayData($r);
                 $content[] = $r;
             }
             break;
         case 'comments':
             $this->DB->build(array('select' => 'c.*', 'from' => array('downloads_comments' => 'c'), 'where' => implode(' AND ', $where), 'order' => $order, 'limit' => array($config['offset_a'], $config['offset_b']), 'add_join' => array(array('select' => 'f.*', 'from' => array('downloads_files' => 'f'), 'where' => 'f.file_id=c.comment_fid', 'type' => 'left'), array('select' => 'cc.*', 'from' => array('downloads_cats' => 'cc'), 'where' => 'cc.cid=f.file_cat', 'type' => 'left'), array('select' => 'm.*, m.member_id as mid', 'from' => array('members' => 'm'), 'where' => 'm.member_id=c.comment_mid', 'type' => 'left'), array('select' => 'pp.*', 'from' => array('profile_portal' => 'pp'), 'where' => 'pp.pp_member_id=m.member_id', 'type' => 'left'), array('select' => 'pf.*', 'from' => array('pfields_content' => 'pf'), 'where' => 'pf.member_id=m.member_id', 'type' => 'left'), array('select' => 's.*', 'from' => array('sessions' => 's'), 'where' => 's.member_id=m.member_id', 'type' => 'left'))));
             $this->DB->execute();
             while ($r = $this->DB->fetch()) {
                 //-----------------------------------------
                 // Normalization
                 //-----------------------------------------
                 $r['member_id'] = $r['mid'];
                 $r['url'] = $this->registry->output->buildSEOUrl($this->settings['board_url'] . '/index.php?app=downloads&module=display&section=findpost&id=' . $r['comment_id'], 'none');
                 $r['date'] = $r['comment_date'];
                 $r['content'] = $r['comment_text'];
                 $r['title'] = $r['file_name'];
                 $r = IPSMember::buildDisplayData($r);
                 IPSText::getTextClass('bbcode')->parse_html = 0;
                 IPSText::getTextClass('bbcode')->parse_nl2br = 1;
                 IPSText::getTextClass('bbcode')->parse_bbcode = 1;
                 IPSText::getTextClass('bbcode')->parse_smilies = $r['use_emo'];
                 IPSText::getTextClass('bbcode')->parsing_section = 'idm_comment';
                 IPSText::getTextClass('bbcode')->parsing_mgroup = $r['member_group_id'];
                 IPSText::getTextClass('bbcode')->parsing_mgroup_others = $r['mgroup_others'];
                 $r['content'] = IPSText::getTextClass('bbcode')->preDisplayParse($r['content']);
                 $r['content'] = IPSText::getTextClass('bbcode')->memberViewImages($r['content']);
                 $content[] = $r;
             }
             break;
         case 'cats':
             require_once IPSLib::getAppDir('downloads') . '/app_class_downloads.php';
             $app = new app_class_downloads($this->registry);
             $cats = array();
             $filter = array();
             if ($config['filter_cats']) {
                 $filter = explode(',', $config['filter_cats']);
             }
             foreach ($this->registry->categories->cat_lookup as $cid => $category) {
                 if (count($filter) and !in_array($cid, $filter)) {
                     continue;
                 }
                 if ($config['filter_root'] and $category['cparent'] > 0) {
                     continue;
                 }
                 switch ($config['sortby']) {
                     case 'name':
                         $cats[$category['cname'] . '_' . rand(100, 999)] = $category;
                         break;
                     case 'last_file':
                         $cats[$category['cfileinfo']['date'] . '_' . rand(100, 999)] = $category;
                         break;
                     case 'files':
                         $cats[$category['cfileinfo']['total_files'] . '_' . rand(100, 999)] = $category;
                         break;
                     case 'position':
                         $cats[$category['cposition'] . '_' . rand(100, 999)] = $category;
                         break;
                     case 'rand':
                         $cats[rand(10000, 99999)] = $category;
                         break;
                 }
             }
             if ($config['sortorder'] == 'desc') {
                 krsort($cats);
             } else {
                 ksort($cats);
             }
             $cats = array_slice($cats, $config['offset_a'], $config['offset_b']);
             $finalCats = array();
             foreach ($cats as $r) {
                 //-----------------------------------------
                 // Normalization
                 //-----------------------------------------
                 $r['url'] = $this->registry->output->buildSEOUrl($this->settings['board_url'] . '/index.php?app=downloads&showcat=' . $r['cid'], 'none');
                 $r['title'] = $r['cname'];
                 $r['date'] = $r['cfileinfo']['date'];
                 $r['content'] = $r['cdesc'];
                 $content[] = $r;
             }
             break;
     }
     //-----------------------------------------
     // Return formatted content
     //-----------------------------------------
     $feedConfig = $this->returnFeedInfo();
     $templateBit = $feedConfig['templateBit'] . '_' . $block['block_id'];
     if ($config['hide_empty'] and !count($content)) {
         return '';
     }
     return $this->registry->output->getTemplate('ccs')->{$templateBit}($block['block_name'], $content);
 }
 /**
  * Execute the feed and return the HTML to show on the page.  
  * Can be called from ACP or front end, so the plugin needs to setup any appropriate lang files, skin files, etc.
  *
  * @access	public
  * @param	array 				Block data
  * @return	string				Block HTML to display or cache
  */
 public function executeFeed($block)
 {
     $this->lang->loadLanguageFile(array('public_ccs'), 'ccs');
     $config = unserialize($block['block_config']);
     $where = array();
     //-----------------------------------------
     // Set up filtering clauses
     //-----------------------------------------
     switch ($config['content']) {
         case 'images':
             if ($config['filters']['filter_cats']) {
                 $where[] = "i.category_id IN(" . $config['filters']['filter_cats'] . ")";
             }
             if ($config['filters']['filter_albums']) {
                 $where[] = "i.album_id IN(" . $config['filters']['filter_albums'] . ")";
             }
             if ($config['filters']['filter_visibility'] != 'either') {
                 $where[] = "i.approved=" . ($config['filters']['filter_visibility'] == 'open' ? 1 : 0);
             }
             if ($config['filters']['filter_submitted']) {
                 $timestamp = @strtotime($config['filters']['filter_submitted']);
                 if ($timestamp) {
                     $where[] = "i.idate > " . $timestamp;
                 }
             }
             if ($config['filters']['filter_submitter'] == 'myself') {
                 $where[] = "i.member_id = " . $this->memberData['member_id'];
             } else {
                 if ($config['filters']['filter_submitter'] == 'friends') {
                     //-----------------------------------------
                     // Get page builder for friends
                     //-----------------------------------------
                     require_once IPSLib::getAppDir('ccs') . '/sources/pages.php';
                     $pageBuilder = new pageBuilder($this->registry);
                     $friends = $pageBuilder->getFriends();
                     if (count($friends)) {
                         $where[] = "i.member_id IN( " . implode(',', $friends) . ")";
                     } else {
                         return '';
                     }
                 } else {
                     if ($config['filters']['filter_submitter'] != '') {
                         $member = IPSMember::load($config['filters']['filter_submitter'], 'basic');
                         if ($member['member_id']) {
                             $where[] = "i.member_id = " . $member['member_id'];
                         } else {
                             return '';
                         }
                     }
                 }
             }
             break;
         case 'comments':
             if ($config['filters']['filter_cats']) {
                 $where[] = "i.category_id IN(" . $config['filters']['filter_cats'] . ")";
             }
             if ($config['filters']['filter_albums']) {
                 $where[] = "i.album_id IN(" . $config['filters']['filter_albums'] . ")";
             }
             if ($config['filters']['filter_visibility'] != 'either') {
                 $where[] = "c.approved=" . ($config['filters']['filter_visibility'] == 'open' ? 1 : 0);
             }
             if ($config['filters']['filter_submitted']) {
                 $timestamp = @strtotime($config['filters']['filter_submitted']);
                 if ($timestamp) {
                     $where[] = "c.post_date > " . $timestamp;
                 }
             }
             break;
         case 'cats':
             if ($config['filters']['filter_cats']) {
                 $where[] = "c.id IN(" . $config['filters']['filter_cats'] . ")";
             }
             if ($config['filters']['filter_root']) {
                 $where[] = "c.parent < 1";
             }
             break;
         case 'albums':
             if ($config['filters']['filter_albums']) {
                 $where[] = "a.id IN(" . $config['filters']['filter_albums'] . ")";
             }
             if ($config['filters']['filter_public']) {
                 $where[] = "a.public_album=1";
             }
             if ($config['filters']['filter_owner'] == 'myself') {
                 $where[] = "a.member_id = " . $this->memberData['member_id'];
             } else {
                 if ($config['filters']['filter_owner'] == 'friends') {
                     //-----------------------------------------
                     // Get page builder for friends
                     //-----------------------------------------
                     require_once IPSLib::getAppDir('ccs') . '/sources/pages.php';
                     $pageBuilder = new pageBuilder($this->registry);
                     $friends = $pageBuilder->getFriends();
                     if (count($friends)) {
                         $where[] = "a.member_id IN( " . implode(',', $friends) . ")";
                     } else {
                         return '';
                     }
                 } else {
                     if ($config['filters']['filter_owner'] != '') {
                         $member = IPSMember::load($config['filters']['filter_owner'], 'basic');
                         if ($member['member_id']) {
                             $where[] = "a.member_id = " . $member['member_id'];
                         } else {
                             return '';
                         }
                     }
                 }
             }
             break;
     }
     $order = '';
     switch ($config['content']) {
         case 'images':
             switch ($config['sortby']) {
                 case 'title':
                     $order .= "i.caption ";
                     break;
                 case 'filename':
                     $order .= "i.file_name ";
                     break;
                 case 'views':
                     $order .= "i.views ";
                     break;
                 case 'comments':
                     $order .= "i.comments ";
                     break;
                 default:
                 case 'submitted':
                     $order .= "i.idate ";
                     break;
                 case 'lastcomment':
                     $order .= "i.lastcomment ";
                     break;
                 case 'size':
                     $order .= "i.file_size ";
                     break;
                 case 'rate':
                     $order .= "i.rating ";
                     break;
                 case 'rand':
                     $order .= "RAND() ";
                     break;
             }
             break;
         case 'comments':
             switch ($config['sortby']) {
                 default:
                 case 'post_date':
                     $order .= "p.post_date ";
                     break;
             }
             break;
         case 'cats':
             switch ($config['sortby']) {
                 case 'name':
                     $order .= "c.name ";
                     break;
                 default:
                 case 'last_file':
                     $order .= "c.last_pic_date ";
                     break;
                 case 'files':
                     $order .= "c.images ";
                     break;
                 case 'position':
                     $order .= "c.c_order ";
                     break;
                 case 'rand':
                     $order .= "RAND() ";
                     break;
             }
             break;
         case 'albums':
             switch ($config['sortby']) {
                 case 'name':
                     $order .= "a.name ";
                     break;
                 default:
                 case 'last_file':
                     $order .= "a.last_pic_date ";
                     break;
                 case 'files':
                     $order .= "a.images ";
                     break;
                 case 'comments':
                     $order .= "a.comments ";
                     break;
                 case 'rand':
                     $order .= "RAND() ";
                     break;
             }
             break;
     }
     $order .= $config['sortorder'];
     //-----------------------------------------
     // Run the query and get the results
     //-----------------------------------------
     $content = array();
     switch ($config['content']) {
         case 'images':
             $this->DB->build(array('select' => 'i.id as imgid, i.*', 'from' => array('gallery_images' => 'i'), 'where' => implode(' AND ', $where), 'order' => $order, 'limit' => array($config['offset_a'], $config['offset_b']), 'add_join' => array(array('select' => 'c.id as cid, c.*', 'from' => array('gallery_categories' => 'c'), 'where' => 'c.id=i.category_id', 'type' => 'left'), array('select' => 'a.id as aid, a.*', 'from' => array('gallery_albums' => 'a'), 'where' => 'a.id=i.album_id', 'type' => 'left'), array('select' => 'm.*, m.member_id as mid', 'from' => array('members' => 'm'), 'where' => 'm.member_id=i.member_id', 'type' => 'left'), array('select' => 'pp.*', 'from' => array('profile_portal' => 'pp'), 'where' => 'pp.pp_member_id=m.member_id', 'type' => 'left'), array('select' => 'pf.*', 'from' => array('pfields_content' => 'pf'), 'where' => 'pf.member_id=m.member_id', 'type' => 'left'), array('select' => 's.*', 'from' => array('sessions' => 's'), 'where' => 's.member_id=m.member_id', 'type' => 'left'))));
             $this->DB->execute();
             while ($r = $this->DB->fetch()) {
                 //-----------------------------------------
                 // Normalization
                 //-----------------------------------------
                 $r['member_id'] = $r['mid'];
                 $r['album_id'] = $r['aid'];
                 $r['cat_id'] = $r['cid'];
                 $r['url'] = $this->registry->output->buildSEOUrl($this->settings['board_url'] . '/index.php?app=gallery&amp;module=images&amp;section=viewimage&amp;img=' . $r['imgid'], 'none');
                 $r['date'] = $r['idate'];
                 $r['content'] = $r['description'];
                 $r['title'] = $r['caption'];
                 IPSText::getTextClass('bbcode')->parse_smilies = 1;
                 IPSText::getTextClass('bbcode')->parse_html = 0;
                 IPSText::getTextClass('bbcode')->parse_nl2br = 1;
                 IPSText::getTextClass('bbcode')->parse_bbcode = 1;
                 IPSText::getTextClass('bbcode')->parsing_section = 'gallery_image';
                 IPSText::getTextClass('bbcode')->parsing_mgroup = $r['member_group_id'];
                 IPSText::getTextClass('bbcode')->parsing_mgroup_others = $r['mgroup_others'];
                 $r['content'] = IPSText::getTextClass('bbcode')->preDisplayParse($r['content']);
                 $r['content'] = IPSText::getTextClass('bbcode')->memberViewImages($r['content']);
                 $r = IPSMember::buildDisplayData($r);
                 $r['id'] = $r['imgid'];
                 $content[] = $r;
             }
             break;
         case 'comments':
             $this->DB->build(array('select' => 'c.*', 'from' => array('gallery_comments' => 'c'), 'where' => implode(' AND ', $where), 'order' => $order, 'limit' => array($config['offset_a'], $config['offset_b']), 'add_join' => array(array('select' => 'i.id as imgid, i.*', 'from' => array('gallery_images' => 'i'), 'where' => 'i.id=c.img_id', 'type' => 'left'), array('select' => 'c.id as cid, c.*', 'from' => array('gallery_categories' => 'c'), 'where' => 'c.id=i.category_id', 'type' => 'left'), array('select' => 'a.id as aid, a.*', 'from' => array('gallery_albums' => 'a'), 'where' => 'a.id=i.album_id', 'type' => 'left'), array('select' => 'm.*, m.member_id as mid', 'from' => array('members' => 'm'), 'where' => 'm.member_id=c.author_id', 'type' => 'left'), array('select' => 'pp.*', 'from' => array('profile_portal' => 'pp'), 'where' => 'pp.pp_member_id=m.member_id', 'type' => 'left'), array('select' => 'pf.*', 'from' => array('pfields_content' => 'pf'), 'where' => 'pf.member_id=m.member_id', 'type' => 'left'), array('select' => 's.*', 'from' => array('sessions' => 's'), 'where' => 's.member_id=m.member_id', 'type' => 'left'))));
             $this->DB->execute();
             while ($r = $this->DB->fetch()) {
                 //-----------------------------------------
                 // Normalization
                 //-----------------------------------------
                 $r['member_id'] = $r['mid'];
                 $r['album_id'] = $r['aid'];
                 $r['cat_id'] = $r['cid'];
                 $r['url'] = $this->registry->output->buildSEOUrl($this->settings['board_url'] . '/index.php?app=gallery&amp;module=images&amp;section=viewimage&amp;img=' . $r['imgid'], 'none');
                 $r['date'] = $r['post_date'];
                 $r['content'] = $r['comment'];
                 $r['title'] = $r['caption'];
                 IPSText::getTextClass('bbcode')->parse_smilies = 1;
                 IPSText::getTextClass('bbcode')->parse_html = ($r['allow_html'] and $this->caches['group_cache'][$poster['member_group_id']]['g_dohtml']) ? 1 : 0;
                 IPSText::getTextClass('bbcode')->parse_nl2br = 1;
                 IPSText::getTextClass('bbcode')->parse_bbcode = 1;
                 IPSText::getTextClass('bbcode')->parsing_section = 'gallery_comment';
                 IPSText::getTextClass('bbcode')->parsing_mgroup = $r['member_group_id'];
                 IPSText::getTextClass('bbcode')->parsing_mgroup_others = $r['mgroup_others'];
                 $r['content'] = IPSText::getTextClass('bbcode')->preDisplayParse($r['content']);
                 $r['content'] = IPSText::getTextClass('bbcode')->memberViewImages($r['content']);
                 $r = IPSMember::buildDisplayData($r);
                 $r['id'] = $r['imgid'];
                 $content[] = $r;
             }
             break;
         case 'cats':
             $this->DB->build(array('select' => 'c.id as cid, c.description as cdescription, c.*', 'from' => array('gallery_categories' => 'c'), 'where' => implode(' AND ', $where), 'order' => $order, 'limit' => array($config['offset_a'], $config['offset_b']), 'add_join' => array(array('select' => 'i.id as imgid, i.*', 'from' => array('gallery_images' => 'i'), 'where' => 'i.id=c.last_pic_id', 'type' => 'left'), array('select' => 'm.*, m.member_id as mid', 'from' => array('members' => 'm'), 'where' => 'm.member_id=c.last_poster_id', 'type' => 'left'), array('select' => 'pp.*', 'from' => array('profile_portal' => 'pp'), 'where' => 'pp.pp_member_id=m.member_id', 'type' => 'left'), array('select' => 'pf.*', 'from' => array('pfields_content' => 'pf'), 'where' => 'pf.member_id=m.member_id', 'type' => 'left'), array('select' => 's.*', 'from' => array('sessions' => 's'), 'where' => 's.member_id=m.member_id', 'type' => 'left'))));
             $this->DB->execute();
             while ($r = $this->DB->fetch()) {
                 //-----------------------------------------
                 // Normalization
                 //-----------------------------------------
                 $r['member_id'] = $r['mid'];
                 $r['cat_id'] = $r['cid'];
                 $r['url'] = $this->registry->output->buildSEOUrl($this->settings['board_url'] . '/index.php?app=gallery&amp;module=cats&amp;do=sc&amp;cat=' . $r['cat_id'], 'none');
                 $r['date'] = $r['last_pic_date'];
                 $r['content'] = $r['cdescription'];
                 $r['title'] = $r['name'];
                 $r = IPSMember::buildDisplayData($r);
                 $r['id'] = $r['imgid'];
                 $content[] = $r;
             }
             break;
         case 'albums':
             $this->DB->build(array('select' => 'a.id as aid, a.description as adescription, a.*', 'from' => array('gallery_albums' => 'a'), 'where' => implode(' AND ', $where), 'order' => $order, 'limit' => array($config['offset_a'], $config['offset_b']), 'add_join' => array(array('select' => 'i.id as imgid, i.*', 'from' => array('gallery_images' => 'i'), 'where' => 'i.id=a.last_pic_id', 'type' => 'left'), array('select' => 'c.id as cid, c.*', 'from' => array('gallery_categories' => 'c'), 'where' => 'c.id=a.category_id', 'type' => 'left'), array('select' => 'm.*, m.member_id as mid', 'from' => array('members' => 'm'), 'where' => 'm.member_id=a.member_id', 'type' => 'left'), array('select' => 'pp.*', 'from' => array('profile_portal' => 'pp'), 'where' => 'pp.pp_member_id=m.member_id', 'type' => 'left'), array('select' => 'pf.*', 'from' => array('pfields_content' => 'pf'), 'where' => 'pf.member_id=m.member_id', 'type' => 'left'), array('select' => 's.*', 'from' => array('sessions' => 's'), 'where' => 's.member_id=m.member_id', 'type' => 'left'))));
             $this->DB->execute();
             while ($r = $this->DB->fetch()) {
                 //-----------------------------------------
                 // Normalization
                 //-----------------------------------------
                 $r['member_id'] = $r['mid'];
                 $r['cat_id'] = $r['cid'];
                 $r['album_id'] = $r['aid'];
                 $r['url'] = $this->registry->output->buildSEOUrl($this->settings['board_url'] . '/index.php?app=gallery&amp;module=user&amp;user='******'member_id'] . '&amp;do=view_album&amp;album=' . $r['album_id'], 'none');
                 $r['date'] = $r['last_pic_date'];
                 $r['content'] = $r['adescription'];
                 $r['title'] = $r['name'];
                 $r = IPSMember::buildDisplayData($r);
                 $r['id'] = $r['imgid'];
                 $content[] = $r;
             }
             break;
     }
     //-----------------------------------------
     // Return formatted content
     //-----------------------------------------
     $feedConfig = $this->returnFeedInfo();
     $templateBit = $feedConfig['templateBit'] . '_' . $block['block_id'];
     if ($config['hide_empty'] and !count($content)) {
         return '';
     }
     return $this->registry->output->getTemplate('ccs')->{$templateBit}($block['block_name'], $content);
 }
 /**
  * Execute the feed and return the HTML to show on the page.  
  * Can be called from ACP or front end, so the plugin needs to setup any appropriate lang files, skin files, etc.
  *
  * @access	public
  * @param	array 				Block data
  * @return	string				Block HTML to display or cache
  */
 public function executeFeed($block)
 {
     $this->lang->loadLanguageFile(array('public_ccs'), 'ccs');
     $config = unserialize($block['block_config']);
     $where = array();
     //-----------------------------------------
     // Set up filtering clauses
     //-----------------------------------------
     if ($config['filters']['filter_forums']) {
         if ($config['content'] == 'forums') {
             $where[] = "f.id IN(" . $config['filters']['filter_forums'] . ")";
         } else {
             $where[] = "t.forum_id IN(" . $config['filters']['filter_forums'] . ")";
         }
     }
     switch ($config['content']) {
         case 'topics':
             if ($config['filters']['filter_status'] != 'either') {
                 $where[] = "t.state='" . $config['filters']['filter_status'] . "'";
             }
             if ($config['filters']['filter_visibility'] != 'either') {
                 $where[] = "t.approved=" . ($config['filters']['filter_visibility'] == 'approved' ? 1 : 0);
             }
             if ($config['filters']['filter_pinned'] != 'either') {
                 $where[] = "t.pinned=" . ($config['filters']['filter_pinned'] == 'pinned' ? 1 : 0);
             }
             if ($config['filters']['filter_posts'] > 0) {
                 $where[] = "t.posts > " . $config['filters']['filter_posts'];
             }
             if ($config['filters']['filter_starter'] == 'myself') {
                 $where[] = "t.starter_id = " . $this->memberData['member_id'];
             } else {
                 if ($config['filters']['filter_starter'] == 'friends') {
                     //-----------------------------------------
                     // Get page builder for friends
                     //-----------------------------------------
                     require_once IPSLib::getAppDir('ccs') . '/sources/pages.php';
                     $pageBuilder = new pageBuilder($this->registry);
                     $friends = $pageBuilder->getFriends();
                     if (count($friends)) {
                         $where[] = "t.starter_id IN( " . implode(',', $friends) . ")";
                     } else {
                         return '';
                     }
                 } else {
                     if ($config['filters']['filter_starter'] != '') {
                         $member = IPSMember::load($config['filters']['filter_starter'], 'basic');
                         if ($member['member_id']) {
                             $where[] = "t.starter_id = " . $member['member_id'];
                         } else {
                             return '';
                         }
                     }
                 }
             }
             if ($config['filters']['filter_poll'] != 'either') {
                 $where[] = "t.poll_state=" . ($config['filters']['filter_poll'] == 'poll' ? 1 : 0);
             }
             if ($config['filters']['filter_moved']) {
                 $where[] = "(t.moved_to=0 OR t.moved_to='' OR t.moved_to IS NULL)";
             }
             if ($config['filters']['filter_attach']) {
                 $where[] = "t.topic_hasattach > 0";
             }
             if ($config['filters']['filter_rating']) {
                 $where[] = "(t.topic_rating_total/t.topic_rating_hits) >= " . $config['filters']['filter_rating'];
             }
             break;
         case 'replies':
             if ($config['filters']['filter_status'] != 'either') {
                 $where[] = "t.state='" . $config['filters']['filter_status'] . "'";
             }
             if ($config['filters']['filter_visibility'] != 'either') {
                 $where[] = "t.approved=" . ($config['filters']['filter_visibility'] == 'approved' ? 1 : 0);
                 $where[] = "p.queued=" . ($config['filters']['filter_visibility'] == 'approved' ? 0 : 1);
             }
             if ($config['filters']['filter_pinned'] != 'either') {
                 $where[] = "t.pinned=" . ($config['filters']['filter_pinned'] == 'pinned' ? 1 : 0);
             }
             if ($config['filters']['filter_posts'] > 0) {
                 $where[] = "t.posts > " . $config['filters']['filter_posts'];
             }
             if ($config['filters']['filter_attach']) {
                 $where[] = "t.topic_hasattach > 0";
             }
             if ($config['filters']['filter_rating']) {
                 $where[] = "(t.topic_rating_total/t.topic_rating_hits) >= " . $config['filters']['filter_rating'];
             }
             if ($config['filters']['filter_poll'] != 'either') {
                 $where[] = "t.poll_state=" . ($config['filters']['filter_poll'] == 'poll' ? 1 : 0);
             }
             if ($config['filters']['filter_poster'] == 'myself') {
                 $where[] = "p.author_id = " . $this->memberData['member_id'];
             } else {
                 if ($config['filters']['filter_poster'] == 'friends') {
                     //-----------------------------------------
                     // Get page builder for friends
                     //-----------------------------------------
                     require_once IPSLib::getAppDir('ccs') . '/sources/pages.php';
                     $pageBuilder = new pageBuilder($this->registry);
                     $friends = $pageBuilder->getFriends();
                     if (count($friends)) {
                         $where[] = "p.author_id IN( " . implode(',', $friends) . ")";
                     } else {
                         return '';
                     }
                 } else {
                     if ($config['filters']['filter_poster'] != '') {
                         $member = IPSMember::load($config['filters']['filter_poster'], 'basic');
                         if ($member['member_id']) {
                             $where[] = "p.author_id = " . $member['member_id'];
                         } else {
                             return '';
                         }
                     }
                 }
             }
             break;
         case 'forums':
             if ($config['filters']['filter_root']) {
                 $where[] = "f.parent_id < 1";
             }
             break;
     }
     $order = '';
     switch ($config['content']) {
         case 'topics':
             switch ($config['sortby']) {
                 case 'title':
                     $order .= "t.title ";
                     break;
                 case 'posts':
                     $order .= "t.posts ";
                     break;
                 case 'start_date':
                     $order .= "t.start_date ";
                     break;
                 default:
                 case 'last_post':
                     $order .= "t.last_post ";
                     break;
                 case 'views':
                     $order .= "t.views ";
                     break;
                 case 'rand':
                     $order .= "RAND() ";
                     break;
             }
             break;
         case 'replies':
             switch ($config['sortby']) {
                 default:
                 case 'post_date':
                     $order .= "p.post_date ";
                     break;
             }
             break;
         case 'forums':
             switch ($config['sortby']) {
                 case 'name':
                     $order .= "f.name ";
                     break;
                 case 'topics':
                     $order .= "f.topics ";
                     break;
                 case 'posts':
                     $order .= "f.posts ";
                     break;
                 case 'last_post':
                     $order .= "f.last_post ";
                     break;
                 default:
                 case 'position':
                     $order .= "f.position ";
                     break;
                 case 'rand':
                     $order .= "RAND() ";
                     break;
             }
             break;
     }
     $order .= $config['sortorder'];
     //-----------------------------------------
     // Run the query and get the results
     //-----------------------------------------
     $content = array();
     switch ($config['content']) {
         case 'topics':
             $this->DB->build(array('select' => 't.*, t.title as topic_title', 'from' => array('topics' => 't'), 'where' => implode(' AND ', $where), 'order' => $order, 'limit' => array($config['offset_a'], $config['offset_b']), 'add_join' => array(array('select' => 'p.*', 'from' => array('posts' => 'p'), 'where' => 'p.pid=t.topic_firstpost', 'type' => 'left'), array('select' => 'poster.member_group_id as poster_group_id, poster.member_id as poster_id, poster.mgroup_others as poster_group_others', 'from' => array('members' => 'poster'), 'where' => 'poster.member_id=p.author_id', 'type' => 'left'), array('select' => 'f.*, f.id as fid', 'from' => array('forums' => 'f'), 'where' => 'f.id=t.forum_id', 'type' => 'left'), array('select' => 'm.*, m.member_id as mid', 'from' => array('members' => 'm'), 'where' => 'm.member_id=t.last_poster_id', 'type' => 'left'), array('select' => 'pp.*', 'from' => array('profile_portal' => 'pp'), 'where' => 'pp.pp_member_id=m.member_id', 'type' => 'left'), array('select' => 'pf.*', 'from' => array('pfields_content' => 'pf'), 'where' => 'pf.member_id=m.member_id', 'type' => 'left'), array('select' => 's.*', 'from' => array('sessions' => 's'), 'where' => 's.member_id=m.member_id', 'type' => 'left'))));
             $outer = $this->DB->execute();
             while ($r = $this->DB->fetch($outer)) {
                 //-----------------------------------------
                 // Normalization
                 //-----------------------------------------
                 $r['title'] = $r['topic_title'];
                 $r['member_id'] = $r['mid'];
                 $r['forum_id'] = $r['fid'];
                 $r['url'] = $this->registry->output->buildSEOUrl($this->settings['board_url'] . '/index.php?showtopic=' . $r['tid'], 'none', $r['title_seo'], 'showtopic');
                 $r['date'] = $r['last_post'];
                 $r['content'] = $r['post'];
                 IPSText::getTextClass('bbcode')->parse_smilies = $r['use_emo'];
                 IPSText::getTextClass('bbcode')->parse_html = ($r['use_html'] and $this->caches['group_cache'][$r['poster_group_id']]['g_dohtml'] and $r['post_htmlstate']) ? 1 : 0;
                 IPSText::getTextClass('bbcode')->parse_nl2br = $r['post_htmlstate'] == 2 ? 1 : 0;
                 IPSText::getTextClass('bbcode')->parse_bbcode = $r['use_ibc'];
                 IPSText::getTextClass('bbcode')->parsing_section = 'topics';
                 IPSText::getTextClass('bbcode')->parsing_mgroup = $r['poster_group_id'];
                 IPSText::getTextClass('bbcode')->parsing_mgroup_others = $r['poster_group_others'];
                 $r['content'] = IPSText::getTextClass('bbcode')->preDisplayParse($r['content']);
                 $r['content'] = IPSText::getTextClass('bbcode')->memberViewImages($r['content']);
                 $r = IPSMember::buildDisplayData($r);
                 $content[] = $r;
             }
             break;
         case 'replies':
             $this->DB->build(array('select' => 'p.*', 'from' => array('posts' => 'p'), 'where' => implode(' AND ', $where), 'order' => $order, 'limit' => array($config['offset_a'], $config['offset_b']), 'add_join' => array(array('select' => 't.*, t.title as topic_title', 'from' => array('topics' => 't'), 'where' => 't.tid=p.topic_id', 'type' => 'left'), array('select' => 'f.*, f.id as fid', 'from' => array('forums' => 'f'), 'where' => 'f.id=t.forum_id', 'type' => 'left'), array('select' => 'm.*, m.member_id as mid', 'from' => array('members' => 'm'), 'where' => 'm.member_id=p.author_id', 'type' => 'left'), array('select' => 'pp.*', 'from' => array('profile_portal' => 'pp'), 'where' => 'pp.pp_member_id=m.member_id', 'type' => 'left'), array('select' => 'pf.*', 'from' => array('pfields_content' => 'pf'), 'where' => 'pf.member_id=m.member_id', 'type' => 'left'), array('select' => 's.*', 'from' => array('sessions' => 's'), 'where' => 's.member_id=m.member_id', 'type' => 'left'))));
             $outer = $this->DB->execute();
             while ($r = $this->DB->fetch($outer)) {
                 //-----------------------------------------
                 // Normalization
                 //-----------------------------------------
                 $r['title'] = $r['topic_title'];
                 $r['member_id'] = $r['mid'];
                 $r['forum_id'] = $r['fid'];
                 $r['url'] = $this->registry->output->buildSEOUrl($this->settings['board_url'] . '/index.php?showtopic=' . $r['tid'] . '&amp;view=findpost&amp;p=' . $r['pid'], 'none', $r['title_seo'], 'showtopic');
                 $r['date'] = $r['post_date'];
                 $r['content'] = $r['post'];
                 IPSText::getTextClass('bbcode')->parse_smilies = $r['use_emo'];
                 IPSText::getTextClass('bbcode')->parse_html = ($r['use_html'] and $this->caches['group_cache'][$r['member_group_id']]['g_dohtml'] and $r['post_htmlstate']) ? 1 : 0;
                 IPSText::getTextClass('bbcode')->parse_nl2br = $r['post_htmlstate'] == 2 ? 1 : 0;
                 IPSText::getTextClass('bbcode')->parse_bbcode = $r['use_ibc'];
                 IPSText::getTextClass('bbcode')->parsing_section = 'topics';
                 IPSText::getTextClass('bbcode')->parsing_mgroup = $r['member_group_id'];
                 IPSText::getTextClass('bbcode')->parsing_mgroup_others = $r['mgroup_others'];
                 $r['content'] = IPSText::getTextClass('bbcode')->preDisplayParse($r['content']);
                 $r['content'] = IPSText::getTextClass('bbcode')->memberViewImages($r['content']);
                 $r = IPSMember::buildDisplayData($r);
                 $content[] = $r;
             }
             break;
         case 'forums':
             $this->DB->build(array('select' => 'f.*, f.name as fname, f.id as fid', 'from' => array('forums' => 'f'), 'where' => implode(' AND ', $where), 'order' => $order, 'limit' => array($config['offset_a'], $config['offset_b']), 'add_join' => array(array('select' => 'm.*, m.member_id as mid', 'from' => array('members' => 'm'), 'where' => 'm.member_id=f.last_poster_id', 'type' => 'left'), array('select' => 'pp.*', 'from' => array('profile_portal' => 'pp'), 'where' => 'pp.pp_member_id=m.member_id', 'type' => 'left'), array('select' => 'pf.*', 'from' => array('pfields_content' => 'pf'), 'where' => 'pf.member_id=m.member_id', 'type' => 'left'), array('select' => 's.*', 'from' => array('sessions' => 's'), 'where' => 's.member_id=m.member_id', 'type' => 'left'))));
             $outer = $this->DB->execute();
             while ($r = $this->DB->fetch($outer)) {
                 //-----------------------------------------
                 // Normalization
                 //-----------------------------------------
                 $r['member_id'] = $r['mid'];
                 $r['forum_id'] = $r['fid'];
                 $r['url'] = $this->registry->output->buildSEOUrl($this->settings['board_url'] . '/index.php?showforum=' . $r['forum_id'], 'none', $r['name_seo'], 'showforum');
                 $r['title'] = $r['fname'];
                 $r['date'] = $r['joined'];
                 $r['content'] = $r['pp_about_me'];
                 $r = IPSMember::buildDisplayData($r);
                 $r['id'] = $r['forum_id'];
                 $content[] = $r;
             }
             break;
     }
     //-----------------------------------------
     // Return formatted content
     //-----------------------------------------
     $feedConfig = $this->returnFeedInfo();
     $templateBit = $feedConfig['templateBit'] . '_' . $block['block_id'];
     if ($config['hide_empty'] and !count($content)) {
         return '';
     }
     return $this->registry->output->getTemplate('ccs')->{$templateBit}($block['block_name'], $content);
 }