Mixture of things.
authorSam Reed <reedy@users.mediawiki.org>
Tue, 11 May 2010 22:30:18 +0000 (22:30 +0000)
committerSam Reed <reedy@users.mediawiki.org>
Tue, 11 May 2010 22:30:18 +0000 (22:30 +0000)
Couple of class comments

Normalisation of "." usage at end of lines (removed)

Normalisation of {prefix}parameter as per bug 23461

55 files changed:
RELEASE-NOTES
includes/api/ApiBlock.php
includes/api/ApiDelete.php
includes/api/ApiDisabled.php
includes/api/ApiEditPage.php
includes/api/ApiEmailUser.php
includes/api/ApiFeedWatchlist.php
includes/api/ApiFormatDbg.php
includes/api/ApiFormatJson.php
includes/api/ApiFormatPhp.php
includes/api/ApiFormatTxt.php
includes/api/ApiFormatWddx.php
includes/api/ApiFormatXml.php
includes/api/ApiFormatYaml.php
includes/api/ApiGo.php
includes/api/ApiLogin.php
includes/api/ApiMain.php
includes/api/ApiMove.php
includes/api/ApiParse.php
includes/api/ApiPatrol.php
includes/api/ApiProtect.php
includes/api/ApiPurge.php
includes/api/ApiQuery.php
includes/api/ApiQueryAllCategories.php
includes/api/ApiQueryAllLinks.php
includes/api/ApiQueryAllUsers.php
includes/api/ApiQueryAllimages.php
includes/api/ApiQueryAllmessages.php
includes/api/ApiQueryAllpages.php
includes/api/ApiQueryBacklinks.php
includes/api/ApiQueryBlocks.php
includes/api/ApiQueryCategories.php
includes/api/ApiQueryCategoryMembers.php
includes/api/ApiQueryDeletedrevs.php
includes/api/ApiQueryDuplicateFiles.php
includes/api/ApiQueryExtLinksUsage.php
includes/api/ApiQueryFilearchive.php
includes/api/ApiQueryImageInfo.php
includes/api/ApiQueryLinks.php
includes/api/ApiQueryLogEvents.php
includes/api/ApiQueryProtectedTitles.php
includes/api/ApiQueryRandom.php
includes/api/ApiQueryRecentChanges.php
includes/api/ApiQueryRevisions.php
includes/api/ApiQuerySearch.php
includes/api/ApiQuerySiteinfo.php
includes/api/ApiQueryTags.php
includes/api/ApiQueryUserContributions.php
includes/api/ApiQueryWatchlist.php
includes/api/ApiQueryWatchlistRaw.php
includes/api/ApiRollback.php
includes/api/ApiUnblock.php
includes/api/ApiUndelete.php
includes/api/ApiUpload.php
includes/api/ApiUserrights.php

index b1fc9c2..bfeed8a 100644 (file)
@@ -175,6 +175,7 @@ in a negative namespace (which is invalid).
 * (bug 23458) Add support for pageid parameter to action=parse requests
 * (bug 23460) Parse action should have a section option
 * (bug 21346) Make deleted images searchable by hash
+* (bug 23461) Normalise usage of parameter names in parameter descriptions
 
 === Languages updated in 1.17 ===
 
index a345407..d0b0095 100644 (file)
@@ -169,7 +169,7 @@ class ApiBlock extends ApiBase {
 
        public function getDescription() {
                return array(
-                       'Block a user.'
+                       'Block a user'
                );
        }
        
index f5294dd..2dfd176 100644 (file)
@@ -221,11 +221,12 @@ class ApiDelete extends ApiBase {
        }
 
        public function getParamDescription() {
+               $p = $this->getModulePrefix();
                return array(
-                       'title' => 'Title of the page you want to delete. Cannot be used together with pageid',
-                       'pageid' => 'Page ID of the page you want to delete. Cannot be used together with title',
+                       'title' => "Title of the page you want to delete. Cannot be used together with {$p}pageid",
+                       'pageid' => "Page ID of the page you want to delete. Cannot be used together with {$p}title",
                        'token' => 'A delete token previously retrieved through prop=info',
-                       'reason' => 'Reason for the deletion. If not set, an automatically generated reason will be used.',
+                       'reason' => 'Reason for the deletion. If not set, an automatically generated reason will be used',
                        'watch' => 'Add the page to your watchlist',
                        'watchlist' => 'Unconditionally add or remove the page from your watchlist, use preferences or do not change watch',
                        'unwatch' => 'Remove the page from your watchlist',
@@ -235,7 +236,7 @@ class ApiDelete extends ApiBase {
 
        public function getDescription() {
                return array(
-                       'Delete a page.'
+                       'Delete a page'
                );
        }
 
index 64155ed..3845486 100644 (file)
@@ -61,7 +61,7 @@ class ApiDisabled extends ApiBase {
 
        public function getDescription() {
                return array(
-                       'This module has been disabled.'
+                       'This module has been disabled'
                );
        }
 
index b07c7ee..ad35b39 100644 (file)
@@ -433,6 +433,7 @@ class ApiEditPage extends ApiBase {
        }
 
        protected function getParamDescription() {
+               $p = $this->getModulePrefix();
                return array(
                        'title' => 'Page title',
                        'section' => 'Section number. 0 for the top section, \'new\' for a new section',
@@ -446,7 +447,7 @@ class ApiEditPage extends ApiBase {
                                                'Used to detect edit conflicts; leave unset to ignore conflicts.'
                        ),
                        'starttimestamp' => array( 'Timestamp when you obtained the edit token.',
-                                               'Used to detect edit conflicts; leave unset to ignore conflicts.'
+                                               'Used to detect edit conflicts; leave unset to ignore conflicts'
                        ),
                        'recreate' => 'Override any errors about the article having been deleted in the meantime',
                        'createonly' => 'Don\'t edit the page if it exists already',
@@ -456,11 +457,11 @@ class ApiEditPage extends ApiBase {
                        'watchlist' => 'Unconditionally add or remove the page from your watchlist, use preferences or do not change watch',
                        'captchaid' => 'CAPTCHA ID from previous request',
                        'captchaword' => 'Answer to the CAPTCHA',
-                       'md5' => array( 'The MD5 hash of the text parameter, or the prependtext and appendtext parameters concatenated.',
+                       'md5' => array( "The MD5 hash of the {$p}text parameter, or the {$p}prependtext and {$p}appendtext parameters concatenated.",
                                        'If set, the edit won\'t be done unless the hash is correct' ),
-                       'prependtext' => 'Add this text to the beginning of the page. Overrides text.',
-                       'appendtext' => 'Add this text to the end of the page. Overrides text',
-                       'undo' => 'Undo this revision. Overrides text, prependtext and appendtext',
+                       'prependtext' => "Add this text to the beginning of the page. Overrides {$p}text",
+                       'appendtext' => "Add this text to the end of the page. Overrides {$p}text",
+                       'undo' => "Undo this revision. Overrides {$p}text, {$p}prependtext and {$p}appendtext",
                        'undoafter' => 'Undo all revisions from undo to this one. If not set, just undo one revision',
                );
        }
index c1e5834..3dd607c 100644 (file)
@@ -28,6 +28,7 @@ if ( !defined( 'MEDIAWIKI' ) ) {
 }
 
 /**
+ * API Module to facilitate sending of emails to users
  * @ingroup API
  */
 class ApiEmailUser extends ApiBase {
index f18cbe3..3983b4c 100644 (file)
@@ -173,8 +173,8 @@ class ApiFeedWatchlist extends ApiBase {
                return array(
                        'feedformat' => 'The format of the feed',
                        'hours'      => 'List pages modified within this many hours from now',
-                       'allrev'     => 'Include multiple revisions of the same page within given timeframe.',
-                       'wlowner'     => "The user whose watchlist you want (must be accompanied by wltoken if it's not you)",
+                       'allrev'     => 'Include multiple revisions of the same page within given timeframe',
+                       'wlowner'     => "The user whose watchlist you want (must be accompanied by {$this->getModulePrefix()}token if it's not you)",
                        'wltoken'    => 'Security token that requested user set in their preferences'
                );
        }
index 89dad1e..39b2683 100644 (file)
@@ -29,6 +29,7 @@ if ( !defined( 'MEDIAWIKI' ) ) {
 }
 
 /**
+ * API PHP's var_export() output formatter
  * @ingroup API
  */
 class ApiFormatDbg extends ApiFormatBase {
index c1ea892..efa6fd7 100644 (file)
@@ -29,6 +29,7 @@ if ( !defined( 'MEDIAWIKI' ) ) {
 }
 
 /**
+ * API JSON output formatter
  * @ingroup API
  */
 class ApiFormatJson extends ApiFormatBase {
index 07e371c..5d263e5 100644 (file)
@@ -29,6 +29,7 @@ if ( !defined( 'MEDIAWIKI' ) ) {
 }
 
 /**
+ * API Serialized PHP output formatter
  * @ingroup API
  */
 class ApiFormatPhp extends ApiFormatBase {
index bbe0e9a..c829303 100644 (file)
@@ -29,6 +29,7 @@ if ( !defined( 'MEDIAWIKI' ) ) {
 }
 
 /**
+ * API Text output formatter
  * @ingroup API
  */
 class ApiFormatTxt extends ApiFormatBase {
index 23ef6b2..539dd3a 100644 (file)
@@ -29,6 +29,7 @@ if ( !defined( 'MEDIAWIKI' ) ) {
 }
 
 /**
+ * API WDDX output formatter
  * @ingroup API
  */
 class ApiFormatWddx extends ApiFormatBase {
index a09fd47..b5e2156 100644 (file)
@@ -29,6 +29,7 @@ if ( !defined( 'MEDIAWIKI' ) ) {
 }
 
 /**
+ * API XML output formatter
  * @ingroup API
  */
 class ApiFormatXml extends ApiFormatBase {
@@ -196,7 +197,7 @@ class ApiFormatXml extends ApiFormatBase {
 
        public function getParamDescription() {
                return array(
-                       'xmldoublequote' => 'If specified, double quotes all attributes and content.',
+                       'xmldoublequote' => 'If specified, double quotes all attributes and content',
                        'xslt' => 'If specified, adds <xslt> as stylesheet',
                );
        }
index 66d4f32..5848042 100644 (file)
@@ -29,6 +29,7 @@ if ( !defined( 'MEDIAWIKI' ) ) {
 }
 
 /**
+ * API YAML output formatter
  * @ingroup API
  */
 class ApiFormatYaml extends ApiFormatBase {
index 8e676e4..9ce0c49 100644 (file)
@@ -33,10 +33,6 @@ if ( !defined( 'MEDIAWIKI' ) ) {
  * @ingroup API
  */
 class ApiGo extends ApiBase {
-
-       /**
-        * Std ctor.
-        */
        public function __construct( $main, $action ) {
                parent::__construct( $main, $action );
        }
index 39685ae..dcf5ca8 100644 (file)
@@ -179,7 +179,7 @@ class ApiLogin extends ApiBase {
                        'In the event of a successful log-in, a cookie will be attached',
                        'to your session. In the event of a failed log-in, you will not ',
                        'be able to attempt another log-in through this method for 5 seconds.',
-                       'This is to prevent password guessing by automated password crackers.'
+                       'This is to prevent password guessing by automated password crackers'
                );
        }
 
index fb99be9..89469c7 100644 (file)
@@ -634,7 +634,7 @@ class ApiMain extends ApiBase {
                        '',
                        'Status:          All features shown on this page should be working, but the API',
                        '                 is still in active development, and  may change at any time.',
-                       '                 Make sure to monitor our mailing list for any updates.',
+                       '                 Make sure to monitor our mailing list for any updates',
                        '',
                        'Documentation:   http://www.mediawiki.org/wiki/API',
                        'Mailing list:    http://lists.wikimedia.org/mailman/listinfo/mediawiki-api',
index 8aed671..442feaa 100644 (file)
@@ -28,6 +28,7 @@ if ( !defined( 'MEDIAWIKI' ) ) {
 }
 
 /**
+ * API Module to move pages
  * @ingroup API
  */
 class ApiMove extends ApiBase {
@@ -202,13 +203,14 @@ class ApiMove extends ApiBase {
        }
 
        public function getParamDescription() {
+               $p = $this->getModulePrefix();
                return array(
-                       'from' => 'Title of the page you want to move. Cannot be used together with fromid.',
-                       'fromid' => 'Page ID of the page you want to move. Cannot be used together with from.',
-                       'to' => 'Title you want to rename the page to.',
+                       'from' => "Title of the page you want to move. Cannot be used together with {$p}fromid",
+                       'fromid' => "Page ID of the page you want to move. Cannot be used together with {$p}from",
+                       'to' => 'Title you want to rename the page to',
                        'token' => 'A move token previously retrieved through prop=info',
-                       'reason' => 'Reason for the move (optional).',
-                       'movetalk' => 'Move the talk page, if it exists.',
+                       'reason' => 'Reason for the move (optional)',
+                       'movetalk' => 'Move the talk page, if it exists',
                        'movesubpages' => 'Move subpages, if applicable',
                        'noredirect' => 'Don\'t create a redirect',
                        'watch' => 'Add the page and the redirect to your watchlist',
@@ -220,7 +222,7 @@ class ApiMove extends ApiBase {
 
        public function getDescription() {
                return array(
-                       'Move a page.'
+                       'Move a page'
                );
        }
 
index ac72504..1c22ced 100644 (file)
@@ -355,24 +355,25 @@ class ApiParse extends ApiBase {
        }
 
        public function getParamDescription() {
+               $p = $this->getModulePrefix();
                return array(
-                       'text' => 'Wikitext to parse.',
-                       'summary' => 'Summary to parse.',
-                       'redirects' => 'If the page parameter is set to a redirect, resolve it.',
-                       'title' => 'Title of page the text belongs to.',
-                       'page' => 'Parse the content of this page. Cannot be used together with text and title.',
-                       'pageid' => 'Parse the content of this page. Overrides page.',
-                       'oldid' => 'Parse the content of this revision. Overrides page and pageid.',
-                       'prop' => array( 'Which pieces of information to get.',
-                                       'NOTE: Section tree is only generated if there are more than 4 sections, or if the __TOC__ keyword is present.'
+                       'text' => 'Wikitext to parse',
+                       'summary' => 'Summary to parse',
+                       'redirects' => "If the {$p}page parameter is set to a redirect, resolve it",
+                       'title' => 'Title of page the text belongs to',
+                       'page' => "Parse the content of this page. Cannot be used together with {$p}text and {$p}title",
+                       'pageid' => "Parse the content of this page. Overrides {$p}page",
+                       'oldid' => "Parse the content of this revision. Overrides {$p}page and {$p}pageid",
+                       'prop' => array( 'Which pieces of information to get',
+                                       'NOTE: Section tree is only generated if there are more than 4 sections, or if the __TOC__ keyword is present'
                        ),
-                       'pst' => array( 'Do a pre-save transform on the input before parsing it.',
-                                       'Ignored if page, pageid or oldid is used.'
+                       'pst' => array( 'Do a pre-save transform on the input before parsing it',
+                                       'Ignored if page, pageid or oldid is used'
                        ),
-                       'onlypst' => array( 'Do a pre-save transform (PST) on the input, but don\'t parse it.',
-                                       'Returns the same wikitext, after a PST has been applied. Ignored if page, pageid or oldid is used.'
+                       'onlypst' => array( 'Do a pre-save transform (PST) on the input, but don\'t parse it',
+                                       'Returns the same wikitext, after a PST has been applied. Ignored if page, pageid or oldid is used'
                        ),
-                       'uselang' => 'Which language to parse the request in.',
+                       'uselang' => 'Which language to parse the request in',
                        'section' => 'Only retrieve the content of this section number',
                );
        }
index 5d14c00..dc246ef 100644 (file)
@@ -84,7 +84,7 @@ class ApiPatrol extends ApiBase {
 
        public function getDescription() {
                return array(
-                       'Patrol a page or revision'
+                       'Patrol a page or revision'
                );
        }
 
index 856e4ef..6c43b46 100644 (file)
@@ -179,7 +179,7 @@ class ApiProtect extends ApiBase {
 
        public function getParamDescription() {
                return array(
-                       'title' => 'Title of the page you want to (un)protect.',
+                       'title' => 'Title of the page you want to (un)protect',
                        'token' => 'A protect token previously retrieved through prop=info',
                        'protections' => 'Pipe-separated list of protection levels, formatted action=group (e.g. edit=sysop)',
                        'expiry' => array( 'Expiry timestamps. If only one timestamp is set, it\'ll be used for all protections.',
@@ -194,7 +194,7 @@ class ApiProtect extends ApiBase {
 
        public function getDescription() {
                return array(
-                       'Change the protection level of a page.'
+                       'Change the protection level of a page'
                );
        }
 
index 5c83d34..18e3299 100644 (file)
@@ -99,7 +99,7 @@ class ApiPurge extends ApiBase {
 
        public function getDescription() {
                return array(
-                       'Purge the cache for the given titles.'
+                       'Purge the cache for the given titles'
                );
        }
 
index 452c326..ec0c04d 100644 (file)
@@ -573,7 +573,7 @@ class ApiQuery extends ApiBase {
                        'generator' => array( 'Use the output of a list as the input for other prop/list/meta items',
                                        'NOTE: generator parameter names must be prefixed with a \'g\', see examples.' ),
                        'redirects' => 'Automatically resolve redirects',
-                       'indexpageids' => 'Include an additional pageids section listing all returned page IDs.',
+                       'indexpageids' => 'Include an additional pageids section listing all returned page IDs',
                        'export' => 'Export the current revisions of all given or generated pages',
                        'exportnowrap' => 'Return the export XML without wrapping it in an XML result (same format as Special:Export). Can only be used with export',
                );
@@ -583,7 +583,7 @@ class ApiQuery extends ApiBase {
                return array(
                        'Query API module allows applications to get needed pieces of data from the MediaWiki databases,',
                        'and is loosely based on the old query.php interface.',
-                       'All data modifications will first have to use query to acquire a token to prevent abuse from malicious sites.'
+                       'All data modifications will first have to use query to acquire a token to prevent abuse from malicious sites'
                );
        }
 
index 5a5298d..cca846a 100644 (file)
@@ -154,10 +154,10 @@ class ApiQueryAllCategories extends ApiQueryGeneratorBase {
 
        public function getParamDescription() {
                return array(
-                       'from' => 'The category to start enumerating from.',
-                       'prefix' => 'Search for all category titles that begin with this value.',
-                       'dir' => 'Direction to sort in.',
-                       'limit' => 'How many categories to return.',
+                       'from' => 'The category to start enumerating from',
+                       'prefix' => 'Search for all category titles that begin with this value',
+                       'dir' => 'Direction to sort in',
+                       'limit' => 'How many categories to return',
                        'prop' => 'Which properties to get',
                );
        }
index 9e86e46..cf6d2ab 100644 (file)
@@ -184,13 +184,13 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
 
        public function getParamDescription() {
                return array(
-                       'from' => 'The page title to start enumerating from.',
-                       'prefix' => 'Search for all page titles that begin with this value.',
-                       'unique' => 'Only show unique links. Cannot be used with generator or prop=ids',
+                       'from' => 'The page title to start enumerating from',
+                       'prefix' => 'Search for all page titles that begin with this value',
+                       'unique' => "Only show unique links. Cannot be used with generator or {$this->getModulePrefix()}prop=ids",
                        'prop' => 'What pieces of information to include',
-                       'namespace' => 'The namespace to enumerate.',
-                       'limit' => 'How many total links to return.',
-                       'continue' => 'When more results are available, use this to continue.',
+                       'namespace' => 'The namespace to enumerate',
+                       'limit' => 'How many total links to return',
+                       'continue' => 'When more results are available, use this to continue',
                );
        }
 
index 67153c3..9eebfb4 100644 (file)
@@ -221,13 +221,13 @@ class ApiQueryAllUsers extends ApiQueryBase {
 
        public function getParamDescription() {
                return array(
-                       'from' => 'The user name to start enumerating from.',
-                       'prefix' => 'Search for all page titles that begin with this value.',
+                       'from' => 'The user name to start enumerating from',
+                       'prefix' => 'Search for all page titles that begin with this value',
                        'group' => 'Limit users to a given group name',
                        'prop' => array(
                                'What pieces of information to include.',
-                               '`groups` property uses more server resources and may return fewer results than the limit.' ),
-                       'limit' => 'How many total user names to return.',
+                               '`groups` property uses more server resources and may return fewer results than the limit' ),
+                       'limit' => 'How many total user names to return',
                        'witheditsonly' => 'Only list users who have made edits',
                );
        }
index af91959..8692e1b 100644 (file)
@@ -179,13 +179,13 @@ class ApiQueryAllimages extends ApiQueryGeneratorBase {
 
        public function getParamDescription() {
                return array(
-                       'from' => 'The image title to start enumerating from.',
-                       'prefix' => 'Search for all image titles that begin with this value.',
+                       'from' => 'The image title to start enumerating from',
+                       'prefix' => 'Search for all image titles that begin with this value',
                        'dir' => 'The direction in which to list',
                        'minsize' => 'Limit to images with at least this many bytes',
                        'maxsize' => 'Limit to images with at most this many bytes',
-                       'limit' => 'How many total images to return.',
-                       'sha1' => 'SHA1 hash of image. Overrides sha1base36',
+                       'limit' => 'How many images in total to return',
+                       'sha1' => "SHA1 hash of image. Overrides {$this->getModulePrefix()}sha1base36",
                        'sha1base36' => 'SHA1 hash of image in base 36 (used in MediaWiki)',
                        'prop' => 'Which properties to get',
                );
index 82d4f10..4d021ba 100644 (file)
@@ -165,7 +165,7 @@ class ApiQueryAllmessages extends ApiQueryBase {
        }
 
        public function getDescription() {
-               return 'Return messages from this site.';
+               return 'Return messages from this site';
        }
 
        protected function getExamples() {
index c4f86d0..f9b503b 100644 (file)
@@ -247,17 +247,18 @@ class ApiQueryAllpages extends ApiQueryGeneratorBase {
        }
 
        public function getParamDescription() {
+               $p = $this->getModulePrefix();
                return array(
-                       'from' => 'The page title to start enumerating from.',
-                       'prefix' => 'Search for all page titles that begin with this value.',
-                       'namespace' => 'The namespace to enumerate.',
-                       'filterredir' => 'Which pages to list.',
+                       'from' => 'The page title to start enumerating from',
+                       'prefix' => 'Search for all page titles that begin with this value',
+                       'namespace' => 'The namespace to enumerate',
+                       'filterredir' => 'Which pages to list',
                        'dir' => 'The direction in which to list',
                        'minsize' => 'Limit to pages with at least this many bytes',
                        'maxsize' => 'Limit to pages with at most this many bytes',
                        'prtype' => 'Limit to protected pages only',
-                       'prlevel' => 'The protection level (must be used with apprtype= parameter)',
-                       'prfiltercascade' => 'Filter protections based on cascadingness (ignored when apprtype isn\'t set)',
+                       'prlevel' => "The protection level (must be used with {$p}prtype= parameter)",
+                       'prfiltercascade' => "Filter protections based on cascadingness (ignored when {$p}prtype isn't set)",
                        'filterlanglinks' => 'Filter based on whether a page has langlinks',
                        'limit' => 'How many total pages to return.'
                );
index a90969d..a78bf08 100644 (file)
@@ -435,9 +435,9 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
 
        public function getParamDescription() {
                $retval = array(
-                       'title' => 'Title to search.',
-                       'continue' => 'When more results are available, use this to continue.',
-                       'namespace' => 'The namespace to enumerate.',
+                       'title' => 'Title to search',
+                       'continue' => 'When more results are available, use this to continue',
+                       'namespace' => 'The namespace to enumerate',
                );
                if ( $this->getModuleName() != 'embeddedin' ) {
                        return array_merge( $retval, array(
@@ -448,7 +448,7 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                }
                return array_merge( $retval, array(
                        'filterredir' => 'How to filter for redirects',
-                       'limit' => 'How many total pages to return.'
+                       'limit' => 'How many total pages to return'
                ) );
        }
 
index 7ec8cbe..712ae6b 100644 (file)
@@ -269,14 +269,14 @@ class ApiQueryBlocks extends ApiQueryBase {
                        'ids' => 'Pipe-separated list of block IDs to list (optional)',
                        'users' => 'Pipe-separated list of users to search for (optional)',
                        'ip' => array(  'Get all blocks applying to this IP or CIDR range, including range blocks.',
-                                       'Cannot be used together with bkusers. CIDR ranges broader than /16 are not accepted.' ),
+                                       'Cannot be used together with bkusers. CIDR ranges broader than /16 are not accepted' ),
                        'limit' => 'The maximum amount of blocks to list',
                        'prop' => 'Which properties to get',
                );
        }
 
        public function getDescription() {
-               return 'List all blocked users and IP addresses.';
+               return 'List all blocked users and IP addresses';
        }
 
        public function getPossibleErrors() {
index 4f66f79..ff52598 100644 (file)
@@ -211,7 +211,7 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
 
        public function getParamDescription() {
                return array(
-                       'prop' => 'Which additional properties to get for each category.',
+                       'prop' => 'Which additional properties to get for each category',
                        'limit' => 'How many categories to return',
                        'show' => 'Which kind of categories to show',
                        'continue' => 'When more results are available, use this to continue',
index f6662d8..774e596 100644 (file)
@@ -258,16 +258,17 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
 
        public function getParamDescription() {
                global $wgMiserMode;
+               $p = $this->getModulePrefix();
                $desc = array(
                        'title' => 'Which category to enumerate (required). Must include Category: prefix',
                        'prop' => 'What pieces of information to include',
                        'namespace' => 'Only include pages in these namespaces',
                        'sort' => 'Property to sort by',
                        'dir' => 'In which direction to sort',
-                       'start' => 'Timestamp to start listing from. Can only be used with cmsort=timestamp',
-                       'end' => 'Timestamp to end listing at. Can only be used with cmsort=timestamp',
-                       'startsortkey' => 'Sortkey to start listing from. Can only be used with cmsort=sortkey',
-                       'endsortkey' => 'Sortkey to end listing at. Can only be used with cmsort=sortkey',
+                       'start' => "Timestamp to start listing from. Can only be used with {$p}sort=timestamp",
+                       'end' => "Timestamp to end listing at. Can only be used with {$p}sort=timestamp",
+                       'startsortkey' => "Sortkey to start listing from. Can only be used with {$p}sort=sortkey",
+                       'endsortkey' => "Sortkey to end listing at. Can only be used with {$p}sort=sortkey",
                        'continue' => 'For large categories, give the value retured from previous query',
                        'limit' => 'The maximum number of pages to return.',
                );
@@ -275,7 +276,7 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
                        $desc['namespace'] = array(
                                $desc['namespace'],
                                'NOTE: Due to $wgMiserMode, using this may result in fewer than "limit" results',
-                               'returned before continuing; in extreme cases, zero results may be returned.',
+                               'returned before continuing; in extreme cases, zero results may be returned',
                        );
                }
                return $desc;
index 580ab3d..49bfafb 100644 (file)
@@ -306,9 +306,9 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
 
        public function getParamDescription() {
                return array(
-                       'start' => 'The timestamp to start enumerating from. (1,2)',
-                       'end' => 'The timestamp to stop enumerating at. (1,2)',
-                       'dir' => 'The direction in which to enumerate. (1,2)',
+                       'start' => 'The timestamp to start enumerating from (1,2)',
+                       'end' => 'The timestamp to stop enumerating at (1,2)',
+                       'dir' => 'The direction in which to enumerate (1,2)',
                        'limit' => 'The maximum amount of revisions to list',
                        'prop' => 'Which properties to get',
                        'namespace' => 'Only list pages in this namespace (3)',
@@ -328,7 +328,7 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
                        '2) List deleted contributions for the given user, sorted by timestamp (no titles specified)',
                        '3) List all deleted revisions in the given namespace, sorted by title and timestamp (no titles specified, druser not set)',
                        'Certain parameters only apply to some modes and are ignored in others.',
-                       'For instance, a parameter marked (1) only applies to mode 1 and is ignored in modes 2 and 3.',
+                       'For instance, a parameter marked (1) only applies to mode 1 and is ignored in modes 2 and 3',
                );
        }
 
index 5d86c94..6be546e 100644 (file)
@@ -145,7 +145,7 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
        }
 
        public function getDescription() {
-               return 'List all files that are duplicates of the given file(s).';
+               return 'List all files that are duplicates of the given file(s)';
        }
 
        public function getPossibleErrors() {
index 639810e..34e3c94 100644 (file)
@@ -189,12 +189,13 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
        }
 
        public function getParamDescription() {
+               $p = $this->getModulePrefix();
                return array(
                        'prop' => 'What pieces of information to include',
                        'offset' => 'Used for paging. Use the value returned for "continue"',
                        'protocol' => array(
-                               'Protocol of the url. If empty and euquery set, the protocol is http.',
-                               'Leave both this and euquery empty to list all external links'
+                               "Protocol of the url. If empty and {$p}query set, the protocol is http.",
+                               "Leave both this and {$p}query empty to list all external links"
                        ),
                        'query' => 'Search string without protocol. See [[Special:LinkSearch]]. Leave empty to list all external links',
                        'namespace' => 'The page namespace(s) to enumerate.',
index 6444687..0f44d27 100644 (file)
@@ -217,13 +217,13 @@ class ApiQueryFilearchive extends ApiQueryBase {
 
        public function getParamDescription() {
                return array(
-                       'from' => 'The image title to start enumerating from.',
-                       'prefix' => 'Search for all image titles that begin with this value.',
+                       'from' => 'The image title to start enumerating from',
+                       'prefix' => 'Search for all image titles that begin with this value',
                        'dir' => 'The direction in which to list',
                        'minsize' => 'Limit to images with at least this many bytes',
                        'maxsize' => 'Limit to images with at most this many bytes',
-                       'limit' => 'How many total images to return.',
-                       'sha1' => 'SHA1 hash of image. Overrides sha1base36',
+                       'limit' => 'How many total images to return',
+                       'sha1' => "SHA1 hash of image. Overrides {$this->getModulePrefix()}sha1base36",
                        'sha1base36' => 'SHA1 hash of image in base 36 (used in MediaWiki)',
                        'prop' => 'Which properties to get',
                );
index 84e3616..2ebc508 100644 (file)
@@ -318,14 +318,15 @@ class ApiQueryImageInfo extends ApiQueryBase {
        }
 
        public function getParamDescription() {
+               $p = $this->getModulePrefix();
                return array(
-                       'prop' => 'What image information to get.',
+                       'prop' => 'What image information to get',
                        'limit' => 'How many image revisions to return',
                        'start' => 'Timestamp to start listing from',
                        'end' => 'Timestamp to stop listing at',
-                       'urlwidth' => array( 'If iiprop=url is set, a URL to an image scaled to this width will be returned.',
-                                           'Only the current version of the image can be scaled.' ),
-                       'urlheight' => 'Similar to iiurlwidth. Cannot be used without iiurlwidth',
+                       'urlwidth' => array( "If {$p}prop=url is set, a URL to an image scaled to this width will be returned.",
+                                           'Only the current version of the image can be scaled' ),
+                       'urlheight' => "Similar to {$p}urlwidth. Cannot be used without {$p}urlwidth",
                        'continue' => 'When more results are available, use this to continue',
                );
        }
index 08777fc..0dafc34 100644 (file)
@@ -182,9 +182,10 @@ class ApiQueryLinks extends ApiQueryGeneratorBase {
        }
 
        public function getParamDescription() {
+       $desc = $this->description;
                return array(
-                       'namespace' => "Show {$this->description}s in this namespace(s) only",
-                       'limit' => "How many {$this->description}s to return",
+                       'namespace' => "Show {$desc}s in this namespace(s) only",
+                       'limit' => "How many {$desc}s to return",
                        'continue' => 'When more results are available, use this to continue',
                );
        }
index 5c13172..5d453ee 100644 (file)
@@ -356,18 +356,18 @@ class ApiQueryLogEvents extends ApiQueryBase {
                        'prop' => 'Which properties to get',
                        'type' => 'Filter log entries to only this type(s)',
                        'action' => "Filter log actions to only this type. Overrides {$this->getModulePrefix()}type",
-                       'start' => 'The timestamp to start enumerating from.',
-                       'end' => 'The timestamp to end enumerating.',
-                       'dir' => 'In which direction to enumerate.',
-                       'user' => 'Filter entries to those made by the given user.',
-                       'title' => 'Filter entries to those related to a page.',
-                       'limit' => 'How many total event entries to return.',
-                       'tag' => 'Only list event entries tagged with this tag.',
+                       'start' => 'The timestamp to start enumerating from',
+                       'end' => 'The timestamp to end enumerating',
+                       'dir' => 'In which direction to enumerate',
+                       'user' => 'Filter entries to those made by the given user',
+                       'title' => 'Filter entries to those related to a page',
+                       'limit' => 'How many total event entries to return',
+                       'tag' => 'Only list event entries tagged with this tag',
                );
        }
 
        public function getDescription() {
-               return 'Get events from logs.';
+               return 'Get events from logs';
        }
 
        public function getPossibleErrors() {
index 9f5b51a..7f758fc 100644 (file)
@@ -183,7 +183,7 @@ class ApiQueryProtectedTitles extends ApiQueryGeneratorBase {
                        'start' => 'Start listing at this protection timestamp',
                        'end' => 'Stop listing at this protection timestamp',
                        'dir' => 'The direction in which to list',
-                       'limit' => 'How many total pages to return.',
+                       'limit' => 'How many total pages to return',
                        'prop' => 'Which properties to get',
                        'level' => 'Only list titles with these protection levels',
                );
index 3135e54..85863ab 100644 (file)
@@ -149,8 +149,8 @@ if ( !defined( 'MEDIAWIKI' ) ) {
                return array(
                        'Get a set of random pages',
                        'NOTE: Pages are listed in a fixed sequence, only the starting point is random. This means that if, for example, "Main Page" is the first ',
-                       '      random page on your list, "List of fictional monkeys" will *always* be second, "List of people on stamps of Vanuatu" third, etc.',
-                       'NOTE: If the number of pages in the namespace is lower than rnlimit, you will get fewer pages. You will not get the same page twice.'
+                       '      random page on your list, "List of fictional monkeys" will *always* be second, "List of people on stamps of Vanuatu" third, etc',
+                       'NOTE: If the number of pages in the namespace is lower than rnlimit, you will get fewer pages. You will not get the same page twice'
                );
        }
 
index 1955e4a..abace8f 100644 (file)
@@ -530,9 +530,9 @@ class ApiQueryRecentChanges extends ApiQueryBase {
 
        public function getParamDescription() {
                return array(
-                       'start' => 'The timestamp to start enumerating from.',
-                       'end' => 'The timestamp to end enumerating.',
-                       'dir' => 'In which direction to enumerate.',
+                       'start' => 'The timestamp to start enumerating from',
+                       'end' => 'The timestamp to end enumerating',
+                       'dir' => 'In which direction to enumerate',
                        'namespace' => 'Filter log entries to only this namespace(s)',
                        'user' => 'Only list changes by this user',
                        'excludeuser' => 'Don\'t list changes by this user',
@@ -540,11 +540,11 @@ class ApiQueryRecentChanges extends ApiQueryBase {
                        'token' => 'Which tokens to obtain for each change',
                        'show' => array(
                                'Show only items that meet this criteria.',
-                               'For example, to see only minor edits done by logged-in users, set show=minor|!anon'
+                               "For example, to see only minor edits done by logged-in users, set {$this->getModulePrefix()}show=minor|!anon"
                        ),
-                       'type' => 'Which types of changes to show.',
-                       'limit' => 'How many total changes to return.',
-                       'tag' => 'Only list changes tagged with this tag.',
+                       'type' => 'Which types of changes to show',
+                       'limit' => 'How many total changes to return',
+                       'tag' => 'Only list changes tagged with this tag',
                );
        }
 
index 0c4d870..f167a07 100644 (file)
@@ -546,8 +546,9 @@ class ApiQueryRevisions extends ApiQueryBase {
        }
 
        public function getParamDescription() {
+               $p = $this->getModulePrefix();
                return array(
-                       'prop' => 'Which properties to get for each revision.',
+                       'prop' => 'Which properties to get for each revision',
                        'limit' => 'Limit how many revisions will be returned (enum)',
                        'startid' => 'From which revision id to start enumeration (enum)',
                        'endid' => 'Stop revision enumeration on this revid (enum)',
@@ -562,21 +563,21 @@ class ApiQueryRevisions extends ApiQueryBase {
                        'token' => 'Which tokens to obtain for each revision',
                        'continue' => 'When more results are available, use this to continue',
                        'diffto' => array( 'Revision ID to diff each revision to.',
-                               'Use "prev", "next" and "cur" for the previous, next and current revision respectively.' ),
+                               'Use "prev", "next" and "cur" for the previous, next and current revision respectively' ),
                        'difftotext' => array( 'Text to diff each revision to. Only diffs a limited number of revisions.',
-                               'Overrides diffto. If rvsection is set, only that section will be diffed against this text.' ),
+                               "Overrides {$p}diffto. If {$p}section is set, only that section will be diffed against this text" ),
                        'tag' => 'Only list revisions tagged with this tag',
                );
        }
 
        public function getDescription() {
                return array(
-                       'Get revision information.',
+                       'Get revision information',
                        'This module may be used in several ways:',
-                       ' 1) Get data about a set of pages (last revision), by setting titles or pageids parameter.',
-                       ' 2) Get revisions for one given page, by using titles/pageids with start/end/limit params.',
-                       ' 3) Get data about a set of revisions by setting their IDs with revids parameter.',
-                       'All parameters marked as (enum) may only be used with a single page (#2).'
+                       ' 1) Get data about a set of pages (last revision), by setting titles or pageids parameter',
+                       ' 2) Get revisions for one given page, by using titles/pageids with start/end/limit params',
+                       ' 3) Get data about a set of revisions by setting their IDs with revids parameter',
+                       'All parameters marked as (enum) may only be used with a single page (#2)'
                );
        }
 
index 9e42caf..5d3322d 100644 (file)
@@ -209,14 +209,14 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
 
        public function getParamDescription() {
                return array(
-                       'search' => 'Search for all page titles (or content) that has this value.',
-                       'namespace' => 'The namespace(s) to enumerate.',
-                       'what' => 'Search inside the text or titles.',
-                       'info' => 'What metadata to return.',
-                       'prop' => 'What properties to return.',
-                       'redirects' => 'Include redirect pages in the search.',
+                       'search' => 'Search for all page titles (or content) that has this value',
+                       'namespace' => 'The namespace(s) to enumerate',
+                       'what' => 'Search inside the text or titles',
+                       'info' => 'What metadata to return',
+                       'prop' => 'What properties to return',
+                       'redirects' => 'Include redirect pages in the search',
                        'offset' => 'Use this value to continue paging (return by query)',
-                       'limit' => 'How many total pages to return.'
+                       'limit' => 'How many total pages to return'
                );
        }
 
index 7b6bc39..e380344 100644 (file)
@@ -486,7 +486,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
        }
 
        public function getDescription() {
-               return 'Return general information about the site.';
+               return 'Return general information about the site';
        }
 
        public function getPossibleErrors() {
index 18d14fe..87c9a16 100644 (file)
@@ -166,7 +166,7 @@ class ApiQueryTags extends ApiQueryBase {
        }
 
        public function getDescription() {
-               return 'List change tags.';
+               return 'List change tags';
        }
 
        protected function getExamples() {
index 526014d..4d4e156 100644 (file)
@@ -410,18 +410,19 @@ class ApiQueryContributions extends ApiQueryBase {
        }
 
        public function getParamDescription() {
+               $p = $this->getModulePrefix();
                return array(
-                       'limit' => 'The maximum number of contributions to return.',
-                       'start' => 'The start timestamp to return from.',
-                       'end' => 'The end timestamp to return to.',
-                       'continue' => 'When more results are available, use this to continue.',
-                       'user' => 'The user to retrieve contributions for.',
-                       'userprefix' => 'Retrieve contibutions for all users whose names begin with this value. Overrides ucuser.',
-                       'dir' => 'The direction to search (older or newer).',
+                       'limit' => 'The maximum number of contributions to return',
+                       'start' => 'The start timestamp to return from',
+                       'end' => 'The end timestamp to return to',
+                       'continue' => 'When more results are available, use this to continue',
+                       'user' => 'The user to retrieve contributions for',
+                       'userprefix' => "Retrieve contibutions for all users whose names begin with this value. Overrides {$p}user",
+                       'dir' => 'The direction to search (older or newer)',
                        'namespace' => 'Only list contributions in these namespaces',
                        'prop' => 'Include additional pieces of information',
-                       'show' => array( 'Show only items that meet this criteria, e.g. non minor edits only: show=!minor',
-                                       'NOTE: if show=patrolled or show=!patrolled is set, revisions older than $wgRCMaxAge won\'t be shown', ),
+                       'show' => array( "Show only items that meet this criteria, e.g. non minor edits only: {$p}show=!minor",
+                                       "NOTE: if show=patrolled or {$p}show=!patrolled is set, revisions older than $wgRCMaxAge won\'t be shown", ),
                        'tag' => 'Only list revisions tagged with this tag',
                );
        }
index 80f7fe1..f301ab3 100644 (file)
@@ -363,21 +363,21 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
 
        public function getParamDescription() {
                return array(
-                       'allrev' => 'Include multiple revisions of the same page within given timeframe.',
-                       'start' => 'The timestamp to start enumerating from.',
-                       'end' => 'The timestamp to end enumerating.',
-                       'namespace' => 'Filter changes to only the given namespace(s).',
+                       'allrev' => 'Include multiple revisions of the same page within given timeframe',
+                       'start' => 'The timestamp to start enumerating from',
+                       'end' => 'The timestamp to end enumerating',
+                       'namespace' => 'Filter changes to only the given namespace(s)',
                        'user' => 'Only list changes by this user',
                        'excludeuser' => 'Don\'t list changes by this user',
-                       'dir' => 'In which direction to enumerate pages.',
-                       'limit' => 'How many total results to return per request.',
+                       'dir' => 'In which direction to enumerate pages',
+                       'limit' => 'How many total results to return per request',
                        'prop' => 'Which additional items to get (non-generator mode only).',
                        'show' => array(
                                'Show only items that meet this criteria.',
-                               'For example, to see only minor edits done by logged-in users, set show=minor|!anon'
+                               "For example, to see only minor edits done by logged-in users, set {$this->getModulePrefix()}show=minor|!anon"
                        ),
-                       'owner' => "The name of the user whose watchlist you'd like to access",
-                       'token' => "Give a security token (settable in preferences) to allow access to another user's watchlist"
+                       'owner' => 'The name of the user whose watchlist you\'d like to access',
+                       'token' => 'Give a security token (settable in preferences) to allow access to another user\'s watchlist'
                );
        }
 
index c1b52c8..cddca02 100644 (file)
@@ -164,10 +164,10 @@ class ApiQueryWatchlistRaw extends ApiQueryGeneratorBase {
        public function getParamDescription() {
                return array(
                        'continue' => 'When more results are available, use this to continue',
-                       'namespace' => 'Only list pages in the given namespace(s).',
-                       'limit' => 'How many total results to return per request.',
-                       'prop' => 'Which additional properties to get (non-generator mode only).',
-                       'show' => 'Only list items that meet these criteria.',
+                       'namespace' => 'Only list pages in the given namespace(s)',
+                       'limit' => 'How many total results to return per request',
+                       'prop' => 'Which additional properties to get (non-generator mode only)',
+                       'show' => 'Only list items that meet these criteria',
                );
        }
 
index 2301e3a..ad5c16f 100644 (file)
@@ -98,8 +98,8 @@ class ApiRollback extends ApiBase {
                return array(
                        'title' => 'Title of the page you want to rollback.',
                        'user' => 'Name of the user whose edits are to be rolled back. If set incorrectly, you\'ll get a badtoken error.',
-                       'token' => 'A rollback token previously retrieved through prop=revisions',
-                       'summary' => 'Custom edit summary. If not set, default summary will be used.',
+                       'token' => "A rollback token previously retrieved through {$this->getModulePrefix()}prop=revisions",
+                       'summary' => 'Custom edit summary. If not set, default summary will be used',
                        'markbot' => 'Mark the reverted edits and the revert as bot edits',
                        'watchlist' => 'Unconditionally add or remove the page from your watchlist, use preferences or do not change watch',
                );
@@ -108,7 +108,7 @@ class ApiRollback extends ApiBase {
        public function getDescription() {
                return array(
                        'Undo the last edit to the page. If the last user who edited the page made multiple edits in a row,',
-                       'they will all be rolled back.'
+                       'they will all be rolled back'
                );
        }
 
index f1eb12a..f146075 100644 (file)
@@ -103,10 +103,11 @@ class ApiUnblock extends ApiBase {
        }
 
        public function getParamDescription() {
+               $p = $this->getModulePrefix();
                return array(
-                       'id' => 'ID of the block you want to unblock (obtained through list=blocks). Cannot be used together with user',
-                       'user' => 'Username, IP address or IP range you want to unblock. Cannot be used together with id',
-                       'token' => 'An unblock token previously obtained through the gettoken parameter or prop=info',
+                       'id' => "ID of the block you want to unblock (obtained through list=blocks). Cannot be used together with {$p}user",
+                       'user' => "Username, IP address or IP range you want to unblock. Cannot be used together with {$p}id",
+                       'token' => "An unblock token previously obtained through the gettoken parameter or {$p}prop=info",
                        'gettoken' => 'If set, an unblock token will be returned, and no other action will be taken',
                        'reason' => 'Reason for unblock (optional)',
                );
@@ -114,7 +115,7 @@ class ApiUnblock extends ApiBase {
 
        public function getDescription() {
                return array(
-                       'Unblock a user.'
+                       'Unblock a user'
                );
        }
 
index 4cdf347..0637725 100644 (file)
@@ -121,7 +121,7 @@ class ApiUndelete extends ApiBase {
 
        public function getParamDescription() {
                return array(
-                       'title' => 'Title of the page you want to restore.',
+                       'title' => 'Title of the page you want to restore',
                        'token' => 'An undelete token previously retrieved through list=deletedrevs',
                        'reason' => 'Reason for restoring (optional)',
                        'timestamps' => 'Timestamps of the revisions to restore. If not set, all revisions will be restored.',
index 6d02fa3..543b890 100644 (file)
@@ -338,7 +338,7 @@ class ApiUpload extends ApiBase {
                        'Note that the HTTP POST must be done as a file upload (i.e. using multipart/form-data) when',
                        'sending the "file". Note also that queries using session keys must be',
                        'done in the same login session as the query that originally returned the key (i.e. do not',
-                       'log out and then log back in). Also you must get and send an edit token before doing any upload stuff.'
+                       'log out and then log back in). Also you must get and send an edit token before doing any upload stuff'
                );
        }
 
index dfb5f19..9686217 100644 (file)
@@ -54,6 +54,29 @@ class ApiUserrights extends ApiBase {
                $this->getResult()->setIndexedTagName( $r['removed'], 'group' );
                $this->getResult()->addValue( null, $this->getModuleName(), $r );
        }
+       
+       private function getUser() {
+               if ( $this->mUser !== null ) {
+                       return $this->mUser;
+               }
+
+               $params = $this->extractRequestParams();
+               if ( is_null( $params['user'] ) ) {
+                       $this->dieUsageMsg( array( 'missingparam', 'user' ) );
+               }
+
+               $form = new UserrightsPage;
+               $status = $form->fetchUser( $params['user'] );
+               if ( !$status->isOK() ) {
+                       $errors = $status->getErrorsArray();
+                       $this->dieUsageMsg( $errors[0] );
+               } else {
+                       $user = $status->value;
+               }
+
+               $this->mUser = $user;
+               return $user;
+       }
 
        public function mustBePosted() {
                return true;
@@ -107,29 +130,6 @@ class ApiUserrights extends ApiBase {
                return $this->getUser()->getName();
        }
 
-       private function getUser() {
-               if ( $this->mUser !== null ) {
-                       return $this->mUser;
-               }
-
-               $params = $this->extractRequestParams();
-               if ( is_null( $params['user'] ) ) {
-                       $this->dieUsageMsg( array( 'missingparam', 'user' ) );
-               }
-
-               $form = new UserrightsPage;
-               $status = $form->fetchUser( $params['user'] );
-               if ( !$status->isOK() ) {
-                       $errors = $status->getErrorsArray();
-                       $this->dieUsageMsg( $errors[0] );
-               } else {
-                       $user = $status->value;
-               }
-
-               $this->mUser = $user;
-               return $user;
-       }
-
        protected function getExamples() {
                return array(
                        'api.php?action=userrights&user=FooBot&add=bot&remove=sysop|bureaucrat&token=123ABC'