<?php
/**
- General information about this file:
- We're now using the HTMLForm object with some customisation to generate the Preferences
- form. This object handles generic submission, CSRF protection, layout and other logic
- in a reusable manner. We subclass it as a PreferencesForm to make some minor
- customisations.
- In order to generate the form, the HTMLForm object needs an array structure detailing the
- form fields available, and that's what this class is for. Each element of the array is
- a basic property-list, including the type of field, the label it is to be given in the
- form, callbacks for validation and 'filtering', and other pertinent information. Note that
- the 'default' field is named for generic forms, and does not represent the preference's
- default (which is stored in $wgDefaultUserOptions), but the default for the form field,
- which should be whatever the user has set for that preference. There is no need to
- override it unless you have some special storage logic (for instance, those not presently
- stored as options, but which are best set from the user preferences view).
- Field types are implemented as subclasses of the generic HTMLFormField object, and
- typically implement at least getInputHTML, which generates the HTML for the input field
- to be placed in the table.
- Once fields have been retrieved and validated, submission logic is handed over to the
- tryUISubmit static method of this class.
- */
-
+ * We're now using the HTMLForm object with some customisation to generate the
+ * Preferences form. This object handles generic submission, CSRF protection,
+ * layout and other logic in a reusable manner. We subclass it as a PreferencesForm
+ * to make some minor customisations.
+ *
+ * In order to generate the form, the HTMLForm object needs an array structure
+ * detailing the form fields available, and that's what this class is for. Each
+ * element of the array is a basic property-list, including the type of field,
+ * the label it is to be given in the form, callbacks for validation and
+ * 'filtering', and other pertinent information. Note that the 'default' field
+ * is named for generic forms, and does not represent the preference's default
+ * (which is stored in $wgDefaultUserOptions), but the default for the form
+ * field, which should be whatever the user has set for that preference. There
+ * is no need to override it unless you have some special storage logic (for
+ * instance, those not presently stored as options, but which are best set from
+ * the user preferences view).
+ *
+ * Field types are implemented as subclasses of the generic HTMLFormField
+ * object, and typically implement at least getInputHTML, which generates the
+ * HTML for the input field to be placed in the table.
+ *
+ * Once fields have been retrieved and validated, submission logic is handed
+ * over to the tryUISubmit static method of this class.
+ */
class Preferences {
static $defaultPreferences = null;
static $saveFilters =
);
}
- global $wgMaxSigChars, $wgParser;
+ global $wgMaxSigChars, $wgOut, $wgParser;
// show a preview of the old signature first
- $oldsigtext = $wgParser->preSaveTransform( "~~~", new Title , $user, new ParserOptions );
- $oldsig = $wgParser->parse( $oldsigtext, new Title , new ParserOptions );
- $m = array(); // remove <p> created by the parser (looks better without <p>)
- if( preg_match( '/^<p>(.*)\n?<\/p>\n?$/sU', $oldsig->mText, $m ) ) $oldsig->mText = $m[1];
-
+ $oldsigWikiText = $wgParser->preSaveTransform( "~~~", new Title , $user, new ParserOptions );
+ $oldsigHTML = $wgOut->parseInline( $oldsigWikiText );
$defaultPreferences['oldsig'] =
array(
'type' => 'info',
'raw' => true,
'label-message' => 'tog-oldsig',
- 'default' => $oldsig->mText,
+ 'default' => $oldsigHTML,
'section' => 'personal/signature',
);
$defaultPreferences['nickname'] =
$defaultPreferences['emailaddress'] =
array(
- 'type' => $wgAuth->allowPropChange( 'emailaddress' ) ? 'text' : 'info',
+ 'type' => $wgAuth->allowPropChange( 'emailaddress' ) ? 'email' : 'info',
'default' => $user->getEmail(),
'section' => 'personal/email',
'label-message' => 'youremail',
}
- if( $wgEnableUserEmail ) {
+ if( $wgEnableUserEmail && $user->isAllowed( 'sendemail' ) ) {
$defaultPreferences['disablemail'] =
array(
'type' => 'toggle',
'label-message' => 'timezonelegend',
'options' => self::getTimezoneOptions(),
'default' => $tzSetting,
+ 'size' => 20,
'section' => 'datetime/timeoffset',
);
}
'type' => 'selectorother',
'section' => 'rendering/advancedrendering',
'options' => $stubThresholdOptions,
+ 'size' => 20,
'label' => wfMsg( 'stub-threshold' ), // Raw HTML message. Yay?
);
$defaultPreferences['highlightbroken'] =
}
}
+ /**
+ * @param object $user The user object
+ * @return array Text/links to display as key; $skinkey as value
+ */
static function generateSkinOptions( $user ) {
- global $wgDefaultSkin;
+ global $wgDefaultSkin, $wgLang, $wgAllowUserCss, $wgAllowUserJs;
$ret = array();
$mptitle = Title::newMainPage();
$sk = $user->getSkin();
foreach( $validSkinNames as $skinkey => $sn ) {
+ $linkTools = array();
+
+ # Mark the default skin
+ if( $skinkey == $wgDefaultSkin ) {
+ $linkTools[] = wfMsgHtml( 'default' );
+ }
+
+ # Create preview link
$mplink = htmlspecialchars( $mptitle->getLocalURL( "useskin=$skinkey" ) );
- $previewlink = "(<a target='_blank' href=\"$mplink\">$previewtext</a>)";
- $extraLinks = '';
- global $wgAllowUserCss, $wgAllowUserJs;
+ $linkTools[] = "<a target='_blank' href=\"$mplink\">$previewtext</a>";
+
+ # Create links to user CSS/JS pages
if( $wgAllowUserCss ) {
$cssPage = Title::makeTitleSafe( NS_USER, $user->getName() . '/' . $skinkey . '.css' );
- $customCSS = $sk->link( $cssPage, wfMsgHtml( 'prefs-custom-css' ) );
- $extraLinks .= " ($customCSS)";
+ $linkTools[] = $sk->link( $cssPage, wfMsgHtml( 'prefs-custom-css' ) );
}
if( $wgAllowUserJs ) {
$jsPage = Title::makeTitleSafe( NS_USER, $user->getName() . '/' . $skinkey . '.js' );
- $customJS = $sk->link( $jsPage, wfMsgHtml( 'prefs-custom-js' ) );
- $extraLinks .= " ($customJS)";
+ $linkTools[] = $sk->link( $jsPage, wfMsgHtml( 'prefs-custom-js' ) );
}
- if( $skinkey == $wgDefaultSkin )
- $sn .= ' (' . wfMsgHtml( 'default' ) . ')';
- $display = "$sn $previewlink{$extraLinks}";
+
+ $display = $sn . ' ' . wfMsg( 'parentheses', $wgLang->pipeList( $linkTools ) );
$ret[$display] = $skinkey;
}
}
$idCnt = 0;
- $epoch = '20010115161234'; # Wikipedia day
+ $epoch = wfTimestampNow();
foreach( $dateopts as $key ) {
if( $key == 'default' ) {
$formatted = wfMsgHtml( 'datedefault' );