* cache function result in local variables
* Update the logic of generating notification date header
Change-Id: I04c3ed853076f17c819da8f27bfdb169e99b2a3a
Core titleCache doesn't do what I expect it to do, issuing
Title::newFromId( 1 ) mulitple times would issue multiple
idential queries to the database. It doesn't return what's
already in the cache.
The goal of this patch is to batch load titles via newFromIDs,
and save the number of mysql queries
Change-Id: I8fe767ac2669e67bdf7d17eecccfc0dcb6b5fc7d
The new locateUsersWatchingTitle implementation could end up returning
thousands of users, currently on enwiki there are 25 titles with more
than 10k subscribed users and aprox 550 titles with more than 1k subscribed
users.
This switches the user collection to an iterator based implementation so that
we no longer need to have the entire users list at any one time.
Change-Id: I3d3fa9328f348bb48682d3658622952ce82d3925
The special page will now not auto mark a notification as read if
it has a target url. Currently no notifications have target urls
but this will be changed in a later patch...
Change-Id: I9bd71d59391189d5d761ab5f1c84af0bc3554be0
* This will be used for the unread notifications in message overlay
* This will be used to "mark all as read" based on sections ( event types ),
since we can't do updateJoin. We could set a max update limit like 3000,
and use this to do "mark all as read", this would handle majority "mark all as read"
use cases. This would also prevent updating big amount of data on a web request
Change-Id: I2a9103a73d0aa91a52d5c0233e946a0ef979f96d
This will be used for marking a notificaiton as read when
a user visits a target page. The new table should keep the
volume as low as possible for fast data loopup. records
should be removed from the table once it's marked as read.
Change-Id: I605cbc79adfc12d22bd889c5bb513d05c479fe6e
* Shared function can be put in the abstract class and this also enforces some interface methods
* Initialize a default dbFactory when it's not passed to the mapper
Change-Id: I1033dafaa90a1f683fbe9ad69bed04f4844e357b
Replace implementation specific code with generalized user-locator
implementations that can be re-used by more notifications in other
extensions.
This patch adjusts the `user-locators` notification parameter to allow
arrays which facilitate passing options to the locator.
Previously(still works):
'user-locators' => array( 'foo', 'bar' ),
New functionality:
'user-locators' => array(
'foo',
array( 'bar', 42 )
)
In the second example the callback specified by `bar` will receive
an EchoEvent as the first argument and array( 42 ) as its second
argument.
Change-Id: I7305279bc91d1e40e7054e2fd42a819a35526b82
There are a variety of generic strategies you could define to choose
which users should be notified about an event, such as 'users watching
the title' or 'talk page owner' (User_talk only).
This adds a new way to generically implement these in Echo and expose them
to other extensions rather than having each extension implement these
generic strategies themselves.
This patch only converts one notification, edit-user-talk. The remaining
notifications will be converted in future patches. The first user of this
will be Flow for notifying all users watching a particular talk page in
I4e46a9c003fbdde274b20ac7aef8455eab4a5222
The users watching title implementation provided here is minimalist, a larger
refactor to accomidate pages with thousands of watchers is being handled
in I3d3fa9328f348bb48682d3658622952ce82d3925
Change-Id: I19bb6a794d22565f3bb5421de92426d390197796
* Get rid of EchoBackend by separating responsibilities into smaller objects
* Move main fetchNotification logic from API to a more appropriate place
* Add more unit testing coverage
Change-Id: I42f4d7566543332588431c21c220c0d64d026b70
Unused functions.
There is also no usecase for this, events shouldn't be altered
after creation except for bundling.
Change-Id: Id175c075d24263119f0455d99342263dd98f9410
General code cleanup as reported by the PHPStorm static code
analysis. I hope it's not a problem that I made a lot of very
different (but all very tiny) changes in a single patch. If you
want to merge this but you think it's better to split it into
several patches first, please tell me.
Change-Id: I2e2c4bb47f8d20e038d28e236e2ff813b30504af
Removed #F8F8F8 background color from <td>s in the footer of
Echo's email notifications, in order to highlight better the
content and minimize the importance of the footer, following
the practice of several popular sites.
Bug: 59913
Change-Id: I23d039abb701d59792c591e6847e73cdcf929705
The code was looking at the [0] element for the matched position
of timestamps, while preg_match returns it in the [1] element.
Bug: 53132
Change-Id: Ibfd3f2b86b007f28f73a137defb80276fb830d28
Follows-Up: I6c636b055bcd25760aee848aea71fe4044c7e1be
In some cases, we need to add wgLang->getDir() for icon patch, but
wgLang is not yet fully initialized
Bug: 58705
Change-Id: I72fcb8e4cff9437d66ff9b60669701f572060389
This patch updates Echo to revision 6081131 of Schema:Echo, adding a 'rev_id'
field and the code to populate it. The patch also increments the logging
version identifier to 1.5.
Bug: 46045
Change-Id: I4ac1a25c306b0e0983a3490a29fe3dc4aa4bfc6f
Add a media query style for mobile device so the email doesn't generate
a horizontal bar. Gmail strips out all style, that means we can't apply
the mobile style to Gmail. Luckily, Gmail on mobile device browser
automatically fit into the entire mobile screen
bug: 53057
Change-Id: Ia4350669db2e81ee44d5b53d7cece6fcd8839e7a
To test the HTML email:
1. install the latest version of php-mail and php-mail-mime package, they are required
by the core sendmail function to send HTML email
2. set $wgAllowHTMLEmail = true before loading Echo in LocalSetting.php
Change-Id: Ia4b98b14e135742b84f1b0e04589b0efdd24e954
Echo preference change is already captured in the general
preference change eventlogging, this is just a duplicate
Change-Id: I49cd2ad5776a670e2cd28414e156f5201087ded0
Provides the first step of adding and populating a new database field
for Echo oversight deployment. The new field is populated via a
maintenance script and Event::loadFromRow will accept both new and old
results. Everything will still run when the 2 now unused fields are
later dropped from the db.
Bug: 48059
Change-Id: I24d4b61a061f94ed9aaaa6087f33b2ab37f773cd
Echo's detection of section links was limited to the main heading that have
==Foo==, with exactly two ==. This updates the regexp patterns involved to
correctly detect(and hence, link) to sub sections if thats where the edit was
made.
Bug: 48484
Change-Id: Iedbe3404ec265a7f2183629b463a3d672dc9098e
This bug was introduced during fixing the implicit database transaction,
the badge count logic happens before the transaction completes on idle,
moving the badge count code to only after a successful notification creation
should solve the issue
Change-Id: Ia564ed0d386e7cf2da1af3d23ae83d71ad472df5
Detects changes to different parts of the document as independent from each
other. Refactored parser passes all tests the previous parser passed plus
a number of new tests which fail with the original parser.
Change-Id: I65fdc6d9f922cbe9ff684332945def3776c70d30
Implements whitelists and blacklists for notification agents to assist
in filtering out unwanted notifications from bots.
Bug: 47946
Change-Id: I0d7e071067c6974fb90cf6c0ba1bd159f46bd5df
Adjusted the edit-user-talk event creation to detect and record which section
of the talk page was edited. Flyout, special page, and email messages have
been adjusted to use this section title as a URL fragment when available.
Bug: 46937
Change-Id: I161e2ffda2f2540f64de90cc621fb3b69479d0db
In some rare cases, an event with a bigger event_id may have a smaller timestamp,
in such cases, those records will not get pulled by the existing query, since
it's always filtered by <= notification_timestamp AND < event_id
Change-Id: I61620a9b93331814ad42253ca380a31301555cda
This patch makes Echo talk page notification mimic the existing Orange Bar and Email talk page notification
for minor edit.
For the Orange Bar, minor edit notification is sent if the editor does not have nominornewtalk
permission.
There are additional rules for the email, minor edit notification is sent if global $wgEnotifMinorEdit
is true and notification recipient has enotifminoredits option on.
Change-Id: Ib3835c4dd57a3686b227c44710a14ab06cded166
1. Only trigger mark as read if the unread notification count is > 0
1. Add a limit to the number of notification that can be marked as read
2. Only update those records with read_timestamp = null
Change-Id: I12456c504787f45f594ef9283e98d98692956935
GNU diff and mediawiki's internal UnifiedDiffFormatter do not have
the same default formats. Here we adjust the output of the internal
diff to match gnu diff as is expected by DiscussionParser.
Bug: 41689
Change-Id: Ib83cacab41adfbdfa8e122c0494b266d4caefc83
Also moving getUserEnabledEvents from EchoBackend to
NotificationController since it has nothing to do with the backend.
Bug: 47664
Change-Id: I4f9682b861d9f035ae45f206c37ec0ae1c09ab64
Some script like job runners are running against multiple wikis, caching the object would make later wikis use the incorrect object, it's global variable anyway, there is no need to cache it
Change-Id: I427a5cefbd607aaf897dfa07087e381faffea495
Button is only shown if there are more unread notifications than
fit in the overlay.
To avoid performance issues, this version only works for cases where
the number of unread notifications is less than the maximum count
(99 currently). Otherwise the button to mark all as read isn't
displayed (it's also limited on the server-side for good measure).
Bug: 47092
Change-Id: Ifcb0a436e2b31062741c441cca239d35ddefa0e1
If this pref is turned off, we revert to the old orange bar talk
page notifications. Depends on core change Ifc8fbaf8.
Bug: 46550
Change-Id: If21f3aac51e484c5e077c7f4b5a2218e8b71ed2a
If a user switches to email digest, we should not send or schedule any bundle emails, otherwise, a user may keep getting bundle emails till bundle cycle reset
Change-Id: Id8e4f39cad4c61dc9a044558307f0d654193cd49
* This patch needs intensive testing on Redis delayed job queue
* This patch is -2 mainly for redis/phpredis are not ready on test/test2/mediawiki
To test this locally, you need to:
* set up Redis and phpredis locally
* add the following to localSettings.php
$wgJobTypeConf['MWEchoNotificationEmailBundleJob'] = array(
'class' => 'JobQueueRedis',
'redisServer' => '127.0.0.1',
'redisConfig' => array( 'connectTimeout' => 1 ),
'claimTTL' => 3600,
'checkDelay' => true
);
* set $wgMainCacheType to CACHE_DB or memcache
* set $wgEchoBundleEmailInterval to smaller number for testing purpose, 0 to disable email bundling
Change-Id: I9313e7f6ed3e13478cec294b5b8408fe8e941faf
* add web bundling feature
* unify event_timestamp with notification_timestamp
* remove echo_subscription
* update article_link to page_link notification with new logic
* remove duplicated function from MWDbEchoEmailBatch since it's defined in parent class
Change-Id: I2fa91c44edb020209b468fe13f894d9db3732e69
1. Dismiss title should be based on $event->getCategory() instead of $event->getType()
2. Remove various echo-email-batch-category-header-* messages
3. update echo-dismiss-title-* to echo-category-title-*
Change-Id: I02fc85072f3d5967668c94eb28c8ecff606023d0
Since every event is tied to a category, it's better for event object to have it as a member method
Change-Id: I911415284486bb11d13d91366340c5c330317c34
Any user whose user page is linked in a comment on a talk page will get a notification of that.
Weaknesses: Currently this mention notification is additive.
We may want to restrict it to only cases where the user would not
otherwise be notified of the comment
patch set 3:
* user + instead of array_merge for merging subscription users
* rename $user to $agent to avoid name confilict in generateMentionEvents()
* add check for possible null object
* users should not receive 'mention' notification on their own talk pages
patch set 4:
* add more descriptive comment
* check for empty notification list before creating mention event
patch set 5:
* Fix a parse error, change [ to {
patch set 10:
* rebase
patch set 11:
* adding flyout messages, updating params for other messages
Change-Id: I76b80db1f325d9569f36c506d14c8c875bba4a34
Includes new web preferences for Echo
Also adding ability to set dismissability per notification type
Still need to arrange subscription options into a friendly format
Still need to add dismiss functionality to flyout
Change-Id: I484a24b424e69be3640e63b76f82735edae6f13a
patch set 3:
* add gender support to various messages
* tweak variables a little bit, e.g. move class variables to function local variables
patch set 4:
* update various email to e-mail in i18n file
* add support to process only valid echo events
* add global email footer
* add the new table schema to core schema file
patch set 5:
* remove trailing white space
* add missing semicolon to return statement in Notifier::notifyWithEmail()
patch set 8:
* some change based on newest feature requirement
Change-Id: I3298617dab4c04c4d6d486469120fc2d0c986b66
patch set 2: remove trailing whitespace
patch set 3: remove unnecessary variable and add @return to function comment
patch set 4: remove redundant intval() and update commit message
Change-Id: I6abfa7d820433e008d8bdcc5843515cd4823dd02
Fatal error: Call to a member function getNamespace() on a non-object in /usr/local/apache/common-local/php-1.21wmf4/extensions/Echo/includes/DiscussionParser.php on line 57
Change-Id: I31ebf8ea47ce6378a5763f1fd59d27a9247c870a
Basically having fun with the code analyzer.
Also:
* remove unused local variable assignments
* missing return values
* CSS optimizations.
* Initialize possible unset variables.
Change-Id: I77aa08ecb48eeda08f14dc38d7f35d57ea9fa110
Edits to talk pages were being compared to the previous revision e ven when there was no previous revision.
Change-Id: Id45575dca2ec121fc469019ad9384d035af96d51
First implementation of "two line" formatting.
Messages have a title and optional content.
Distinguishing writing on "your talk page" from another talk page in messages.
Change-Id: I9051e4bfb66d1c25c1bf68ec092b52fd90544336
Uses the class EchoDiscussionParser to understand actions taken on
vanilla MediaWiki discussion pages.
Currently notifies on these occasions:
* A new comment is added to a discussion on your talk page or that
you have participated in.
* A new topic is added to your talk page.
There are vague plans to expand to these classes of events:
* Your comment is edited or removed.
* A large section is moved to your talk page.
and these classes of users:
* Users watching discussion pages.
Change-Id: Ie6cae76ed2e0ecf607059e39ac1aa480a275ec89