http://www.mediawiki.org/wiki/Special:Code/MediaWiki/100269
Revision: 100269
Author: ashley
Date: 2011-10-19 20:16:39 +0000 (Wed, 19 Oct 2011)
Log Message:
-----------
SocialProfile: allow specifying and showing the user's year of birth on social
profile pages. Patch by Rinat Silnov.
To use this feature, go to Special:UpdateProfile/preferences, toggle the new
"Show year of birth" option, save preferences, then add your birthday on
Special:UpdateProfile, save again and now your birthday will be shown on your
profile.
Do note that because of the mw.loader.using() call in
UserProfile/UpdateProfile.js, this breaks backwards compatibility with
pre-ResourceLoader MediaWikis (that is, 1.16 and older). I don't know if this
works with 1.17, but I tested this against the current 1.18 branch.
Modified Paths:
--------------
trunk/extensions/SocialProfile/UserProfile/SpecialEditProfile.php
trunk/extensions/SocialProfile/UserProfile/SpecialUpdateProfile.php
trunk/extensions/SocialProfile/UserProfile/UpdateProfile.js
trunk/extensions/SocialProfile/UserProfile/UserProfile.i18n.php
trunk/extensions/SocialProfile/UserProfile/UserProfileClass.php
Modified: trunk/extensions/SocialProfile/UserProfile/SpecialEditProfile.php
===================================================================
--- trunk/extensions/SocialProfile/UserProfile/SpecialEditProfile.php
2011-10-19 20:15:34 UTC (rev 100268)
+++ trunk/extensions/SocialProfile/UserProfile/SpecialEditProfile.php
2011-10-19 20:16:39 UTC (rev 100269)
@@ -179,7 +179,7 @@
$hometown_city = $s->up_hometown_city;
$hometown_state = $s->up_hometown_state;
$hometown_country = $s->up_hometown_country;
- $birthday = $this->formatBirthday( $s->up_birthday );
+ $birthday = $this->formatBirthday( $s->up_birthday,
true );
$schools = $s->up_schools;
$places = $s->up_places_lived;
$websites = $s->up_websites;
@@ -286,8 +286,8 @@
$form .= '<div class="profile-update">
<p class="profile-update-title">' . wfMsg(
'user-profile-personal-birthday' ) . '</p>
- <p class="profile-update-unit-left">' . wfMsg(
'user-profile-personal-birthdate' ) . '</p>
- <p class="profile-update-unit"><input type="text"
size="25" name="birthday" id="birthday" value="' . ( isset( $birthday ) ?
$birthday : '' ) . '" /></p>
+ <p class="profile-update-unit-left">' . wfMsg(
'user-profile-personal-birthdate-with-year' ) . '</p>
+ <p class="profile-update-unit"><input type="text"
class="long-birthday" size="25" name="birthday" id="birthday" value="' . (
isset( $birthday ) ? $birthday : '' ) . '" /></p>
<div class="cleared"></div>
</div><div class="cleared"></div>';
Modified: trunk/extensions/SocialProfile/UserProfile/SpecialUpdateProfile.php
===================================================================
--- trunk/extensions/SocialProfile/UserProfile/SpecialUpdateProfile.php
2011-10-19 20:15:34 UTC (rev 100268)
+++ trunk/extensions/SocialProfile/UserProfile/SpecialUpdateProfile.php
2011-10-19 20:16:39 UTC (rev 100269)
@@ -86,7 +86,7 @@
$wgOut->addScriptFile( $wgUserProfileScripts .
'/UpdateProfile.js' );
}
- if ( $wgRequest->wasPosted() ) {
+ if ( $wgRequest->wasPosted() ) {
if ( !$section ) {
$section = 'basic';
}
@@ -194,6 +194,7 @@
$notify_challenge = $wgRequest->getVal( 'notify_challenge' );
$notify_honorifics = $wgRequest->getVal( 'notify_honorifics' );
$notify_message = $wgRequest->getVal( 'notify_message' );
+ $show_year_of_birth = $wgRequest->getVal( 'show_year_of_birth',
0 );
if ( $notify_friend == '' ) {
$notify_friend = 0;
}
@@ -214,6 +215,7 @@
$wgUser->setOption( 'notifychallenge', $notify_challenge );
$wgUser->setOption( 'notifyhonorifics', $notify_honorifics );
$wgUser->setOption( 'notifymessage', $notify_message );
+ $wgUser->setOption( 'showyearofbirth', $show_year_of_birth );
$wgUser->saveSettings();
// Allow extensions like UserMailingList do their magic here
@@ -222,8 +224,8 @@
function formatBirthdayDB( $birthday ) {
$dob = explode( '/', $birthday );
- if ( count( $dob ) == 2 ) {
- $year = 2007;
+ if ( count( $dob ) == 2 || count( $dob ) == 3 ) {
+ $year = isset( $dob[2] ) ? $dob[2] : 2007;
$month = $dob[0];
$day = $dob[1];
$birthday_date = $year . '-' . $month . '-' . $day;
@@ -233,13 +235,16 @@
return ( $birthday_date );
}
- function formatBirthday( $birthday ) {
+ function formatBirthday( $birthday, $showYOB = false ) {
$dob = explode( '-', $birthday );
if ( count( $dob ) == 3 ) {
- $year = 0000;
$month = $dob[1];
$day = $dob[2];
- $birthday_date = $month . '/' . $day; // . '/' . $year;
+ $birthday_date = $month . '/' . $day;
+ if ( $showYOB ) {
+ $year = $dob[0];
+ $birthday_date .= '/' . $year;
+ }
} else {
$birthday_date = '';
}
@@ -382,6 +387,7 @@
__METHOD__
);
+ $showYOB = true;
if ( $s !== false ) {
$location_city = $s->up_location_city;
$location_state = $s->up_location_state;
@@ -391,7 +397,8 @@
$hometown_city = $s->up_hometown_city;
$hometown_state = $s->up_hometown_state;
$hometown_country = $s->up_hometown_country;
- $birthday = $this->formatBirthday( $s->up_birthday );
+ $showYOB = $wgUser->getIntOption( 'showyearofbirth',
!isset( $s->up_birthday ) ) == 1;
+ $birthday = $this->formatBirthday( $s->up_birthday,
$showYOB );
$schools = $s->up_schools;
$places = $s->up_places_lived;
$websites = $s->up_websites;
@@ -498,8 +505,13 @@
$form .= '<div class="profile-update">
<p class="profile-update-title">' . wfMsg(
'user-profile-personal-birthday' ) . '</p>
- <p class="profile-update-unit-left">' . wfMsg(
'user-profile-personal-birthdate' ) . '</p>
- <p class="profile-update-unit"><input type="text"
size="25" name="birthday" id="birthday" value="' . ( isset( $birthday ) ?
$birthday : '' ) . '" /></p>
+ <p class="profile-update-unit-left"
id="birthday-format">' .
+ wfMsg( $showYOB ?
'user-profile-personal-birthdate-with-year' : 'user-profile-personal-birthdate'
) .
+ '</p>
+ <p class="profile-update-unit"><input type="text"' .
+ ( $showYOB ? ' class="long-birthday"' : null ) .
+ ' size="25" name="birthday" id="birthday" value="' .
+ ( isset( $birthday ) ? $birthday : '' ) . '" /></p>
<div class="cleared"></div>
</div><div class="cleared"></div>';
@@ -662,8 +674,18 @@
* @return HTML
*/
function displayPreferencesForm() {
- global $wgUser, $wgOut;
+ global $wgRequest, $wgUser, $wgOut;
+ $dbr = wfGetDB( DB_MASTER );
+ $s = $dbr->selectRow(
+ 'user_profile',
+ array( 'up_birthday' ),
+ array( 'up_user_id' => $wgUser->getID() ),
+ __METHOD__
+ );
+
+ $showYOB = isset( $s, $s->up_birthday ) ? false : true;
+
// @todo If the checkboxes are in front of the option, this
would look more like Special:Preferences
$wgOut->setPageTitle( wfMsg( 'user-profile-section-preferences'
) );
$form = UserProfile::getEditProfileNav( wfMsg(
'user-profile-section-preferences' ) );
@@ -689,6 +711,14 @@
' <input type="checkbox" size="25"
name="notify_honorifics" id="notify_honorifics" value="1"' . ( (
$wgUser->getIntOption( 'notifyhonorifics', 1 ) == 1 ) ? 'checked' : '' ) . '/>
</p>';
+ $form .= '<p class="profile-update-title">' .
+ wfMsg( 'user-profile-preferences-miscellaneous' ) .
+ '</p>
+ <p class="profile-update-row">' .
+ wfMsg(
'user-profile-preferences-miscellaneous-show-year-of-birth' ) .
+ ' <input type="checkbox" size="25"
name="show_year_of_birth" id="show_year_of_birth" value="1"' . ( (
$wgUser->getIntOption( 'showyearofbirth', $showYOB ) == 1 ) ? 'checked' : '' )
. '/>
+ </p>';
+
// Allow extensions (like UserMailingList) to add new checkboxes
wfRunHooks( 'SpecialUpdateProfile::displayPreferencesForm',
array( $this, &$form ) );
@@ -735,7 +765,7 @@
$form = '<h1>' . wfMsg( 'user-profile-tidbits-title' ) .
'</h1>';
$form .= UserProfile::getEditProfileNav( wfMsg(
'user-profile-section-custom' ) );
$form .= '<form action="" method="post"
enctype="multipart/form-data" name="profile">
- <div class="profile-info clearfix">
+ <div class="profile-info clearfix">
<div class="profile-update">
<p class="profile-update-title">' .
wfMsgForContent( 'user-profile-tidbits-title' ) . '</p>
<div id="profile-update-custom1">
Modified: trunk/extensions/SocialProfile/UserProfile/UpdateProfile.js
===================================================================
--- trunk/extensions/SocialProfile/UserProfile/UpdateProfile.js 2011-10-19
20:15:34 UTC (rev 100268)
+++ trunk/extensions/SocialProfile/UserProfile/UpdateProfile.js 2011-10-19
20:16:39 UTC (rev 100269)
@@ -40,4 +40,14 @@
}
document.getElementById( id + '_form' ).innerHTML = section_select;
-}
\ No newline at end of file
+}
+
+mw.loader.using( 'jquery.ui.datepicker', function() {
+ jQuery( function( jQuery ) {
+ jQuery( '#birthday' ).datepicker({
+ changeYear: true,
+ yearRange: '1930:c',
+ dateFormat: jQuery( '#birthday' ).hasClass(
'long-birthday' ) ? 'mm/dd/yy' : 'mm/dd'
+ });
+ });
+});
\ No newline at end of file
Modified: trunk/extensions/SocialProfile/UserProfile/UserProfile.i18n.php
===================================================================
--- trunk/extensions/SocialProfile/UserProfile/UserProfile.i18n.php
2011-10-19 20:15:34 UTC (rev 100268)
+++ trunk/extensions/SocialProfile/UserProfile/UserProfile.i18n.php
2011-10-19 20:16:39 UTC (rev 100269)
@@ -117,6 +117,7 @@
'user-profile-personal-hometown' => 'Hometown',
'user-profile-personal-birthday' => 'Birthday',
'user-profile-personal-birthdate' => 'Date (MM/DD)',
+ 'user-profile-personal-birthdate-with-year' => 'Date (MM/DD/YYYY)',
'user-profile-personal-aboutme' => 'About me',
'user-profile-personal-work' => 'Work',
'user-profile-personal-occupation' => 'Occupation',
@@ -142,6 +143,8 @@
'user-profile-preferences-emails-gift' => 'When you receive a gift',
'user-profile-preferences-emails-level' => 'When advancing a level',
'user-profile-preferences-emails-weekly' => 'Receive weekly email
updates',
+ 'user-profile-preferences-miscellaneous' => 'Miscellaneous',
+ 'user-profile-preferences-miscellaneous-show-year-of-birth' => 'Show
year of birth',
'user-profile-update-button' => 'Update',
'user-profile-tidbits-title' => 'Tidbits',
'user-profile-tidbits-favmoment' => 'Favorite sports moment',
@@ -9284,6 +9287,7 @@
'user-profile-personal-hometown' => 'Родной город',
'user-profile-personal-birthday' => 'День рождения',
'user-profile-personal-birthdate' => 'Дата (ММ/ДД)',
+ 'user-profile-personal-birthdate-with-year' => 'Дата (ММ/ДД/ГГГГ)',
'user-profile-personal-aboutme' => 'Обо мне',
'user-profile-personal-work' => 'Работа',
'user-profile-personal-occupation' => 'Занятие',
@@ -9309,6 +9313,8 @@
'user-profile-preferences-emails-gift' => 'Когда вы получаете подарок',
'user-profile-preferences-emails-level' => 'Когда повышается уровень',
'user-profile-preferences-emails-weekly' => 'Получать еженедельные
обновления по почте',
+ 'user-profile-preferences-miscellaneous' => 'Разное',
+ 'user-profile-preferences-miscellaneous-show-year-of-birth' =>
'Показывать год рождения',
'user-profile-update-button' => 'Обновить',
'user-profile-tidbits-title' => 'Интересные подробности',
'user-profile-tidbits-favmoment' => 'Любимые спортивный момент',
Modified: trunk/extensions/SocialProfile/UserProfile/UserProfileClass.php
===================================================================
--- trunk/extensions/SocialProfile/UserProfile/UserProfileClass.php
2011-10-19 20:15:34 UTC (rev 100268)
+++ trunk/extensions/SocialProfile/UserProfile/UserProfileClass.php
2011-10-19 20:16:39 UTC (rev 100269)
@@ -84,6 +84,9 @@
public function getProfile() {
global $wgMemc;
+ $user = User::newFromId( $this->user_id );
+ $user->loadFromId();
+
// Try cache first
$key = wfMemcKey( 'user', 'profile', 'info', $this->user_id );
$data = $wgMemc->get( $key );
@@ -107,13 +110,15 @@
$profile['user_page_type'] = 1;
$profile['user_id'] = 0;
}
+ $showYOB = $user->getIntOption( 'showyearofbirth',
!isset( $row->up_birthday ) ) == 1;
+ $issetUpBirthday = isset( $row->up_birthday ) ?
$row->up_birthday : '';
$profile['location_city'] = isset(
$row->up_location_city ) ? $row->up_location_city : '';
$profile['location_state'] = isset(
$row->up_location_state ) ? $row->up_location_state : '';
$profile['location_country'] = isset(
$row->up_location_country ) ? $row->up_location_country : '';
$profile['hometown_city'] = isset(
$row->up_hometown_city ) ? $row->up_hometown_city : '';
$profile['hometown_state'] = isset(
$row->up_hometown_state ) ? $row->up_hometown_state : '';
$profile['hometown_country'] = isset(
$row->up_hometown_country ) ? $row->up_hometown_country : '';
- $profile['birthday'] = $this->formatBirthday( isset(
$row->up_birthday ) ? $row->up_birthday : '' );
+ $profile['birthday'] = $this->formatBirthday(
$issetUpBirthday, $showYOB);
$profile['about'] = isset( $row->up_about ) ?
$row->up_about : '';
$profile['places_lived'] = isset( $row->up_places_lived
) ? $row->up_places_lived : '';
@@ -138,8 +143,6 @@
$wgMemc->set( $key, $profile );
}
- $user = User::newFromId( $this->user_id );
- $user->loadFromId();
$profile['real_name'] = $user->getRealName();
$profile['email'] = $user->getEmail();
@@ -152,12 +155,16 @@
* @param $birthday String: birthday in YYYY-MM-DD format
* @return String: formatted birthday
*/
- function formatBirthday( $birthday ) {
+ function formatBirthday( $birthday, $showYear = true ) {
$dob = explode( '-', $birthday );
if ( count( $dob ) == 3 ) {
$month = $dob[1];
$day = $dob[2];
- return date( 'F jS', mktime( 0, 0, 0, $month, $day ) );
+ if ( !$showYear ) {
+ return date( 'F jS', mktime( 0, 0, 0, $month,
$day ) );
+ }
+ $year = $dob[0];
+ return date( 'F jS, Y', mktime( 0, 0, 0, $month, $day,
$year ) );
//return $day . ' ' . $wgLang->getMonthNameGen( $month
);
}
return $birthday;
_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs