User:Rjd0060/PermissionOTRS.js

From Wikipedia, the free encyclopedia

If a message on your talk page led you here, please be wary of who left it. Code that you insert on this page could contain malicious content capable of compromising your account. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. If this is a .js page, the code will be executed when previewing the page.
Note: After saving, you have to bypass your browser's cache to see the changes. In Internet Explorer and Firefox, hold down the Ctrl key and click the Refresh or Reload button. Opera users have to clear their caches through Tools→Preferences, see the instructions for Opera. Konqueror and Safari users can just click the Reload button.
/* ========================================================================== *\
*                                                                              *
*   MediaWiki:PermissionOTRS.js                                                *
*   Maintainer: [[User:Bryan]]                                                 *
*   Copyright (c) 2007 Bryan Tong Minh.                                        *
*   Licensed under the terms of the MIT license                                *
*                                                                              *
*  ==========================================================================  *
*                                                                              *
*   This scripts allows you to add OTRS permission links in an easy manner.    *
*   It will replace {{OTRS pending}} by the correct permission template.       *
*   If no occurrence of {{OTRS pending}} can be found, it will OVERWRITE       *
*   the permission field of the information template. If the information       *
*   template is not available, the script will fail.                           *
*                                                                              *
*  ==========================================================================  *
*                                                                              *
*   Tested with: Mozilla Firefox 2.0.0.6                                       *
*   Install this script by adding the following code to your monobook.js:      *
*    // [[MediaWiki:PermissionOTRS.js]]                                        *
*    importScript( 'MediaWiki:PermissionOTRS.js' );                            *
*                                                                              *
\* ========================================================================== */
 
function addPermission(ticket)
{
	var req = sajax_init_object();
	req.open('GET', wgScriptPath + '/api.php?action=query&prop=info|revisions&' + 
		'format=json&intoken=edit&rvprop=content|timestamp&titles=' + 
		encodeURIComponent(wgPageName), false);
	req.send(null);
	var info = eval('(' + req.responseText + ')');
	for (var key in info['query']['pages'])
	{
		var page = info['query']['pages'][key];
		var token = page['edittoken'];
		var content = page['revisions'][0]['*'];
		var editTime = page['revisions'][0]['timestamp'].replace(/[^0-9]/g, '');
 
		var rOTRS = new RegExp('\\{\\{Otrs[_ ]pending\\}\\}', 'i');
		if (rOTRS.test(content))
		{
			content = content.replace(rOTRS, '{{PermissionOTRS|ticket=' + ticket + '}}');
		}
		else
		{
			var rPermission = new RegExp('\\n\\|Permission[ \\t]*=.*', 'i');
			if (rPermission.test(content))
			{
				content = content.replace(rPermission, '\n|Permission={{PermissionOTRS|ticket=' +
					ticket + '}}');
			}
			else
			{
				alert('No suitable place found to insert template!');
				return;
			}
		}
		var postdata = '';
		postdata += 'wpTextbox1=' + encodeURIComponent(content);
		postdata += '&wpSummary=' + encodeURIComponent('Adding [[WP:OTRS|OTRS]] permission using [[MediaWiki:PermissionOTRS.js]]');
		postdata += '&wpSave=save';
		postdata += '&wpEditToken=' + encodeURIComponent(token);
		postdata += '&wpEdittime=' + editTime;
		postdata += '&wpStarttime=' + editTime;
 
		req = sajax_init_object();
		req.open('POST', wgScriptPath + '/index.php?action=submit&title=' + encodeURIComponent(wgPageName), false);
		req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		req.setRequestHeader('Content-Length', postdata.length);
		req.send(postdata);
 
		document.close();
		document.open();
		document.write(req.responseText);
		return;
	}
}
function OTRS()
{
	var ticket = prompt('Ticket link?');
	if (ticket) addPermission(ticket);
}
 
addOnloadHook(function () { 
	if (wgNamespaceNumber == 6) { //NS_IMAGE
		var t = document.getElementById('t-whatlinkshere');
        	if (!t) return;
		var li = document.createElement('li');
		var a = document.createElement('a');
		a.setAttribute('href', 'javascript:void(OTRS())');
		a.appendChild(document.createTextNode('PermissionOTRS'));
		li.appendChild(a);
		t.parentNode.appendChild(li);
	}
});