/**
     * Gets the recent social activity for a given user.
     *
     * @param $user_name String: name of the user whose activity we want to fetch
     */
    function getActivity($user_name)
    {
        global $wgUser, $wgUserProfileDisplay, $wgScriptPath, $wgUploadPath;
        // If not enabled in site settings, don't display
        if ($wgUserProfileDisplay['activity'] == false) {
            return '';
        }
        $output = '';
        $limit = 8;
        $rel = new UserActivity($user_name, 'user', $limit);
        $rel->setActivityToggle('show_votes', 0);
        $rel->setActivityToggle('show_gifts_sent', 1);
        /**
         * Get all relationship activity
         */
        $activity = $rel->getActivityList();
        if ($activity) {
            $output .= '<div class="user-section-heading">
				<div class="user-section-title">' . wfMsg('user-recent-activity-title') . '</div>
				<div class="user-section-actions">
					<div class="action-right">
					</div>
					<div class="cleared"></div>
				</div>
			</div>
			<div class="cleared"></div>';
            $x = 1;
            if (count($activity) < $limit) {
                $style_limit = count($activity);
            } else {
                $style_limit = $limit;
            }
            foreach ($activity as $item) {
                $item_html = '';
                $title = Title::makeTitle($item['namespace'], $item['pagetitle']);
                $user_title = Title::makeTitle(NS_USER, $item['username']);
                $user_title_2 = Title::makeTitle(NS_USER, $item['comment']);
                if ($user_title_2) {
                    $user_link_2 = '<a href="' . $user_title_2->escapeFullURL() . '" rel="nofollow">' . $item['comment'] . '</a>';
                }
                $comment_url = '';
                if ($item['type'] == 'comment') {
                    $comment_url = "#comment-{$item['id']}";
                }
                $page_link = '<b><a href="' . $title->escapeFullURL() . "{$comment_url}\">" . $title->getPrefixedText() . '</a></b> ';
                $b = new UserBoard();
                // Easier than porting the time-related functions here
                $item_time = '<span class="item-small">' . wfMsg('user-time-ago', $b->getTimeAgo($item['timestamp'])) . '</span>';
                if ($x < $style_limit) {
                    $item_html .= '<div class="activity-item">
						<img src="' . $wgScriptPath . '/extensions/SocialProfile/images/' . UserActivity::getTypeIcon($item['type']) . '" alt="" border="0" />';
                } else {
                    $item_html .= '<div class="activity-item-bottom">
						<img src="' . $wgScriptPath . '/extensions/SocialProfile/images/' . UserActivity::getTypeIcon($item['type']) . '" alt="" border="0" />';
                }
                switch ($item['type']) {
                    case 'edit':
                        $item_html .= wfMsg('user-recent-activity-edit') . " {$page_link} {$item_time}\r\n\t\t\t\t\t\t\t<div class=\"item\">";
                        if ($item['comment']) {
                            $item_html .= "\"{$item['comment']}\"";
                        }
                        $item_html .= '</div>';
                        break;
                    case 'vote':
                        $item_html .= wfMsg('user-recent-activity-vote') . " {$page_link} {$item_time}";
                        break;
                    case 'comment':
                        $item_html .= wfMsg('user-recent-activity-comment') . " {$page_link} {$item_time}\r\n\t\t\t\t\t\t\t<div class=\"item\">\r\n\t\t\t\t\t\t\t\t\"{$item['comment']}\"\r\n\t\t\t\t\t\t\t</div>";
                        break;
                    case 'gift-sent':
                        $gift_image = "<img src=\"{$wgUploadPath}/awards/" . Gifts::getGiftImage($item['namespace'], 'm') . '" border="0" alt="" />';
                        $item_html .= wfMsg('user-recent-activity-gift-sent') . " {$user_link_2} {$item_time}\r\n\t\t\t\t\t\t<div class=\"item\">\r\n\t\t\t\t\t\t\t<a href=\"" . $wgScriptPath . "/index.php?title=Special:ViewGift&gift_id={$item['id']}\" rel=\"nofollow\">\r\n\t\t\t\t\t\t\t\t{$gift_image}\r\n\t\t\t\t\t\t\t\t{$item['pagetitle']}\r\n\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t</div>";
                        break;
                    case 'gift-rec':
                        $gift_image = "<img src=\"{$wgUploadPath}/awards/" . Gifts::getGiftImage($item['namespace'], 'm') . '" border="0" alt="" />';
                        $item_html .= wfMsg('user-recent-activity-gift-rec') . " {$user_link_2} {$item_time}</span>\r\n\t\t\t\t\t\t\t\t<div class=\"item\">\r\n\t\t\t\t\t\t\t\t\t<a href=\"" . $wgScriptPath . "/index.php?title=Special:ViewGift&gift_id={$item['id']}\" rel=\"nofollow\">\r\n\t\t\t\t\t\t\t\t\t\t{$gift_image}\r\n\t\t\t\t\t\t\t\t\t\t{$item["pagetitle"]}\r\n\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t</div>";
                        break;
                    case 'system_gift':
                        $gift_image = "<img src=\"{$wgUploadPath}/awards/" . SystemGifts::getGiftImage($item['namespace'], 'm') . '" border="0" alt="" />';
                        $item_html .= wfMsg('user-recent-system-gift') . " {$item_time}\r\n\t\t\t\t\t\t\t\t<div class=\"user-home-item-gift\">\r\n\t\t\t\t\t\t\t\t\t<a href=\"" . $wgScriptPath . "/index.php?title=Special:ViewSystemGift&gift_id={$item['id']}\" rel=\"nofollow\">\r\n\t\t\t\t\t\t\t\t\t\t{$gift_image}\r\n\t\t\t\t\t\t\t\t\t\t{$item['pagetitle']}\r\n\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t</div>";
                        break;
                    case 'friend':
                        $item_html .= wfMsg('user-recent-activity-friend') . " <b>{$user_link_2}</b> {$item_time}";
                        break;
                    case 'foe':
                        $item_html .= wfMsg('user-recent-activity-foe') . " <b>{$user_link_2}</b> {$item_time}";
                        break;
                    case 'system_message':
                        $item_html .= "{$item['comment']} {$item_time}";
                        break;
                    case 'user_message':
                        $item_html .= wfMsg('user-recent-activity-user-message') . " <b><a href=\"" . UserBoard::getUserBoardURL($user_title_2->getText()) . "\" rel=\"nofollow\">{$item['comment']}</a></b>  {$item_time}\r\n\t\t\t\t\t\t\t\t<div class=\"item\">\r\n\t\t\t\t\t\t\t\t\"{$item['namespace']}\"\r\n\t\t\t\t\t\t\t\t</div>";
                        break;
                }
                $item_html .= '</div>';
                if ($x <= $limit) {
                    $items_html_type['all'][] = $item_html;
                }
                $items_html_type[$item['type']][] = $item_html;
                $x++;
            }
            $by_type = '';
            foreach ($items_html_type['all'] as $item) {
                $by_type .= $item;
            }
            $output .= "<div id=\"recent-all\">{$by_type}</div>";
            $by_type = '';
            if (isset($items_html_type['edit']) && is_array($items_html_type['edit'])) {
                foreach ($items_html_type['edit'] as $item) {
                    $by_type .= $item;
                }
            }
            $by_type = '';
            if (isset($items_html_type['comment']) && is_array($items_html_type['comment'])) {
                foreach ($items_html_type['comment'] as $item) {
                    $by_type .= $item;
                }
            }
            $by_type = '';
            if (isset($items_html_type['gift-sent']) && is_array($items_html_type['gift-sent'])) {
                foreach ($items_html_type['gift-sent'] as $item) {
                    $by_type .= $item;
                }
            }
            $by_type = '';
            if (isset($items_html_type['gift-rec']) && is_array($items_html_type['gift-rec'])) {
                foreach ($items_html_type['gift-rec'] as $item) {
                    $by_type .= $item;
                }
            }
            $by_type = '';
            if (isset($items_html_type['system_gift']) && is_array($items_html_type['system_gift'])) {
                foreach ($items_html_type['system_gift'] as $item) {
                    $by_type .= $item;
                }
            }
            $by_type = '';
            if (isset($items_html_type['friend']) && is_array($items_html_type['friend'])) {
                foreach ($items_html_type['friend'] as $item) {
                    $by_type .= $item;
                }
            }
            $by_type = '';
            if (isset($items_html_type['foe']) && is_array($items_html_type['foe'])) {
                foreach ($items_html_type['foe'] as $item) {
                    $by_type .= $item;
                }
            }
            $by_type = '';
            if (isset($items_html_type['system_message']) && is_array($items_html_type['system_message'])) {
                foreach ($items_html_type['system_message'] as $item) {
                    $by_type .= $item;
                }
            }
        }
        return $output;
    }
Example #2
0
    /**
     * Gets the recent social activity for a given user.
     *
     * @param $user_name String: name of the user whose activity we want to fetch
     */
    function getEditingActivity($user_name)
    {
        global $wgUser, $wgUserProfileDisplay, $wgExtensionAssetsPath, $wgUploadPath;
        // If not enabled in site settings, don't display
        if ($wgUserProfileDisplay['activity'] == false) {
            return '';
        }
        $output = '';
        $limit = 8;
        $rel = new UserActivity($user_name, 'user', $limit);
        $rel->setActivityToggle('show_votes', 0);
        $rel->setActivityToggle('show_edits', 1);
        $rel->setActivityToggle('show_comments', 1);
        $rel->setActivityToggle('show_relationships', 0);
        $rel->setActivityToggle('show_system_gifts', 0);
        $rel->setActivityToggle('show_system_messages', 0);
        $rel->setActivityToggle('show_messages_sent', 0);
        $rel->setActivityToggle('show_user_user_follows', 0);
        $rel->setActivityToggle('show_user_site_follows', 0);
        $rel->setActivityToggle('show_user_update_status', 0);
        $rel->setActivityToggle('show_gifts_sent', 0);
        $rel->setActivityToggle('show_gifts_rec', 0);
        $rel->setActivityToggle('show_domain_creations', 1);
        $rel->setActivityToggle('show_image_uploads', 0);
        /**
         * Get all relationship activity
         */
        $activity = $rel->getActivityList();
        if ($activity) {
            $output .= '<div class="panel panel-default"><div class="user-section-heading panel-heading">
				<div class="user-section-title">' . wfMessage('user-recent-local-activity-title')->escaped() . '</div>
				<div class="user-section-actions">
					<div class="action-right">
					</div>
					<div class="cleared"></div>
				</div>
			</div>
			<div class="cleared"></div>
			<div class="panel-body">';
            $x = 1;
            if (count($activity) < $limit) {
                $style_limit = count($activity);
            } else {
                $style_limit = $limit;
            }
            foreach ($activity as $item) {
                $item_html = '';
                $title = Title::makeTitle($item['namespace'], $item['pagetitle'], '', $item['prefix']);
                $user_title = Title::makeTitle(NS_USER, $item['username']);
                $user_title_2 = Title::makeTitle(NS_USER, $item['comment']);
                if ($user_title_2) {
                    $user_link_2 = '<a href="' . htmlspecialchars($user_title_2->getFullURL()) . '" rel="nofollow">' . $item['comment'] . '</a>';
                }
                $comment_url = '';
                if ($item['type'] == 'comment') {
                    $comment_url = "#comment-{$item['id']}";
                }
                $page_link = '<b><a href="' . htmlspecialchars($title->getFullURL()) . "{$comment_url}\">" . $title->getText() . '</a></b> ';
                $b = new UserBoard();
                // Easier than porting the time-related functions here
                $item_time = '<span class="item-small">' . wfMessage('user-time-ago', $b->getTimeAgo($item['timestamp']))->escaped() . '</span>';
                if ($x < $style_limit) {
                    $item_html .= '<div class="activity-item">' . UserActivity::getTypeIcon($item['type']);
                } else {
                    $item_html .= '<div class="activity-item-bottom">' . UserActivity::getTypeIcon($item['type']);
                }
                $viewGift = SpecialPage::getTitleFor('ViewGift');
                switch ($item['type']) {
                    case 'edit':
                        $item_html .= wfMessage('user-recent-activity-edit')->escaped() . " {$page_link} {$item_time}\n\t\t\t\t\t\t\t<div class=\"item\">";
                        if ($item['comment']) {
                            $item_html .= "\"{$item['comment']}\"";
                        }
                        $item_html .= '</div>';
                        break;
                    case 'vote':
                        $item_html .= wfMessage('user-recent-activity-vote')->escaped() . " {$page_link} {$item_time}";
                        break;
                    case 'comment':
                        $item_html .= wfMessage('user-recent-activity-comment')->escaped() . " {$page_link} {$item_time}\n\t\t\t\t\t\t\t<div class=\"item\">\n\t\t\t\t\t\t\t\t\"{$item['comment']}\"\n\t\t\t\t\t\t\t</div>";
                        break;
                    case 'gift-sent':
                        $gift_image = "<img src=\"{$wgUploadPath}/awards/" . Gifts::getGiftImage($item['namespace'], 'm') . '" border="0" alt="" />';
                        $item_html .= wfMessage('user-recent-activity-gift-sent')->escaped() . " {$user_link_2} {$item_time}\n\t\t\t\t\t\t<div class=\"item\">\n\t\t\t\t\t\t\t<a href=\"" . htmlspecialchars($viewGift->getFullURL("gift_id={$item['id']}")) . "\" rel=\"nofollow\">\n\t\t\t\t\t\t\t\t{$gift_image}\n\t\t\t\t\t\t\t\t{$item['pagetitle']}\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t</div>";
                        break;
                    case 'gift-rec':
                        $gift_image = "<img src=\"{$wgUploadPath}/awards/" . Gifts::getGiftImage($item['namespace'], 'm') . '" border="0" alt="" />';
                        $item_html .= wfMessage('user-recent-activity-gift-rec')->escaped() . " {$user_link_2} {$item_time}</span>\n\t\t\t\t\t\t\t\t<div class=\"item\">\n\t\t\t\t\t\t\t\t\t<a href=\"" . htmlspecialchars($viewGift->getFullURL("gift_id={$item['id']}")) . "\" rel=\"nofollow\">\n\t\t\t\t\t\t\t\t\t\t{$gift_image}\n\t\t\t\t\t\t\t\t\t\t{$item['pagetitle']}\n\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t</div>";
                        break;
                    case 'system_gift':
                        $gift_image = "<img src=\"{$wgUploadPath}/awards/" . SystemGifts::getGiftImage($item['namespace'], 'm') . '" border="0" alt="" />';
                        $viewSystemGift = SpecialPage::getTitleFor('ViewSystemGift');
                        $item_html .= wfMessage('user-recent-system-gift')->escaped() . " {$item_time}\n\t\t\t\t\t\t\t\t<div class=\"user-home-item-gift\">\n\t\t\t\t\t\t\t\t\t<a href=\"" . htmlspecialchars($viewSystemGift->getFullURL("gift_id={$item['id']}")) . "\" rel=\"nofollow\">\n\t\t\t\t\t\t\t\t\t\t{$gift_image}\n\t\t\t\t\t\t\t\t\t\t{$item['pagetitle']}\n\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t</div>";
                        break;
                    case 'friend':
                        $item_html .= wfMessage('user-recent-activity-friend')->escaped() . " <b>{$user_link_2}</b> {$item_time}";
                        break;
                    case 'foe':
                        $item_html .= wfMessage('user-recent-activity-foe')->escaped() . " <b>{$user_link_2}</b> {$item_time}";
                        break;
                    case 'system_message':
                        $item_html .= "{$item['comment']} {$item_time}";
                        break;
                    case 'user_message':
                        $item_html .= wfMessage('user-recent-activity-user-message')->escaped() . " <b><a href=\"" . UserBoard::getUserBoardURL($user_title_2->getText()) . "\" rel=\"nofollow\">{$item['comment']}</a></b>  {$item_time}\n\t\t\t\t\t\t\t\t<div class=\"item\">\n\t\t\t\t\t\t\t\t\"{$item['namespace']}\"\n\t\t\t\t\t\t\t\t</div>";
                        break;
                    case 'network_update':
                        $network_image = SportsTeams::getLogo($item['sport_id'], $item['team_id'], 's');
                        $item_html .= wfMessage('user-recent-activity-network-update')->escaped() . '<div class="item">
									<a href="' . SportsTeams::getNetworkURL($item['sport_id'], $item['team_id']) . "\" rel=\"nofollow\">{$network_image} \"{$item['comment']}\"</a>\n\t\t\t\t\t\t\t\t</div>";
                        break;
                    case 'domain_creation':
                        $domainLink = '<b><a href="' . htmlspecialchars($title->getFullURL()) . "\">" . $item['domainname'] . '</a></b> ';
                        $item_html .= wfMessage('user-recent-activity-domain-creation')->escaped() . "{$domainLink} {$item_time}" . '<div class="item">
									<p>' . $item['comment'] . "</p>\n\t\t\t\t\t\t\t\t</div>";
                        break;
                }
                $item_html .= '</div>';
                if ($x <= $limit) {
                    $items_html_type['all'][] = $item_html;
                }
                $items_html_type[$item['type']][] = $item_html;
                $x++;
            }
            $by_type = '';
            foreach ($items_html_type['all'] as $item) {
                $by_type .= $item;
            }
            $output .= "<div id=\"recent-all\">{$by_type}</div></div></div>";
        }
        return $output;
    }
    /**
     * Show the special page
     *
     * @param $params Mixed: parameter(s) passed to the page or null
     */
    public function execute($params)
    {
        $out = $this->getOutput();
        $request = $this->getRequest();
        $currentUser = $this->getUser();
        // Set the page title, robot policies, etc.
        $this->setHeaders();
        // Add CSS & JS
        $out->addModuleStyles('ext.socialprofile.userboard.css');
        $out->addModules('ext.socialprofile.userboard.js');
        $ub_messages_show = 25;
        $user_name = $request->getVal('user');
        $user_name_2 = $request->getVal('conv');
        $user_id_2 = '';
        // Prevent E_NOTICE
        $page = $request->getInt('page', 1);
        /**
         * Redirect Non-logged in users to Login Page
         * It will automatically return them to the UserBoard page
         */
        if ($currentUser->getID() == 0 && $user_name == '') {
            $login = SpecialPage::getTitleFor('Userlogin');
            $out->redirect($login->getFullURL('returnto=Special:UserBoard'));
            return false;
        }
        /**
         * If no user is set in the URL, we assume its the current user
         */
        if (!$user_name) {
            $user_name = $currentUser->getName();
        }
        $user_id = User::idFromName($user_name);
        $user = Title::makeTitle(NS_USER, $user_name);
        if ($user_name_2) {
            $user_id_2 = User::idFromName($user_name_2);
            $user_2 = Title::makeTitle(NS_USER, $user_name);
        }
        /**
         * Error message for username that does not exist (from URL)
         */
        if ($user_id == 0) {
            $out->showErrorPage('error', 'userboard_noexist');
            return false;
        }
        /**
         * Config for the page
         */
        $per_page = $ub_messages_show;
        $b = new UserBoard();
        $ub_messages = $b->getUserBoardMessages($user_id, $user_id_2, $ub_messages_show, $page);
        if (!$user_id_2) {
            $stats = new UserStats($user_id, $user_name);
            $stats_data = $stats->getUserStats();
            $total = $stats_data['user_board'];
            // If user is viewing their own board or is allowed to delete
            // others' board messages, show the total count of board messages
            // to them (public + private messages)
            if ($currentUser->getName() == $user_name || $currentUser->isAllowed('userboard-delete')) {
                $total = $total + $stats_data['user_board_priv'];
            }
        } else {
            $total = $b->getUserBoardToBoardCount($user_id, $user_id_2);
        }
        if (!$user_id_2) {
            if (!($currentUser->getName() == $user_name)) {
                $out->setPageTitle($this->msg('userboard_owner', $user_name)->parse());
            } else {
                $b->clearNewMessageCount($currentUser->getID());
                $out->setPageTitle($this->msg('userboard_yourboard')->parse());
            }
        } else {
            if ($currentUser->getName() == $user_name) {
                $out->setPageTitle($this->msg('userboard_yourboardwith', $user_name_2)->parse());
            } else {
                $out->setPageTitle($this->msg('userboard_otherboardwith', $user_name, $user_name_2)->parse());
            }
        }
        $output = '<div class="user-board-top-links">';
        $output .= '<a href="' . htmlspecialchars($user->getFullURL()) . '">&lt; ' . $this->msg('userboard_backprofile', $user_name)->parse() . '</a>';
        $output .= '</div>';
        $board_to_board = '';
        // Prevent E_NOTICE
        if ($page == 1) {
            $start = 1;
        } else {
            $start = ($page - 1) * $per_page + 1;
        }
        $end = $start + count($ub_messages) - 1;
        if ($currentUser->getName() != $user_name) {
            $board_to_board = '<a href="' . UserBoard::getUserBoardToBoardURL($currentUser->getName(), $user_name) . '">' . $this->msg('userboard_boardtoboard')->plain() . '</a>';
        }
        if ($total) {
            $output .= '<div class="user-page-message-top">
			<span class="user-page-message-count">' . $this->msg('userboard_showingmessages', $total, $start, $end, $end - $start + 1)->parse() . "</span> {$board_to_board}\n\t\t\t</div>";
        }
        /**
         * Build next/prev navigation links
         */
        $qs = array();
        if ($user_id_2) {
            $qs['conv'] = $user_name_2;
        }
        $numofpages = $total / $per_page;
        if ($numofpages > 1) {
            $output .= '<div class="page-nav">';
            if ($page > 1) {
                $output .= Linker::link($this->getPageTitle(), $this->msg('userboard_prevpage')->plain(), array(), array('user' => $user_name, 'page' => $page - 1) + $qs);
            }
            if ($total % $per_page != 0) {
                $numofpages++;
            }
            if ($numofpages >= 9 && $page < $total) {
                $numofpages = 9 + $page;
                if ($numofpages >= $total / $per_page) {
                    $numofpages = $total / $per_page + 1;
                }
            }
            for ($i = 1; $i <= $numofpages; $i++) {
                if ($i == $page) {
                    $output .= $i . ' ';
                } else {
                    $output .= Linker::link($this->getPageTitle(), $i, array(), array('user' => $user_name, 'page' => $i) + $qs) . $this->msg('word-separator')->plain();
                }
            }
            if ($total - $per_page * $page > 0) {
                $output .= $this->msg('word-separator')->plain() . Linker::link($this->getPageTitle(), $this->msg('userboard_nextpage')->plain(), array(), array('user' => $user_name, 'page' => $page + 1) + $qs);
            }
            $output .= '</div><p>';
        }
        $can_post = false;
        $user_name_from = '';
        // Prevent E_NOTICE
        if (!$user_id_2) {
            if ($currentUser->getName() != $user_name) {
                $can_post = true;
                $user_name_to = htmlspecialchars($user_name, ENT_QUOTES);
            }
        } else {
            if ($currentUser->getName() == $user_name) {
                $can_post = true;
                $user_name_to = htmlspecialchars($user_name_2, ENT_QUOTES);
                $user_name_from = htmlspecialchars($user_name, ENT_QUOTES);
            }
        }
        if ($currentUser->isBlocked()) {
            // only let them post to admins
            //$user_to = User::newFromId( $user_id );
            // if( !$user_to->isAllowed( 'delete' ) ) {
            $can_post = false;
            // }
        }
        if ($can_post) {
            if ($currentUser->isLoggedIn() && !$currentUser->isBlocked()) {
                $output .= '<div class="user-page-message-form">
					<input type="hidden" id="user_name_to" name="user_name_to" value="' . $user_name_to . '"/>
					<input type="hidden" id="user_name_from" name="user_name_from" value="' . $user_name_from . '"/>
					<span class="user-board-message-type">' . $this->msg('userboard_messagetype')->plain() . ' </span>
					<select id="message_type">
						<option value="0">' . $this->msg('userboard_public')->plain() . '</option>
						<option value="1">' . $this->msg('userboard_private')->plain() . '</option>
					</select>
					<p>
					<textarea name="message" id="message" cols="63" rows="4"></textarea>

					<div class="user-page-message-box-button">
						<input type="button" value="' . $this->msg('userboard_sendbutton')->plain() . '" class="site-button" data-per-page="' . $per_page . '" />
					</div>

				</div>';
            } else {
                $output .= '<div class="user-page-message-form">' . $this->msg('userboard_loggedout')->parse() . '</div>';
            }
        }
        $output .= '<div id="user-page-board">';
        if ($ub_messages) {
            foreach ($ub_messages as $ub_message) {
                $user = Title::makeTitle(NS_USER, $ub_message['user_name_from']);
                $avatar = new wAvatar($ub_message['user_id_from'], 'm');
                $board_to_board = '';
                $board_link = '';
                $ub_message_type_label = '';
                $delete_link = '';
                if ($currentUser->getName() != $ub_message['user_name_from']) {
                    $board_to_board = '<a href="' . UserBoard::getUserBoardToBoardURL($user_name, $ub_message['user_name_from']) . '">' . $this->msg('userboard_boardtoboard')->plain() . '</a>';
                    $board_link = '<a href="' . UserBoard::getUserBoardURL($ub_message['user_name_from']) . '">' . $this->msg('userboard_sendmessage', $ub_message['user_name_from'])->parse() . '</a>';
                } else {
                    $board_link = '<a href="' . UserBoard::getUserBoardURL($ub_message['user_name_from']) . '">' . $this->msg('userboard_myboard')->plain() . '</a>';
                }
                // If the user owns this private message or they are allowed to
                // delete board messages, show the "delete" link to them
                if ($currentUser->getName() == $ub_message['user_name'] || $currentUser->isAllowed('userboard-delete')) {
                    $delete_link = "<span class=\"user-board-red\">\n\t\t\t\t\t\t<a href=\"javascript:void(0);\" data-message-id=\"{$ub_message['id']}\">" . $this->msg('userboard_delete')->plain() . '</a>
					</span>';
                }
                // Mark private messages as such
                if ($ub_message['type'] == 1) {
                    $ub_message_type_label = '(' . $this->msg('userboard_private')->plain() . ')';
                }
                // had global function to cut link text if too long and no breaks
                // $ub_message_text = preg_replace_callback( "/(<a[^>]*>)(.*?)(<\/a>)/i", 'cut_link_text', $ub_message['message_text'] );
                $ub_message_text = $ub_message['message_text'];
                $userPageURL = htmlspecialchars($user->getFullURL());
                $output .= "<div class=\"user-board-message\">\n\t\t\t\t\t<div class=\"user-board-message-content\">\n\t\t\t\t\t\t<div class=\"user-board-message-image\">\n\t\t\t\t\t\t\t<a href=\"{$userPageURL}\" title=\"{$ub_message['user_name_from']}\">{$avatar->getAvatarURL()}</a>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<a href=\"{$userPageURL}\" title=\"{$ub_message['user_name_from']}}\">{$ub_message['user_name_from']} </a> {$ub_message_type_label}\n\t\t\t\t\t\t<div class=\"user-board-message-time\">" . $this->msg('userboard_posted_ago', $b->getTimeAgo($ub_message['timestamp']))->parse() . "</div>\n\t\t\t\t\t\t<div class=\"user-board-message-body\">\n\t\t\t\t\t\t\t{$ub_message_text}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"cleared\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"user-board-message-links\">\n\t\t\t\t\t\t{$board_link}\n\t\t\t\t\t\t{$board_to_board}\n\t\t\t\t\t\t{$delete_link}\n\t\t\t\t\t</div>\n\t\t\t\t</div>";
            }
        } else {
            $output .= '<p>' . $this->msg('userboard_nomessages')->parse() . '</p>';
        }
        $output .= '</div>';
        $out->addHTML($output);
    }
Example #4
0
    /**
     * Show the special page
     *
     * @param $params Mixed: parameter(s) passed to the page or null
     */
    public function execute($params)
    {
        global $wgUser, $wgOut, $wgRequest, $wgScriptPath, $wgHooks, $wgUserBoardScripts;
        // This hooked function adds a global JS variable that UserBoard.js
        // uses to the HTML
        $wgHooks['MakeGlobalVariablesScript'][] = 'SpecialViewUserBoard::addJSGlobals';
        // Add CSS & JS
        $wgOut->addExtensionStyle($wgUserBoardScripts . '/UserBoard.css');
        $wgOut->addScriptFile($wgUserBoardScripts . '/UserBoard.js');
        $ub_messages_show = 25;
        $user_name = $wgRequest->getVal('user');
        $user_name_2 = $wgRequest->getVal('conv');
        $user_id_2 = '';
        // Prevent E_NOTICE
        $page = $wgRequest->getInt('page', 1);
        /**
         * Redirect Non-logged in users to Login Page
         * It will automatically return them to the UserBoard page
         */
        if ($wgUser->getID() == 0 && $user_name == '') {
            $login = SpecialPage::getTitleFor('Userlogin');
            $wgOut->redirect($login->getFullURL('returnto=Special:UserBoard'));
            return false;
        }
        /**
         * If no user is set in the URL, we assume its the current user
         */
        if (!$user_name) {
            $user_name = $wgUser->getName();
        }
        $user_id = User::idFromName($user_name);
        $user = Title::makeTitle(NS_USER, $user_name);
        $user_safe = str_replace('&', '%26', $user_name);
        if ($user_name_2) {
            $user_id_2 = User::idFromName($user_name_2);
            $user_2 = Title::makeTitle(NS_USER, $user_name);
            $user_safe_2 = urlencode($user_name_2);
        }
        /**
         * Error message for username that does not exist (from URL)
         */
        if ($user_id == 0) {
            $wgOut->showErrorPage('error', 'userboard_noexist');
            return false;
        }
        /**
         * Config for the page
         */
        $per_page = $ub_messages_show;
        $b = new UserBoard();
        $ub_messages = $b->getUserBoardMessages($user_id, $user_id_2, $ub_messages_show, $page);
        if (!$user_id_2) {
            $stats = new UserStats($user_id, $user_name);
            $stats_data = $stats->getUserStats();
            $total = $stats_data['user_board'];
            // If user is viewing their own board or is allowed to delete
            // others' board messages, show the total count of board messages
            // to them (public + private messages)
            if ($wgUser->getName() == $user_name || $wgUser->isAllowed('userboard-delete')) {
                $total = $total + $stats_data['user_board_priv'];
            }
        } else {
            $total = $b->getUserBoardToBoardCount($user_id, $user_id_2);
        }
        if (!$user_id_2) {
            if (!($wgUser->getName() == $user_name)) {
                $wgOut->setPageTitle(wfMsg('userboard_owner', $user_name));
            } else {
                $b->clearNewMessageCount($wgUser->getID());
                $wgOut->setPageTitle(wfMsg('userboard_yourboard'));
            }
        } else {
            if ($wgUser->getName() == $user_name) {
                $wgOut->setPageTitle(wfMsg('userboard_yourboardwith', $user_name_2));
            } else {
                $wgOut->setPageTitle(wfMsg('userboard_otherboardwith', $user_name, $user_name_2));
            }
        }
        $output = '<div class="user-board-top-links">';
        $output .= '<a href="' . $user->escapeFullURL() . '">&lt; ' . wfMsg('userboard_backprofile', $user_name) . '</a>';
        $output .= '</div>';
        $board_to_board = '';
        // Prevent E_NOTICE
        if ($page == 1) {
            $start = 1;
        } else {
            $start = ($page - 1) * $per_page + 1;
        }
        $end = $start + count($ub_messages) - 1;
        if ($wgUser->getName() != $user_name) {
            $board_to_board = '<a href="' . UserBoard::getUserBoardToBoardURL($wgUser->getName(), $user_name) . '">' . wfMsg('userboard_boardtoboard') . '</a>';
        }
        if ($total) {
            $output .= '<div class="user-page-message-top">
			<span class="user-page-message-count">' . wfMsg('userboard_showingmessages', $total, $start, $end, $end - $start + 1) . "</span> {$board_to_board}\n\t\t\t</div>";
        }
        /**
         * Build next/prev nav
         */
        $qs = '';
        if ($user_id_2) {
            $qs = "&conv={$user_safe_2}";
        }
        $numofpages = $total / $per_page;
        if ($numofpages > 1) {
            $output .= '<div class="page-nav">';
            if ($page > 1) {
                $output .= '<a href="' . $wgScriptPath . "/index.php?title=Special:UserBoard&user={$user_safe}&page=" . ($page - 1) . "{$qs}\">" . wfMsg('userboard_prevpage') . '</a>';
            }
            if ($total % $per_page != 0) {
                $numofpages++;
            }
            if ($numofpages >= 9 && $page < $total) {
                $numofpages = 9 + $page;
                if ($numofpages >= $total / $per_page) {
                    $numofpages = $total / $per_page + 1;
                }
            }
            for ($i = 1; $i <= $numofpages; $i++) {
                if ($i == $page) {
                    $output .= $i . ' ';
                } else {
                    $output .= '<a href="' . $wgScriptPath . "/index.php?title=Special:UserBoard&user={$user_safe}&page={$i}{$qs}\">{$i}</a> ";
                }
            }
            if ($total - $per_page * $page > 0) {
                $output .= ' <a href="' . $wgScriptPath . "/index.php?title=Special:UserBoard&user={$user_safe}&page=" . ($page + 1) . "{$qs}\">" . wfMsg('userboard_nextpage') . '</a>';
            }
            $output .= '</div><p>';
        }
        /**
         * Build next/prev nav
         */
        $can_post = false;
        $user_name_from = '';
        // Prevent E_NOTICE
        if (!$user_id_2) {
            if ($wgUser->getName() != $user_name) {
                $can_post = true;
                $user_name_to = htmlspecialchars($user_name, ENT_QUOTES);
            }
        } else {
            if ($wgUser->getName() == $user_name) {
                $can_post = true;
                $user_name_to = htmlspecialchars($user_name_2, ENT_QUOTES);
                $user_name_from = htmlspecialchars($user_name, ENT_QUOTES);
            }
        }
        if ($wgUser->isBlocked()) {
            // only let them post to admins
            //$user_to = User::newFromId( $user_id );
            // if( !$user_to->isAllowed( 'delete' ) ) {
            $can_post = false;
            // }
        }
        if ($can_post) {
            if ($wgUser->isLoggedIn() && !$wgUser->isBlocked()) {
                $output .= '<div class="user-page-message-form">
					<input type="hidden" id="user_name_to" name="user_name_to" value="' . $user_name_to . '"/>
					<input type="hidden" id="user_name_from" name="user_name_from" value="' . $user_name_from . '"/>
					<span class="user-board-message-type">' . wfMsg('userboard_messagetype') . ' </span>
					<select id="message_type">
						<option value="0">' . wfMsg('userboard_public') . '</option>
						<option value="1">' . wfMsg('userboard_private') . '</option>
					</select>
					<p>
					<textarea name="message" id="message" cols="63" rows="4"></textarea>

					<div class="user-page-message-box-button">
						<input type="button" value="' . wfMsg('userboard_sendbutton') . '" class="site-button" onclick="javascript:UserBoard.sendMessage(' . $per_page . ');" />
					</div>

				</div>';
            } else {
                $login_link = SpecialPage::getTitleFor('Userlogin');
                $output .= '<div class="user-page-message-form">' . wfMsg('userboard_loggedout', $login_link->escapeFullURL()) . '</div>';
            }
        }
        $output .= '<div id="user-page-board">';
        if ($ub_messages) {
            foreach ($ub_messages as $ub_message) {
                $user = Title::makeTitle(NS_USER, $ub_message['user_name_from']);
                $avatar = new wAvatar($ub_message['user_id_from'], 'm');
                $board_to_board = '';
                $board_link = '';
                $ub_message_type_label = '';
                $delete_link = '';
                if ($wgUser->getName() != $ub_message['user_name_from']) {
                    $board_to_board = '<a href="' . UserBoard::getUserBoardToBoardURL($user_name, $ub_message['user_name_from']) . '">' . wfMsg('userboard_boardtoboard') . '</a>';
                    $board_link = '<a href="' . UserBoard::getUserBoardURL($ub_message['user_name_from']) . '">' . wfMsg('userboard_sendmessage', $ub_message['user_name_from']) . '</a>';
                } else {
                    $board_link = '<a href="' . UserBoard::getUserBoardURL($ub_message['user_name_from']) . '">' . wfMsg('userboard_myboard') . '</a>';
                }
                // If the user owns this private message or they are allowed to
                // delete board messages, show the "delete" link to them
                if ($wgUser->getName() == $ub_message['user_name'] || $wgUser->isAllowed('userboard-delete')) {
                    $delete_link = "<span class=\"user-board-red\">\n\t\t\t\t\t\t<a href=\"javascript:void(0);\" onclick=\"javascript:UserBoard.deleteMessage({$ub_message['id']})\">" . wfMsg('userboard_delete') . '</a>
					</span>';
                }
                // Mark private messages as such
                if ($ub_message['type'] == 1) {
                    $ub_message_type_label = '(' . wfMsg('userboard_private') . ')';
                }
                // had global function to cut link text if too long and no breaks
                // $ub_message_text = preg_replace_callback( "/(<a[^>]*>)(.*?)(<\/a>)/i", 'cut_link_text', $ub_message['message_text'] );
                $ub_message_text = $ub_message['message_text'];
                $output .= "<div class=\"user-board-message\">\n\t\t\t\t\t<div class=\"user-board-message-from\">\n\t\t\t\t\t\t\t<a href=\"{$user->escapeFullURL()}\" title=\"{$ub_message['user_name_from']}}\">{$ub_message['user_name_from']} </a> {$ub_message_type_label}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"user-board-message-time\">" . wfMsgHtml('userboard_posted_ago', $b->getTimeAgo($ub_message['timestamp'])) . "</div>\n\t\t\t\t\t<div class=\"user-board-message-content\">\n\t\t\t\t\t\t<div class=\"user-board-message-image\">\n\t\t\t\t\t\t\t<a href=\"{$user->escapeFullURL()}\" title=\"{$ub_message['user_name_from']}\">{$avatar->getAvatarURL()}</a>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"user-board-message-body\">\n\t\t\t\t\t\t\t{$ub_message_text}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"cleared\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"user-board-message-links\">\n\t\t\t\t\t\t{$board_link}\n\t\t\t\t\t\t{$board_to_board}\n\t\t\t\t\t\t{$delete_link}\n\t\t\t\t\t</div>\n\t\t\t\t</div>";
            }
        } else {
            $invite_title = SpecialPage::getTitleFor('InviteContacts');
            $output .= '<p>' . wfMsg('userboard_nomessages', $invite_title->escapeFullURL()) . '</p>';
        }
        $output .= '</div>';
        $wgOut->addHTML($output);
    }
    /**
     * Show the special page
     *
     * @param $params Mixed: parameter(s) passed to the page or null
     */
    public function execute($params)
    {
        global $wgUser, $wgOut, $wgRequest, $wgScriptPath, $wgUserBoardScripts;
        // Add CSS
        $wgOut->addExtensionStyle($wgUserBoardScripts . '/UserBoard.css');
        $ub_messages_show = 25;
        $user_name = $wgRequest->getVal('user');
        $user_name_2 = $wgRequest->getVal('conv');
        $user_id_2 = '';
        // Prevent E_NOTICE
        $page = $wgRequest->getVal('page');
        /**
         * Redirect Non-logged in users to Login Page
         * It will automatically return them to the UserBoard page
         */
        if ($wgUser->getID() == 0 && $user_name == '') {
            $login = SpecialPage::getTitleFor('Userlogin');
            $wgOut->redirect($login->getFullURL('returnto=Special:UserBoard'));
            return false;
        }
        /**
         * If no user is set in the URL, we assume its the current user
         */
        if (!$user_name) {
            $user_name = $wgUser->getName();
        }
        $user_id = User::idFromName($user_name);
        $user = Title::makeTitle(NS_USER, $user_name);
        $user_safe = str_replace('&', '%26', $user_name);
        if ($user_name_2) {
            $user_id_2 = User::idFromName($user_name_2);
            $user_2 = Title::makeTitle(NS_USER, $user_name);
            $user_safe_2 = urlencode($user_name_2);
        }
        /**
         * Error message for username that does not exist (from URL)
         */
        if ($user_id == 0) {
            $wgOut->showErrorPage('error', 'userboard_noexist');
            return false;
        }
        /**
         * Config for the page
         */
        $per_page = $ub_messages_show;
        if (!$page || !is_numeric($page)) {
            $page = 1;
        }
        $b = new UserBoard();
        $ub_messages = $b->getUserBoardMessages($user_id, $user_id_2, $ub_messages_show, $page);
        if (!$user_id_2) {
            $stats = new UserStats($user_id, $user_name);
            $stats_data = $stats->getUserStats();
            $total = $stats_data['user_board'];
            // If user is viewing their own board or is allowed to delete
            // others' board messages, show the total count of board messages
            // to them (public + private messages)
            if ($wgUser->getName() == $user_name || $wgUser->isAllowed('userboard-delete')) {
                $total = $total + $stats_data['user_board_priv'];
            }
        } else {
            $total = $b->getUserBoardToBoardCount($user_id, $user_id_2);
        }
        if (!$user_id_2) {
            if (!($wgUser->getName() == $user_name)) {
                $wgOut->setPageTitle(wfMsg('userboard_owner', $user_name));
            } else {
                $b->clearNewMessageCount($wgUser->getID());
                $wgOut->setPageTitle(wfMsg('userboard_yourboard'));
            }
        } else {
            if ($wgUser->getName() == $user_name) {
                $wgOut->setPageTitle(wfMsg('userboard_yourboardwith', $user_name_2));
            } else {
                $wgOut->setPageTitle(wfMsg('userboard_otherboardwith', $user_name, $user_name_2));
            }
        }
        $output = '<div class="user-board-top-links">';
        $output .= '<a href="' . $user->escapeFullURL() . '">&lt; ' . wfMsg('userboard_backprofile', $user_name) . '</a>';
        $output .= '</div>';
        $output .= "<script type=\"text/javascript\">/*<![CDATA[*/\r\n\t\t\tvar _DELETE_CONFIRM = \"" . wfMsg('userboard_confirmdelete') . "\";\r\n\t\t\tvar posted = 0;\r\n\t\t\tfunction send_message() {\r\n\t\t\t\tif( document.getElementById('message').value && !posted ) {\r\n\t\t\t\t\tposted = 1;\r\n\t\t\t\t\tencodedName = encodeURIComponent( document.getElementById('user_name_to').value );\r\n\t\t\t\t\tencodedMsg = encodeURIComponent( document.getElementById('message').value );\r\n\t\t\t\t\tmessageType = document.getElementById('message_type').value;\r\n\t\t\t\t\tsajax_request_type = 'POST';\r\n\t\t\t\t\tsajax_do_call( 'wfSendBoardMessage', [ encodedName, encodedMsg, messageType, {$per_page} ], function( originalRequest ) {\r\n\t\t\t\t\t\t\tposted = 0;\r\n\t\t\t\t\t\t\tif( document.getElementById('user_name_from').value ) { // its a board to board\r\n\t\t\t\t\t\t\t\tuser_1 = document.getElementById('user_name_from').value;\r\n\t\t\t\t\t\t\t\tuser_2 = document.getElementById('user_name_to').value;\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tuser_1 = document.getElementById('user_name_to').value;\r\n\t\t\t\t\t\t\t\tuser_2 = '';\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tvar params = ( user_2 ) ? '&conv=' + user_2 : '';\r\n\t\t\t\t\t\t\tvar url = wgScriptPath + '/index.php?title=Special:UserBoard&user='******'POST';\r\n\t\t\t\t\tsajax_do_call( 'wfDeleteBoardMessage', [ id ], function( originalRequest ) {\r\n\t\t\t\t\t\twindow.location.reload();\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t/*]]>*/</script>";
        $board_to_board = '';
        // Prevent E_NOTICE
        if ($page == 1) {
            $start = 1;
        } else {
            $start = ($page - 1) * $per_page + 1;
        }
        $end = $start + count($ub_messages) - 1;
        if ($wgUser->getName() != $user_name) {
            $board_to_board = '<a href="' . UserBoard::getUserBoardToBoardURL($wgUser->getName(), $user_name) . '">' . wfMsg('userboard_boardtoboard') . '</a>';
        }
        if ($total) {
            $output .= '<div class="user-page-message-top">
			<span class="user-page-message-count" style="font-size:11px;color:#666666;">' . wfMsg('userboard_showingmessages', $total, $start, $end, $end - $start + 1) . ".</span> {$board_to_board}</span>\r\n\t\t\t</div>";
        }
        /**
         * Build next/prev nav
         */
        if ($user_id_2) {
            $qs = "&conv={$user_safe_2}";
        }
        $numofpages = $total / $per_page;
        if ($numofpages > 1) {
            $output .= '<div class="page-nav">';
            if ($page > 1) {
                $output .= '<a href="' . $wgScriptPath . "/index.php?title=Special:UserBoard&user={$user_safe}&page=" . ($page - 1) . "{$qs}\">" . wfMsg('userboard_prevpage') . '</a>';
            }
            if ($total % $per_page != 0) {
                $numofpages++;
            }
            if ($numofpages >= 9 && $page < $total) {
                $numofpages = 9 + $page;
                if ($numofpages >= $total / $per_page) {
                    $numofpages = $total / $per_page + 1;
                }
            }
            for ($i = 1; $i <= $numofpages; $i++) {
                if ($i == $page) {
                    $output .= $i . ' ';
                } else {
                    $output .= '<a href="' . $wgScriptPath . "/index.php?title=Special:UserBoard&user={$user_safe}&page={$i}{$qs}\">{$i}</a> ";
                }
            }
            if ($total - $per_page * $page > 0) {
                $output .= ' <a href="' . $wgScriptPath . "/index.php?title=Special:UserBoard&user={$user_safe}&page=" . ($page + 1) . "{$qs}\">" . wfMsg('userboard_nextpage') . '</a>';
            }
            $output .= '</div><p>';
        }
        /**
         * Build next/prev nav
         */
        $can_post = false;
        $user_name_from = '';
        // Prevent E_NOTICE
        if (!$user_id_2) {
            if ($wgUser->getName() != $user_name) {
                $can_post = true;
                $user_name_to = htmlspecialchars($user_name, ENT_QUOTES);
            }
        } else {
            if ($wgUser->getName() == $user_name) {
                $can_post = true;
                $user_name_to = htmlspecialchars($user_name_2, ENT_QUOTES);
                $user_name_from = htmlspecialchars($user_name, ENT_QUOTES);
            }
        }
        if ($wgUser->isBlocked()) {
            // only let them post to admins
            $user_to = User::newFromId($user_id);
            $user_to->loadFromId();
            // if( !$user_to->isAllowed( 'delete' ) ) {
            $can_post = false;
            // }
        }
        if ($can_post) {
            if ($wgUser->isLoggedIn() && !$wgUser->isBlocked()) {
                $output .= '<div class="user-page-message-form">
					<input type="hidden" id="user_name_to" name="user_name_to" value="' . $user_name_to . '"/>
					<input type="hidden" id="user_name_from" name="user_name_from" value="' . $user_name_from . '"/>
					<span style="color:#797979;">' . wfMsg('userboard_messagetype') . ' </span>
					<select id="message_type">
						<option value="0">' . wfMsg('userboard_public') . '</option>
						<option value="1">' . wfMsg('userboard_private') . '</option>
					</select>
					<p>
					<textarea name="message" id="message" cols="63" rows="4"></textarea>

					<div class="user-page-message-box-button">
						<input type="button" value="' . wfMsg('userboard_sendbutton') . '" class="site-button" onclick="javascript:send_message();" />
					</div>

				</div>';
            } else {
                $login_link = SpecialPage::getTitleFor('Userlogin');
                $output .= '<div class="user-page-message-form">' . wfMsg('userboard_loggedout', $login_link->escapeFullURL()) . '</div>';
            }
        }
        $output .= '<div id="user-page-board">';
        if ($ub_messages) {
            foreach ($ub_messages as $ub_message) {
                $user = Title::makeTitle(NS_USER, $ub_message['user_name_from']);
                $avatar = new wAvatar($ub_message['user_id_from'], 'm');
                $board_to_board = '';
                $board_link = '';
                $ub_message_type_label = '';
                $delete_link = '';
                if ($wgUser->getName() != $ub_message['user_name_from']) {
                    $board_to_board = '<a href="' . UserBoard::getUserBoardToBoardURL($user_name, $ub_message['user_name_from']) . '">' . wfMsg('userboard_boardtoboard') . '</a>';
                    $board_link = '<a href="' . UserBoard::getUserBoardURL($ub_message['user_name_from']) . '">' . wfMsg('userboard_sendmessage', $ub_message['user_name_from']) . '</a>';
                } else {
                    $board_link = '<a href="' . UserBoard::getUserBoardURL($ub_message['user_name_from']) . '">' . wfMsg('userboard_myboard') . '</a>';
                }
                if ($wgUser->getName() == $ub_message['user_name'] || $wgUser->isAllowed('userboard-delete')) {
                    $delete_link = "<span class=\"user-board-red\">\r\n\t\t\t\t\t\t<a href=\"javascript:void(0);\" onclick=\"javascript:delete_message({$ub_message['id']})\">" . wfMsg('userboard_delete') . '</a>
					</span>';
                }
                if ($ub_message['type'] == 1) {
                    $ub_message_type_label = '(' . wfMsg('userboard_private') . ')';
                }
                // had global function to cut link text if too long and no breaks
                // $ub_message_text = preg_replace_callback( "/(<a[^>]*>)(.*?)(<\/a>)/i", 'cut_link_text', $ub_message['message_text'] );
                $ub_message_text = $ub_message['message_text'];
                $output .= "<div class=\"user-board-message\" style=\"width:550px\">\r\n\t\t\t\t\t<div class=\"user-board-message-from\">\r\n\t\t\t\t\t\t\t<a href=\"{$user->escapeFullURL()}\" title=\"{$ub_message['user_name_from']}}\">{$ub_message['user_name_from']} </a> {$ub_message_type_label}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"user-board-message-time\">" . wfMsgHtml('userboard_posted_ago', $b->getTimeAgo($ub_message['timestamp'])) . "</div>\r\n\t\t\t\t\t<div class=\"user-board-message-content\">\r\n\t\t\t\t\t\t<div class=\"user-board-message-image\">\r\n\t\t\t\t\t\t\t<a href=\"{$user->escapeFullURL()}\" title=\"{$ub_message['user_name_from']}\">{$avatar->getAvatarURL()}</a>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div class=\"user-board-message-body\">\r\n\t\t\t\t\t\t\t{$ub_message_text}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<div class=\"cleared\"></div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"user-board-message-links\">\r\n\t\t\t\t\t\t{$board_link}\r\n\t\t\t\t\t\t{$board_to_board}\r\n\t\t\t\t\t\t{$delete_link}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>";
            }
        } else {
            $invite_title = SpecialPage::getTitleFor('InviteContacts');
            $output .= '<p>' . wfMsg('userboard_nomessages', $invite_title->escapeFullURL()) . '</p>';
        }
        $output .= '</div>';
        $wgOut->addHTML($output);
    }