aboutsummaryrefslogtreecommitdiffstats
path: root/includes/api/ApiProtect.php
Commit message (Collapse)AuthorAgeFilesLines
* api: Inject services into ApiWatchlistTraitUmherirrender2021-07-061-3/+20
| | | | | Bug: T259960 Change-Id: I73596f8c924ec4a02a7042608d19a35f82bb752a
* Use the edited page's title for magic words in action=edit error messagesBartosz Dziewoński2021-05-211-0/+1
| | | | | | | | | | | Allow specifying the title used for rendering error messages in ApiErrorFormatter. Then, specify one in ApiEditPage (and a few similar modules that deal with single pages) once we've figured out which page is being edited. Bug: T247661 Change-Id: Ic3d70efc23744ef6e90abc445f3babebf45c4697
* SECURITY: Allow user to only apply protection they have right to do so via ↵Reedy2021-04-081-1/+5
| | | | | | | | | | | action=protect 'apierror-protect-invalidlevel' potentially wants updating at a later point as the message isn't necessarily clear what the error is; the protection may be valid but the users right to do so is not. Bug: T270713 Change-Id: I72fe67264baa4123599ec424a7d780192ca54bcc
* Convert ChangeTags public interface to Authority.Petr Pchelko2021-02-241-1/+1
| | | | | Bug: T275507 Change-Id: I3b7f99391ab299df2b046a2878010cf6afe7fed7
* Remove requirement for ApiWatchlistTrait to be in ApiBase.Ammar Abdulhamid2020-09-071-1/+1
| | | | | | | | | | | | | | | | | | | | | | | This trait is not needed in ApiBase and its presence here is proving to be problematic. See I795db12. In this patch, the trait usage (more precisely the 'use statement') has been removed from ApiBase and accordingly the signatures of ApiWatchlistTrait::getWatchlistValue() and ::setWatch() have been altered to now require User object. With these changes, the abstract getUser() method in the trait is no longer needed, so it has been removed also. All core usages of the affected functions are fixed in this patch. The trait is used in only one extension according to codesearch tool, the extension will be fixed in Ic22e163. Bug: T262175 Bug: T248512 Follow-up: Ia18627b9824dca81f44f0571e8420d89b7626cf6 Change-Id: Idabcea71edfca9e7ed42000a258c99ff407873d4
* Add watchlist expiry support to applicable APIsMusikAnimal2020-07-131-11/+13
| | | | | | | | | | | This introduces an ApiWatchlistTrait that refactors out common code across APIs that allow you to watch pages. Some methods have been migrated from ApiBase and changed completely, but codesearch suggests they aren't being used outside the API modules in this patch. Bug: T248512 Bug: T248514 Change-Id: Ia18627b9824dca81f44f0571e8420d89b7626cf6
* Coding style: Auto-fix MediaWiki.Usage.IsNull.IsNullJames D. Forrester2020-01-101-1/+1
| | | | Change-Id: I90cfe8366c0245c9c67e598d17800684897a4e27
* Remove "Created on" from file header commentsUmherirrender2018-01-261-4/+0
| | | | | | | | | It is the job of git and svn to provide this information/metadata. The form was different, some with short, some with long month name some with leading zero at the day, some without. The year is also present in the Copyright clause Change-Id: If006907b82b9e45f13cfa2e45d41107a95570e1a
* Make API documentation links language awareBaha2017-04-051-1/+1
| | | | | | | | | | | | | | Links generated by the API are now aware of the user's preferred language and will show documents in that language if available. To test, log in to mediawiki.org and set your language preference to 'es', then on an MediaWiki installation with this patch view the generated expanded API help at `api.php?action=help&recursivesubmodules=1&modules=main`. Each link to documentation on mediawiki.org should take you to its translated /es subpage, if one exists. Bug: T104518 Change-Id: I339a1f3ae1bce9d759cf251899d57c32b1def91e
* ApiResult: Add ApiResult::formatExpiry()Brad Jorsch2017-01-111-3/+1
| | | | | | | | This allows for removing $wgContLang from many API modules where it was only used to call $wgContLang->formatExpiry() in a way in which the results don't actually depend on the language. Change-Id: Ib0f25f288b9b87d2e4131297c552e5971696db87
* API: i18n for warnings and errorsBrad Jorsch2016-12-061-13/+9
| | | | | | | | | | | | | | | | | | | | | | | | | API warnings and error messages are currently hard-coded English strings. This patch changes that. With a few exceptions, this patch should be compatible with non-updated extensions: * The change to ApiBase::$messageMap will blow up anything trying to mess with it. * The changes to the 'ApiCheckCanExecute' hook will cause a wrong (probably unparsed) error message to be emitted for extensions not already using an ApiMessage. Unless they're currently broken like Wikibase. Bug: T37074 Bug: T47843 Depends-On: Ia2b66b57cd4eaddc30b3ffdd7b97d6ca3e02d898 Depends-On: I2e1bb975bb0045476c03ebe6cdec00259bae22ec Depends-On: I53987bf87c48f6c00deec17a8e957d24fcc3eaa6 Depends-On: Ibf93a459eb62d30f7c70d20e91ec9faeb80d10ed Depends-On: I3cf889811f44a15935e454dd42f081164d4a098c Depends-On: Ieae527de86735ddcba34724730e8730fb277b99b Depends-On: I535344c29d51521147c2a26c341dae38cec3e931 Change-Id: Iae0e2ce3bd42dd4776a9779664086119ac188412
* Add tags support to patrol, protect, unblock, and undeleteGeoffrey Mon2016-02-291-1/+17
| | | | | | | | | | | | - Add 'tags' parameters to appropriate API modules - Add tag-adding logic to appropriate functions that carry out relevant functions - ManualLogEntry::{set,get}Tags to handle adding tags to log entries in a cleaner fashion - Use ManualLogEntry::setTags in LocalFile::recordUpload2 Bug: T97720 Change-Id: I98c52da7985623bfdafda2dc2dae937b39b72419
* Convert all array() syntax to []Kunal Mehta2016-02-171-31/+31
| | | | | | | | | | Per wikitech-l consensus: https://lists.wikimedia.org/pipermail/wikitech-l/2016-February/084821.html Notes: * Disabled CallTimePassByReference due to false positives (T127163) Change-Id: I2c8ce713ce6600a0bb7bf67537c87044c7a45c4b
* Remove various unused variablesReedy2015-11-071-1/+0
| | | | Change-Id: I4b1b20b4126735cb32a80e473fe48d523bcb24d1
* API: Log all deprecated parameter uses to api-feature-usage.logBrad Jorsch2015-11-031-3/+0
| | | | | | | | | Some were being logged, and some weren't. Let's log them all automatically when PARAM_DEPRECATED is processed, instead of requiring each module to manually log them. Bug: T117569 Change-Id: Ia38aeeccd0b9857b12b28914f509284483fbcca8
* Change API result data structure to be cleaner in new formatsBrad Jorsch2015-04-201-1/+1
| | | | | | | | | | | Nothing in this patch should result in changed output for format=json or format=php except as noted in RELEASE-NOTES-1.25, and changed output for format=xml should be similar or cosmetic. However, other code accessing the result data directly may need to be updated. Bug: T87053 Bug: T12887 Change-Id: I3500708965cb8869b5aed1543381aad208dadd13
* Merge "API: Overhaul ApiResult, make format=xml not throw, and add json ↵jenkins-bot2015-04-161-1/+1
|\ | | | | | | formatversion"
| * API: Overhaul ApiResult, make format=xml not throw, and add json formatversionBrad Jorsch2015-04-101-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ApiResult was a mess: some methods could only be used with an array reference instead of manipulating the stored data, methods that had both array-ref and internal-data versions had names that didn't at all correspond, some methods that worked on an array reference were annoyingly non-static, and then the whole mess with setIndexedTagName. ApiFormatXml is also entirely annoying to deal with, as it liked to throw exceptions if certain metadata wasn't provided that no other formatter required. Its legacy also means we have this silly convention of using empty-string rather than boolean true, annoying restrictions on keys (leading to things that should be hashes being arrays of key-value object instead), '*' used as a key all over the place, and so on. So, changes here: * ApiResult is no longer an ApiBase or a ContextSource. * Wherever sensible, ApiResult provides a static method working on an arrayref and a non-static method working on internal data. * Metadata is now always added to ApiResult's internal data structure. Formatters are responsible for stripping it if necessary. "raw mode" is deprecated. * New metadata to replace the '*' key, solve the array() => '[]' vs '{}' question, and so on. * New class for formatting warnings and errors using i18n messages, and support for multiple errors and a more machine-readable format for warnings. For the moment, though, the actual output will not be changing yet (see T47843 for future plans). * New formatversion parameter for format=json and format=php, to select between BC mode and the modern output. * In BC mode, booleans will be converted to empty-string presence style; modules currently returning booleans will need to use ApiResult::META_BC_BOOLS to preserve their current output. Actual changes to the API modules' output (e.g. actually returning booleans for the new formatversion) beyond the use of ApiResult::setContentValue() are left for a future change. Bug: T76728 Bug: T57371 Bug: T33629 Change-Id: I7b37295e8862b188d1f3b0cd07f66ac34629678f
* | Clean up handling of 'infinity'Brad Jorsch2015-03-131-5/+4
|/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There's a bunch of stuff that probably only works because the database representation of infinity is actually 'infinity' on all databases besides Oracle, and Oracle in general isn't maintained. Generally, we should probably use 'infinity' everywhere except where directly dealing with the database. * Many extension callers of Language::formatExpiry() with $format !== true are assuming it'll return 'infinity', none are checking for $db->getInfinity(). * And Language::formatExpiry() would choke if passed 'infinity', despite callers doing this. * And Language::formatExpiry() could be more useful for the API if we can override the string returned for infinity. * As for core, Title is using Language::formatExpiry() with TS_MW which is going to be changing anyway. Extension callers mostly don't exist. * Block already normalizes its mExpiry field (and ->getExpiry()), but some stuff is comparing it with $db->getInfinity() anyway. A few external users set mExpiry to $db->getInfinity(), but this is mostly because SpecialBlock::parseExpiryInput() returns $db->getInfinity() while most callers (including all extensions) are assuming 'infinity'. * And for that matter, Block should use $db->decodeExpiry() instead of manually doing it, once we make that safe to call with 'infinity' for all the extensions passing $db->getInfinity() to Block's contructor. * WikiPage::doUpdateRestrictions() and some of its callers are using $db->getInfinity(), when all the inserts using that value are using $db->encodeExpiry() which will convert 'infinity'. This also cleans up a slave-lag issue I noticed in ApiBlock while testing. Bug: T92550 Change-Id: I5eb68c1fb6029da8289276ecf7c81330575029ef
* Refactor out 'infinity' variantsJuneHyeon Bae2015-03-121-1/+1
| | | | | | | | Refactor out 'infinity' vartiant values which used in blocking and protecting actions. This patchset adds GlobalFunction wfIsInfinity. Bug: T68646 Change-Id: I60cc55a5bbd43c72916a1c2ea3807457d4e33765
* API: Fix access on getExamplesMessagesBrad Jorsch2014-10-291-1/+1
| | | | | | | ApiBase declares it protected, but for some reason I had made it public in all subclasses. Change-Id: I8a50d4f47e66c7f09137968d3941dc5cdc1d28e4
* API: Internationalize all remaining core API modulesBrad Jorsch2014-10-201-31/+9
| | | | | | | | | This also adds some new ApiBase::PARAM_* constants to generate more helpful help, and a method to override the default description message for the use of ApiDisabled and ApiQueryDisabled. Bug: 71638 Change-Id: Ic0c3d232e0498d58a043037e2e0c6f0b1c3edad3
* API: Overhaul token handlingBrad Jorsch2014-08-261-10/+1
| | | | | | | | | | | | | | | | | | | | The current token handling is a mess. This simplifies things greatly: * *All* tokens are obtained from action=query&meta=tokens, rather than being spread over action=tokens, action=query&prop=info, action=query&prop=revisions, action=query&prop=recentchanges, and action=query&prop=users. All these old methods are deprecated. * Similarly, there is only one hook to register new token types. All old hooks are deprecated. * All tokens are cacheable. * Most token types are dropped in favor of a 'csrf' token. They already were returning the same token anyway. * All token-using modules will document the required token type in a standard manner in action=help and are documented in machine-readable fashion in action=paraminfo. Note this will require updates to all extensions using tokens. Change-Id: I2793a3f2dd64a4bebb0b4d065e09af1e9f63fb89
* API: Log usage of various deprecated featuresBrad Jorsch2014-08-141-0/+3
| | | | | | This will let us know how aggressively we can finally remove these. Change-Id: I03fab36e921807e74fbabfa878756af254d89a1b
* API: Remove action=paraminfo 'props' and 'errors' result propertiesBrad Jorsch2014-08-071-25/+0
| | | | | | | | | | | | | | | | | The format for 'props' was never specified and the list for 'errors' is impossible to keep updated when considering that many errors come from MediaWiki backend code and extension hook functions. And since there doesn't seem to be any real use case for either of these, let's just kill both of them instead of wasting effort on trying to fix them. Note that neither getResultProperties nor getPossibleErrors are called from any extensions in gerrit, and none of the other deprecated methods are called outside of the implementations of those two methods. Removing the obsolete methods is left to the maintainers of the extensions, as keeping them hurts nothing and is needed to maintain compatibility with earlier versions of MediaWiki. Change-Id: Ie11a401d60c834059fbf1b5625ca8ea093b3337c
* API: Allow 'infinity' as a valid protection expiryKunal Mehta2014-06-151-2/+2
| | | | Change-Id: If9eb1f3e835579f5c8b8be22297a1eb26beda4e7
* Switch API to use Config classesReedy2014-06-151-2/+1
| | | | | | Only done where globals are config (so not $wgParser, $wgContLang etc) Change-Id: Ic39cdd858cfb9096a2bc09618f97e64270d76f13
* Add final period to API module descriptionsaddshore2014-03-101-1/+1
| | | | Change-Id: Icae68c1ab1fd0006e00a3a9a56ae8f831d3d0d45
* Update formattingSiebrand Mazeland2014-02-061-4/+7
| | | | Change-Id: I18aff576262479c9bb1c56eb8e1d1aaae200e4b1
* Fix CodeSniffer errors and warnings (final round for API classes)Siebrand Mazeland2013-11-151-10/+27
| | | | Change-Id: I97bf36ebef254818dc17378a06405b681ad19c59
* Update formatting on API classes, Part 3Siebrand Mazeland2013-11-141-5/+6
| | | | Change-Id: I526be68e21836201c992b391a81f4d41e1fa801e
* Cleanup watchlist preference usageBrad Jorsch2013-11-081-1/+1
| | | | | | | | | | | | | | | | | | | In general, the web UI does a check of the watchlist preferences along the lines of "watch if watchdefault, or if watchcreations and the title doesn't exist". So there's no way to have it watch edits but not creations. Make the API behavior match this. For API action=protect&watchlist=preferences, we want to use 'watchdefault' always to match the behavior of the web UI. For Special:Upload, the code is all there to do a "watch if watchdefault, or if watchcreations and the file doesn't exist". But for some reason that code wasn't being used in favor of just using watchcreations all the time. Fix that, too. And have the API use that instead of checking if the file page exists. Bug: 56766 Change-Id: I57fc46d9a97b3ea2169173727db842d0d7ecf81d
* Return errors from WatchActionBrad Jorsch2013-06-201-2/+1
| | | | | | | | | | Currently, WatchAction::doWatch and WatchAction::doUnwatch return true always. Let's have them return a status object instead. This also cleans up the handling of Status objects in some of the API modules. Change-Id: I9dd9f0fd499c37f29fa12bcdb6142238a1f11e4d
* Fixed many small spelling mistakes and php docs, var decl.Yuri Astrakhan2013-03-101-1/+1
| | | | Change-Id: I1508ed7eb77e5e4f700fb63955d626c4f5915840
* api: remove duplicate __contruct callsAntoine Musso2013-01-291-4/+0
| | | | | | | | For historical reasons, all our API class had a dummy __construct which simply calls their parent constructor. This patch removes all such occurences to save out some bytes. Change-Id: I667955d7821f780fc5ce23823d74dedb1729b9fa
* (bug 35885) remove api version string and parameterYuri Astrakhan2013-01-181-4/+0
| | | | | | | | | API was using SVN's version keyword which GIT does not support. All related methods were either removed, or for those that could have been used from extensions, emptied out. api.php?version now shows unrecognized param warning. Change-Id: I910ca1448ed2ed697ac19b17c486d130aa1d7e03
* Add hint for pipe-separated list to action=helpumherirrender2012-07-291-1/+1
| | | | | | Also fix helptext for integer min/max for isMulti param Change-Id: I84caf01ace8eefd9de4fe783a6cafac3201f2e0a
* (bug 38190) Add "required" flag to some token paramsumherirrender2012-07-201-1/+4
| | | | | | action=block/action=unblock can not have the token required because when using the gettoken param, the token param can not set. Change-Id: I15317f16c06f150d29c1b17de76f41a6cfa84820
* Merge "escape HTML elements in docblock with double quotes"Aaron Schulz2012-07-181-1/+1
|\
| * escape HTML elements in docblock with double quotesAntoine Musso2012-07-151-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Doxygen choke on text enclosed by '<' and '>' since it tries to interpret them as HTML or XML elements. This patch adds double quotes in includes/api/*.php files around the two following strings: <Firstname>.<Lastname>@gmail.com <Firstname><Lastname>@gmail.com Which becomes: "<Firstname>.<Lastname>@gmail.com" "<Firstname><Lastname>@gmail.com" Tested locally, it prevents doxygen 1.8.0 related warnings. Change-Id: I36d82eb3fd4989ee3ffc65b0b527b83711d1ba69
* | API: Cleanup around comment/reason paramsumherirrender2012-07-081-1/+1
|/ | | | | | | | | * Moving setting of empty string to param description. * Removing word "(optional)" from comment/reason param, because all not required params are optional. * Correct description of action=rollback for default comment. Change-Id: Ifa5b60a7b55b216c43049cd81cb584b2e0518eed
* Added result properties to action=paraminfoPetr Onderka2012-06-061-0/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Added information about the properties of the results of API calls to action=paraminfo, including information about "property groups": what should the prop parameter be set to to get that property. Uses the same format for types as parameters already do. The output format of some modules doesn't fit this, so the result properties for them weren't added, or only partially. Partially implemented modules: * expandtemplates: parsetree is in its own tag * protect, allusers, backlinks, deletedrevs, info, imageinfo, logevents, querypage, recentchanges, revisions, searchinfo, usercontribs, userinfo, users, watchlist, upload: response with partially complex structure Not implemented modules: * feedcontributions, feedwatchlist, opensearch, rds: non-standard reponse * help: error is normal response; not very useful for automated tools anyway * paraminfo, parse, pageprops, siteinfo, userrights: response with complex structure Change-Id: Iff2a9bef79f994e73eef3062b4dd5461bff968ab
* Merge "multi dbms support in api"Aaron Schulz2012-05-201-3/+3
|\
| * multi dbms support in apiumherirrender2012-05-161-3/+3
| | | | | | | | | | | | | | | | | | | | Add some calls to Database::timestamp Change some calls from Database::strencode to Database::addQuotes to avoid ' in raw sql Remove ' from ints in raw sql Rename some vars to avoid duplicate names Change-Id: I63f5602fa968f969a42932902a3ccc45fc54b432
* | Don't make two database requests to load the same object, again.Alexandre Emsenhuber2012-05-041-2/+2
|/ | | | | | | | I know there's no second parameter to WikiPage::newFromID(), but this will change soon. This follows-up I098dd36619fff3610be6894037220d3472b809d5. Change-Id: Ic28b7e05db51e55a5f49fed70c042ba11e4d97fe
* (bug 30488) API now allows listing of backlinks/embeddedin/imageusageumherirrender2012-05-021-2/+0
| | | | | | | | | per pageid Move the possibles errors set by ApiBase::getTitleOrPageId to ApiBase::getTitleOrPageIdErrorMessages and remove it from used modules Change-Id: If037e04665d2524c1f2476bc7996d9573753a4b8
* Simplify and refactor out api code for getting title or page idReedy2012-04-271-17/+3
| | | | Change-Id: I098dd36619fff3610be6894037220d3472b809d5
* Make data loading a bit better in ApiProtect.Alexandre Emsenhuber2012-04-251-3/+5
| | | | | | | * Use WikiPage::newFromID() directly instead of Title::newFromID() (change pending review to improve it) * Directly load the data from the master when creating a page from its name, it avoids a second database query when calling $this->getLatest() in WikiPage::doUpdateRestrictions() Change-Id: I993d087961c0ef41a2e3f8d949922d3d30ca1fde
* (bug 32497) API now allows changing of protection level using pageidAlex Monk2012-04-071-15/+32
| | | | Change-Id: I01802dde2fba9510cbdf23522ddac59f36a93960
* * Merged WikiPage::updateRestrictions() and Title::updateTitleProtection() ↵Alexandre Emsenhuber2011-12-181-10/+6
| | | | | | | | | | | | | | into WikiPage::doUpdateRestrictions(); older methods still work for backward compatibility, but marked Title::updateTitleProtection() as deprecated and for removal in 1.20 since no extension calls it * Removed permissions check from WikiPage::doUpdateRestrictions() and left it for callers, resolves the todo from documentation * Inverted $expiry and $reason parameter between WikiPage::doUpdateRestrictions() and WikiPage::updateRestrictions() for more consistency; WikiPage::doUpdateRestrictions() also requires all parameters to be passed * WikiPage::doUpdateRestrictions() returns a Status object instead of bool for the older one; only possible error at the moment is a read-only database * Updated core calls to these functions * Made maintenance scripts using it simply protect all actions returned by Title::getRestrictionTypes() instead of hardcoded 'edit' and 'move' * This also means that protect.php can be used to protect a non-existing page for creation Notes: http://mediawiki.org/wiki/Special:Code/MediaWiki/106567