From f5d2864173ef730d4b33bdf6c4e4dcade542cb80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Fri, 1 Jul 2016 14:40:01 +0200 Subject: [PATCH] Version 15.238 --- js/swad15.237.3.js | 1259 -------------------------------------------- swad_changelog.h | 6 +- swad_message.c | 28 +- swad_message.h | 1 + swad_user.c | 1 + 5 files changed, 23 insertions(+), 1272 deletions(-) delete mode 100644 js/swad15.237.3.js diff --git a/js/swad15.237.3.js b/js/swad15.237.3.js deleted file mode 100644 index 2d0d75a8e..000000000 --- a/js/swad15.237.3.js +++ /dev/null @@ -1,1259 +0,0 @@ -// swad.js: javascript functions - -/* - SWAD (Shared Workspace At a Distance), - is a web platform developed at the University of Granada (Spain), - and used to support university teaching. - Copyright (C) 1999-2016 Antonio Cañas-Vargas - University of Granada (SPAIN) (acanas@ugr.es) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as - published by the Free Software Foundation, either version 3 of the - License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . -*/ -"use strict"; - -// Global variable (string) used to write HTML -var Gbl_HTMLContent; - -// Global variable used to call SWAD via AJAX -var ActionAJAX; - -// Global variables used in writeLocalClock() -var secondsSince1970UTC; - -// Global variables used in writeClockConnected() -var NumUsrsCon; -var ListSeconds = []; -var countClockConnected = 0; - -/****************** Write a date in client local time ************************/ -//id is the id of the HTML element in which date will be written -//TimeUTC is the date-time to write in UTC UNIX time format - -function writeLocalDateFromUTC (id,TimeUTC,StrToday) { - var today = new Date(); - var todayYea = today.getFullYear(); - var todayMon = today.getMonth()+1; - var todayDay = today.getDate(); - var d = new Date(); - var Yea; - var Mon; - var Day; - var StrMon; - var StrDay; - - d.setTime(TimeUTC * 1000); - Yea = d.getFullYear(); - Mon = d.getMonth() + 1; - Day = d.getDate(); - StrMon = ((Mon < 10) ? '0' : '') + Mon; - StrDay = ((Day < 10) ? '0' : '') + Day; - - if (Yea == todayYea && Mon == todayMon && Day == todayDay && // Today - StrToday.length) - document.getElementById(id).innerHTML = StrToday; - else - document.getElementById(id).innerHTML = Yea + '-' + StrMon + '-' + StrDay; - -} - -/*************** Write a date-time in client local time **********************/ -// id is the id of the HTML element in which date-time will be written -// TimeUTC is the date-time to write in UTC UNIX time format -// separator is HTML code to write between date and time - -function writeLocalDateHMSFromUTC (id,TimeUTC,separator,StrToday) { - // HMS: Hour, Minutes, Seconds - var today = new Date(); - var todayYea = today.getFullYear(); - var todayMon = today.getMonth()+1; - var todayDay = today.getDate(); - var d = new Date(); - var Yea; - var Mon; - var Day; - var Hou; - var Min; - var Sec; - var StrMon; - var StrDay; - var StrHou; - var StrMin; - var StrSec; - - d.setTime(TimeUTC * 1000); - Yea = d.getFullYear(); - Mon = d.getMonth() + 1; - Day = d.getDate(); - Hou = d.getHours(); - Min = d.getMinutes(); - Sec = d.getSeconds(); - StrMon = ((Mon < 10) ? '0' : '') + Mon; - StrDay = ((Day < 10) ? '0' : '') + Day; - StrHou = ((Hou < 10) ? '0' : '') + Hou; - StrMin = ((Min < 10) ? '0' : '') + Min; - StrSec = ((Sec < 10) ? '0' : '') + Sec; - if (Yea == todayYea && Mon == todayMon && Day == todayDay && // Today - StrToday.length) - document.getElementById(id).innerHTML = StrToday + - separator + - StrHou + ':' + StrMin + ':' + StrSec; - else - document.getElementById(id).innerHTML = Yea + '-' + StrMon + '-' + StrDay + - separator + - StrHou + ':' + StrMin + ':' + StrSec; -} - -function writeLocalDateHMFromUTC (id,TimeUTC,separator,StrToday) { - // HM: Hour, Minutes - var today = new Date(); - var todayYea = today.getFullYear(); - var todayMon = today.getMonth()+1; - var todayDay = today.getDate(); - var d = new Date(); - var Yea; - var Mon; - var Day; - var Hou; - var Min; - var StrMon; - var StrDay; - var StrHou; - var StrMin; - - d.setTime(TimeUTC * 1000); - Yea = d.getFullYear(); - Mon = d.getMonth() + 1; - Day = d.getDate(); - Hou = d.getHours(); - Min = d.getMinutes(); - StrMon = ((Mon < 10) ? '0' : '') + Mon; - StrDay = ((Day < 10) ? '0' : '') + Day; - StrHou = ((Hou < 10) ? '0' : '') + Hou; - StrMin = ((Min < 10) ? '0' : '') + Min; - if (Yea == todayYea && Mon == todayMon && Day == todayDay && // Today - StrToday.length) - document.getElementById(id).innerHTML = StrToday + - separator + - StrHou + ':' + StrMin; - else - document.getElementById(id).innerHTML = Yea + '-' + StrMon + '-' + StrDay + - separator + - StrHou + ':' + StrMin; -} - -// Set local date-time form fields from UTC time -function setLocalDateTimeFormFromUTC (id,TimeUTC) { - var FormYea = document.getElementById(id+'Year' ); - var FormMon = document.getElementById(id+'Month' ); - var FormDay = document.getElementById(id+'Day' ); - var FormHou = document.getElementById(id+'Hour' ); - var FormMin = document.getElementById(id+'Minute'); - var FormSec = document.getElementById(id+'Second'); - var d; - var Year; - var YearIsValid = false; - - if (TimeUTC) { - d = new Date(); - d.setTime(TimeUTC * 1000); - Year = d.getFullYear(); - for (var i=0; i= Days) - FormDay.options[Days-1].selected = true; // Select last day in month - - for (var i=FormDay.options.length; i=Days; i--) // Remove days from the end - FormDay.options[i] = null; -} - -// Set a date range form to yesterday -function setDateToYesterday () { - var d = new Date(); - - d.setTime (d.getTime () - 24*60*60*1000); // Today - 1 day - setDateRange(d); -} - -// Set a date range form to today -function setDateToToday () { - var d = new Date(); - - setDateRange(d); -} - -// Set a date range form to a specific day -function setDateRange (d) { - var FormYea; - var Yea = d.getFullYear(); - var Mon = d.getMonth()+1; - var Day = d.getDate(); - - FormYea = document.getElementById('StartYear'); - for (var i=0; i' + - Hou + ':' + StrMin + - ''; -} - -function writeClockConnected () { - var BoxClock; - var H; - var M; - var S; - var StrM; - var StrS; - var PrintableClock; - - countClockConnected++; - countClockConnected %= 10; - for (var i=0; i= 60) { - H = Math.floor(M / 60); - M %= 60; - } else - H = 0; - S = ListSeconds[i] % 60; - if (H != 0) { - StrM = ((M < 10) ? '0' : '') + M; - StrS = ((S < 10) ? '0' : '') + S; - PrintableClock = H + ':' + StrM + ''' + StrS + '"'; - } else if (M != 0) { - StrS = ((S < 10) ? '0' : '') + S; - PrintableClock = M + ''' + StrS + '"'; - } else - PrintableClock = S + '"'; - BoxClock.innerHTML = PrintableClock; - } - } - } - setTimeout('writeClockConnected()',1000); // refresh after 1 second -} - -// Automatic refresh of connected users using AJAX. This function must be called from time to time -var objXMLHttpReqCon = false; -function refreshConnected () { - objXMLHttpReqCon = AJAXCreateObject(); - if (objXMLHttpReqCon) { - var RefreshParams = RefreshParamNxtActCon + '&' + - RefreshParamIdSes + '&' + - RefreshParamCrsCod; - - objXMLHttpReqCon.onreadystatechange = readConnUsrsData; // onreadystatechange must be lowercase - objXMLHttpReqCon.open('POST',ActionAJAX,true); - objXMLHttpReqCon.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); - objXMLHttpReqCon.send(RefreshParams); - } -} - -// Automatic refresh of last clicks using AJAX. This function must be called from time to time -var objXMLHttpReqLog = false; -function refreshLastClicks () { - objXMLHttpReqLog = AJAXCreateObject(); - if (objXMLHttpReqLog) { - var RefreshParams = RefreshParamNxtActLog + '&' + - RefreshParamIdSes + '&' + - RefreshParamCrsCod; - - objXMLHttpReqLog.onreadystatechange = readLastClicksData; // onreadystatechange must be lowercase - objXMLHttpReqLog.open('POST',ActionAJAX,true); - objXMLHttpReqLog.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); - objXMLHttpReqLog.send(RefreshParams); - } -} - -// Automatic refresh of new publishings in social timeline using AJAX. This function must be called from time to time -var objXMLHttpReqSoc = false; -function refreshNewTimeline () { - objXMLHttpReqSoc = AJAXCreateObject(); - if (objXMLHttpReqSoc) { - var RefreshParams = RefreshParamNxtActNewPub + '&' + - RefreshParamIdSes; - - objXMLHttpReqSoc.onreadystatechange = readNewTimelineData; // onreadystatechange must be lowercase - objXMLHttpReqSoc.open('POST',ActionAJAX,true); - objXMLHttpReqSoc.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); - objXMLHttpReqSoc.send(RefreshParams); - } -} - -// Refresh of old publishings in social timeline using AJAX. This function is called when user clicks in link -var objXMLHttpReqSoc = false; -function refreshOldTimeline () { - objXMLHttpReqSoc = AJAXCreateObject (); - if (objXMLHttpReqSoc) { - var RefreshParams = RefreshParamNxtActOldPub + '&' + RefreshParamIdSes; - if (RefreshParamUsr) - if (RefreshParamUsr.length) - RefreshParams += '&' + RefreshParamUsr; - - objXMLHttpReqSoc.onreadystatechange = readOldTimelineData; // onreadystatechange must be lowercase - objXMLHttpReqSoc.open('POST',ActionAJAX,true); - objXMLHttpReqSoc.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); - objXMLHttpReqSoc.send(RefreshParams); - } -} - -// Create AJAX object (try is unknown in earlier versions of Netscape, but works in IE5) -function AJAXCreateObject () { - var obj = false; - if (window.XMLHttpRequest) { // Mozilla, Safari,... - obj = new XMLHttpRequest(); - } else if (window.ActiveXObject) { // IE - try { - obj = new ActiveXObject('Msxml2.XMLHTTP'); - } catch (e) { - try { - obj = new ActiveXObject('Microsoft.XMLHTTP'); - } catch (e) {} - } - } - return obj; -} - -// Receives and show connected users data -function readConnUsrsData () { - if (objXMLHttpReqCon.readyState == 4) { // Check if data have been received - if (objXMLHttpReqCon.status == 200) { - var endOfDelay = objXMLHttpReqCon.responseText.indexOf('|',0); // Get separator position - var endOfNotif = objXMLHttpReqCon.responseText.indexOf('|',endOfDelay+1); // Get separator position - var endOfGblCon = objXMLHttpReqCon.responseText.indexOf('|',endOfNotif+1); // Get separator position - var endOfCrsCon = objXMLHttpReqCon.responseText.indexOf('|',endOfGblCon+1); // Get separator position - var endOfNumUsrs = objXMLHttpReqCon.responseText.indexOf('|',endOfCrsCon+1); // Get separator position - - var delay = parseInt(objXMLHttpReqCon.responseText.substring(0,endOfDelay)); // Get refresh delay - var htmlNotif = objXMLHttpReqCon.responseText.substring(endOfDelay +1,endOfNotif); // Get HTML code for new notifications - var htmlGblCon = objXMLHttpReqCon.responseText.substring(endOfNotif +1,endOfGblCon); // Get HTML code for connected - var htmlCrsCon = objXMLHttpReqCon.responseText.substring(endOfGblCon+1,endOfCrsCon); // Get HTML code for course connected - var NumUsrsStr = objXMLHttpReqCon.responseText.substring(endOfCrsCon+1,endOfNumUsrs); // Get number of users - var startOfUsr; - var endOfUsr; - - NumUsrsCon = (NumUsrsStr.length ? parseInt(NumUsrsStr) : 0); - - var divNewNotif = document.getElementById('msg'); // Access to new notifications DIV - if (divNewNotif) - divNewNotif.innerHTML = (htmlNotif.length) ? htmlNotif : ''; // Update new notifications DIV - - var divGblConnected = document.getElementById('globalconnected'); // Access to global connected DIV - if (divGblConnected) - divGblConnected.innerHTML = htmlGblCon; // Update global connected DIV - if (htmlCrsCon.length) { - var divCrsConnected = document.getElementById('courseconnected'); // Access to course connected DIV - if (divCrsConnected) { - divCrsConnected.innerHTML = htmlCrsCon; // Update course connected DIV - countClockConnected = 0; // Don't refresh again using writeClockConnected until past 10 seconds - startOfUsr = endOfNumUsrs + 1; - for (var NumUsr=0; NumUsr= 60000) // If refresh slower than 1 time each 60 seconds, do refresh; else abort - setTimeout('refreshConnected()',delay); - } - } -} - -// Receives and show last clicks data -function readLastClicksData () { - if (objXMLHttpReqLog.readyState == 4) { // Check if data have been received - if (objXMLHttpReqLog.status == 200) { - var endOfDelay = objXMLHttpReqLog.responseText.indexOf('|',0); // Get separator position - - var delay = parseInt(objXMLHttpReqLog.responseText.substring(0,endOfDelay)); // Get refresh delay - var htmlLastClicks = objXMLHttpReqLog.responseText.substring(endOfDelay+1); // Get HTML code for last clicks - - var divLastClicks = document.getElementById('lastclicks'); // Access to last click DIV - if (divLastClicks) - divLastClicks.innerHTML = htmlLastClicks; // Update global connected DIV - if (delay > 200) // If refresh slower than 1 time each 0.2 seconds, do refresh; else abort - setTimeout('refreshLastClicks()',delay); - } - } -} - -// Receives and show new social timeline data -function readNewTimelineData () { - if (objXMLHttpReqSoc.readyState == 4) { // Check if data have been received - if (objXMLHttpReqSoc.status == 200) { - var endOfDelay = objXMLHttpReqSoc.responseText.indexOf('|',0); // Get separator position - var delay = parseInt(objXMLHttpReqSoc.responseText.substring(0,endOfDelay)); // Get refresh delay - var htmlJustNowTimeline = objXMLHttpReqSoc.responseText.substring(endOfDelay+1);// Get HTML code for social timeline - - var justNowTimeline = document.getElementById('just_now_timeline_list');// Access to UL for the just received timeline - if (justNowTimeline) { - justNowTimeline.innerHTML = htmlJustNowTimeline; // Update list of publishings in just now timeline - var countJustNowTimeline = justNowTimeline.childNodes.length; - - if (countJustNowTimeline) { // New pubs just retrieved - // Scripts in timeline got via AJAX are not executed ==> execute them - evalScriptsInElem (justNowTimeline); - - // Process mathematics; see http://docs.mathjax.org/en/latest/advanced/typeset.html - MathJax.Hub.Queue(["Typeset",MathJax.Hub,justNowTimeline]); - - // Move just received timeline to top of new timeline - var newTimeline = document.getElementById('new_timeline_list'); // Access to UL with the new timeline - - // Move all the LI elements in UL 'just_now_timeline_list' to the top of UL 'new_timeline_list' - for (var i=0; i