Extension:SocialProfile/For developers

Overview

SocialProfile consists of 9 components:

  • SystemGifts — awards functionality
  • UserActivity — social recent changes, such as the feed of friends' recent activity, etc.
  • UserBoard — user-to-user messages
  • UserGifts — gifting functionality
  • UserProfile — social profile pages
  • UserRelationship — friend/foe relationships
  • UserStats — statistics, such as the User Levels system
  • UserSystemMessages — used to send "You have advanced to level [fill in this]" messages to users when User Levels is activated ($wgUserLevels is defined)
  • UserWelcome — <userWelcome /> parser hook for displaying social info on a wiki page

Of these, UserWelcome is not enabled by default.

If you want to become a SocialProfile developer, feel free to drop Jack Phoenix a line and then apply for commit access.

Uploads

SocialProfile has three special pages, which are used to upload images that are used by SocialProfile:

  • Special:UploadAvatar (SocialProfile/UserProfile/includes/specials/SpecialUploadAvatar.php), which stores its files in $wgUploadPath/avatars, is used to upload users' avatars. This special page can be accessed via the social profile page by any user who has the 'upload' user right (any registered user by default).
  • Special:GiftManagerLogo (SocialProfile/UserGifts/includes/specials/SpecialGiftManagerLogo.php), which stores its files in $wgUploadPath/awards, is used to upload images associated with user-to-user gifts. This special page can be accessed via Special:GiftManager by any user with the 'giftmanager' user right (administrators and members of the staff group by default). If $wgMaxCustomUserGiftCount is greater than 0, then normal users (users without the 'giftmanager' user right) can access this special page, too.
  • Special:SystemGiftManagerLogo (SocialProfile/SystemGifts/includes/specials/SpecialSystemGiftManagerLogo.php), which stores its files in $wgUploadPath/awards, is used to upload award (system gift) images. This special page can be accessed by users with the 'awardsmanage' user right (administrators and members of the staff group by default).

Files uploaded via these special pages are not treated as normal MediaWiki files.

Image file name formats:

  • user avatars: $wgDBname_USERID_SIZE.EXTENSION (i.e. testwiki_1_l.png; size can be l for large, ml for medium-large, s for small)
  • gift images: GIFTID_SIZE.EXTENSION (i.e. 4_m.gif)
  • award (system gift) images: sg_SYSTEMGIFTID_SIZE.EXTENSION (i.e. sg_15_s.jpg)

In the past, all of these special pages used ImageMagick to resize the images. Since r93067, PHP's GD library has been supported so SocialProfile's image uploads should function properly even on platforms where ImageMagick is not available.

Hooks

See Category:Extension hooks provided by SocialProfile for a full listing of hooks provided by SocialProfile.

There are several hooks in the SocialProfile codebase which allow you to alter or inject data.

If you need more hooks added to the core of SocialProfile, please discuss with Jack Phoenix about it, preferrably providing a good reason why a new hook should be added. :-)

Customization of Profile

You can add anything above and below both columns of the profile by the following hooks:

$wgHooks['UserProfileBeginLeft'][] = 'wfUserProfileBeginTest';
function wfUserProfileBeginTest( $user_profile ) {
	$out = $user_profile->getContext()->getOutput();
	$out->addHTML( "this was inserted at the left beginning from the hook [profile:{$user_profile->profileOwner->getName()}]" );
}

$wgHooks['UserProfileEndLeft'][] = 'wfUserProfileBeginTest2';
function wfUserProfileBeginTest2( $user_profile ) {
	$out = $user_profile->getContext()->getOutput();
	$out->addHTML( "this was inserted at the left end from the hook [profile:{$user_profile->profileOwner->getName()}]" );
}

$wgHooks['UserProfileBeginRight'][] = 'wfUserProfileBeginTest3';
function wfUserProfileBeginTest3( $user_profile ) {
	$out = $user_profile->getContext()->getOutput();
	$out->addHTML( "this was inserted at the right beginning from the hook [profile:{$user_profile->profileOwner->getName()}]" );
}

$wgHooks['UserProfileEndRight'][] = 'wfUserProfileBeginTest4';
function wfUserProfileBeginTest4( $user_profile ) {
	$out = $user_profile->getContext()->getOutput();
	$out->addHTML( "this was inserted at the right end from the hook [profile:{$user_profile->profileOwner->getName()}]" );
}

Example extension that uses UserProfile's hooks

The following piece of code adds a "Xbox Gamecard" section to social profile pages:

<?php
/**
 * XBoxGamerCardUserProfile extension
 *
 * @file
 * @ingroup Extensions
 * @author Aaron Wright
 * @author David Pean
 * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
 */
$wgHooks['UserProfileBeginLeft'][] = 'wfUserProfileXboxGamerCard';

function wfUserProfileXboxGamerCard( $user_profile ) {
	$cardHTML = '';

	$xboxId = strip_tags( $user_profile->profile_data['custom_1'] );

	if ( $xboxId ) {
		// @note Ideally you should *not* hard-code in English text like this
		// and instead you should make proper use of MediaWiki's localization framework.
		// See [[Manual:Messages API]] on MediaWiki.org for more details.
		$cardHTML .= '<div class="user-section-heading">
			<div class="user-section-title">Xbox Gamecard</div>
			<div class="user-section-actions">
				<div class="action-right"></div>
				<div class="action-left"></div>
			</div>
			<div class="visualClear"></div>
		</div>
		<div class="visualClear"></div>
		<div class="profile-info-container">
			<iframe src="http://gamercard.xbox.com/' . $xboxId . '.card" scrolling="no" frameBorder="0" height="140" width="204">'
				. $xboxId .
			'</iframe>
		</div>';

		$user_profile->getContext()->getOutput()->addHTML( $cardHTML );
	}
}
Category:Social tools