Skip to content

Commit

Permalink
Use server time rather than client time wherever possible (#741)
Browse files Browse the repository at this point in the history
Use server time rather than client time wherever possible
  • Loading branch information
Amorymeltzer committed Jan 7, 2020
2 parents 698a6ed + 3e21765 commit 48e8ea6
Show file tree
Hide file tree
Showing 6 changed files with 26 additions and 14 deletions.
2 changes: 1 addition & 1 deletion modules/twinkleblock.js
Expand Up @@ -1229,7 +1229,7 @@ Twinkle.block.callback.main = function twinkleblockcallbackMain(pageobj) {
var text = pageobj.getPageText(),
params = pageobj.getCallbackParameters(),
messageData = params.messageData,
date = new Date();
date = new Date(pageobj.getLoadTime());

var dateHeaderRegex = new RegExp('^==+\\s*(?:' + date.getUTCMonthName() + '|' + date.getUTCMonthNameAbbrev() +
')\\s+' + date.getUTCFullYear() + '\\s*==+', 'mg');
Expand Down
5 changes: 2 additions & 3 deletions modules/twinkleprod.js
Expand Up @@ -244,8 +244,7 @@ Twinkle.prod.callbacks = {

// Alert if article is at least three days old, not in Category:Living people, and BLPPROD is selected
if (params.blp) {
var now = new Date().toISOString();
var timeDiff = (new Date(now) - new Date(params.creation)) / 1000 / 60 / 60 / 24; // days from milliseconds
var timeDiff = (new Date(pageobj.getLoadTime()).getTime() - new Date(params.creation).getTime()) / 1000 / 60 / 60 / 24; // days from milliseconds
var blpcheck_re = /\[\[Category:Living people\]\]/i;
if (!blpcheck_re.test(text) && timeDiff > 3) {
if (!confirm('Please note that the article is not in Category:Living people and hence may be ineligible for BLPPROD. Are you sure you want to continue? \n\nYou may wish to add the category if you proceed, unless the article is about a recently deceased person.')) {
Expand Down Expand Up @@ -374,7 +373,7 @@ Twinkle.prod.callbacks = {
}

// create monthly header if it doesn't exist already
var date = new Date();
var date = new Date(pageobj.getLoadTime());
var headerRe = new RegExp('^==+\\s*' + date.getUTCMonthName() + '\\s+' + date.getUTCFullYear() + '\\s*==+', 'm');
if (!headerRe.exec(text)) {
text += '\n\n=== ' + date.getUTCMonthName() + ' ' + date.getUTCFullYear() + ' ===';
Expand Down
2 changes: 1 addition & 1 deletion modules/twinklespeedy.js
Expand Up @@ -1546,7 +1546,7 @@ Twinkle.speedy.callbacks = {
}

// create monthly header
var date = new Date();
var date = new Date(pageobj.getLoadTime());
var headerRe = new RegExp('^==+\\s*' + date.getUTCMonthName() + '\\s+' + date.getUTCFullYear() + '\\s*==+', 'm');
if (!headerRe.exec(text)) {
appendText += '\n\n=== ' + date.getUTCMonthName() + ' ' + date.getUTCFullYear() + ' ===';
Expand Down
2 changes: 1 addition & 1 deletion modules/twinklewarn.js
Expand Up @@ -1314,7 +1314,7 @@ Twinkle.warn.callbacks = {
}
}

var date = new Date();
var date = new Date(pageobj.getLoadTime());

if (params.sub_group in history) {
var temp_time = new Date(history[params.sub_group]);
Expand Down
19 changes: 11 additions & 8 deletions modules/twinklexfd.js
Expand Up @@ -760,7 +760,7 @@ Twinkle.xfd.callbacks = {
wikipedia_page.load(Twinkle.xfd.callbacks.afd.discussionPage);

// Today's list
var date = new Date();
var date = new Date(pageobj.getLoadTime());
wikipedia_page = new Morebits.wiki.page('Wikipedia:Articles for deletion/Log/' + date.getUTCFullYear() + ' ' +
date.getUTCMonthName() + ' ' + date.getUTCDate(), "Adding discussion to today's list");
wikipedia_page.setFollowRedirect(true);
Expand Down Expand Up @@ -1039,7 +1039,7 @@ Twinkle.xfd.callbacks = {
var params = pageobj.getCallbackParameters();
var statelem = pageobj.getStatusElement();

var date = new Date();
var date = new Date(pageobj.getLoadTime());
var date_header = '===' + date.getUTCMonthName() + ' ' + date.getUTCDate() + ', ' + date.getUTCFullYear() + '===\n';
var date_header_regex = new RegExp('(===\\s*' + date.getUTCMonthName() + '\\s+' + date.getUTCDate() + ',\\s+' + date.getUTCFullYear() + '\\s*===)');
var new_data = '{{subst:mfd3|pg=' + Morebits.pageNameNorm + params.numbering + '}}';
Expand Down Expand Up @@ -1289,7 +1289,8 @@ Twinkle.xfd.callbacks = {
var query = {
'action': 'query',
'titles': mw.config.get('wgPageName'),
'redirects': true
'redirects': true,
'curtimestamp': true
};
var wikipedia_api = new Morebits.wiki.api('Finding target of redirect', query, Twinkle.xfd.callbacks.rfd.findTargetCallback(callback));
wikipedia_api.params = params;
Expand All @@ -1299,20 +1300,22 @@ Twinkle.xfd.callbacks = {
// This is a closure for the callback from the above API request, which gets the target of the redirect
findTargetCallback: function(callback) {
return function(apiobj) {
var xmlDoc = apiobj.responseXML;
var target = $(xmlDoc).find('redirects r').first().attr('to');
var $xmlDoc = $(apiobj.responseXML);
var curtimestamp = $xmlDoc.find('api').attr('curtimestamp');
var target = $xmlDoc.find('redirects r').first().attr('to');
if (!target) {
apiobj.statelem.error('This page is currently not a redirect, aborting');
return;
}
var section = $xmlDoc.find('redirects r').first().attr('tofragment');
apiobj.params.curtimestamp = curtimestamp;
apiobj.params.target = target;
var section = $(xmlDoc).find('redirects r').first().attr('tofragment');
apiobj.params.section = section;
callback(apiobj.params);
};
},
main: function(params) {
var date = new Date();
var date = new Date(params.curtimestamp);
params.logpage = 'Wikipedia:Redirects for discussion/Log/' + date.getUTCFullYear() + ' ' + date.getUTCMonthName() + ' ' + date.getUTCDate();
params.discussionpage = params.logpage + '#' + Morebits.pageNameNorm;

Expand Down Expand Up @@ -1488,7 +1491,7 @@ Twinkle.xfd.callback.evaluate = function(e) {
}

var query, wikipedia_page, wikipedia_api, logpage, params;
var date = new Date();
var date = new Date(); // XXX: avoid use of client clock, still used by TfD, FfD and CfD
switch (type) {

case 'afd': // AFD
Expand Down
10 changes: 10 additions & 0 deletions morebits.js
Expand Up @@ -2172,6 +2172,13 @@ Morebits.wiki.page = function(pageName, currentAction) {
return ctx.pageExists;
};

/**
* @returns {string} ISO 8601 timestamp at which the page was last loaded
*/
this.getLoadTime = function() {
return ctx.loadTime;
};

/**
* @returns {string} the user who created the page following lookupCreation()
*/
Expand Down Expand Up @@ -2558,6 +2565,9 @@ Morebits.wiki.page = function(pageName, currentAction) {
return;
}
ctx.loadTime = $(xml).find('page').attr('starttimestamp');
// XXX: starttimestamp is present because of intoken=edit parameter in the API call.
// When replacing that with meta=tokens (#615), add the curtimestamp parameter to the API call
// and change 'starttimestamp' here to 'curtimestamp'
if (!ctx.loadTime) {
ctx.statusElement.error('Failed to retrieve start timestamp.');
ctx.onLoadFailure(this);
Expand Down

0 comments on commit 48e8ea6

Please sign in to comment.