/** * 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&module=images&section=viewimage&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&module=images&section=viewimage&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&module=cats&do=sc&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&module=user&user='******'member_id'] . '&do=view_album&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'] . '&view=findpost&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); }