Commit graph

88 commits

Author SHA1 Message Date
Thiemo Kreuz 8fd66d4281 Make use of the …::class feature in production code
This codebase already used the …::class feature a lot. This is more
about making the code consistent and easier to refactor in the future.

Change-Id: If5b2456b825aae753ed97445160ec191c18df8e3
2019-02-20 19:13:54 +00:00
Umherirrender cdae062d47 Improve param docs and add @var to clarify types
Change-Id: I44f872b3a2921e75aab8e22fec57735f17ee1d8b
2019-02-15 21:23:02 +01:00
Thiemo Kreuz 0a6e548e4e Some more specific array and array[] type hints
Change-Id: I2c518410df779683dfd70aacd5084f55d6766498
2018-12-17 11:45:39 +01:00
Thiemo Kreuz 8c51f5bd45 Avoid count()ing where not necessary
If all the code needs to know is if an array is empty or not, using
count() creates more confusion than anything.

Change-Id: I253308505fe5af5b5c56d85169789271967298ba
2018-10-19 10:04:24 +02:00
Roan Kattouw a90890582a Rename ApiCrossWikiBase -> ApiCrossWiki and make it a trait
That way we'll be able to mix it into non-query modules as well.

Unfortunately, PHP traits don't let overridden methods call their
original versions, which had to be worked around in a few places:
- $this->foreignNotifications can't be initialized in the constructor
  any more, so it's now lazy-created through $this->getForeignNotifications()
- Adding the 'wikis' parameter to getAllowedParams() now happens by
  calling getCrossWikiParams() rather than calling the parent
- Overriding getForeignQueryParams() can't call the parent anymore, so
  instead we just inline it

Change-Id: I415e6d921819fc1f7869c7d2f8bb62830a84c2a1
2018-08-29 18:03:16 -07:00
Umherirrender 2cd8d9d0eb Split long lines over 140 chars
This makes the code easier to read even on big screens

Change-Id: I14bfb97b2986f389ad11a6ddc97ba61468774782
2018-08-25 12:51:14 +02:00
Thiemo Kreuz cb282251a8 Avoid counting where not necessary
Change-Id: I0abbdced4474dabbdecd3bbfae194e79b7c29db1
2018-06-26 07:10:38 +00:00
Roan Kattouw d0714b2928 NotifUser: Simplify function signatures for getNotificationCount() and friends
The $cached and $dbSource parameters are now unused, so remove them.
This affects get{Notification,Alert,Message}Count and
getLastUnread{Notification,Alert,Message}Time.

There are some callers in other extensions and in skins, but none of
them pass any parameters (except one, which I fixed in Ice42930280da).

Change-Id: If6f10c4f163ecb1def5a150656a60d1ab5f44d52
2018-06-05 01:07:23 +00:00
Umherirrender b166664efc Fix parameter docs
Change @param to @var
Add |null to nullable arguments
Removed comment out code

Change-Id: I535ad4d544284c1e0fb6f39c254761f0810b4cc7
2018-04-06 08:17:17 +00:00
libraryupgrader 7a23ddf4b0 build: Updating mediawiki/mediawiki-codesniffer to 13.0.0
Change-Id: I7b19fab3b1100c4973600ec95ee24160e141c5ac
2017-09-24 09:49:43 +00:00
Kunal Mehta 27fa8c4f7d build: Updating mediawiki/mediawiki-codesniffer to 0.11.0
Change-Id: I48f0b64f19f9582b40540fa1b42a39d281979624
2017-08-10 23:22:40 -04:00
Umherirrender 5b4730c9bc Improve some parameter docs
Change-Id: Ie71fb080926781f2905e6264be060203c56185ea
2017-08-09 17:21:10 +02:00
Kunal Mehta aaf061c725 build: Updating mediawiki/mediawiki-codesniffer to 0.9.0
The following sniffs are failing and were disabled:
* MediaWiki.Commenting.FunctionComment.ExtraParamComment
* MediaWiki.Commenting.FunctionComment.MissingParamComment
* MediaWiki.Commenting.FunctionComment.MissingParamName
* MediaWiki.Commenting.FunctionComment.MissingParamTag
* MediaWiki.Commenting.FunctionComment.MissingReturn
* MediaWiki.Commenting.FunctionComment.ParamNameNoMatch
* MediaWiki.Commenting.FunctionComment.WrongStyle
* MediaWiki.FunctionComment.Missing.Protected
* MediaWiki.FunctionComment.Missing.Public
* MediaWiki.NamingConventions.LowerCamelFunctionsName.FunctionName
* MediaWiki.WhiteSpace.SpaceBeforeSingleLineComment.NewLineComment

Change-Id: I8401abf121a7413fa191d7bc535e0ddd6cf8c3f7
2017-06-22 14:13:28 +00:00
Stephane Bisson 8524471820 Remove 'text' as a valid notifications output format
The ability to format notifications as text
has been removed in Ic5712c4ce265b6faabce7a4028b4294fe3c73f18.

Bug: T155874
Change-Id: I72cadbaaa01414ce46315a618da0cb46241ad93e
2017-01-25 10:33:44 -05:00
Reedy 569006f614 Pass 2 parameters to addDeprecation
Change-Id: I891f94d32d64296fdb121d632e94dfba4b09070f
2017-01-05 22:14:38 +00:00
jenkins-bot 312bec325c Merge "Update for API error i18n" 2016-12-06 20:03:32 +00:00
James D. Forrester 8c810dff48 build: Update mediawiki/mediawiki-codesniffer to 0.7.1
Also added "composer fix" command.

Change-Id: I25cb61b3b92798f1259d1575a336e2b056d5764f
2016-12-05 15:54:30 -08:00
Brad Jorsch f608d73287 Update for API error i18n
See Iae0e2ce3. Since Echo master requires core master, this just depends
on the master patch instead of trying to maintain BC.

Depends-On: Iae0e2ce3bd42dd4776a9779664086119ac188412
Change-Id: Icc088b31bc99e03ac88dfb44329df55318bf99b5
2016-11-14 12:48:24 -05:00
Roan Kattouw 8269970305 Remove unused $flags parameter for EchoSeenTime::getTime()
It was always set to 0, and we were using the old (pre-2015)
get() interface so it wouldn't have worked anyway.

Change-Id: Ie92b223a485a5d9d256d2dc69d4ff3807e838878
Bonus: remove documentation for nonexistent parameter for setTime().
2016-09-23 11:53:59 -07:00
Catrope bba984c002 Revert "Make seen/unseen badge more consistent across wikis"
Has bugs, and will likely cause deployment problems.
This'll need to be reverted in wmf.19 at least
until we fix it up.

This reverts commit 00e0b9f45d.

Change-Id: Ia9d220ebcb607f96dee6bc856755305ed8501fcc
2016-09-13 14:21:32 -07:00
Moriel Schottlender 00e0b9f45d Make seen/unseen badge more consistent across wikis
- Add a 'hasUnseen' data to the xwiki bundle so the badge can
  consider its value when changing its color even without the
  bundle being opened.
- Check and store seenTimes from all sources that the xwiki
  has in a new JS object that the SeenTimeModel can store

Bug: T134855
Change-Id: Ifdcee88b4378cdc7acb4ae5c0cbc60b76339757e
2016-09-08 12:40:15 -07:00
Stephane Bisson 405b8ce084 Loading notifications starting with one big local bundle
Redo of cc86387f80 but
trying not to break the special page this time.

Bug: T143813
Change-Id: Id39d18a2ba4efa2b49ed42d10aa9aeef0e4672f0
2016-08-26 06:45:48 -04:00
Catrope 7c400c927e Revert "Get the overfetched before bundling to avoid removing the base"
Breaks pagination. At least on Elena's machine, this results
in only 51 results being shown with no pagination controls.

This reverts commit cc86387f80.

Change-Id: I6f888581039dc9171ce2114c47e53c2eda4eb8a3
2016-08-25 22:39:43 +00:00
Stephane Bisson cc86387f80 Get the overfetched before bundling to avoid removing the base
Bug: T143813
Change-Id: I82809d5fe1dd919810349d820a5f62175ce48fd4
2016-08-24 14:38:21 -04:00
Matthew Flaschen f845f6cc7b BREAKING CHANGE: Use ISO 8601 for 'ts' in cross-wiki summary.
Bug: T141164
Change-Id: Id0f029dd2fec0197bc01a1103fb569d086dec724
2016-07-27 17:00:05 -04:00
Stephane Bisson a970c44845 Process bundled notifications when the base is filtered out
When the base of a bundle cannot be rendered
(canRender() returns false), the bundled items still
have to be rendered and potentially marked-as-read as well.

If we don't do this, the base is filtered out, marked as read,
the counter goes down by 1 and the bundled notifications are ignored.
On the next query a new base is selected, filtered out, etc.
So if a bundle of 10 notifications cannot be rendered because it's
10 new topics on a deleted flow board, the flyout has to be opened
10 times for the counter to finally be 0.

Change-Id: I06962b25e36802ef00278e2bc70d5377b5874695
2016-07-26 15:07:23 -04:00
Stephane Bisson da0e0e37e0 Paginate even if some events are filtered out
When requesting notifications, the 'continue' value used
for pagination is only included if there is more
notifications than requested. When some are filtered out,
there is less notifications and no 'continue' value,
which leads to no pagination at all on the special page.

Change-Id: I1a13d2a343f4e60489e2a6a0474c97664ed00d46
2016-07-25 15:54:16 -04:00
Matthew Flaschen c05133283a Add seen time to output of API, in ISO 8601 format
Like count, it is available both grouped by section and ungrouped
(top-level).

Unlike count, the top-level still has both sections (but with the
string 'seenTime' at the root), and if groupbysection is used,
it will not also have top-level (since it would be redundant).

Example output at T139993

It will be false or omitted if there is no seen time, depending
on JSON format version (2+ is false).

Bug: T139993
Change-Id: I9f4f9df69203204b56002afa1be6ed2336c33898
2016-07-20 09:25:03 -07:00
jenkins-bot 76e6d545fb Merge "Check for empty array before calling max()" 2016-07-19 20:33:04 +00:00
Matthew Flaschen 5c8eb10795 Fix E_NOTICE due to event_deleted missing on foreign psuedo-notification
Bug: T139536
Change-Id: Ie4536543bdc39abc55ecfc3224845ff6c97069ea
2016-07-08 01:51:11 +00:00
Stephane Bisson 4659b00d94 Check for empty array before calling max()
When trying to find the max timestamp of all
notifications in one source or the max timestamp
between all the sources, check for empty array
to avoid "Warning: max(): Array must contain at
least one element...".

Bug: T139529
Change-Id: I0bf04ded40872c1c7a0cd3a9a62bc789814f5419
2016-07-07 09:03:09 -04:00
Stephane Bisson 194b9c78a4 Notification count: don't assume 'all'
Bug: T139323
Change-Id: I44ebdc600015bdfadc07e313689b8fad1d1c60c0
2016-07-06 21:04:49 +00:00
Roan Kattouw f62106f740 ApiEchoNotifications: Don't add wikis with no timestamp
This should prevent fatals in the sort-by-timestamp code
farther down, and also prevent incorrect output.

Bug: T139112
Change-Id: I6480b2e751594ba3392322f40e950f95ae702104
2016-07-01 21:17:29 +02:00
jenkins-bot 71bfae12c3 Merge "Change wfWikiId (lowercase d) to wfWikiID (uppercase D)" 2016-06-29 13:29:44 +00:00
Matthias Mullie 620d50f23f Change wfWikiId (lowercase d) to wfWikiID (uppercase D)
PHP can handle incorrect capitalization, but we should use the correct function
name.

Change-Id: I6db9bb90a8573f65cde503b771c9539faf38e75e
2016-06-29 15:11:21 +02:00
Stephane Bisson 5ffbc4db97 Fix foreign bundle count
Use foreign source reported notifications count
instead of counting the actual objects.

Counting objects is wrong because of bundles
that are 1 object but represent multiple notifications.

Bug: T138888
Change-Id: Ib63efc1e33af8f4364a7ba11a0dc3ff820f0a03c
2016-06-29 09:09:55 -04:00
Stephane Bisson 24caf50ff6 Dynamic bundles
To allow individual notifications to be
marked as read/unread or moderated,
bundles are created by grouping associated
notifications when they are fetched for display
instead of when they are created.

From a product perspective, this change doesn't
introduce moderation or expandable bundles but
it counts each individual notifications.
For instance, the bundled notification
"3 new topics on PageA" now counts as 3
notifications.

Bug: T93673
Bug: T120153
Change-Id: Iacd098573efd92bb1e3fcd7da4cd40cea9522f15
2016-06-27 09:49:13 -04:00
jenkins-bot 79aad8f479 Merge "Add support for querying notifications not associated with any page" 2016-06-27 13:35:02 +00:00
Roan Kattouw 7d97881344 Add support for querying notifications not associated with any page
Uses the magic value '[]' to mean 'no title'. This is a bit ugly,
but I think introducing an additional &notwithouttitle=1 parameter
is uglier and results in more code.

Change-Id: I83278182aeaf3905eb0f3e24c4c6c247720b1e76
2016-06-24 00:37:21 +02:00
Stephane Bisson c93800e17c Support for PlaceholderWidget with no link
Bug: T137490
Change-Id: Ia861b5aa3f100124418956a0e09603a9ba29215a
2016-06-22 12:54:13 -04:00
Roan Kattouw 792de35994 Gracefully handle outdated echo_unread_wikis rows
Adds $wgEchoSectionTransition and $wgEchoBundleTransition.
If either of these settings is enabled, we will disbelieve
the alert/message counts in the euw table and obtain them
using server-side cross-wiki API queries instead.

This affects both ApiEchoNotifications (for generating the cross-wiki
summary entry) and the count and timestamp computation in NotifUser.

In bundle transition mode, we trust that notifications are classified
correctly between alerts and messages, but we don't trust the
counts in the table. In section transition mode, we trust that
the sum of the alert and message counts is the correct count,
but we don't trust the alert and message counts individually.
If both modes are enabled, we mistrust anything that's mistrusted
by either mode and only trust what's trusted by both modes.
In any event, we do trust that only the wikis with rows in the
euw table have unread notifications.

Bug: T132954
Change-Id: Ibcc8ac102dac3cf06916d67427b42457fdb93db6
2016-06-20 16:21:03 +01:00
jenkins-bot 7a6d0f6aa3 Merge "ApiEchoNotificatons: Add nottitles parameter" 2016-06-16 12:09:46 +00:00
Roan Kattouw bbac9ff0c4 Follow-up 05e531c7b6: actually unset notcrosswikisummary
To prevent recursive cross-wiki notifications from appearing.

Change-Id: I63808e32561a350bf8b3286ebc9ec180958059c7
2016-06-15 23:48:54 +01:00
Roan Kattouw 016e6dabda ApiEchoNotificatons: Add nottitles parameter
To only show notifications related to a certain title
(or set of titles).

Bug: T137139
Change-Id: I5c82e02bc8e8553c5b761a771b975f03d943d408
2016-06-13 20:19:32 +01:00
Matthias Mullie f751e96839 Unread pages API
The query shouldn't be too expensive: it'll use an index to narrow
down the resultset for 1 user. After that, it'll be sorted based on
a grouped by value, but that should fit in memory: it'll never be
on more than 2000 entries, which is the max amount of notifications
per user.

Change-Id: I271ea7f7a6e010284739bfce02c4ec8a077148fc
2016-05-27 17:24:53 -07:00
Matthias Mullie 6b0081fd78 Rip general cross-wiki API request helpers out of ApiEchoNotifications
They'll come in useful for other APIs as well

Change-Id: I59e508d8c2d33c3868c13e28e4ac40441bc07d4e
2016-05-26 13:51:42 -07:00
jenkins-bot 772666b4eb Merge "Follow-up f5e9d4e: log parsing failures and API errors too" 2016-05-16 17:03:56 +00:00
jenkins-bot ff780827e2 Merge "Use JSON instead of PHP-serialized for internal cross-wiki API requests" 2016-05-13 23:41:09 +00:00
Roan Kattouw bc641732e5 Use JSON instead of PHP-serialized for internal cross-wiki API requests
Change-Id: I12e211b454366405e10b7a9706d4be12aab2849e
2016-05-13 16:28:30 -07:00
Roan Kattouw 62908b5cf9 Don't reuse CentralAuth tokens for multiple requests
CA tokens are single-use, and the fact that they even worked
for multiple requests was a race condition. Instead of getting
one CA token and using it for all requests, get a fresh token
for each request.

Bug: T135250
Change-Id: Ie1bbdefd3e265d009d0c42ff27da447b8da7f1fd
2016-05-13 16:13:36 -07:00