/**
  * Fetch the topic participants
  *
  * @access	public
  * @param	int			Topic ID
  * @param	boolean		Load and parse member data (TRUE for yes, FALSE for no)
  * @return	array 		Array of member data indexed by member ID
  */
 public function fetchTopicParticipants($topicID, $parseThem = FALSE)
 {
     //-----------------------------------------
     // INIT
     //-----------------------------------------
     $memberData = array();
     $remapData = array();
     //-----------------------------------------
     // Grab 'em
     //-----------------------------------------
     $this->DB->build(array('select' => '*', 'from' => 'message_topic_user_map', 'where' => 'map_topic_id=' . intval($topicID)));
     $this->DB->execute();
     while ($row = $this->DB->fetch()) {
         $remapData[$row['map_user_id']] = $row;
     }
     if (!count($remapData)) {
         return array();
     }
     /* Parse 'em? */
     if ($parseThem === TRUE) {
         /* Grab member data */
         $memberData = IPSMember::load(array_keys($remapData), 'all');
         foreach ($memberData as $id => $data) {
             $data['_canBeBlocked'] = IPSMember::isIgnorable($data['member_group_id'], $data['mgroup_others']);
             $memberData[$id] = IPSMember::buildDisplayData($data, array('__all__' => 1));
             $memberData[$id] = array_merge($memberData[$id], $remapData[$id]);
         }
         $remapData = $memberData;
     }
     return $remapData;
 }
コード例 #2
0
 function __f__880e7343856e0a3cb02c18f131a74bdb($topic, $replies, $members, $jump = "")
 {
     $_ips___x_retval = '';
     $__iteratorCount = 0;
     foreach ($replies as $msg_id => $msg) {
         $__iteratorCount++;
         $_ips___x_retval .= "\r\n\t\t\t<a id='msg{$msg['msg_id']}'></a>\r\n\t\t\t<div class='post_block first hentry' id='post_id_{$msg['msg_id']}'>\r\n\t\t\t\t<div class='post_wrap'>\r\n\t\t\t\t\t" . ($members[$msg['msg_author_id']]['member_id'] ? "\r\n\t\t\t\t\t\t<h3 class='row2'>\r\n\t\t\t\t\t" : "\r\n\t\t\t\t\t\t<h3 class='guest row2'>\r\n\t\t\t\t\t") . "\r\n\t\t\t\t\t\t\t" . ($members[$msg['msg_author_id']]['member_id'] ? "\r\n\t\t\t\t\t\t\t\t<span class=\"author vcard\">" . (method_exists($this->registry->getClass('output')->getTemplate('global'), 'userHoverCard') ? $this->registry->getClass('output')->getTemplate('global')->userHoverCard($members[$msg['msg_author_id']]) : '') . "</span>\r\n\t\t\t\t\t\t\t" : "\r\n\t\t\t\t\t\t\t\t{$members[$msg['msg_author_id']]['members_display_name']}\r\n\t\t\t\t\t\t\t") . "\r\n\t\t\t\t\t\t\t" . ($msg['_ip_address'] != '' ? "<span class='ip right ipsType_small'>({$this->lang->words['ip']}:\r\n\t\t\t\t\t\t\t\t" . ($members[$msg['msg_author_id']]['g_access_cp'] ? "\r\n\t\t\t\t\t\t\t\t\t<em>{$this->lang->words['ip_private']}</em>\r\n\t\t\t\t\t\t\t\t" : "" . ($this->memberData['g_is_supmod'] ? "<a href=\"" . $this->registry->getClass('output')->formatUrl($this->registry->getClass('output')->buildUrl("app=core&amp;module=modcp&amp;fromapp=members&amp;tab=iplookup&amp;ip={$msg['_ip_address']}", "public", ''), "", "") . "\" title='{$this->lang->words['find_info_about_ip']}'>{$msg['_ip_address']}</a>" : "{$msg['_ip_address']}") . "") . "\r\n\t\t\t\t\t\t\t\t)</span>" : "") . "\r\n\t\t\t\t\t\t</h3>\r\n\t\t\t\t\t<div class='author_info'>\r\n\t\t\t\t\t\t" . (method_exists($this->registry->getClass('output')->getTemplate('global'), 'userInfoPane') ? $this->registry->getClass('output')->getTemplate('global')->userInfoPane($members[$msg['msg_author_id']], $msg_id, array()) : '') . "\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class='post_body'>\r\n\t\t\t\t\t\t<p class='posted_info'>{$this->lang->words['pc_sent']} " . IPSText::htmlspecialchars($this->registry->getClass('class_localization')->getDate($msg['msg_date'], "long", 0)) . "</p>\r\n\t\t\t\t\t\t<div class='post entry-content'>\r\n\t\t\t\t\t\t\t{$msg['msg_post']}\r\n\t\t\t\t\t\t\t{$msg['attachmentHtml']}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t" . (($this->memberData['view_sigs'] and $members[$msg['msg_author_id']]['signature']) ? "\r\n\t\t\t\t\t\t\t" . (method_exists($this->registry->getClass('output')->getTemplate('global'), 'signature_separator') ? $this->registry->getClass('output')->getTemplate('global')->signature_separator($members[$msg['msg_author_id']]['signature'], $msg['msg_author_id'], IPSMember::isIgnorable($members[$msg['msg_author_id']]['member_group_id'], $members[$msg['msg_author_id']]['mgroup_others'])) : '') . "\r\n\t\t\t\t\t\t" : "") . "\r\n\t\t\t\t\t\t<ul class='post_controls clearfix clear'>\r\n\t\t\t\t\t\t\t" . (($topic['_canReply'] and empty($topic['_everyoneElseHasLeft'])) ? "\r\n\t\t\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t\t\t<a class='ipsButton_secondary' href=\"" . $this->registry->getClass('output')->formatUrl($this->registry->getClass('output')->buildUrl("module=messaging&amp;section=send&amp;do=replyForm&amp;topicID={$topic['mt_id']}&amp;msgID={$msg['msg_id']}", "publicWithApp", ''), "", "") . "\" title=\"{$this->lang->words['tt_reply_to_post']}\">{$this->lang->words['pc_reply']}</a>\r\n\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t" : "") . "\r\n\t\t\t\t\t\t\t" . (($topic['_canReport'] and $this->memberData['member_id']) ? "\r\n\t\t\t\t\t\t\t\t<li class='report'>\r\n\t\t\t\t\t\t\t\t\t<a href='" . $this->registry->getClass('output')->formatUrl($this->registry->getClass('output')->buildUrl("app=core&amp;module=reports&amp;rcom=messages&amp;topicID={$this->request['topicID']}&amp;st={$this->request['st']}&amp;msg={$msg['msg_id']}", "public", ''), "", "") . "'>{$this->lang->words['pc_report']}</a>\r\n\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t" : "") . "\r\n\t\t\t\t\t\t\t" . ($msg['_canEdit'] === TRUE ? "\r\n\t\t\t\t\t\t\t\t<li class='post_edit' id='edit_post_{$msg['msg_id']}'>\r\n\t\t\t\t\t\t\t\t\t<a href='" . $this->registry->getClass('output')->formatUrl($this->registry->getClass('output')->buildUrl("module=messaging&amp;section=send&amp;do=editMessage&amp;topicID={$topic['mt_id']}&amp;msgID={$msg['msg_id']}", "publicWithApp", ''), "", "") . "' title='{$this->lang->words['edit_this_post']}'>{$this->lang->words['pc_edit']}</a>\r\n\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t" : "") . "\r\n\t\t\t\t\t\t\t" . ($msg['_canDelete'] === TRUE && $msg['msg_is_first_post'] != 1 ? "\r\n\t\t\t\t\t\t\t\t<li class='post_del' id='del_post_{$msg['msg_id']}'>\r\n\t\t\t\t\t\t\t\t\t<a href='" . $this->registry->getClass('output')->formatUrl($this->registry->getClass('output')->buildUrl("module=messaging&amp;section=send&amp;do=deleteReply&amp;topicID={$topic['mt_id']}&amp;msgID={$msg['msg_id']}&amp;authKey={$this->member->form_hash}", "publicWithApp", ''), "", "") . "' title='{$this->lang->words['delete_this_post']}' class='delete_post'>{$this->lang->words['pc_delete']}</a>\r\n\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t" : "") . "\r\n\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\r\n";
     }
     $_ips___x_retval .= '';
     unset($__iteratorCount);
     return $_ips___x_retval;
 }
コード例 #3
0
 /**
  * Builds an array of post data for output
  *
  * @param	array	$row	Array of post data
  * @return	array
  */
 public function parsePost(array $post)
 {
     /* Init */
     $topicData = $this->getTopicData();
     $forumData = $this->registry->getClass('class_forums')->getForumById($topicData['forum_id']);
     $permissionData = $this->getPermissionData();
     /* Start memory debug */
     $_NOW = IPSDebug::getMemoryDebugFlag();
     $poster = array();
     /* Bitwise options */
     $_tmp = IPSBWOptions::thaw($post['post_bwoptions'], 'posts', 'forums');
     if (count($_tmp)) {
         foreach ($_tmp as $k => $v) {
             $post[$k] = $v;
         }
     }
     /* Is this a member? */
     if ($post['author_id'] != 0) {
         $poster = $this->parseMember($post);
     } else {
         /* Sort out guest */
         $post['author_name'] = $this->settings['guest_name_pre'] . $post['author_name'] . $this->settings['guest_name_suf'];
         $poster = IPSMember::setUpGuest($post['author_name']);
         $poster['members_display_name'] = $post['author_name'];
         $poster['_members_display_name'] = $post['author_name'];
         $poster['custom_fields'] = "";
         $poster['warn_img'] = "";
         $poster = IPSMember::buildProfilePhoto($poster);
     }
     /* Memory debug */
     IPSDebug::setMemoryDebugFlag("PID: " . $post['pid'] . " - Member Parsed", $_NOW);
     /* Update permission */
     $this->registry->getClass('class_forums')->setMemberData($this->getMemberData());
     $permissionData['softDelete'] = $this->registry->getClass('class_forums')->canSoftDeletePosts($topicData['forum_id'], $post);
     /* Soft delete */
     $post['_softDelete'] = $post['pid'] != $topicData['topic_firstpost'] ? $permissionData['softDelete'] : FALSE;
     $post['_softDeleteRestore'] = $permissionData['softDeleteRestore'];
     $post['_softDeleteSee'] = $permissionData['softDeleteSee'];
     $post['_softDeleteReason'] = $permissionData['softDeleteReason'];
     $post['_softDeleteContent'] = $permissionData['softDeleteContent'];
     $post['_isVisible'] = $this->registry->getClass('class_forums')->fetchHiddenType($post) == 'visible' ? true : false;
     $post['_isHidden'] = $this->registry->getClass('class_forums')->fetchHiddenType($post) == 'hidden' ? true : false;
     $post['_isDeleted'] = $this->registry->getClass('class_forums')->fetchHiddenType($post) == 'sdelete' ? true : false;
     /* Answered post */
     try {
         $post['_isMarkedAnswered'] = $this->postIsAnswer($post, $topicData) ? true : false;
     } catch (Exception $e) {
         $post['_isMarkedAnswered'] = false;
     }
     $post['_canMarkUnanswered'] = $post['_isMarkedAnswered'] === true && $this->canUnanswerTopic($topicData) ? true : false;
     $post['_canAnswer'] = $post['_isMarkedAnswered'] === false && $this->canAnswerTopic($topicData) ? true : false;
     $post['PermalinkUrlBit'] = '';
     /* Queued */
     if ($topicData['topic_firstpost'] == $post['pid'] and ($post['_isHidden'] or $topicData['_isHidden'])) {
         $post['queued'] = 1;
         $post['_isHidden'] = true;
     }
     if ($topicData['topic_queuedposts'] || $topicData['topic_deleted_posts']) {
         if ($topicData['topic_queuedposts'] && $topicData['Perms']['canQueuePosts']) {
             /* We have hidden data that is viewable */
             $post['PermalinkUrlBit'] = '&amp;p=' . $post['pid'];
         }
         if ($topicData['topic_deleted_posts'] && $post['_softDeleteSee']) {
             /* We have hidden data that is viewable */
             $post['PermalinkUrlBit'] = '&amp;p=' . $post['pid'];
         }
     }
     /* Edited stuff */
     $post['edit_by'] = "";
     if ($post['append_edit'] == 1 and $post['edit_time'] != "" and $post['edit_name'] != "") {
         $e_time = $this->registry->class_localization->getDate($post['edit_time'], 'LONG');
         $post['edit_by'] = sprintf($this->lang->words['edited_by'], $post['edit_name'], $e_time);
     }
     /* Now parse the post */
     if (!isset($post['cache_content']) or !$post['cache_content']) {
         $_NOW2 = IPSDebug::getMemoryDebugFlag();
         /* Grab the parser file */
         if ($this->_parser === null) {
             /* Load parser */
             $classToLoad = IPSLib::loadLibrary(IPS_ROOT_PATH . 'sources/classes/text/parser.php', 'classes_text_parser');
             $this->_parser = new $classToLoad();
         }
         /* set up parser */
         $this->_parser->set(array('memberData' => array('member_id' => $post['member_id'], 'member_group_id' => $post['member_group_id'], 'mgroup_others' => $post['mgroup_others']), 'parseBBCode' => $forumData['use_ibc'], 'parseHtml' => ($forumData['use_html'] and $poster['g_dohtml'] and $post['post_htmlstate']) ? 1 : 0, 'parseEmoticons' => $post['use_emo'], 'parseArea' => 'topics'));
         $post['post'] = $this->_parser->display($post['post']);
         IPSDebug::setMemoryDebugFlag("topics::parsePostRow - bbcode parse - Completed", $_NOW2);
         IPSContentCache::update($post['pid'], 'post', $post['post']);
     } else {
         $post['post'] = '<!--cached-' . gmdate('r', $post['cache_updated']) . '-->' . $post['cache_content'];
     }
     /* Buttons */
     $post['_can_delete'] = $post['pid'] != $topicData['topic_firstpost'] ? $this->canDeletePost($post) : FALSE;
     $post['_can_edit'] = $this->canEditPost($post);
     $post['_show_ip'] = $this->canSeeIp();
     $post['_canReply'] = $this->getReplyStatus() == 'reply' ? true : false;
     /* Signatures */
     $post['signature'] = "";
     if (!empty($poster['signature'])) {
         if ($post['use_sig'] == 1) {
             if (!$this->memberData['view_sigs'] || $poster['author_id'] && $this->memberData['member_id'] && !empty($this->member->ignored_users[$poster['author_id']]['ignore_signatures']) && IPSMember::isIgnorable($poster['member_group_id'], $poster['mgroup_others'])) {
                 $post['signature'] = '<!--signature.hidden.' . $post['pid'] . '-->';
             } else {
                 $post['signature'] = $this->registry->output->getTemplate('global')->signature_separator($poster['signature'], $poster['author_id'], IPSMember::isIgnorable($poster['member_group_id'], $poster['mgroup_others']));
             }
         }
     }
     $post['forum_id'] = $topicData['forum_id'];
     /* Reputation */
     if ($this->settings['reputation_enabled'] and !$this->isArchived($topicData)) {
         /* Load the class */
         if (!$this->registry->isClassLoaded('repCache')) {
             $classToLoad = IPSLib::loadLibrary(IPS_ROOT_PATH . 'sources/classes/class_reputation_cache.php', 'classReputationCache');
             $this->registry->setClass('repCache', new $classToLoad());
         }
         $this->memberData['_members_cache']['rep_filter'] = isset($this->memberData['_members_cache']['rep_filter']) ? $this->memberData['_members_cache']['rep_filter'] : '*';
         $post['pp_reputation_points'] = $post['pp_reputation_points'] ? $post['pp_reputation_points'] : 0;
         $post['has_given_rep'] = $post['has_given_rep'] ? $post['has_given_rep'] : 0;
         $post['rep_points'] = $this->registry->repCache->getRepPoints(array('app' => 'forums', 'type' => 'pid', 'type_id' => $post['pid'], 'rep_points' => $post['rep_points']));
         $post['_repignored'] = 0;
         if (!($this->settings['reputation_protected_groups'] && in_array($this->memberData['member_group_id'], explode(',', $this->settings['reputation_protected_groups']))) && $this->memberData['_members_cache']['rep_filter'] !== '*') {
             if ($this->settings['reputation_show_content'] && $post['rep_points'] < $this->memberData['_members_cache']['rep_filter'] && $this->settings['reputation_point_types'] != 'like') {
                 $post['_repignored'] = 1;
             }
         }
         if ($this->registry->repCache->isLikeMode()) {
             $post['like'] = $this->registry->repCache->getLikeFormatted(array('app' => 'forums', 'type' => 'pid', 'id' => $post['pid'], 'rep_like_cache' => $post['rep_like_cache']));
         }
     }
     /* Ignore stuff */
     $post['_ignored'] = 0;
     if ($post['author_id'] && isset($topicData['ignoredUsers']) && is_array($topicData['ignoredUsers']) && count($topicData['ignoredUsers'])) {
         if (in_array($post['author_id'], $topicData['ignoredUsers'])) {
             if (!strstr($this->settings['cannot_ignore_groups'], ',' . $post['member_group_id'] . ',')) {
                 $post['_ignored'] = 1;
             }
         }
     }
     /* AD Code */
     $post['_adCode'] = '';
     if ($this->registry->getClass('IPSAdCode')->userCanViewAds() && !$this->getTopicData('adCodeSet') && !IPS_IS_AJAX) {
         $post['_adCode'] = $this->registry->getClass('IPSAdCode')->getAdCode('ad_code_topic_view_code');
         if ($post['_adCode']) {
             $this->setTopicData('adCodeSet', true);
         }
     }
     /* Memory debug */
     IPSDebug::setMemoryDebugFlag("PID: " . $post['pid'] . " - Completed", $_NOW);
     /* Excerpt */
     $post['_excerpt'] = IPSText::truncate(str_replace(array('<br />', '<br>', "\n", '</p>', '<p>'), ' ', $post['post']), 500);
     return array('post' => $post, 'author' => $poster);
 }