/**
     * Show the special page
     *
     * @param $params Mixed: parameter(s) passed to the page or null
     */
    public function execute($params)
    {
        $out = $this->getOutput();
        $user = $this->getUser();
        // Set the page title, robot policies, etc.
        $this->setHeaders();
        /**
         * Redirect anonymous users to the login page
         * It will automatically return them to the ViewRelationshipRequests page
         */
        if (!$user->isLoggedIn()) {
            $out->setPageTitle($this->msg('ur-error-page-title')->plain());
            $login = SpecialPage::getTitleFor('Userlogin');
            $out->redirect($login->getFullURL('returnto=Special:ViewRelationshipRequests'));
            return false;
        }
        // Add CSS & JS
        $out->addModuleStyles('ext.socialprofile.userrelationship.css');
        $out->addModules('ext.socialprofile.userrelationship.js');
        $rel = new UserRelationship($user->getName());
        $friend_request_count = $rel->getOpenRequestCount($user->getID(), 1);
        $foe_request_count = $rel->getOpenRequestCount($user->getID(), 2);
        if ($this->getRequest()->wasPosted() && $_SESSION['alreadysubmitted'] == false) {
            $_SESSION['alreadysubmitted'] = true;
            $rel->addRelationshipRequest($this->user_name_to, $this->relationship_type, $_POST['message']);
            $output = '<br /><span class="title">' . $this->msg('ur-already-submitted')->plain() . '</span><br /><br />';
            $out->addHTML($output);
        } else {
            $_SESSION['alreadysubmitted'] = false;
            $output = '';
            $out->setPageTitle($this->msg('ur-requests-title')->plain());
            $requests = $rel->getRequestList(0);
            if ($requests) {
                foreach ($requests as $request) {
                    $user_from = Title::makeTitle(NS_USER, $request['user_name_from']);
                    $avatar = new wAvatar($request['user_id_from'], 'l');
                    $avatar_img = $avatar->getAvatarURL();
                    if ($request['type'] == 'Foe') {
                        $msg = $this->msg('ur-requests-message-foe', htmlspecialchars($user_from->getFullURL()), $request['user_name_from'])->text();
                    } else {
                        $msg = $this->msg('ur-requests-message-friend', htmlspecialchars($user_from->getFullURL()), $request['user_name_from'])->text();
                    }
                    $message = $out->parse(trim($request['message']), false);
                    $output .= "<div class=\"relationship-action black-text\" id=\"request_action_{$request['id']}\">\n\t\t\t\t\t  \t{$avatar_img}" . $msg;
                    if ($request['message']) {
                        $output .= '<div class="relationship-message">' . $message . '</div>';
                    }
                    $output .= '<div class="cleared"></div>
						<div class="relationship-buttons">
							<input type="button" class="site-button" value="' . $this->msg('ur-accept')->plain() . '" data-response="1" />
							<input type="button" class="site-button" value="' . $this->msg('ur-reject')->plain() . '" data-response="-1" />
						</div>
					</div>';
                }
            } else {
                $output = $this->msg('ur-no-requests-message')->parse();
            }
            $out->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, $wgUserRelationshipScripts;
        /**
         * Redirect Non-logged in users to Login Page
         * It will automatically return them to the ViewRelationshipRequests page
         */
        if ($wgUser->getID() == 0) {
            $wgOut->setPageTitle(wfMsg('ur-error-page-title'));
            $login = SpecialPage::getTitleFor('Userlogin');
            $wgOut->redirect($login->getFullURL('returnto=Special:ViewRelationshipRequests'));
            return false;
        }
        $wgOut->addScriptFile($wgUserRelationshipScripts . '/UserRelationship.js');
        $wgOut->addExtensionStyle($wgUserRelationshipScripts . '/UserRelationship.css');
        $rel = new UserRelationship($wgUser->getName());
        $friend_request_count = $rel->getOpenRequestCount($wgUser->getID(), 1);
        $foe_request_count = $rel->getOpenRequestCount($wgUser->getID(), 2);
        if (count($_POST) && $_SESSION['alreadysubmitted'] == false) {
            $_SESSION['alreadysubmitted'] = true;
            $rel->addRelationshipRequest($this->user_name_to, $this->relationship_type, $_POST['message']);
            $out = '<br /><span class="title">' . wfMsg('ur-already-submitted') . '</span><br /><br />';
            $wgOut->addHTML($out);
        } else {
            $_SESSION['alreadysubmitted'] = false;
            $output = '';
            $wgOut->setPageTitle(wfMsg('ur-requests-title'));
            $requests = $rel->getRequestList(0);
            if ($requests) {
                foreach ($requests as $request) {
                    $user_from = Title::makeTitle(NS_USER, $request['user_name_from']);
                    $avatar = new wAvatar($request['user_id_from'], 'l');
                    $avatar_img = $avatar->getAvatarURL();
                    if ($request['type'] == 'Foe') {
                        $msg = wfMsg('ur-requests-message-foe', $user_from->escapeFullURL(), $request['user_name_from']);
                    } else {
                        $msg = wfMsg('ur-requests-message-friend', $user_from->escapeFullURL(), $request['user_name_from']);
                    }
                    $message = $wgOut->parse(trim($request['message']), false);
                    $output .= "<div class=\"relationship-action black-text\" id=\"request_action_{$request['id']}\">\r\n\t\t\t\t\t  \t{$avatar_img}" . $msg;
                    if ($request['message']) {
                        $output .= '<div class="relationship-message">' . $message . '</div>';
                    }
                    $output .= '<div class="cleared"></div>
						<div class="relationship-buttons">
							<input type="button" class="site-button" value="' . wfMsg('ur-accept') . '" onclick="javascript:requestResponse(1,' . $request['id'] . ')" />
							<input type="button" class="site-button" value="' . wfMsg('ur-reject') . '" onclick="javascript:requestResponse(-1,' . $request['id'] . ')" />
						</div>
					</div>';
                }
            } else {
                $inviteLink = SpecialPage::getTitleFor('InviteContacts');
                $output = wfMsg('ur-no-requests-message', $inviteLink->escapeFullURL());
            }
            $wgOut->addHTML($output);
        }
    }
 public function syncRelationshipList()
 {
     //check if SocialProfile is installed
     if (class_exists('UserRelationship')) {
         $rel = new UserRelationship($this->User);
         $frlist = $rel->getRelationshipIDs(1);
         $foelist = $rel->getRelationshipIDs(2);
         for ($i = 0; $i < count($frlist); $i++) {
             $frlist[$i] = 'User:'******'User:'******',', $frlist);
         $listoffoes = implode(',', $foelist);
         $this->Friends = new SSPUserList($friendlist);
         $this->Foes = new SSPUserList($listoffoes);
     } else {
         throw new SocProfException();
     }
 }
function wfRelationshipRequestResponse($response, $requestId)
{
    global $wgUser;
    $out = '';
    $rel = new UserRelationship($wgUser->getName());
    if ($rel->verifyRelationshipRequest($requestId) == true) {
        $request = $rel->getRequest($requestId);
        $user_name_from = $request[0]['user_name_from'];
        $user_id_from = User::idFromName($user_name_from);
        $rel_type = strtolower($request[0]['type']);
        $response = isset($_POST['response']) ? $_POST['response'] : $response;
        $rel->updateRelationshipRequestStatus($requestId, intval($response));
        $avatar = new wAvatar($user_id_from, 'l');
        $avatar_img = $avatar->getAvatarURL();
        if ($response == 1) {
            $rel->addRelationship($requestId);
            $out .= "<div class=\"relationship-action red-text\">\n\t\t\t\t{$avatar_img}" . wfMessage("ur-requests-added-message-{$rel_type}", $user_name_from)->escaped() . '<div class="cleared"></div>
			</div>';
        } else {
            $out .= "<div class=\"relationship-action red-text\">\n\t\t\t\t{$avatar_img}" . wfMessage("ur-requests-reject-message-{$rel_type}", $user_name_from)->escaped() . '<div class="cleared"></div>
			</div>';
        }
        $rel->deleteRequest($requestId);
    }
    return $out;
}
/**
 * Automatically make the referring user and the newly-registered user friends
 * if $wgAutoAddFriendOnInvite is set to true.
 *
 * @param $user Object: the User object representing the newly-created user
 * @return Boolean: true
 */
function fnRegisterAutoAddFriend($user)
{
    global $wgRequest, $wgAutoAddFriendOnInvite;
    if ($wgAutoAddFriendOnInvite) {
        $referral_user = $wgRequest->getVal('referral');
        if ($referral_user) {
            $user_id_referral = User::idFromName($referral_user);
            if ($user_id_referral) {
                // need to create fake request first
                $rel = new UserRelationship($referral_user);
                $request_id = $rel->addRelationshipRequest($user->getName(), 1, '', false);
                // clear the status
                $rel->updateRelationshipRequestStatus($request_id, 1);
                // automatically add relationhips
                $rel = new UserRelationship($user->getName());
                $rel->addRelationship($request_id, true);
            }
        }
    }
    return true;
}
    /**
     * Show the special page
     *
     * @param $params Mixed: parameter(s) passed to the page or null
     */
    public function execute($params)
    {
        $lang = $this->getLanguage();
        $out = $this->getOutput();
        $request = $this->getRequest();
        $user = $this->getUser();
        // Set the page title, robot policies, etc.
        $this->setHeaders();
        // Add CSS
        $out->addModuleStyles('ext.socialprofile.userrelationship.css');
        $output = '';
        /**
         * Get query string variables
         */
        $user_name = $request->getVal('user');
        $rel_type = $request->getInt('rel_type');
        $page = $request->getInt('page');
        /**
         * Redirect Non-logged in users to Login Page
         * It will automatically return them to the ViewRelationships page
         */
        if (!$user->isLoggedIn() && $user_name == '') {
            $out->setPageTitle($this->msg('ur-error-page-title')->plain());
            $login = SpecialPage::getTitleFor('Userlogin');
            $out->redirect(htmlspecialchars($login->getFullURL('returnto=Special:ViewRelationships')));
            return false;
        }
        /**
         * Set up config for page / default values
         */
        if (!$page || !is_numeric($page)) {
            $page = 1;
        }
        if (!$rel_type || !is_numeric($rel_type)) {
            $rel_type = 1;
        }
        $per_page = 50;
        $per_row = 2;
        /**
         * If no user is set in the URL, we assume its the current user
         */
        if (!$user_name) {
            $user_name = $user->getName();
        }
        $user_id = User::idFromName($user_name);
        $userPage = Title::makeTitle(NS_USER, $user_name);
        /**
         * Error message for username that does not exist (from URL)
         */
        if ($user_id == 0) {
            $out->setPageTitle($this->msg('ur-error-title')->plain());
            $output = '<div class="relationship-error-message">' . $this->msg('ur-error-message-no-user')->plain() . '</div>
			<div class="relationship-request-buttons">
				<input type="button" class="site-button" value="' . $this->msg('ur-main-page')->plain() . '" onclick=\'window.location="index.php?title=' . $this->msg('mainpage')->inContentLanguage()->escaped() . '"\' />';
            if ($user->isLoggedIn()) {
                $output .= '<input type="button" class="site-button" value="' . $this->msg('ur-your-profile')->plain() . '" onclick=\'window.location="' . htmlspecialchars($user->getUserPage()->getFullURL()) . '"\' />';
            }
            $output .= '</div>';
            $out->addHTML($output);
            return false;
        }
        /**
         * Get all relationships
         */
        $rel = new UserRelationship($user_name);
        $relationships = $rel->getRelationshipList($rel_type, $per_page, $page);
        $stats = new UserStats($rel->user_id, $rel->user_name);
        $stats_data = $stats->getUserStats();
        $friend_count = $stats_data['friend_count'];
        $foe_count = $stats_data['foe_count'];
        $back_link = Title::makeTitle(NS_USER, $rel->user_name);
        if ($rel_type == 1) {
            $out->setPageTitle($this->msg('ur-title-friend', $rel->user_name)->parse());
            $total = $friend_count;
            $rem = $this->msg('ur-remove-relationship-friend')->plain();
            $output .= '<div class="back-links">
			<a href="' . htmlspecialchars($back_link->getFullURL()) . '">' . $this->msg('ur-backlink', $rel->user_name)->parse() . '</a>
		</div>
		<div class="relationship-count">' . $this->msg('ur-relationship-count-friends', $rel->user_name, $total)->text() . '</div>';
        } else {
            $out->setPageTitle($this->msg('ur-title-foe', $rel->user_name)->parse());
            $total = $foe_count;
            $rem = $this->msg('ur-remove-relationship-foe')->plain();
            $output .= '<div class="back-links">
			<a href="' . htmlspecialchars($back_link->getFullURL()) . '">' . $this->msg('ur-backlink', $rel->user_name)->parse() . '</a>
		</div>
		<div class="relationship-count">' . $this->msg('ur-relationship-count-foes', $rel->user_name, $total)->text() . '</div>';
        }
        if ($relationships) {
            $x = 1;
            foreach ($relationships as $relationship) {
                $indivRelationship = UserRelationship::getUserRelationshipByID($relationship['user_id'], $user->getID());
                // Safe titles
                $userPage = Title::makeTitle(NS_USER, $relationship['user_name']);
                $addRelationshipLink = SpecialPage::getTitleFor('AddRelationship');
                $removeRelationshipLink = SpecialPage::getTitleFor('RemoveRelationship');
                $giveGiftLink = SpecialPage::getTitleFor('GiveGift');
                $userPageURL = htmlspecialchars($userPage->getFullURL());
                $avatar = new wAvatar($relationship['user_id'], 'ml');
                $avatar_img = $avatar->getAvatarURL();
                $username_length = strlen($relationship['user_name']);
                $username_space = stripos($relationship['user_name'], ' ');
                if (($username_space == false || $username_space >= "30") && $username_length > 30) {
                    $user_name_display = substr($relationship['user_name'], 0, 30) . ' ' . substr($relationship['user_name'], 30, 50);
                } else {
                    $user_name_display = $relationship['user_name'];
                }
                $output .= "<div class=\"relationship-item\">\n\t\t\t\t\t<a href=\"{$userPageURL}\">{$avatar_img}</a>\n\t\t\t\t\t<div class=\"relationship-info\">\n\t\t\t\t\t\t<div class=\"relationship-name\">\n\t\t\t\t\t\t\t<a href=\"{$userPageURL}\">{$user_name_display}</a>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"relationship-actions\">";
                if ($indivRelationship == false) {
                    $output .= $lang->pipeList(array(Linker::link($addRelationshipLink, $this->msg('ur-add-friend')->plain(), array(), array('user' => $relationship['user_name'], 'rel_type' => 1)), Linker::link($addRelationshipLink, $this->msg('ur-add-foe')->plain(), array(), array('user' => $relationship['user_name'], 'rel_type' => 2)), ''));
                } elseif ($user_name == $user->getName()) {
                    $output .= Linker::link($removeRelationshipLink, $rem, array(), array('user' => $relationship['user_name']));
                    $output .= $this->msg('pipe-separator')->escaped();
                }
                $output .= Linker::link($giveGiftLink, $this->msg('ur-give-gift')->plain(), array(), array('user' => $relationship['user_name']));
                $output .= '</div>
					<div class="cleared"></div>
				</div>';
                $output .= '</div>';
                if ($x == count($relationships) || $x != 1 && $x % $per_row == 0) {
                    $output .= '<div class="cleared"></div>';
                }
                $x++;
            }
        }
        /**
         * Build next/prev nav
         */
        $total = intval(str_replace(',', '', $total));
        $numofpages = $total / $per_page;
        $pageLink = $this->getPageTitle();
        if ($numofpages > 1) {
            $output .= '<div class="page-nav">';
            if ($page > 1) {
                $output .= Linker::link($pageLink, $this->msg('ur-previous')->plain(), array(), array('user' => $user_name, 'rel_type' => $rel_type, 'page' => $page - 1)) . $this->msg('word-separator')->plain();
            }
            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($pageLink, $i, array(), array('user' => $user_name, 'rel_type' => $rel_type, 'page' => $i)) . $this->msg('word-separator')->plain();
                }
            }
            if ($total - $per_page * $page > 0) {
                $output .= $this->msg('word-separator')->plain() . Linker::link($pageLink, $this->msg('ur-next')->plain(), array(), array('user' => $user_name, 'rel_type' => $rel_type, 'page' => $page + 1));
            }
            $output .= '</div>';
        }
        $out->addHTML($output);
    }
    /**
     * Get the user board for a given user.
     *
     * @param $user_id Integer: user's ID number
     * @param $user_name String: user name
     */
    function getUserBoard($user_id, $user_name)
    {
        global $wgUser, $wgOut, $wgUserProfileDisplay, $wgUserProfileScripts;
        // Anonymous users cannot have user boards
        if ($user_id == 0) {
            return '';
        }
        // Don't display anything if user board on social profiles isn't
        // enabled in site configuration
        if ($wgUserProfileDisplay['board'] == false) {
            return '';
        }
        $output = '';
        // Prevent E_NOTICE
        $wgOut->addScriptFile($wgUserProfileScripts . '/UserProfilePage.js');
        $rel = new UserRelationship($user_name);
        $friends = $rel->getRelationshipList(1, 4);
        $stats = new UserStats($user_id, $user_name);
        $stats_data = $stats->getUserStats();
        $total = $stats_data['user_board'];
        // If the user is viewing their own profile or is allowed to delete
        // board messages, add the amount of private messages to the total
        // sum of board messages.
        if ($wgUser->getName() == $user_name || $wgUser->isAllowed('userboard-delete')) {
            $total = $total + $stats_data['user_board_priv'];
        }
        $output .= '<div class="user-section-heading">
			<div class="user-section-title">' . wfMsg('user-board-title') . '</div>
			<div class="user-section-actions">
				<div class="action-right">';
        if ($wgUser->getName() == $user_name) {
            if ($friends) {
                $output .= '<a href="' . UserBoard::getBoardBlastURL() . '">' . wfMsg('user-send-board-blast') . '</a>';
            }
            if ($total > 10) {
                $output .= wfMsgExt('pipe-separator', 'escapenoentities');
            }
        }
        if ($total > 10) {
            $output .= '<a href="' . UserBoard::getUserBoardURL($user_name) . '">' . wfMsg('user-view-all') . '</a>';
        }
        $output .= '</div>
				<div class="action-left">';
        if ($total > 10) {
            $output .= wfMsg('user-count-separator', '10', $total);
        } elseif ($total > 0) {
            $output .= wfMsg('user-count-separator', $total, $total);
        }
        $output .= '</div>
				<div class="cleared"></div>
			</div>
		</div>
		<div class="cleared"></div>';
        if ($wgUser->getName() !== $user_name) {
            if ($wgUser->isLoggedIn() && !$wgUser->isBlocked()) {
                $output .= '<div class="user-page-message-form">
						<input type="hidden" id="user_name_to" name="user_name_to" value="' . addslashes($user_name) . '" />
						<span style="color:#797979;">' . wfMsgHtml('userboard_messagetype') . '</span>
						<select id="message_type">
							<option value="0">' . wfMsgHtml('userboard_public') . '</option>
							<option value="1">' . wfMsgHtml('userboard_private') . '</option>
						</select><p>
						<textarea name="message" id="message" cols="43" 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('user-board-login-message', $login_link->escapeFullURL()) . '</div>';
            }
        }
        $output .= '<div id="user-page-board">';
        $b = new UserBoard();
        $output .= $b->displayMessages($user_id, 0, 10);
        $output .= '</div>';
        return $output;
    }
예제 #8
0
function getRelationshipRequestLink() {
	global $wgUser, $wgScriptPath;
	$friend_request_count = UserRelationship::getOpenRequestCount( $wgUser->getID(), 1 );
	$foe_request_count = UserRelationship::getOpenRequestCount( $wgUser->getID(), 2 );
	$relationship_request_link = SpecialPage::getTitleFor( 'ViewRelationshipRequests' );

	$output = '';

	if ( $friend_request_count > 0 ) {
		$output .= '<p>
			<img src="' . $wgScriptPath . '/extensions/SocialProfile/images/addedFriendIcon.png" alt="" border="0" />
			<span class="profile-on"><a href="' . $relationship_request_link->escapeFullURL() . '" rel="nofollow">'
			. wfMsgExt( 'mp-request-new-friend', 'parsemag', $friend_request_count ) . '</a></span>
		</p>';
	}

	if ( $foe_request_count > 0 ) {
		$output .= '<p>
			<img src="' . $wgScriptPath . '/extensions/SocialProfile/images/addedFoeIcon.png" alt="" border="0" />
			<span class="profile-on"><a href="' . $relationship_request_link->escapeFullURL() . '" rel="nofollow">'
			. wfMsgExt( 'mp-request-new-foe', 'parsemag', $foe_request_count ) . '</a></span>
		</p>';
	}

	return $output;
}
 /**
  * Get the relationshipt list.
  * @param UserRelationship $relationships
  * @return string
  */
 public function getAjaxRelationships($relationships)
 {
     $ajaxrels = array();
     $relationshipList = $relationships->getRelationshipList();
     foreach ($relationshipList as $relationshipName) {
         $rel = $relationships->get($relationshipName)->getDefinition();
         $rel['lhs_module'] = translate($rel['lhs_module']);
         $rel['rhs_module'] = translate($rel['rhs_module']);
         //#28668  , translate the relationship type before render it .
         switch ($rel['relationship_type']) {
             case 'one-to-one':
                 $rel['relationship_type_render'] = translate('LBL_ONETOONE');
                 break;
             case 'one-to-many':
                 $rel['relationship_type_render'] = translate('LBL_ONETOMANY');
                 break;
             case 'many-to-one':
                 $rel['relationship_type_render'] = translate('LBL_MANYTOONE');
                 break;
             case 'many-to-many':
                 $rel['relationship_type_render'] = translate('LBL_MANYTOMANY');
                 break;
             default:
                 $rel['relationship_type_render'] = '';
         }
         $rel['name'] = $relationshipName;
         if ($rel['is_custom'] && isset($rel['from_studio']) && $rel['from_studio']) {
             $rel['name'] = $relationshipName . "*";
         }
         $ajaxrels[] = $rel;
     }
     return $ajaxrels;
 }
	/**
	 * Show the special page
	 *
	 * @param $params Mixed: parameter(s) passed to the page or null
	 */
	public function execute( $params ) {
		global $wgUser, $wgOut, $wgRequest, $wgUserRelationshipScripts;

		// Can't use $this->setHeaders(); here because then it'll set the page
		// title to <removerelationship> and we don't want that, we'll be
		// messing with the page title later on in the code
		$wgOut->setArticleRelated( false );
		$wgOut->setRobotPolicy( 'noindex,nofollow' );

		$wgOut->addExtensionStyle( $wgUserRelationshipScripts . '/UserRelationship.css' );

		$userTitle = Title::newFromDBkey( $wgRequest->getVal( 'user' ) );

		if ( !$userTitle ) {
			$wgOut->setPageTitle( wfMsgHtml( 'ur-error-title' ) );
			$wgOut->addWikiText( wfMsgNoTrans( 'ur-add-no-user' ) );
			return false;
		}

		$user = Title::makeTitle( NS_USER, $userTitle->getText() );

		$this->user_name_to = $userTitle->getText();
		$this->user_id_to = User::idFromName( $this->user_name_to );
		$this->relationship_type = $wgRequest->getInt( 'rel_type' );
		if ( !$this->relationship_type || !is_numeric( $this->relationship_type ) ) {
			$this->relationship_type = 1;
		}
		$hasRelationship = UserRelationship::getUserRelationshipByID(
			$this->user_id_to,
			$wgUser->getID()
		);

		if ( ( $wgUser->getID() == $this->user_id_to ) && ( $wgUser->getID() != 0 ) ) {
			$wgOut->setPageTitle( wfMsg( 'ur-error-title' ) );
			$out .= '<div class="relationship-error-message">' .
				wfMsg( 'ur-add-error-message-yourself' ) .
			'</div>
			<div>
				<input type="button" class="site-button" value="' . wfMsg( 'ur-main-page' ) . '" size="20" onclick=\'window.location="index.php?title="' . wfMsgForContent( 'mainpage' ) . '"\' />';
			if ( $wgUser->isLoggedIn() ) {
				$out .= '<input type="button" class="site-button" value="' . wfMsg( 'ur-your-profile' ) . '" size="20" onclick=\'window.location="' . $wgUser->getUserPage()->escapeFullURL() . '"\' />';
			}
			$out .= '</div>';

			$wgOut->addHTML( $out );

		} elseif ( $wgUser->isBlocked() ) {
			$wgOut->setPageTitle( wfMsg( 'ur-error-title' ) );
			$out .= '<div class="relationship-error-message">' .
				wfMsg( 'ur-add-error-message-blocked' ) .
			'</div>
			<div>
				<input type="button" class="site-button" value="' . wfMsg( 'ur-main-page' ) . '" size="20" onclick=\'window.location="index.php?title="' . wfMsgForContent( 'mainpage' ) . '"\' />';
			if ( $wgUser->isLoggedIn() ) {
				$out .= '<input type="button" class="site-button" value="' . wfMsg( 'ur-your-profile' ) . '" size="20" onclick=\'window.location="' . $wgUser->getUserPage()->escapeFullURL() . '"\' />';
			}
			$out .= '</div>';

			$wgOut->addHTML( $out );

		} elseif ( $this->user_id_to == 0 ) {
			$wgOut->setPageTitle( wfMsg( 'ur-error-title' ) );
			$out .= '<div class="relationship-error-message">' .
				wfMsg( 'ur-add-error-message-no-user' ) .
			'</div>
			<div>
				<input type="button" class="site-button" value="' . wfMsg( 'ur-main-page' ) . '" size="20" onclick=\'window.location="index.php?title="' . wfMsgForContent( 'mainpage' ) . '"\' />';
			if ( $wgUser->isLoggedIn() ) {
				$out .= '<input type="button" class="site-button" value="' . wfMsg( 'ur-your-profile' ) . '" size="20" onclick=\'window.location="' . $wgUser->getUserPage()->escapeFullURL() . '"\' />';
			}
			$out .= '</div>';

			$wgOut->addHTML( $out );

		} elseif ( $hasRelationship >= 1 ) {

			if ( $hasRelationship == 1 ) {
				$error = wfMsg( 'ur-add-error-message-existing-relationship-friend', $this->user_name_to );
			} else {
				$error = wfMsg( 'ur-add-error-message-existing-relationship-foe', $this->user_name_to );
			}

			$avatar = new wAvatar( $this->user_id_to, 'l' );

			$out = '';
			$wgOut->setPageTitle( wfMsg( 'ur-error-title' ) );

			$out .= "<div class=\"relationship-action\">
				{$avatar->getAvatarURL()}
				" . $error . "
				<div class=\"relationship-buttons\">
					<input type=\"button\" class=\"site-button\" value=\"" . wfMsg( 'ur-main-page' ) . "\" size=\"20\" onclick=\"window.location='index.php?title=" . wfMsgForContent( 'mainpage' ) . "'\"/>
					<input type=\"button\" class=\"site-button\" value=\"" . wfMsg( 'ur-your-profile' ) . "\" size=\"20\" onclick=\"window.location='" . $wgUser->getUserPage()->escapeFullURL() . "'\"/>
				</div>
				<div class=\"cleared\"></div>
			</div>";

			$wgOut->addHTML( $out );

		} elseif ( UserRelationship::userHasRequestByID( $this->user_id_to, $wgUser->getID() ) == true ) {

			if ( $this->relationship_type == 1 ) {
				$error = wfMsg( 'ur-add-error-message-pending-friend-request', $this->user_name_to );
			} else {
				$error = wfMsg( 'ur-add-error-message-pending-foe-request', $this->user_name_to );
			}

			$avatar = new wAvatar( $this->user_id_to, 'l' );

			$out = '';
			$wgOut->setPageTitle( wfMsg( 'ur-add-error-message-pending-request-title' ) );
			$out .= "<div class=\"relationship-action\">
				{$avatar->getAvatarURL()}
				" . $error . "
				<div class=\"relationship-buttons\">
					<input type=\"button\" class=\"site-button\" value=\"" . wfMsg( 'ur-main-page' ) . "\" size=\"20\" onclick=\"window.location='index.php?title=" . wfMsgForContent( 'mainpage' ) . "'\"/>
					<input type=\"button\" class=\"site-button\" value=\"" . wfMsg( 'ur-your-profile' ) . "\" size=\"20\" onclick=\"window.location='" . $wgUser->getUserPage()->escapeFullURL() . "'\"/>
				</div>
				<div class=\"cleared\"></div>
			</div>";

			$wgOut->addHTML( $out );
		} elseif ( UserRelationship::userHasRequestByID( $wgUser->getID(), $this->user_id_to ) == true ) {
			$relationship_request = SpecialPage::getTitleFor( 'ViewRelationshipRequests' );
			$wgOut->redirect( $relationship_request->getFullURL() );
		} elseif ( $wgUser->getID() == 0 ) {
			$login_link = SpecialPage::getTitleFor( 'Userlogin' );

			if ( $this->relationship_type == 1 ) {
				$error = wfMsg( 'ur-add-error-message-not-loggedin-friend' );
			} else {
				$error = wfMsg( 'ur-add-error-message-not-loggedin-foe' );
			}

			$out = '';
			$wgOut->setPageTitle( wfMsg( 'ur-error-title' ) );
			$out .= '<div class="relationship-error-message">'
				. $error .
			'</div>
			<div>
				<input type="button" class="site-button" value="' . wfMsg( 'ur-main-page' ) . '" size="20" onclick=\'window.location="index.php?title="' . wfMsgForContent( 'mainpage' ) . '"\' />
				<input type="button" class="site-button" value="' . wfMsg( 'ur-login' ) . '" size="20" onclick="window.location=\'' . $login_link->escapeFullURL() . '\'" />';
			$out .= '</div>';

			$wgOut->addHTML( $out );
		} else {
			$rel = new UserRelationship( $wgUser->getName() );

			if ( $wgRequest->wasPosted() && $_SESSION['alreadysubmitted'] == false ) {
				$_SESSION['alreadysubmitted'] = true;
				$rel = $rel->addRelationshipRequest( $this->user_name_to, $this->relationship_type, $wgRequest->getVal( 'message' ) );

				$avatar = new wAvatar( $this->user_id_to, 'l' );

				$out = '';

				if ( $this->relationship_type == 1 ) {
					$wgOut->setPageTitle( wfMsg( 'ur-add-sent-title-friend', $this->user_name_to ) );
					$sent = wfMsg( 'ur-add-sent-message-friend', $this->user_name_to );
				} else {
					$wgOut->setPageTitle( wfMsg( 'ur-add-sent-title-foe', $this->user_name_to ) );
					$sent = wfMsg( 'ur-add-sent-message-foe', $this->user_name_to );
				}

				$out .= "<div class=\"relationship-action\">
					{$avatar->getAvatarURL()}
					" . $sent . "
					<div class=\"relationship-buttons\">
						<input type=\"button\" class=\"site-button\" value=\"" . wfMsg( 'ur-main-page' ) . "\" size=\"20\" onclick=\"window.location='index.php?title=" . wfMsgForContent( 'mainpage' ) . "'\"/>
						<input type=\"button\" class=\"site-button\" value=\"" . wfMsg( 'ur-your-profile' ) . "\" size=\"20\" onclick=\"window.location='" . $wgUser->getUserPage()->escapeFullURL() . "'\"/>
					</div>
					<div class=\"cleared\"></div>
				</div>";

				$wgOut->addHTML( $out );
			} else {
				$_SESSION['alreadysubmitted'] = false;
				$wgOut->addHTML( $this->displayForm() );
			}
		}
	}
	function getRelationships( $rel_type ) {
		global $wgUser;
		$rel = new UserRelationship( $wgUser->getName() );
		$relationships = $rel->getRelationshipIDs( $rel_type );
		return $relationships;
	}
    /**
     * Display the form for giving out a gift to a user when there was no user
     * parameter in the URL.
     *
     * @return String: HTML
     */
    function displayFormNoUser()
    {
        global $wgUser, $wgOut, $wgRequest, $wgFriendingEnabled;
        $output = $wgOut->setPageTitle(wfMsg('g-give-no-user-title'));
        // @todo FIXME: $wgRequest->getVal()...seriously?
        // Seems that this should use the proper MW function (maybe
        // $this->getTitle()->getFullURL() or something) instead.
        // Maybe that's the reason why I (and other people) frequently have
        // problems with this special page.
        // --Jack Phoenix <*****@*****.**>, 6 April 2011
        $output .= '<form action="" method="get" enctype="multipart/form-data" name="gift">
			<input type="hidden" name="title" value="' . $wgRequest->getVal('title') . '" />
			<div class="g-message">' . wfMsg('g-give-no-user-message') . '</div>
			<div class="g-give-container">';
        // If friending is enabled, build a dropdown menu of the user's
        // friends
        if ($wgFriendingEnabled) {
            $rel = new UserRelationship($wgUser->getName());
            $friends = $rel->getRelationshipList(1);
            if ($friends) {
                $output .= '<div class="g-give-title">' . wfMsg('g-give-list-friends-title') . '</div>
					<div class="g-gift-select">
						<select onchange="javascript:chooseFriend(this.value)">
						<option value="#" selected="selected">' . wfMsg('g-select-a-friend') . '</option>';
                foreach ($friends as $friend) {
                    $output .= '<option value="' . urlencode($friend['user_name']) . '">' . $friend['user_name'] . '</option>';
                }
                $output .= '</select>
					</div>
					<div class="g-give-separator">' . wfMsg('g-give-separator') . '</div>';
            }
        }
        $output .= '<div class="g-give-title">' . wfMsg('g-give-enter-friend-title') . '</div>
			<div class="g-give-textbox">
				<input type="text" width="85" name="user" value="" />
				<input class="site-button" type="button" value="' . wfMsg('g-give-gift') . '" onclick="document.gift.submit()" />
			</div>
			</div>
		</form>';
        return $output;
    }
	/**
	 * Display the form for giving out a gift to a user when there was no user
	 * parameter in the URL.
	 *
	 * @return String: HTML
	 */
	function displayFormNoUser() {
		global $wgUser, $wgOut, $wgFriendingEnabled;

		$wgOut->setPageTitle( wfMsg( 'g-give-no-user-title' ) );

		$output = '<form action="" method="get" enctype="multipart/form-data" name="gift">' .
			Html::hidden( 'title', $this->getTitle() ) .
			'<div class="g-message">' .
				wfMsg( 'g-give-no-user-message' ) .
			'</div>
			<div class="g-give-container">';

			// If friending is enabled, build a dropdown menu of the user's
			// friends
			if ( $wgFriendingEnabled ) {
				$rel = new UserRelationship( $wgUser->getName() );
				$friends = $rel->getRelationshipList( 1 );

				if ( $friends ) {
					$output .= '<div class="g-give-title">' .
						wfMsg( 'g-give-list-friends-title' ) .
					'</div>
					<div class="g-gift-select">
						<select onchange="javascript:chooseFriend(this.value)">
							<option value="#" selected="selected">' .
								wfMsg( 'g-select-a-friend' ) .
							'</option>';
					foreach ( $friends as $friend ) {
						$output .= '<option value="' . urlencode( $friend['user_name'] ) . '">' .
							$friend['user_name'] .
						'</option>' . "\n";
					}
					$output .= '</select>
					</div>
					<div class="g-give-separator">' .
						wfMsg( 'g-give-separator' ) .
					'</div>';
				}
			}

			$output .= '<div class="g-give-title">' .
				wfMsg( 'g-give-enter-friend-title' ) .
			'</div>
			<div class="g-give-textbox">
				<input type="text" width="85" name="user" value="" />
				<input class="site-button" type="button" value="' . wfMsg( 'g-give-gift' ) . '" onclick="document.gift.submit()" />
			</div>
			</div>
		</form>';

		return $output;
	}
    /**
     * Displays the form for sending board blasts
     */
    function displayForm()
    {
        global $wgUser;
        $stats = new UserStats($wgUser->getID(), $wgUser->getName());
        $stats_data = $stats->getUserStats();
        $friendCount = $stats_data['friend_count'];
        $foeCount = $stats_data['foe_count'];
        $output = '<div class="board-blast-message-form">
				<h2>' . wfMsg('boardblaststep1') . '</h2>
				<form method="post" name="blast" action="">
					<input type="hidden" name="ids" id="ids" />
					<div class="blast-message-text">' . wfMsg('boardblastprivatenote') . '</div>
					<textarea name="message" id="message" cols="63" rows="4"></textarea>
				</form>
		</div>
		<div class="blast-nav">
				<h2>' . wfMsg('boardblaststep2') . '</h2>
				<div class="blast-nav-links">
					<a href="javascript:void(0);" onclick="javascript:select_all()">' . wfMsg('boardlinkselectall') . '</a> -
					<a href="javascript:void(0);" onclick="javascript:unselect_all()">' . wfMsg('boardlinkunselectall') . '</a> ';
        if ($friendCount > 0 && $foeCount > 0) {
            $output .= '- <a href="javascript:void(0);" onclick="javascript:toggle_friends(1)">' . wfMsg('boardlinkselectfriends') . '</a> -';
            $output .= '<a href="javascript:void(0);" onclick="javascript:toggle_friends(0)">' . wfMsg('boardlinkunselectfriends') . '</a>';
        }
        if ($foeCount > 0 && $friendCount > 0) {
            $output .= '- <a href="javascript:void(0);" onclick="javascript:toggle_foes(1)">' . wfMsg('boardlinkselectfoes') . '</a> -';
            $output .= '<a href="javascript:void(0);" onclick="javascript:toggle_foes(0)">' . wfMsg('boardlinkunselectfoes') . '</a>';
        }
        $output .= '</div>
		</div>';
        $rel = new UserRelationship($wgUser->getName());
        $relationships = $rel->getRelationshipList();
        $output .= '<div id="blast-friends-list" class="blast-friends-list">';
        $x = 1;
        $per_row = 3;
        if (count($relationships) > 0) {
            foreach ($relationships as $relationship) {
                if ($relationship['type'] == 1) {
                    $class = 'friend';
                } else {
                    $class = 'foe';
                }
                $id = $relationship['user_id'];
                $output .= '<div class="blast-' . $class . "-unselected\" id=\"user-{$id}\" onclick=\"javascript:toggle_user({$id})\">\r\n\t\t\t\t\t\t{$relationship['user_name']}\r\n\t\t\t\t\t</div>";
                if ($x == count($relationships) || $x != 1 && $x % $per_row == 0) {
                    $output .= '<div class="cleared"></div>';
                }
                $x++;
            }
        } else {
            $output .= '<div>' . wfMsg('boardnofriends') . '</div>';
        }
        $output .= '</div>

			<div class="cleared"></div>';
        $output .= '<div class="blast-message-box-button">
			<input type="button" value="' . wfMsg('boardsendbutton') . '" class="site-button" onclick="javascript:send_messages();" />
		</div>';
        return $output;
    }
	/**
	 * Show the special page
	 *
	 * @param $params Mixed: parameter(s) passed to the page or null
	 */
	public function execute( $params ) {
		global $wgUser, $wgOut, $wgRequest, $wgUserRelationshipScripts;

		// Can't use $this->setHeaders(); here because then it'll set the page
		// title to <removerelationship> and we don't want that, we'll be
		// messing with the page title later on in the code
		$wgOut->setArticleRelated( false );
		$wgOut->setRobotPolicy( 'noindex,nofollow' );

		$wgOut->addExtensionStyle( $wgUserRelationshipScripts . '/UserRelationship.css' );

		$usertitle = Title::newFromDBkey( $wgRequest->getVal( 'user' ) );
		if ( !$usertitle ) {
			$wgOut->setPageTitle( wfMsgHtml( 'ur-error-title' ) );
			$wgOut->addWikiText( wfMsgNoTrans( 'ur-add-no-user' ) );
			return false;
		}

		$this->user_name_to = $usertitle->getText();
		$this->user_id_to = User::idFromName( $this->user_name_to );
		$this->relationship_type = UserRelationship::getUserRelationshipByID(
			$this->user_id_to,
			$wgUser->getID()
		);

		if ( $this->relationship_type == 1 ) {
			$confirmTitle = wfMsg( 'ur-remove-relationship-title-confirm-friend', $this->user_name_to );
			$confirmMsg = wfMsg( 'ur-remove-relationship-message-confirm-friend', $this->user_name_to );
			$error = wfMsg( 'ur-remove-error-not-loggedin-friend' );
			$pending = wfMsg( 'ur-remove-error-message-pending-friend-request', $this->user_name_to );
		} else {
			$confirmTitle = wfMsg( 'ur-remove-relationship-title-confirm-foe', $this->user_name_to );
			$confirmMsg = wfMsg( 'ur-remove-relationship-message-confirm-foe', $this->user_name_to );
			$error = wfMsg( 'ur-remove-error-not-loggedin-foe' );
			$pending = wfMsg( 'ur-remove-error-message-pending-foe-request', $this->user_name_to );
		}

		$out = '';
		if ( $wgUser->getID() == $this->user_id_to ) {
			$wgOut->setPageTitle( wfMsg( 'ur-error-title' ) );
			$out .= '<div class="relationship-error-message">' .
				wfMsg( 'ur-remove-error-message-remove-yourself' ) .
			'</div>
			<div>
				<input type="button" class="site-button" value="' . wfMsg( 'ur-main-page' ) . '" size="20" onclick=\'window.location="index.php?title=' . wfMsgForContent( 'mainpage' ) . '"\' />';
			if ( $wgUser->isLoggedIn() ) {
				$out .= '<input type="button" class="site-button" value="' . wfMsg( 'ur-your-profile' ) . '" size="20" onclick=\'window.location="' . $wgUser->getUserPage()->escapeFullURL() . '"\' />';
			}
			$out .= '</div>';

			$wgOut->addHTML( $out );
		} elseif ( $this->relationship_type == false ) {
			$wgOut->setPageTitle( wfMsg( 'ur-error-title' ) );
			$out .= '<div class="relationship-error-message">' .
				wfMsg( 'ur-remove-error-message-no-relationship', $this->user_name_to ) .
			'</div>
			<div>
				<input type="button" class="site-button" value="' . wfMsg( 'ur-main-page' ) . '" size="20" onclick=\'window.location="index.php?title="' . wfMsgForContent( 'mainpage' ) . '"\' />';
			if ( $wgUser->isLoggedIn() ) {
				$out .= '<input type="button" class="site-button" value="' . wfMsg( 'ur-your-profile' ) . '" size="20" onclick=\'window.location="' . $wgUser->getUserPage()->escapeFullURL() . '"\' />';
			}
			$out .= '</div>';

			$wgOut->addHTML( $out );
		} elseif ( UserRelationship::userHasRequestByID( $this->user_id_to, $wgUser->getID() ) == true ) {
			$wgOut->setPageTitle( wfMsg( 'ur-error-title' ) );
			$out .= '<div class="relationship-error-message">' .
				$pending .
				'</div>
			<div>
				<input type="button" class="site-button" value="' . wfMsg( 'ur-main-page' ) . '" size="20" onclick=\'window.location="index.php?title="' . wfMsgForContent( 'mainpage' ) . '"\' />';
			if ( $wgUser->isLoggedIn() ) {
				$out .= '<input type="button" class="site-button" value="' . wfMsg( 'ur-your-profile' ) . '" size="20" onclick=\'window.location="' . $wgUser->getUserPage()->escapeFullURL() . '"\' />';
			}
			$out .= '</div>';

			$wgOut->addHTML( $out );
		} elseif ( $wgUser->getID() == 0 ) {
			$wgOut->setPageTitle( wfMsg( 'ur-error-title' ) );
			$out .= '<div class="relationship-error-message">' .
				$error .
			'</div>
			<div>
				<input type="button" class="site-button" value="' . wfMsg( 'ur-main-page' ) . '" size="20" onclick=\'window.location="index.php?title="' . wfMsgForContent( 'mainpage' ) . '"\' />';
			if ( $wgUser->isLoggedIn() ) {
				$out .= '<input type="button" class="site-button" value="' . wfMsg( 'ur-your-profile' ) . '" size="20" onclick=\'window.location="' . $wgUser->getUserPage()->escapeFullURL() . '"\' />';
			}
			$out .= '</div>';

			$wgOut->addHTML( $out );
		} else {
			$rel = new UserRelationship( $wgUser->getName() );
	 		if ( $wgRequest->wasPosted() && $_SESSION['alreadysubmitted'] == false ) {
				$_SESSION['alreadysubmitted'] = true;
				$rel->removeRelationshipByUserID(
					$this->user_id_to,
					$wgUser->getID()
				);
				$rel->sendRelationshipRemoveEmail(
					$this->user_id_to,
					$wgUser->getName(),
					$this->relationship_type
				);
				$avatar = new wAvatar( $this->user_id_to, 'l' );

				$wgOut->setPageTitle( $confirmTitle );

				$out .= "<div class=\"relationship-action\">
					{$avatar->getAvatarURL()}" .
					$confirmMsg .
					"<div class=\"relationship-buttons\">
						<input type=\"button\" class=\"site-button\" value=\"" . wfMsg( 'ur-main-page' ) . "\" size=\"20\" onclick=\"window.location='index.php?title=" . wfMsgForContent( 'mainpage' ) . "'\"/>
						<input type=\"button\" class=\"site-button\" value=\"" . wfMsg( 'ur-your-profile' ) . "\" size=\"20\" onclick=\"window.location='" . $wgUser->getUserPage()->escapeFullURL() . "'\"/>
					</div>
					<div class=\"cleared\"></div>
					</div>";

				$wgOut->addHTML( $out );
			} else {
				$_SESSION['alreadysubmitted'] = false;
				$wgOut->addHTML( $this->displayForm() );
			}

		}
	}
	/**
	 * Show the special page
	 *
	 * @param $params Mixed: parameter(s) passed to the page or null
	 */
	public function execute( $params ) {
		global $wgUser, $wgOut, $wgRequest, $wgUserRelationshipScripts, $wgLang;

		$wgOut->addExtensionStyle( $wgUserRelationshipScripts . '/UserRelationship.css' );

		$output = '';

		/**
		 * Get query string variables
		 */
		$user_name = $wgRequest->getVal( 'user' );
		$rel_type = $wgRequest->getInt( 'rel_type' );
		$page = $wgRequest->getInt( 'page' );

		/**
		 * Redirect Non-logged in users to Login Page
		 * It will automatically return them to the ViewRelationships page
		 */
		if ( !$wgUser->isLoggedIn() && $user_name == '' ) {
			$wgOut->setPageTitle( wfMsg( 'ur-error-page-title' ) );
			$login = SpecialPage::getTitleFor( 'Userlogin' );
			$wgOut->redirect( $login->escapeFullURL( 'returnto=Special:ViewRelationships' ) );
			return false;
		}

		/**
		 * Set up config for page / default values
		 */
		if ( !$page || !is_numeric( $page ) ) {
			$page = 1;
		}
		if ( !$rel_type || !is_numeric( $rel_type ) ) {
			$rel_type = 1;
		}
		$per_page = 50;
		$per_row = 2;

		/**
		 * 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 );
		$userPage = Title::makeTitle( NS_USER, $user_name );

		/**
		 * Error message for username that does not exist (from URL)
		 */
		if ( $user_id == 0 ) {
			$wgOut->setPageTitle( wfMsg( 'ur-error-title' ) );
			$out = '<div class="relationship-error-message">' .
				wfMsg( 'ur-error-message-no-user' ) .
			'</div>
			<div class="relationship-request-buttons">
				<input type="button" class="site-button" value="' . wfMsg( 'ur-main-page' ) . '" onclick=\'window.location="index.php?title=' . wfMsgForContent( 'mainpage' ) . '"\' />';
			if ( $wgUser->isLoggedIn() ) {
				$out .= '<input type="button" class="site-button" value="' . wfMsg( 'ur-your-profile' ) . '" onclick=\'window.location="' . $wgUser->getUserPage()->escapeFullURL() . '"\' />';
			}
			$out .= '</div>';
			$wgOut->addHTML( $out );
			return false;
		}

		/**
		 * Get all relationships
		 */
		$rel = new UserRelationship( $user_name );
		$relationships = $rel->getRelationshipList( $rel_type, $per_page, $page );

		$stats = new UserStats( $rel->user_id, $rel->user_name );
		$stats_data = $stats->getUserStats();
		$friend_count = $stats_data['friend_count'];
		$foe_count = $stats_data['foe_count'];

		$back_link = Title::makeTitle( NS_USER, $rel->user_name );
		$inviteContactsLink = SpecialPage::getTitleFor( 'InviteContacts' );

		if ( $rel_type == 1 ) {
			$output .= $wgOut->setPageTitle( wfMsg( 'ur-title-friend', $rel->user_name ) );
			$total = $friend_count;
			$rem = wfMsg( 'ur-remove-relationship-friend' );
			$output .= '<div class="back-links">
			<a href="' . $back_link->escapeFullURL() . '">' .
				wfMsg( 'ur-backlink', $rel->user_name ) .
			'</a>
		</div>
		<div class="relationship-count">' .
			wfMsgExt(
				'ur-relationship-count-friends',
				'parsemag',
				$rel->user_name,
				$total,
				$inviteContactsLink->escapeFullURL()
			) . '</div>';
		} else {
			$output .= $wgOut->setPageTitle( wfMsg( 'ur-title-foe', $rel->user_name ) );
			$total = $foe_count;
			$rem = wfMsg( 'ur-remove-relationship-foe' );
			$output .= '<div class="back-links">
			<a href="' . $back_link->escapeFullURL() . '">' .
				wfMsg( 'ur-backlink', $rel->user_name ) .
			'</a>
		</div>
		<div class="relationship-count">'
			. wfMsgExt(
				'ur-relationship-count-foes',
				'parsemag',
				$rel->user_name,
				$total,
				$inviteContactsLink->escapeFullURL()
			) . '</div>';
		}

		if ( $relationships ) {
			$x = 1;

			foreach ( $relationships as $relationship ) {
				$indivRelationship = UserRelationship::getUserRelationshipByID(
					$relationship['user_id'],
					$wgUser->getID()
				);

				// Safe titles
				$userPage = Title::makeTitle( NS_USER, $relationship['user_name'] );
				$addRelationshipLink = SpecialPage::getTitleFor( 'AddRelationship' );
				$removeRelationshipLink = SpecialPage::getTitleFor( 'RemoveRelationship' );
				$giveGiftLink = SpecialPage::getTitleFor( 'GiveGift' );

				$avatar = new wAvatar( $relationship['user_id'], 'ml' );

				$avatar_img = $avatar->getAvatarURL();

				$user_safe = urlencode( $relationship['user_name'] );

				$username_length = strlen( $relationship['user_name'] );
				$username_space = stripos( $relationship['user_name'], ' ' );

				if ( ( $username_space == false || $username_space >= "30" ) && $username_length > 30 ) {
					$user_name_display = substr( $relationship['user_name'], 0, 30 ) .
						' ' . substr( $relationship['user_name'], 30, 50 );
				} else {
					$user_name_display = $relationship['user_name'];
				}

				$output .= "<div class=\"relationship-item\">
					<a href=\"{$userPage->escapeFullURL()}\">{$avatar_img}</a>
					<div class=\"relationship-info\">
						<div class=\"relationship-name\">
							<a href=\"{$userPage->escapeFullURL()}\">{$user_name_display}</a>
						</div>
					<div class=\"relationship-actions\">";
				if ( $indivRelationship == false ) {
					$output .= $wgLang->pipeList( array(
						'<a href="' . $addRelationshipLink->escapeFullURL( 'user='******'&rel_type=1' ) . '">' . wfMsg( 'ur-add-friend' ) . '</a>',
						'<a href="' . $addRelationshipLink->escapeFullURL( 'user='******'&rel_type=2' ) . '">' . wfMsg( 'ur-add-foe' ) . '</a>',
						''
					) );
				} elseif ( $user_name == $wgUser->getName() ) {
					$output .= '<a href="' . $removeRelationshipLink->escapeFullURL( 'user='******'">' . $rem . '</a>';
					$output .= wfMsgExt( 'pipe-separator', 'escapenoentities' );
				}
				$output .= '<a href="' . $giveGiftLink->escapeFullURL( 'user='******'">' . wfMsg( 'ur-give-gift' ) . '</a>';

				$output .= '</div>
					<div class="cleared"></div>
				</div>';

				$output .= '</div>';
				if ( $x == count( $relationships ) || $x != 1 && $x % $per_row == 0 ) {
					$output .= '<div class="cleared"></div>';
				}
				$x++;
			}
		}

		/**
		 * Build next/prev nav
		 */
		$total = intval( str_replace( ',', '', $total ) );
		$numofpages = $total / $per_page;

		$pageLink = SpecialPage::getTitleFor( 'ViewRelationships' );

		if ( $numofpages > 1 ) {
			$output .= '<div class="page-nav">';
			if ( $page > 1 ) {
				$output .= '<a href="' . $pageLink->escapeFullURL( 'user='******'&rel_type=' . $rel_type . '&page=' . ( $page - 1 ) ) . '">' . wfMsg( 'ur-previous' ) . '</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="' . $pageLink->escapeFullURL( 'user='******'&rel_type=' . $rel_type . '&page=' . $i ) . "\">$i</a> ";
				}
			}

			if ( ( $total - ( $per_page * $page ) ) > 0 ) {
				$output .= ' <a href="' . $pageLink->escapeFullURL( 'user='******'&rel_type=' . $rel_type . '&page=' . ( $page + 1 ) ) . '">' . wfMsg( 'ur-next' ) . '</a>';
			}
			$output .= '</div>';
		}

		$wgOut->addHTML( $output );
	}
예제 #17
0
    /**
     * Get the user board for a given user.
     *
     * @param $user_id Integer: user's ID number
     * @param $user_name String: user name
     */
    function getUserBoard($user_id, $user_name)
    {
        global $wgUser, $wgOut, $wgUserProfileDisplay;
        // Anonymous users cannot have user boards
        if ($user_id == 0) {
            return '';
        }
        // Don't display anything if user board on social profiles isn't
        // enabled in site configuration
        if ($wgUserProfileDisplay['board'] == false) {
            return '';
        }
        $output = '';
        // Prevent E_NOTICE
        // Add JS
        $wgOut->addModules('ext.socialprofile.userprofile.js');
        $rel = new UserRelationship($user_name);
        $friends = $rel->getRelationshipList(1, 4);
        $stats = new UserStats($user_id, $user_name);
        $stats_data = $stats->getUserStats();
        $total = $stats_data['user_board'];
        // If the user is viewing their own profile or is allowed to delete
        // board messages, add the amount of private messages to the total
        // sum of board messages.
        if ($wgUser->getName() == $user_name || $wgUser->isAllowed('userboard-delete')) {
            $total = $total + $stats_data['user_board_priv'];
        }
        $output .= '<div class="panel panel-default"><div class="user-section-heading panel-heading">
			<div class="user-section-title">' . wfMessage('user-board-title')->escaped() . '</div>
			<div class="user-section-actions">
				<div class="action-right">';
        if ($wgUser->getName() == $user_name) {
            if ($friends) {
                $output .= '<a href="' . UserBoard::getBoardBlastURL() . '">' . wfMessage('user-send-board-blast')->escaped() . '</a>';
            }
            if ($total > 10) {
                $output .= wfMessage('pipe-separator')->escaped();
            }
        }
        if ($total > 10) {
            $output .= '<a href="' . UserBoard::getUserBoardURL($user_name) . '">' . wfMessage('user-view-all')->escaped() . '</a>';
        }
        $output .= '</div>
				<div class="action-left">';
        if ($total > 10) {
            $output .= wfMessage('user-count-separator', '10', $total)->escaped();
        } elseif ($total > 0) {
            $output .= wfMessage('user-count-separator', $total, $total)->escaped();
        }
        $output .= '</div>
				<div class="cleared"></div>
			</div>
		</div>
		<div class="cleared"></div> <div class="panel-body">';
        if ($wgUser->getName() != $user_name) {
            if ($wgUser->isLoggedIn() && !$wgUser->isBlocked()) {
                $output .= '<div class="user-page-message-form">
						<input type="hidden" id="user_name_to" name="user_name_to" value="' . addslashes($user_name) . '" />
						<span class="profile-board-message-type">' . wfMessage('userboard_messagetype')->escaped() . '</span>
						<select id="message_type">
							<option value="0">' . wfMessage('userboard_public')->escaped() . '</option>
							<option value="1">' . wfMessage('userboard_private')->escaped() . '</option>
						</select><p><div class="form-group" style="padding:14px;">
                                      <textarea class="form-control" name="message" id="message" placeholder=""></textarea>
                                    </div>
						
						<div class="user-page-message-box-button">
							<input type="button" value="' . wfMessage('userboard_sendbutton')->escaped() . '" class="site-button mw-ui-button mw-ui-progressive" />
						</div>
					</div>';
            } else {
                $login_link = SpecialPage::getTitleFor('Userlogin');
                $output .= '<div class="user-page-message-form">' . wfMessage('user-board-login-message', $login_link->getFullURL())->escaped() . '</div>';
            }
        }
        $output .= '<div id="user-page-board">';
        $b = new UserBoard();
        $output .= $b->displayMessages($user_id, 0, 10);
        $output .= '</div></div></div>';
        return $output;
    }