NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name OTRS refresh =D
// @namespace http://tampermonkey.net/
// @license MIT
// @version 1.0.3
// @description Auto-Refresh OTRS
// @author Marcelo_Valvassori_Bittencourt
// @copyright 2019, Marcelo_Valvassori_Bittencourt (https://openuserjs.org/users/Marcelo_Valvassori_Bittencourt)
// @namespace mbitts.com
// @homepageURL https://openuserjs.org/users/Marcelo_Valvassori_Bittencourt
// @match http://otrs.1cta.eb.mil.br/otrs/index.pl?Action=AgentDashboard
// @grant none
// @icon https://otrs.com/favicon-16x16.png
// ==/UserScript==
//--- https://stackoverflow.com/questions/25484978/i-want-a-simple-greasemonkey-script-to-reload-the-page-every-minute
(function(){
'use strict';
$(document).ready(function () {
$(document).on('DOMContentLoaded', function () {
if (!Notification) {
console.log('Desktop notifications are not available in your browser.');
return;
}
if (Notification.permission !== 'granted') {
Notification.requestPermission();
}
});
});
var jOTRS = {
me : 'Adj SGO 2 Ten Bittencourt',
debug : true,
default_time : 5,
default_days_cookies : 1,
about : {
'author' : 'Marcelo Valvassori Bittencourt',
'supportURL':'http://mbitts.com/scripts/jOTRS.js',
'create':'2020-04-13',
'lastUpdate':'2021-06-05',
'description':'Refresh page into defined minuts.',
'name':'[HK]jOTRS Refresh',
'namespace':'mbitts.com'
},
version : [
{'1.0.3':'Notificação Desktop para Firefox (site inseguro necessita habilitar).'},
{'1.0.2':'Contador regressivo.'},
{'1.0.2':'Adicionando como caixa de menu padrão do OTRS'},
{'1.0.1':'Adicionando uma interface simples de apresentacao fixed to botton.'},
{'1.0.0':'Criação de atualização da página principal com dados definidos em variáveis.'}
],
init : function(){
//jOTRS.interface_old();
jOTRS.interface_otrs();
jOTRS.contagem();
jOTRS.newTickets();
},
min : function(){
var tm = jOTRS.readCookie("timerefresh");
if(!tm || tm == '' || tm === 0) {
tm = jOTRS.default_time;
jOTRS.createCookie("timerefresh", tm, jOTRS.default_days_cookies);
}
return tm;
},
log : function(txt){
if(jOTRS.debug){
let tm = new Date().toLocaleString();
console.log(tm, txt);
}
},
interface_otrs : function(){
let id = '0500';
let name = 'UpdateSYS';
let last_refresh = jOTRS.readCookie("jotrs_tmref");
/*
let fim = Date.parse( new Date().toJSON().slice(0,10).replace(/-/g,'/') + ' ' + new Date().toJSON().slice(11,19) );
let inicio = Date.parse( new Date().toJSON().slice(0,10).replace(/-/g,'/') + last_refresh.slice(10) );
let jafoi = new Date(fim - inicio).toLocaleTimeString();
jOTRS.log(jafoi)
*/
let last_regress = jOTRS.readCookie("jotrs_regress");
var panel = $('<div />', {'id':'Dashboard' + id + '-' + name +'-box'}).addClass('WidgetSimple CanDrag').append(
$('<div />').addClass('Header').append(
$('<div />').addClass('ActionMenu').append(
$('<div />').addClass('WidgetAction Close').append(
$('<a />',{'href':'/otrs/index.pl?Action=AgentDashboard;Subaction=UpdateRemove;Name='+ id +'-'+ name +';CustomerID=;CustomerUserID=;ChallengeToken=zEjoGaeeoOnDGn4TZ9K36B1AflIVmGjh;','title':'Fechar este widget'}).append(
$('<i />').addClass('fa fa-times')
)
),
$('<div />').addClass('Clear')
),
$('<h2 />',{'title':'Update Config'}).addClass('ui-sortable-handle').text('Update Config')
),
$('<div />').addClass('Content').append(
$('<div />',{'id':'Dashboard'+ id +'-'+ name }).append(
$('<p />').append(
'Contagem: ',
$('<span />').addClass('jotrs_contagem').text( jOTRS.readCookie("jotrs_contagem") )
),
$('<div />').css({'float':'right'}).append(
'[',
$('<span />').addClass('jotrs_tmcnt').show(function(){
var counter = (last_regress && last_regress > 0)?last_regress:( jOTRS.min() * 60 );
var myInterval = setInterval(function () {
counter--;
$('.jotrs_tmcnt').text(counter);
jOTRS.createCookie("jotrs_tmcnt", counter, jOTRS.default_days_cookies);
}, 1000);
}),
']'
),
(!last_refresh && last_refresh === "")?'':
$('<p />').append(
'Last TimeRefresh: ',
$('<span />').addClass('jotrs_tmref').text( last_refresh )
),
$('<p />').append(
'Time Update: ',
$('<input />',{'name':'jotrs_minrf','type':'text'}).css({'width':'20px','text-align':'center'}).val( jOTRS.min() ),
'min ',
$('<button />').val('Save').append(
$('<span />').append(
$('<i />').addClass('fa fa-save')
)
).on('click', function(){
let jotrs_tmref = $("input[name='jotrs_minrf']").val();
jOTRS.createCookie("jotrs_tmref", jotrs_tmref, jOTRS.default_days_cookies);
jOTRS.log('Atualizado TimeRefresh para '+ jotrs_tmref);
})
)
)
)
);
$('.SidebarColumn').prepend( panel );
},
interface_old : function(){
let last_refresh = jOTRS.readCookie("jotrs_tmref");
let mostrador = $('<div />')
.addClass('jotrs_contagem')
.css({
'position': 'fixed',
'width':'250px',
'height':'60px',
'border': '1px solid #000',
'bottom': 0,
'right':'50px',
'background':'#fff',
'padding':'5px 0px 0 5px',
'text-align':'center'
}).append(
$('<p />').append(
'Contagem: ',
$('<span />').addClass('jotrs_contagem').text( jOTRS.readCookie("jotrs_contagem") )
),
(!last_refresh && last_refresh === "")?'':
$('<p />').append(
'Last TimeRefresh: ',
$('<span />').addClass('jotrs_tmref').text( last_refresh )
),
$('<p />').append(
'Time Update: ',
$('<input />',{'name':'jotrs_minrf','type':'text'}).css({'width':'20px','text-align':'center'}).val( jOTRS.min() ),
$('<button />').val('Save').append(
$('<span />').append(
$('<i />').addClass('fa fa-save')
)
).on('click', function(){
let jotrs_tmref = $("input[name='jotrs_minrf']").val();
jOTRS.createCookie("jotrs_tmref", jotrs_tmref, jOTRS.default_days_cookies);
jOTRS.log('Atualizado TimeRefresh para '+ jotrs_tmref);
})
)
);
$('body').append( mostrador );
},
contagem : function(){
let cnt = jOTRS.readCookie("jotrs_contagem");
if(!cnt || cnt == '' ) {
cnt = 0;
jOTRS.createCookie("jotrs_contagem", cnt, jOTRS.default_days_cookies);
jOTRS.log('Criando cookie[name = jotrs_contagem][value = '+ jOTRS.default_days_cookies +']');
}
$('.jotrs_contagem span.jcnt').text(cnt);
setTimeout(function(){
let tm = new Date().toLocaleString();
jOTRS.log('Iniciando armazenamento de valores em cookies [name = jotrs_tmref][value = '+ tm +']');
jOTRS.createCookie("jotrs_tmref", tm, jOTRS.default_days_cookies );
cnt++;
jOTRS.log('Iniciando armazenamento de valores em cookies [name = jotrs_contagem][value = '+ jOTRS.default_days_cookies +']');
jOTRS.createCookie("jotrs_contagem", cnt, jOTRS.default_days_cookies);
location.reload();
}, (jOTRS.min() * 60 * 1000) );
},
createCookie : function(name, value, days) {
var expires = "";
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
expires = "; expires=" + date.toGMTString();
}
document.cookie = name + "=" + value + expires + "; path=/";
},
readCookie : function(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') c = c.substring(1, c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
}
return null;
},
eraseCookie : function(name) {
jOTRS.createCookie(name, "", -1);
},
newTickets : function(){
jOTRS.log('Percorrendo tickets abertos')
var itens = $("div[id$='TicketOpen-box']").find("div[id$='TicketOpen']").find("table.DataTable > tbody > tr.MasterAction");
//console.log(itens.html());
$.map(itens, function(obj){
let gravidade = $(obj).find('td:eq(0)').find('div.Flag').attr('title');
let ticketid = $(obj).find('td:eq(2)').find('a').text();
let ticketurl = $(obj).find('td:eq(2)').find('a').attr('href');
let criado = $(obj).find('td:eq(3)').find('div').attr('title');
let idade = $(obj).find('td:eq(4)').find('div').attr('title');
let titulo = $(obj).find('td:eq(5)').find('div').attr('title');
let proprietario = $(obj).find('td:eq(6)').find('div').attr('title');
let object = {
'gravidade' : gravidade,
'ticketid' : ticketid,
'ticketurl' : ticketurl,
'criado': criado,
'idade': idade,
'titulo': titulo,
'proprietario': proprietario
};
if(jOTRS.me == object.proprietario)
jOTRS.showNotification('Ticket : [#'+ ticketid + ']('+ idade +') '+ titulo, ticketurl);
});
},
showNotification : function(texto, url) {
if (Notification.permission !== 'granted') {
Notification.requestPermission();
} else {
const options = {
body: texto,
dir: 'ltr',
icon: 'https://otrs.com/favicon-32x32.png',
tag: 'soManyNotification',
img: 'https://otrs.com/apple-touch-icon.png',
};
const notification = new Notification('Notification', options);
if(url)notification.onclick = function () {
window.open(url);
};
}
},
checkNotificationPromise : function() {
try {
Notification.requestPermission().then();
} catch(e) {
return false;
}
return true;
},
askNotificationPermission : function(title) {
// function to actually ask the permissions
function handlePermission(permission) {
// set the button to shown or hidden, depending on what the user answers
if(Notification.permission === 'denied' || Notification.permission === 'default') {
//notificationBtn.style.display = 'block';
} else {
//notificationBtn.style.display = 'none';
}
}
// Let's check if the browser supports notifications
if (!('Notification' in window)) {
console.log("This browser does not support notifications.");
} else {
if(jOTRS.checkNotificationPromise()) {
Notification.requestPermission()
.then((permission) => {
handlePermission(permission);
})
} else {
Notification.requestPermission(function(permission) {
handlePermission(permission);
});
}
var img = 'https://upload.wikimedia.org/wikipedia/commons/d/da/Logo_OTRS.svg';
var text = 'HEY! Your task "' + title + '" is now overdue.';
var notification = new Notification('To do list', { body: text, icon: img });
}
}
};
jOTRS.init();
})();