예제 #1
0
 function getNinjaBoardPosts($params)
 {
     if (!file_exists(JPATH_SITE . '/components/com_ninjaboard/ninjaboard.php')) {
         return;
     }
     //connect to database
     $db =& JFactory::getDBO();
     //get current user
     $user =& JFactory::getUser();
     //load module parameters & set defaults
     $num_posts = $params->get('num_posts', 1);
     //if $num_posts isn't set or set to zero, then set it to one
     if ($num_posts <= 0) {
         $num_posts = 1;
     }
     /*        $show_public = $params->get('show_public', 1);
             $show_regualar = $params->get('show_regular', 0);
             $show_special = $params->get('show_special', 0);*/
     $only_forums = $params->get('only_forums', 0);
     $not_forums = $params->get('not_forums', 0);
     $child_forums = $params->get('child_forums', 1);
     $which_posts = $params->get('which_posts', 0);
     $order_by = $params->get('order_by', 0);
     $show_recent = $params->get('show_recent', '720');
     $show_unread = $params->get('show_unread', 1);
     $unread_image = $params->get('unread_image', 1);
     $subject_max = $params->get('subject_max', 50);
     $message_max = $params->get('message_max', 200);
     $name_link = $params->get('name_link', 1);
     $item_format = $params->get('item_format', '%R %S<br /><small>%N %D</small>');
     $tooltip_format = $params->get('tooltip_format', '%F > %L');
     $date_format = $params->get('date_format', 'j.n.Y G:i');
     $avatar_w_h = $params->get('avatar_w_h', 'height');
     $avatar_size = $params->get('avatar_size', '50');
     $name_link = $params->get('name_link', 'nb');
     $url_view = JRequest::getVar('view');
     $url_option = JRequest::getVar('option');
     //get current forum id
     if ($url_option == 'com_ninjaboard') {
         $url_id = JRequest::getInt('id', '');
     }
     //get menu id
     $itemId = modNinjaBoardRelatedHelper::getItemId();
     //get com menu id
     $comItemid = modNinjaBoardRelatedHelper::getComItemid($name_link);
     //create new post indicator
     //if user is logged in
     if ($user->id != 0) {
         //get last session from sessions table by user id
         $db->setQuery("SELECT time FROM #__session WHERE userid = {$user->id} ORDER BY time ASC LIMIT 1");
         $session = $db->loadResult();
         //if user has visited in last year
         if ($session > time() - 1314000) {
             $lasttime = $session;
             //limit to 1 year, if user hasn't visited in over a year
         } else {
             $lasttime = time() - 1314000;
         }
         //if user isn't logged or is guest
     } else {
         $lasttime = 0;
     }
     if ($lasttime > 0) {
         //logged in user
         $sql_new = ", (unix_timestamp(p.created_time) > " . $lasttime . ") AS show_unread";
     } else {
         //user isn't logged or is guest
         $sql_new = ", 1 AS show_unread";
     }
     //how recent should shown posts be
     $sql_time = '';
     if ($show_recent > 0) {
         $recent_time = time() - $show_recent * 3600;
         $sql_time = 'AND unix_timestamp(p.created_time) >= ' . $recent_time;
     }
     // access levels
     /*        $i = $show_public + 2 * $show_regualar + 4 * $show_special;
             switch ($i)
             {
                 case 0:
                     $sql_access = '';
                     break;
                 case 1:
                     $sql_access = 'AND u.gid in (0,1)';
                     break;
                 case 2:
                     $sql_access = 'AND u.gid in (-1,18)';
                     break;
                 case 3:
                     $sql_access = 'AND u.gid in (0,1,-1,18)';
                     break;
                 case 4:
                     $sql_access = 'AND u.gid in (19,20,21)';
                     break;
                 case 5:
                     $sql_access = 'AND u.gid in (0,1,19,20,21)';
                     break;
                 case 6:
                     $sql_access = 'AND u.gid in (-1,18,19,20,21)';
                     break;
                 default:
                     $sql_access = '';
             }
     */
     //get posts in selected categories
     $sql_forum = '';
     if ($url_option == "com_ninjaboard" && $url_view == "forum") {
         $current_forums = $url_id;
     }
     if ($url_option == "com_ninjaboard" && $url_view == "topic") {
         $current_forums = modNinjaBoardRelatedHelper::getForumId($url_id);
     }
     if (!empty($current_forums) && empty($only_forums)) {
         $include_forums = $current_forums;
     } elseif (empty($current_forums) && !empty($only_forums)) {
         $include_forums = $only_forums;
     } elseif (!empty($current_forums) && !empty($only_forums)) {
         $include_forums = array_merge((array) $current_forums, (array) $only_forums);
     }
     $include_forums = '';
     if ($include_forums) {
         $forums = $include_forums;
         foreach ($forums as $i => $forum) {
             $forums[$i] = (int) $forum;
             if ($forum == 0) {
                 unset($forums[$i]);
             }
         }
         $include_forums = implode(',', $forums);
         if ($include_forums) {
             if ($forums) {
                 $sql_forum = " AND (f.ninjaboard_forum_id IN (" . $include_forums . ") OR f.parent_id IN (" . $include_forums . "))";
             } else {
                 $sql_forum = " AND f.ninjaboard_forum_id IN (" . $include_forums . ")";
             }
         }
     }
     //get posts not in selected categories
     if ($not_forums) {
         $forums = $not_forums;
         foreach ($forums as $i => $forum) {
             $forums[$i] = (int) $forum;
             if ($forum == 0) {
                 unset($forums[$i]);
             }
         }
         $not_forums = implode(',', $forums);
         if ($not_forums) {
             if ($forums) {
                 $sql_forum .= " AND (f.ninjaboard_forum_id NOT IN (" . $not_forums . ") AND f.parent_id NOT IN (" . $not_forums . "))";
             } else {
                 $sql_forum .= " AND f.ninjaboard_forum_id NOT IN (" . $not_forums . ")";
             }
         }
     }
     //post type
     $post_type = "Left Join #__ninjaboard_topics AS t ON p.ninjaboard_topic_id = t.ninjaboard_topic_id";
     if ($which_posts = 1) {
         $post_type = "Left Join #__ninjaboard_topics AS t ON p.ninjaboard_post_id = t.first_post_id";
     }
     if ($which_posts = 2) {
         $post_type = "Left Join #__ninjaboard_topics AS t ON p.ninjaboard_post_id = t.last_post_id";
     }
     switch ($name_link) {
         //get avatar from cbe profiler
         case 'cbe':
             $select = 'avt.`avatar` as custom_avatar, avt.`user_id`, ';
             $join = 'LEFT JOIN #__cbe avt ON p.`created_user_id`=avt.`user_id` ';
             $and = 'AND avt.`avatarapproved`=1 ';
             break;
             //get avatar from cb profiler
         //get avatar from cb profiler
         case 'cb':
             $select = 'avt.`avatar` as custom_avatar, avt.`user_id`, ';
             $join = 'LEFT JOIN #__comprofiler avt ON p.`created_user_id`=avt.`user_id` ';
             $and = 'AND avt.`avatarapproved`=1 ';
             break;
             //get avatar from jomsocial
         //get avatar from jomsocial
         case 'js':
             $select = 'avt.`avatar` as custom_avatar, avt.`userid`, ';
             $join = 'LEFT JOIN #__community_users avt ON p.`created_user_id`=avt.`userid` ';
             $and = '';
             break;
             //get avatar from ninjaboard
         //get avatar from ninjaboard
         case 'nb':
             $select = 'avt.`avatar` as custom_avatar, avt.`ninjaboard_person_id`, ';
             $join = 'LEFT JOIN #__ninjaboard_people avt ON p.`created_user_id`=avt.`ninjaboard_person_id` ';
             $and = '';
             break;
             //default
         //default
         default:
             $select = '';
             $join = '';
             $and = '';
             break;
     }
     $query = "\n        SELECT\n        " . $select . "\n\t\tu.username as author_name,  \n\t\tu.id,\n        p.locked,\n        p.`text` as message,\n        p.subject as subject,\n\t\tp.created_time as created,\n\t\tp.modified as modified,\n        p.ninjaboard_post_id as post_id,\n        p.ninjaboard_topic_id,\n        p.created_user_id as userid,\n        p.guest_name as name,\n\t\tt.hits as topic_hits,\n        t.ninjaboard_topic_id as topic_id,\n        t.forum_id,\n        f.title as forumname,\n        f.ninjaboard_forum_id,\n        f.enabled,\n        f.parent_id as parent_id\n        " . $sql_new . "\n        FROM \n        #__ninjaboard_posts AS p\n        " . $post_type . "\n        Left Join #__ninjaboard_forums AS f ON t.forum_id = f.ninjaboard_forum_id\n\t\tLeft Join #__users AS u ON p.created_user_id = u.id\n        " . $join . "\n        WHERE\n        p.enabled = '1' AND\n        f.enabled = '1' \n        " . $sql_time . "\t\t\n\t\t" . $sql_forum . "\n\t\t" . $and . "\n\t\tGROUP BY p.subject \n\t\tORDER BY p.created_time DESC\t\t\n\t\tLIMIT 0," . $num_posts;
     $db->setQuery($query);
     $rows = $db->loadObjectList();
     //$countid = count($rows);
     if (!count($rows)) {
         return;
     }
     $items = array();
     foreach ($rows as $row) {
         $item = '';
         //lets build the avatar
         //set which avatar file retrieved from the db to use
         $avatar_file = $name_link == 'default' ? $row->avatar_file : $row->custom_avatar;
         //set $avatar_file for tmpl use
         $item->avatar_file = $avatar_file;
         //get paths and default files for avatars
         switch ($name_link) {
             //get avatar from cbe profiler
             case 'cbe':
                 //$avatar_file = (strpos($avatar_file, 'gallery/') === false) ? 'tn' . $avatar_file : $avatar_file;
                 if ($avatar_file) {
                     $avatar_path = JURI::base() . 'images/cbe/' . $avatar_file;
                 } else {
                     $avatar_path = JURI::base() . 'components/com_cbe/images/english/nophoto.png';
                 }
                 $user_link = JURI::base() . 'index.php?option=com_cbe&task=userProfile&user='******'<a href="' . $user_link . $row->userid . '&Itemid=' . $comItemid . '"><img name="' . $row->author_name . '" src="' . $avatar_path . '" ' . $avatar_w_h . '="' . str_replace('px', '', $avatar_size) . '" alt="" id="nb-posts-avatar" /></a>';
                 break;
                 //get avatar from cb profiler
             //get avatar from cb profiler
             case 'cb':
                 //$avatar_file = (strpos($avatar_file, 'gallery/') === false) ? 'tn' . $avatar_file : $avatar_file;
                 if ($avatar_file) {
                     $avatar_path = JURI::base() . 'images/comprofiler/' . $avatar_file;
                 } else {
                     $avatar_path = JURI::base() . 'components/com_comprofiler/plugin/templates/luna/images/avatar/tnnophoto_n.png';
                 }
                 $user_link = JURI::base() . 'index.php?option=com_comprofiler&task=userProfile&user='******'<a href="' . $user_link . $row->userid . '&Itemid=' . $comItemid . '"><img name="' . $row->author_name . '" src="' . $avatar_path . '" ' . $avatar_w_h . '="' . str_replace('px', '', $avatar_size) . '" alt="" id="nb-posts-avatar" /></a>';
                 break;
                 //get avatar from jomsocial
             //get avatar from jomsocial
             case 'js':
                 if ($avatar_file) {
                     $avatar_path = JURI::base() . $avatar_file;
                 } else {
                     $avatar_path = JURI::base() . 'components/com_community/assets/default_thumb.jpg';
                 }
                 $user_link = JURI::base() . 'index.php?option=com_community&view=profile&userid=';
                 $item->avatar = '<a href="' . $user_link . $row->userid . '&Itemid=' . $comItemid . '"><img name="' . $row->author_name . '" src="' . $avatar_path . '" ' . $avatar_w_h . '="' . str_replace('px', '', $avatar_size) . '" alt="" id="nb-posts-avatar" /></a>';
                 break;
                 //get avatar from ninjaboard
             //get avatar from ninjaboard
             case 'nb':
             case 'default':
                 if ($avatar_file) {
                     $avatar_path = JURI::base() . $avatar_file;
                 } else {
                     $avatar_path = JURI::base() . 'media/com_ninjaboard/images/avatar.png';
                 }
                 $user_link = JURI::base() . 'index.php?option=com_ninjaboard&view=person&id=' . $row->userid . '&Itemid=' . $comItemid;
                 $item->avatar = '<a href="' . $user_link . '"><img name="' . $row->name . '" src="' . $avatar_path . '" ' . $avatar_w_h . '="' . str_replace('px', '', $avatar_size) . '" alt="" id="nb-posts-avatar" /></a>';
                 break;
         }
         $item->subject = stripslashes($row->subject) ? stripslashes($row->subject) : '';
         $item->subject_max = JString::strlen($item->subject) > $subject_max ? JString::substr($item->subject, 0, $subject_max - 4) . '...' : $item->subject;
         $row->message = modNinjaBoardRelatedHelper::parseBBcode($row->message);
         $item->message = stripslashes($row->message) ? stripslashes($row->message) : '';
         $item->message_max = JString::strlen($item->message) > $message_max ? JString::substr($item->message, 0, $message_max - 4) . '...' : $item->message;
         $item->postname = $row->userid > 0 ? "<a href='" . $user_link . "' title='" . $row->author_name . "'>" . $row->author_name . "</a>" : JText::_('GUEST');
         $item->name = $row->userid > 0 ? $row->author_name : JText::_('GUEST');
         $item->postlink_s = "<a href='" . JURI::base() . 'index.php?option=com_ninjaboard&view=topic&id=' . $row->topic_id . '&Itemid=' . $itemId . '#post' . $row->post_id . "' title='" . $item->subject_max . "'>" . $item->subject_max . "</a>";
         $item->postlink_l = "<a href='" . JURI::base() . 'index.php?option=com_ninjaboard&view=topic&id=' . $row->topic_id . '&Itemid=' . $itemId . '#post' . $row->post_id . "' title='" . $item->subject . "'>" . $item->subject . "</a>";
         $item->datetime = date($date_format, strtotime($row->created));
         $item->unreadimage = '<img src="' . JURI::base() . 'modules/mod_ninjaboard_related_posts/images/new.png" alt="new" />';
         $item->online_status = modNinjaBoardRelatedHelper::getOnlineStatus($row->userid) ? '<span id="nb-posts-online">' . JText::_('ONLINE') . '</span>' : '<span id="nb-posts-offline">' . JText::_('OFFLINE') . '</span>';
         $s = $item_format;
         $s = str_replace('%S', $item->postlink_s, $s);
         $s = str_replace('%L', $item->postlink_l, $s);
         $s = str_replace('%M', $item->message_max, $s);
         $s = str_replace('%T', $item->message, $s);
         $s = str_replace('%N', $item->postname, $s);
         $s = str_replace('%D', $item->datetime, $s);
         $s = str_replace('%H', $row->topic_hits, $s);
         $s = str_replace('%F', $row->forumname, $s);
         $s = str_replace('%I', $item->unreadimage, $s);
         $s = strpos($s, '%A') === false ? $s : str_replace('%A', $item->avatar, $s);
         $s = strpos($s, '%O') === false ? $s : str_replace('%O', $item->online_status, $s);
         $s = str_replace('title=""', '', $s);
         $item->title = $s;
         $s = $tooltip_format;
         $s = str_replace('%S', $item->subject_max, $s);
         $s = str_replace('%L', $item->subject, $s);
         $s = str_replace('%M', $item->message_max, $s);
         $s = str_replace('%T', $item->message, $s);
         $s = str_replace('%N', $item->name, $s);
         $s = str_replace('%D', date($date_format, strtotime($row->created)), $s);
         $s = str_replace('%H', $row->topic_hits, $s);
         $s = str_replace('%F', $row->forumname, $s);
         $s = str_replace('%I', $item->unreadimage, $s);
         $s = strpos($s, '%O') === false ? $s : str_replace('%O', $item->online_status, $s);
         $item->tooltip = $s;
         $items[] = $item;
     }
     return $items;
 }
require_once dirname(__FILE__) . '/helper.php';
$document =& JFactory::getDocument();
$document->addStyleSheet(JURI::base(true) . '/modules/mod_ninjaboard_related_posts/css/mod_ninjaboard_related_posts.css', 'text/css');
$document->addScript(JURI::base(true) . '/media/com_ninja/js/jquery/jquery.min.js', 'text/javascript');
$document->addScript(JURI::base(true) . '/media/com_ninja/js/jquery/jquery.tools.min.js', 'text/javascript');
//Load module parameters
$layout = $params->get('layout', 'default');
$height = $params->get('height', 200);
$width = $params->get('width', 200);
$num_cols = $params->get('num_cols', 1);
$num_posts = $params->get('num_posts', 1);
//safety measures for bad user input
//set $num_cols to at least one so we don't recieve div by zero error
if ($num_cols <= 0) {
    $num_cols = 1;
}
//set $num_posts to at least one so we don't return empty results
if ($num_posts <= 0) {
    $num_posts = 1;
}
//set $num_cols equal to $num_posts so we don't recieve results less than one
if ($num_cols > $num_posts) {
    $num_cols = $num_posts;
}
$module_id = $module->id;
//get list items
$items = modNinjaBoardRelatedHelper::getNinjaBoardPosts($params);
//if no results return
//if (!count($items)) return;
//get template
require JModuleHelper::getLayoutPath('mod_ninjaboard_related_posts', $layout);