Commit graph

83 commits

Author SHA1 Message Date
addshore
165a30184e Remove unused deprecated WatchedItem methods
Not used in core or in any extensions on Gerrit

Change-Id: I10f0e98f52189f60480f5adb824a5cca9820d5f5
2016-07-26 10:52:31 +00:00
addshore
ee7e5636fa Add wfDeprecated calls to WatchedItem
Depends-On: Ifd6d46596ea273da73c3097aaff1487860bd6424
Depends-On: Ib9502202be3c73f9d3f253b310f35901e1c88cd4
Depends-On: I69d40b48ad3ab126e01b1103ec82b531f2674ced
Change-Id: Ib26ecd3a5f2d98472da78f2cd382153f27cb350b
2016-05-10 11:44:56 +00:00
addshore
818984e5cb Remove WatchedItemStore::getDefaultInstance
Change-Id: I0c7d706fabee8d1f6fcfbc4c568f375953de8058
2016-05-06 08:47:37 +00:00
Kunal Mehta
c9d885f3b4 Namespace LinkTarget under MediaWiki\Linker
And add a GPL file header while we're at it.

Change-Id: I15a6f240124c879b21fb655ade1baaebf4f34ffd
2016-04-21 17:19:10 -07:00
Kunal Mehta
aa21cf32fa Specially handle Title objects in Title::newFromLinkTarget()
Every single caller of Title::newFromLinkTarget() already special cases
when the LinkTarget object is already a Title, so move that logic into
one function.

Change-Id: Iba5432ae01c87850e5b34893092427c5b1629188
2016-04-19 22:21:09 -07:00
addshore
12e2e9edbc Switch Signature of WatchedItemStore::addWatchBatch
Adding batches of watched items per users
makes much more sense.
Only the deprecated static WatchedItem method
needed the old silly way of passing in objects.

Change-Id: I90f9583b66bd3b5afcf07faefedb38a8a0149f6e
2016-03-24 18:28:08 +00:00
Siebrand Mazeland
aa7039cf47 Wikimedia\Assert\Assert is never used
Change-Id: Ie12f158ec01deb2db7c3d515fe16839117380ee8
2016-03-11 16:37:19 +00:00
addshore
fee0afdc8a Move WatchedItem logic to WatchedItemStore
This also removes assumptions that when a page
in one Namespace should be watched / removed
that the page in the talk / subject ns for the
page should have the same action applied

This should maintain all backward compatability
for the WatchedItem class

This also includes tests written by:
 - WMDE-leszek
 - Addshore

Bug: T127956
Change-Id: Iad9abafe4417bb479151a3bfbee6e1c78a3afe3c
2016-03-08 15:41:22 +00:00
addshore
54d4315be6 Move WatchedItem::duplicateEntries to WatchedItemStore
This removes static logic from WatchedItem into a
class that we can slowly fill with watchlist database
and storage things.

This also removes the dual namespace handling in
the new implementation.

Change-Id: Ia67ab1d200ac393c65013b2091e61acefcb3defb
2016-02-17 15:22:32 +00:00
Kunal Mehta
6e9b4f0e9c Convert all array() syntax to []
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
2016-02-17 01:33:00 -08:00
jenkins-bot
86d748930d Merge "Make WatchedItem members private" 2016-01-29 19:59:56 +00:00
addshore
75c530095e Make WatchedItem members private
These are only used in this class

Change-Id: I492e7f5b0611f8928b352af983f18f5184bc54bf
2016-01-29 20:39:23 +01:00
addshore
91825ea180 Remove WatchedItem::IMMEDIATE and DEFERRED
It looks like this used to actually be used
since Ie60e20162fd833e64d81763a6aa1dc3faf2162f3
but since the global wgActivityUpdatesUseJobQueue
seems to have been removed from the code.

Thus this stuff is doing nothing and
things are always DEFERRED.

Change-Id: I08cb6051f52e0f0402542d8326f03f115bb00943
2016-01-29 20:34:38 +01:00
umherirrender
2950de51e3 Call DB::timestampOrNull in WatchedItem::resetNotificationTimestamp
This increase cross DBMS support

Bug: T86490
Change-Id: Ia1108c321dbc93295b18039420e49960ad6215d6
2015-11-22 11:06:58 +01:00
Aaron Schulz
bc3247a83f Use deferred updates in place of $wgActivityUpdatesUseJobQueue
* This is simpler and does not require custom queue loops

Bug: T91284
Change-Id: Icb8b6aaeb496a4ff3cd3a7e20cdbea0c7dabd677
2015-07-15 23:52:55 +00:00
Aaron Schulz
836ad263c3 Made wl_notificationtimestamp updates able to use queues
* This adds a wgActivityUpdatesUseJobQueue setting, which lets
  these updates work via the job queue, rather than direct DB
  master updates.

Bug: T91284
Change-Id: Ie60e20162fd833e64d81763a6aa1dc3faf2162f3
2015-04-25 14:47:42 -07:00
Aaron Schulz
f17392feb5 Made WatchedItem use Revision::getTimestampFromId
Change-Id: I3a895a69e8f4678b82a4e50f70d6bfc4df932d74
2015-04-13 21:54:34 +00:00
Chad Horohoe
aa21e125a3 Remove obvious function-level profiling
Xhprof generates this data now. Custom profiling of various
sub-function units are kept.

Calls to profiler represented about 3% of page execution
time on Special:BlankPage (1.5% in/out); after this change
it's down to about 0.98% of page execution time.

Change-Id: Id9a1dc9d8f80bbd52e42226b724a1e1213d07af7
2015-01-07 11:14:24 -08:00
Brad Jorsch
8ff5c74bdc Copy wl_notificationtimestamp when copying watchlist entries on move
When a page is moved, the new title is automatically added to the
watchlists of every user watching the old title. But we also need to
copy the wl_notificationtimestamp over, otherwise edits from before the
move aren't highlighted in the page history and such.

Bug: 73219
Change-Id: I657475c28944539daec14f838d3af4c2962a4b93
2014-11-10 18:21:17 +00:00
umherirrender
63dc5abc9a Fixed spacing
- Added space after reserved words: function, foreach, if
- Combined 'else if' into elseif
- Added braces to one-line statements
- Added spaces after comma, before parentheses

Change-Id: Ie5bbf680d6fbe0f0872dab2700c16b1394906a72
2014-08-27 18:31:50 +02:00
umherirrender
82e729f07c The static declaration must come after the visibility declaration
Change-Id: I50b7f39d527f5590373192a684ec07949988ec23
2014-08-26 21:09:22 +00:00
umherirrender
7c6a25856c Add missing @return to function docs
Change-Id: I45b9d02f94ecc58372268ec5e6a0b572a0b7e2a9
2014-08-23 23:14:57 +02:00
Erik Bernhardson
20f78684b8 Use batch inserts for watchlist
Inserting a watchlist item was using two queries where only one was
necessary.  This adjusts to use a single query and adds the ability
to watchlist multiple titles simultaneously.

Change-Id: I331238524598f1ee87c28104ab02edf4b2afaaf2
2014-08-15 14:16:04 -07:00
Siebrand Mazeland
4b8523198f Make phpcs-strict pass on includes/ (4/~10)
Change-Id: I2767205a7059adfb8fa090a82abd332e518f2590
2014-05-11 19:35:09 +00:00
umherirrender
23bb3d1cb4 Follow-Ups to "Fixed some @params documentation"
Fix of inline comments of the following patch sets:
Follow-Up: I0056b4a8df243cfc0c5f25378de48f7a35170aca
Follow-Up: I7f605aa9e117b5fd80d9b1440864fe526d2b14a5
Follow-Up: I3622f216a2ca8ac1b5e51892be9f98665f65bc36
Follow-Up: I6627ba0e76d3577c40bf2473e0f78a5ad7368634
Follow-Up: Id75b5ecf648ca50f955b3bde3307c82c4366b102
Follow-Up: I4ca5231119f33039d91da3b57a41cd40719a576b

Change-Id: Id9bbe84b2820e9db44af5783411e955f55f643d4
2014-04-23 13:39:49 +02:00
umherirrender
8ad1c92441 Fixed some @params documentation (includes/*)
Swapped some "$var type" to "type $var" or added missing types
before the $var. Changed some other types to match the more common
spelling. Makes beginning of some text in captial.
Also added some missing @param.

Change-Id: I7f605aa9e117b5fd80d9b1440864fe526d2b14a5
2014-04-20 21:16:57 +02:00
umherirrender
4c81a710fa Fix formatting of some php docs
php docs of functions should have newline in it and not in one line.

Change-Id: If4a29aefb46a7f73d75593814e597fdb792d5470
2014-03-15 20:49:55 +00:00
umherirrender
607449cb84 Do not load special pages in WatchedItem::load
WatchedItem::load was looking for a special page in the database:
SELECT  wl_notificationtimestamp 
  FROM `watchlist`   
 WHERE wl_user = '1' 
   AND wl_namespace = '-1' 
   AND wl_title = 'Log' 
 LIMIT 1  
But it is known that such a page never will stay in the database,
so added a check to avoid the select.

Change-Id: I8c65328a32aa93c351ac476ce79d12d2835128f6
2014-01-12 16:33:56 +00:00
Bartosz Dziewoński
dfc3e3df90 Correctly update wl_notificationtimestamp when viewing old revisions
== Prelude ==
wl_notificationtimestamp controls sending the user e-mail
notifications about changes to pages, as well as showing the "updated
since last visit" markers on history pages, recent changes and
watchlist.

== The bug ==
Previously, on every view of a page, the notification timestamp was
cleared, regardless of whether the user as actually viewing the latest
revision. When viewing a diff, however, the timestamp was cleared only
if one of the revisions being compared was the latest one of its page.

The same behavior applied to talk page message indicators (which are
actually stored sepately to cater to anonymous users).

This was inconsistent and surprising when one was attempting to, say,
go through the 50 new posts to a discussion page in a peacemeal
fashion.

== The fix ==
If the revision being viewed is the latest (or can't be determined),
the timestamp is cleared as previously, as this is necessary to
reenable e-mail notifications for given user and page.

If the revision isn't the latest, the timestamp is updated to
revision's timestamp plus one second. This uses up to two simple
(selectField) indexed queries per page view, only fired when we
do not already know we're looking at the latest version.

Talk page indicator is updated to point at the next revision after the
one being viewed, or cleared if viewing the latest revision. The
UserClearNewTalkNotification hook gained $oldid as the second argument
(a backwards-compatible change). In Skin, we no longer ignore the
indicator being present if we're viewing the talk page, as it might
still be valid.

== The bonus ==
Comments and formatting was updated in a few places, including
tables.sql and Wiki.php.

The following functions gained a second, optional $oldid parameter
(holy indirection, Batman!):
* WikiPage#doViewUpdates()
* User#clearNotification()
* WatchedItem#resetNotificationTimestamp()

DifferenceEngine gained a public method mapDiffPrevNext() used
to parse the ids from URL parameters like oldid=12345&diff=prev,
factored out of loadRevisionIds(). A bug where the NewDifferenceEngine
hook would not be called in some cases, dating back to its
introduction in r45518, was fixed in the process.

Bug: 41759
Change-Id: I4144ba1987b8d7a7e8b24f4f067eedac2ae44459
2013-10-27 17:47:53 +00:00
Brad Jorsch
18062eb3b0 Add user rights 'viewmywatchlist', 'editmywatchlist'
These are needed for OAuth grants.

Note that, even if 'editmywatchlist' is not granted, various actions
will still allow for adding but not removing of pages.

Change-Id: Ie33446a228dd6ed0114730935c1bf65667f5ce01
2013-06-26 10:20:40 -04:00
umherirrender
21884f7537 Avoid select/writes for anon user in WatchedItem
For a page view of a anon user the following select is executed:
SELECT  wl_notificationtimestamp  FROM `watchlist`  WHERE wl_user = '0'
AND wl_namespace = '0' AND wl_title = 'Hauptseite'  LIMIT 1  

Change-Id: I1cf77a2d024956ed7c150bdf1687eb80c7eccc6f
2013-05-23 20:38:05 +02:00
umherirrender
ef2f507d23 Fixed spacing in files direct in includes folder
Added spaces before if, foreach
Added some braces for one line statements

Change-Id: Ibb8dd102db045522d12ff939075ba7420d95ab6b
2013-04-21 06:38:49 +00:00
Siebrand Mazeland
9b7889b84b Use American English spelling for behavior
Spotted in ipbreason-dropdown by Shirayuki.

Change-Id: I576ed4bc0abe5ab980aaee3fb9f9e4b43087311f
2013-03-04 10:24:57 +01:00
umherirrender
1044b0b8df fix some spacing
Change-Id: I8f976013f33c5818e4402604fe8610aa3f43b0c6
2013-02-04 20:18:33 +00:00
Antoine Musso
02217b3d17 cleanup WatchedItem class
* removed $id, $ns, $ti which were set on construction and replace them
  with meaningful accessor getUserId(), getTitleNs and getTitleDBkey()
* removed a commented out hack from September 2004

Change-Id: Iaa9e851516e0522492b0452430c7583fe3526ffc
2012-12-20 10:31:42 +00:00
Alexandre Emsenhuber
2040d1337e Added missing GPLv2 headers in some places.
Also made file/class documentation more consistent.

Change-Id: Ib46e50da4ec649a6a06cbeed00752effb79ed06e
2012-05-09 20:11:36 +02:00
Alexandre Emsenhuber
e6441b8f6c * Don't issue a write query to the database if the wl_notificationtimestamp is already null, so we don't to do at COMMIT et al. on every view request on an user watching the page
* Made WatchedItem select wl_notificationtimestamp instead of "1"
* Added loading mechanism, accessor to wl_notificationtimestamp and method to reset that timestamp
2012-02-10 19:35:14 +00:00
Sam Reed
b15737fa83 And even more documentation, the last of this batch 2011-05-28 19:00:01 +00:00
Sam Reed
912ec3aef6 Add profiling to removeWatch 2011-02-13 19:12:24 +00:00
Sam Reed
a2589ff8c6 Assignment in loop conditions suck
while ( $row = $dbw->fetchObject( $res ) ) { to foreach ( $res as $row ) in includes

Add some braces
2010-10-13 23:11:40 +00:00
Chad Horohoe
4c74490bb8 Big commit: kill almost every freeResult() call as useless 2010-08-08 12:27:48 +00:00
Chad Horohoe
a4e5e935b6 Mass convert NULL -> null. Left strings and comments alone, obviously. 2009-12-11 21:07:27 +00:00
Roan Kattouw
ba484965ed Clean up WatchedItem.php a bit: use __METHOD__ rather than $fname and use MWNamespace::getSubject() and getTalk() 2009-02-26 12:52:21 +00:00
Alexandre Emsenhuber
a1ce0224ad fix some doxygen warnings 2008-09-17 14:26:43 +00:00
Chad Horohoe
d153006396 Minor cleanup (docs, visibilities, formatting) 2008-09-15 17:40:12 +00:00
Alexandre Emsenhuber
73ad562b8d Fix some doxygen warnings 2008-05-22 19:48:26 +00:00
Brion Vibber
a4ffac4063 Revert r35178 and normalize User's getID() and setID() methods to prettier getId() and setId()
This doesn't accomplish anything, of course, but if you're going to run around changing them, at least make em prettier eh? :)
2008-05-22 16:39:43 +00:00
Aaron Schulz
ae54dbbb3d *The function is User::getID() not getId() 2008-05-22 14:57:07 +00:00
Alexandre Emsenhuber
087a9f70c5 WARNING: HUGE COMMIT
Doxygen documentation update:
* Changed alls @addtogroup to @ingroup. @addtogroup adds the comment to the group description, but doesn't add the file, class, function, ... to the group like @ingroup does. See for example http://svn.wikimedia.org/doc/group__SpecialPage.html where it's impossible to see related files, classes, ... that should belong to that group.
* Added @file to file description, it seems that it should be explicitely decalred for file descriptions, otherwise doxygen will think that the comment document the first class, variabled, function, ... that is in that file.
* Removed some empty comments
* Removed some ?>

Added following groups:
* ExternalStorage
* JobQueue
* MaintenanceLanguage

One more thing: there are still a lot of warnings when generating the doc.
2008-05-20 17:13:28 +00:00
Siebrand Mazeland
79d5225c0e * remove end of line whitespace
* remove empty lines at end of file
* remove "?>" where still present
2008-04-14 07:45:50 +00:00