Version 15.32

This commit is contained in:
Antonio Cañas Vargas 2015-10-30 22:12:28 +01:00
parent 840b2a2344
commit 885947ebb2
6 changed files with 376 additions and 678 deletions

View File

@ -20,6 +20,8 @@
You should have received a copy of the GNU Affero General Public License You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
// Global variable (string) used to write HTML
var Gbl_HTMLContent;
// Global variable used in refreshConnected() // Global variable used in refreshConnected()
var ActionAJAX; var ActionAJAX;
@ -541,87 +543,100 @@ function uncheckChildren(MainCheckbox, GroupCheckboxes) {
// Change text of a test descriptor // Change text of a test descriptor
function changeTxtTag(NumTag){ function changeTxtTag(NumTag){
var Sel = document.getElementById('SelDesc'+NumTag); var Sel = document.getElementById('SelDesc' + NumTag);
document.getElementById('TagTxt'+NumTag).value = Sel.options[Sel.selectedIndex].value;
document.getElementById('TagTxt' + NumTag).value = Sel.options[Sel.selectedIndex].value;
} }
// Change selectors of test descriptors // Change selectors of test descriptors
function changeSelTag(NumTag){ function changeSelTag(NumTag) {
var Sel = document.getElementById('SelDesc'+NumTag); var Sel = document.getElementById('SelDesc'+NumTag);
var Txt = document.getElementById('TagTxt'+NumTag); var Txt = document.getElementById('TagTxt' +NumTag);
for (var i=0; i<Sel.options.length-1 ; i++)
if (Sel.options[i].value.toUpperCase() == Txt.value.toUpperCase()){ for (var i=0; i<Sel.options.length - 1; i++)
if (Sel.options[i].value.toUpperCase() == Txt.value.toUpperCase()) {
Sel.options[i].selected = true; Sel.options[i].selected = true;
Txt.value = Sel.options[i].value; Txt.value = Sel.options[i].value;
break; break;
} }
if (i == Sel.options.length-1) // End reached without matching if (i == Sel.options.length - 1) // End reached without matching
Sel.options[i].selected = true; Sel.options[i].selected = true;
} }
// Activate or deactivate answer types of a test question // Activate or deactivate answer types of a test question
function enableDisableAns(Formul) { function enableDisableAns(Formul) {
var Tst_ANS_INT = 0; var Tst_ANS_INT = 0;
var Tst_ANS_FLOAT = 1; var Tst_ANS_FLOAT = 1;
var Tst_ANS_TRUE_FALSE = 2; var Tst_ANS_TRUE_FALSE = 2;
var Tst_ANS_UNIQUE_CHOICE = 3; var Tst_ANS_UNIQUE_CHOICE = 3;
var Tst_ANS_MULTIPLE_CHOICE = 4; var Tst_ANS_MULTIPLE_CHOICE = 4;
var Tst_ANS_TEXT = 5; var Tst_ANS_TEXT = 5;
if (Formul.AnswerType[Tst_ANS_INT].checked){ if (Formul.AnswerType[Tst_ANS_INT].checked){
for (var i=0; i<Formul.elements.length; i++) for (var i=0; i<Formul.elements.length; i++)
if (Formul.elements[i].name == 'AnsInt') Formul.elements[i].disabled = false; if (Formul.elements[i].name == 'AnsInt')
else if (Formul.elements[i].name == 'AnsMulti' || Formul.elements[i].disabled = false;
Formul.elements[i].name == 'AnsFloatMin' || else if (Formul.elements[i].name == 'AnsMulti' ||
Formul.elements[i].name == 'AnsFloatMax' || Formul.elements[i].name == 'AnsFloatMin' ||
Formul.elements[i].name == 'AnsTF' || Formul.elements[i].name == 'AnsFloatMax' ||
Formul.elements[i].name == 'AnsUni' || Formul.elements[i].name == 'AnsTF' ||
Formul.elements[i].name == 'Shuffle') Formul.elements[i].disabled = true; Formul.elements[i].name == 'AnsUni' ||
Formul.elements[i].name == 'Shuffle')
Formul.elements[i].disabled = true;
else enableDisableContAns(Formul.elements[i],true); else enableDisableContAns(Formul.elements[i],true);
} }
else if (Formul.AnswerType[Tst_ANS_FLOAT].checked){ else if (Formul.AnswerType[Tst_ANS_FLOAT].checked){
for (var i=0; i<Formul.elements.length; i++) for (var i=0; i<Formul.elements.length; i++)
if (Formul.elements[i].name == 'AnsFloatMin' || if (Formul.elements[i].name == 'AnsFloatMin' ||
Formul.elements[i].name == 'AnsFloatMax') Formul.elements[i].disabled = false; Formul.elements[i].name == 'AnsFloatMax')
else if (Formul.elements[i].name == 'AnsInt' || Formul.elements[i].disabled = false;
Formul.elements[i].name == 'AnsTF' || else if (Formul.elements[i].name == 'AnsInt' ||
Formul.elements[i].name == 'AnsUni' || Formul.elements[i].name == 'AnsTF' ||
Formul.elements[i].name == 'AnsUni' ||
Formul.elements[i].name == 'AnsMulti' || Formul.elements[i].name == 'AnsMulti' ||
Formul.elements[i].name == 'Shuffle') Formul.elements[i].disabled = true; Formul.elements[i].name == 'Shuffle')
Formul.elements[i].disabled = true;
else enableDisableContAns(Formul.elements[i],true); else enableDisableContAns(Formul.elements[i],true);
} }
else if (Formul.AnswerType[Tst_ANS_TRUE_FALSE].checked){ else if (Formul.AnswerType[Tst_ANS_TRUE_FALSE].checked){
for (var i=0; i<Formul.elements.length; i++) for (var i=0; i<Formul.elements.length; i++)
if (Formul.elements[i].name == 'AnsTF') Formul.elements[i].disabled = false; if (Formul.elements[i].name == 'AnsTF')
Formul.elements[i].disabled = false;
else if (Formul.elements[i].name == 'AnsInt' || else if (Formul.elements[i].name == 'AnsInt' ||
Formul.elements[i].name == 'AnsFloatMin' || Formul.elements[i].name == 'AnsFloatMin' ||
Formul.elements[i].name == 'AnsFloatMax' || Formul.elements[i].name == 'AnsFloatMax' ||
Formul.elements[i].name == 'AnsUni' || Formul.elements[i].name == 'AnsUni' ||
Formul.elements[i].name == 'AnsMulti' || Formul.elements[i].name == 'AnsMulti' ||
Formul.elements[i].name == 'Shuffle') Formul.elements[i].disabled = true; Formul.elements[i].name == 'Shuffle')
Formul.elements[i].disabled = true;
else enableDisableContAns(Formul.elements[i],true); else enableDisableContAns(Formul.elements[i],true);
} }
else if (Formul.AnswerType[Tst_ANS_UNIQUE_CHOICE].checked){ else if (Formul.AnswerType[Tst_ANS_UNIQUE_CHOICE].checked){
for (var i=0; i<Formul.elements.length; i++) for (var i=0; i<Formul.elements.length; i++)
if (Formul.elements[i].name == 'AnsUni' || if (Formul.elements[i].name == 'AnsUni' ||
Formul.elements[i].name == 'Shuffle') Formul.elements[i].disabled = false; Formul.elements[i].name == 'Shuffle')
Formul.elements[i].disabled = false;
else if (Formul.elements[i].name == 'AnsInt' || else if (Formul.elements[i].name == 'AnsInt' ||
Formul.elements[i].name == 'AnsFloatMin' || Formul.elements[i].name == 'AnsFloatMin' ||
Formul.elements[i].name == 'AnsFloatMax' || Formul.elements[i].name == 'AnsFloatMax' ||
Formul.elements[i].name == 'AnsTF' || Formul.elements[i].name == 'AnsTF' ||
Formul.elements[i].name == 'AnsMulti') Formul.elements[i].disabled = true; Formul.elements[i].name == 'AnsMulti')
Formul.elements[i].disabled = true;
else enableDisableContAns(Formul.elements[i],false); else enableDisableContAns(Formul.elements[i],false);
} }
else if (Formul.AnswerType[Tst_ANS_MULTIPLE_CHOICE].checked){ else if (Formul.AnswerType[Tst_ANS_MULTIPLE_CHOICE].checked){
for (var i=0; i<Formul.elements.length; i++) for (var i=0; i<Formul.elements.length; i++)
if (Formul.elements[i].name == 'AnsMulti' || if (Formul.elements[i].name == 'AnsMulti' ||
Formul.elements[i].name == 'Shuffle') Formul.elements[i].disabled = false; Formul.elements[i].name == 'Shuffle')
Formul.elements[i].disabled = false;
else if (Formul.elements[i].name == 'AnsInt' || else if (Formul.elements[i].name == 'AnsInt' ||
Formul.elements[i].name == 'AnsFloatMin' || Formul.elements[i].name == 'AnsFloatMin' ||
Formul.elements[i].name == 'AnsFloatMax' || Formul.elements[i].name == 'AnsFloatMax' ||
Formul.elements[i].name == 'AnsTF' || Formul.elements[i].name == 'AnsTF' ||
Formul.elements[i].name == 'AnsUni') Formul.elements[i].disabled = true; Formul.elements[i].name == 'AnsUni')
else enableDisableContAns(Formul.elements[i],false); Formul.elements[i].disabled = true;
else
enableDisableContAns(Formul.elements[i],false);
} }
else if (Formul.AnswerType[Tst_ANS_TEXT].checked){ else if (Formul.AnswerType[Tst_ANS_TEXT].checked){
for (var i=0; i<Formul.elements.length; i++) for (var i=0; i<Formul.elements.length; i++)
@ -630,26 +645,31 @@ function enableDisableAns(Formul) {
Formul.elements[i].name == 'AnsFloatMax' || Formul.elements[i].name == 'AnsFloatMax' ||
Formul.elements[i].name == 'AnsTF' || Formul.elements[i].name == 'AnsTF' ||
Formul.elements[i].name == 'AnsUni' || Formul.elements[i].name == 'AnsUni' ||
Formul.elements[i].name == 'AnsMulti') Formul.elements[i].disabled = true; Formul.elements[i].name == 'AnsMulti')
else enableDisableContAns(Formul.elements[i],false); Formul.elements[i].disabled = true;
else
enableDisableContAns(Formul.elements[i],false);
} }
} }
// Activate or deactivate response contents of a test question // Activate or deactivate response contents of a test question
function enableDisableContAns(Elem,IsDisabled) { function enableDisableContAns(Elem, IsDisabled) {
var Tst_MAX_OPTIONS_PER_QUESTION = 10; var Tst_MAX_OPTIONS_PER_QUESTION = 10;
for (var i=0; i<Tst_MAX_OPTIONS_PER_QUESTION; i++)
if (Elem.name == ('AnsStr'+i) || Elem.name == ('FbStr'+i)) for ( var i = 0; i < Tst_MAX_OPTIONS_PER_QUESTION; i++)
if (Elem.name == ('AnsStr' + i) ||
Elem.name == ('FbStr' + i))
Elem.disabled = IsDisabled; Elem.disabled = IsDisabled;
} }
// Selection of statistics of current course ****/ // Selection of statistics of current course ****/
function enableDetailedClicks () { function enableDetailedClicks() {
document.getElementById('CountType').disabled = true; document.getElementById('CountType').disabled = true;
document.getElementById('GroupedBy').disabled = true; document.getElementById('GroupedBy').disabled = true;
document.getElementById('RowsPage').disabled = false; document.getElementById('RowsPage').disabled = false;
} }
function disableDetailedClicks () {
function disableDetailedClicks() {
document.getElementById('CountType').disabled = false; document.getElementById('CountType').disabled = false;
document.getElementById('GroupedBy').disabled = false; document.getElementById('GroupedBy').disabled = false;
document.getElementById('RowsPage').disabled = true; document.getElementById('RowsPage').disabled = true;
@ -659,375 +679,340 @@ function disableDetailedClicks () {
/************************ Draw an academic calendar **************************/ /************************ Draw an academic calendar **************************/
/*****************************************************************************/ /*****************************************************************************/
function Cal_DrawCalendar (id,TimeUTC,PrintView,CGI,CurrentPlcCod,FormGoToCalendarParams,FormEventParams) function Cal_DrawCalendar (id,TimeUTC,CurrentPlcCod,PrintView,
{ CGI,FormGoToCalendarParams,FormEventParams) {
var StartingMonth = [ // Calendar starts one row before current month var StartingMonth = [ // Calendar starts one row before current month
9, // January --> September 9, // January --> September
9, // February --> September 9, // February --> September
9, // Mars --> September 9, // Mars --> September
9, // April --> September 9, // April --> September
1, // May --> January 1, // May --> January
1, // June --> January 1, // June --> January
1, // July --> January 1, // July --> January
1, // August --> January 1, // August --> January
5, // September --> May 5, // September --> May
5, // October --> May 5, // October --> May
5, // November --> May 5, // November --> May
5 // December --> May 5 // December --> May
]; ];
var d = new Date; var d = new Date;
d.setTime(TimeUTC * 1000); d.setTime(TimeUTC * 1000);
var CurrentMonth = d.getMonth() + 1; var CurrentMonth = d.getMonth() + 1;
var CurrentYear = d.getFullYear(); var CurrentYear = d.getFullYear();
var CurrentDay = d.getDate(); var CurrentDay = d.getDate();
var Month = StartingMonth[CurrentMonth - 1]; var Month = StartingMonth[CurrentMonth - 1];
var Year = (Month < CurrentMonth) ? CurrentYear : var Year = (Month < CurrentMonth) ? CurrentYear :
CurrentYear - 1; CurrentYear - 1;
var Row; var Row;
var Col; var Col;
var MonthIdNum = 0; var MonthIdNum = 0;
var MonthId; var MonthId;
/***** Draw several months *****/ /***** Draw several months *****/
HTMLContent += '<table style="margin:0 auto; border-spacing:6px;">'; Gbl_HTMLContent += '<table style="margin:0 auto; border-spacing:6px;">';
for (Row = 0; for (Row = 0;
Row < 4; Row < 4;
Row++) Row++) {
{ Gbl_HTMLContent += '<tr>';
HTMLContent += '<tr>'; for (Col = 0;
for (Col = 0; Col < 4;
Col < 4; Col++) {
Col++) MonthIdNum++;
{ MonthId = id + '_month_' + MonthIdNum;
MonthIdNum++;
MonthId = id + '_month_' + MonthIdNum; Gbl_HTMLContent += '<td class="CENTER_TOP" style="width:150px;">';
DrawMonth(MonthId, Year, Month, CurrentMonth, CurrentDay,
HTMLContent += '<td class="CENTER_TOP" style="width:150px;">'; CurrentPlcCod, true, PrintView, CGI,
DrawMonth (MonthId,Year,Month,CurrentMonth,CurrentDay,true,PrintView,CGI,CurrentPlcCod,FormGoToCalendarParams,FormEventParams); FormGoToCalendarParams, FormEventParams);
HTMLContent += '</td>'; Gbl_HTMLContent += '</td>';
if (++Month == 13) if (++Month == 13) {
{ Month = 1;
Month = 1; Year++;
Year++; }
} }
Gbl_HTMLContent += '</tr>';
} }
HTMLContent += '</tr>'; Gbl_HTMLContent += '</table>';
}
HTMLContent += '</table>';
document.getElementById(id).innerHTML = HTMLContent; document.getElementById(id).innerHTML = Gbl_HTMLContent;
} }
/*****************************************************************************/ /*****************************************************************************/
/***************************** Draw current month ****************************/ /***************************** Draw current month ****************************/
/*****************************************************************************/ /*****************************************************************************/
function DrawCurrentMonth (id,TimeUTC,CGI,CurrentPlcCod,FormGoToCalendarParams,FormEventParams) { function DrawCurrentMonth (id,TimeUTC,CurrentPlcCod,
CGI,FormGoToCalendarParams,FormEventParams) {
var d = new Date; var d = new Date;
d.setTime(TimeUTC * 1000); d.setTime(TimeUTC * 1000);
var Year = d.getFullYear(); var Year = d.getFullYear();
var Month = d.getMonth() + 1; var Month = d.getMonth() + 1;
var CurrentDay = d.getDate(); var CurrentDay = d.getDate();
DrawMonth (id,Year,Month,Month,CurrentDay,false,false,CGI,CurrentPlcCod,FormGoToCalendarParams,FormEventParams); DrawMonth(id,Year,Month,Month,CurrentDay,CurrentPlcCod,false,false,
document.getElementById(id).innerHTML = HTMLContent; CGI,FormGoToCalendarParams,FormEventParams);
document.getElementById(id).innerHTML = Gbl_HTMLContent;
} }
/*****************************************************************************/ /*****************************************************************************/
/******************************** Draw a month *******************************/ /******************************** Draw a month *******************************/
/*****************************************************************************/ /*****************************************************************************/
function DrawMonth (id,YearToDraw,MonthToDraw,CurrentMonth,CurrentDay,DrawingCalendar,PrintView,CGI,CurrentPlcCod,FormGoToCalendarParams,FormEventParams) function DrawMonth (id,YearToDraw,MonthToDraw,CurrentMonth,CurrentDay,CurrentPlcCod,
{ DrawingCalendar,PrintView,
var NumDaysMonth = [ CGI,FormGoToCalendarParams,FormEventParams) {
0, var NumDaysMonth = [
31, // 1: January 0,
28, // 2: February 31, // 1: January
31, // 3: Mars 28, // 2: February
30, // 4: April 31, // 3: Mars
31, // 5: May 30, // 4: April
30, // 6: June 31, // 5: May
31, // 7: July 30, // 6: June
31, // 8: Agoust 31, // 7: July
30, // 9: September 31, // 8: Agoust
31, // 10: October 30, // 9: September
30, // 11: November 31, // 10: October
31, // 12: December 30, // 11: November
]; 31, // 12: December
var Hld_HOLIDAY = 0; ];
var Hld_NON_SCHOOL_PERIOD = 1; var Hld_HOLIDAY = 0;
var Week; var Hld_NON_SCHOOL_PERIOD = 1;
var DayOfWeek; /* 0, 1, 2, 3, 4, 5, 6 */ var Week;
var Day; var DayOfWeek; /* 0, 1, 2, 3, 4, 5, 6 */
var NumDaysInMonth; var Day;
var Yea = YearToDraw; var NumDaysInMonth;
var Mon = MonthToDraw; var Yea = YearToDraw;
var YYYYMMDD; var Mon = MonthToDraw;
var NumHld; var YYYYMMDD;
var ClassForDay; // Class of day depending on type of day var NumHld;
var TextForDay; // Text associated to a day, for example the name of the holiday var ClassForDay; // Class of day depending on type of day
var NumExamAnnouncement; // Number of exam announcement var TextForDay; // Text associated to a day, for example the name of the holiday
var ResultOfCmpStartDate; var NumExamAnnouncement; // Number of exam announcement
var ContinueSearching; var ResultOfCmpStartDate;
var ThisDayHasEvent; var ContinueSearching;
var IsToday; var ThisDayHasEvent;
var FormIdNum = 0; var IsToday;
var FormId; var FormIdNum = 0;
var FormId;
/***** Compute number of day of month for the first box *****/ /***** Compute number of day of month for the first box *****/
/* The initial day of month can be -5, -4, -3, -2, -1, 0, or 1 /* The initial day of month can be -5, -4, -3, -2, -1, 0, or 1
If it's -5 then write 6 boxes of the previous month. If it's -5 then write 6 boxes of the previous month.
If it's -4 then write 5 boxes of the previous month. If it's -4 then write 5 boxes of the previous month.
If it's -3 then write 4 boxes of the previous month. If it's -3 then write 4 boxes of the previous month.
If it's -2 then write 3 boxes of the previous month. If it's -2 then write 3 boxes of the previous month.
If it's -1 then write 2 boxes of the previous month. If it's -1 then write 2 boxes of the previous month.
If it's 0 then write 1 box of the previous month. If it's 0 then write 1 box of the previous month.
If it's 1 then write 0 boxes of the previous month. */ If it's 1 then write 0 boxes of the previous month. */
if ((DayOfWeek = GetDayOfWeek (Yea,Mon,1)) == 0) if ((DayOfWeek = GetDayOfWeek(Yea, Mon, 1)) == 0)
Day = 1; Day = 1;
else else {
{ if (Mon <= 1) {
if (Mon <= 1) Mon = 12;
{ Yea--;
Mon = 12; } else
Yea--; Mon--;
NumDaysInMonth = (Mon == 2) ? GetNumDaysFebruary(Yea) :
NumDaysMonth[Mon];
Day = NumDaysInMonth - DayOfWeek + 1;
} }
else
Mon--;
NumDaysInMonth = (Mon == 2) ? GetNumDaysFebruary (Yea) :
NumDaysMonth[Mon];
Day = NumDaysInMonth - DayOfWeek + 1;
}
/***** Start of month *****/ /***** Start of month *****/
HTMLContent += '<div class="MONTH_CONTAINER">'; Gbl_HTMLContent += '<div class="MONTH_CONTAINER">';
/***** Month name *****/ /***** Month name *****/
if (DrawingCalendar) if (DrawingCalendar)
HTMLContent += '<div class="MONTH">'; Gbl_HTMLContent += '<div class="MONTH">';
else else {
{ FormId = id + '_show_calendar';
FormId = id + '_show_calendar'; Gbl_HTMLContent += '<form method="post" action="' + CGI + '" id="' + FormId + '">' +
HTMLContent += '<form method="post" action="' + FormGoToCalendarParams +
CGI + '<div class="MONTH">' +
'" id="' + '<a href="" class="MONTH" onclick="document.getElementById(\'' + FormId +
FormId + '\').submit();return false;">';
'">' +
FormGoToCalendarParams +
'<div class="MONTH">' +
'<a href="" class="MONTH"' +
' onclick="document.getElementById(\'' + FormId + '\').submit();return false;">';
}
HTMLContent += MONTHS_CAPS[MonthToDraw-1] + ' ' + YearToDraw;
if (DrawingCalendar)
HTMLContent += '</div>';
else
HTMLContent += '</a></div></form>';
/***** Month head: first letter for each day of week *****/
HTMLContent += '<table class="MONTH_TABLE_DAYS">'
HTMLContent += '<tr>';
for (DayOfWeek = 0;
DayOfWeek < 7;
DayOfWeek++)
HTMLContent += '<td class="' +
((DayOfWeek == 6) ? 'DAY_NO_WRK_HEAD' :
'DAY_WRK_HEAD') +
'">' +
DAYS_CAPS[DayOfWeek] +
'</td>';
HTMLContent += '</tr>';
/***** Draw every week of the month *****/
for (Week = 0;
Week < 6;
Week++)
{
HTMLContent += '<tr>';
/***** Draw every day of the week *****/
for (DayOfWeek = 0;
DayOfWeek < 7;
DayOfWeek++)
{
/***** Set class for day being drawn *****/
ClassForDay = ((Mon == MonthToDraw) ? 'DAY_WRK' :
'DAY_WRK_LIGHT');
TextForDay = '';
/* Check if day is a holiday or a school day */
YYYYMMDD = Yea*10000 + Mon*100 + Day;
for (NumHld = 0, ContinueSearching = true;
NumHld < Hlds.length && ContinueSearching;
NumHld++)
if (Hlds[NumHld].PlcCod <= 0 ||
Hlds[NumHld].PlcCod == CurrentPlcCod)
{
if (Hlds[NumHld].StartDate > YYYYMMDD) // List is ordered by start date. If start date is greater than date being drawn, don't continue searching
ContinueSearching = false;
else // start date <= date being drawn
switch (Hlds[NumHld].HldTyp)
{
case Hld_HOLIDAY:
if (Hlds[NumHld].StartDate == YYYYMMDD) // If start date == date being drawn
{
ClassForDay = ((Mon == MonthToDraw) ? 'DAY_HLD' :
'DAY_HLD_LIGHT');
TextForDay = Hlds[NumHld].Name;
ContinueSearching = false;
}
break;
case Hld_NON_SCHOOL_PERIOD:
if (Hlds[NumHld].EndDate >= YYYYMMDD) // If start date <= date being drawn <= end date
{
ClassForDay = ((Mon == MonthToDraw) ? 'DAY_NO_WORK' :
'DAY_NO_WORK_LIGHT');
TextForDay = Hlds[NumHld].Name;
}
break;
}
}
/* Day being drawn is sunday? */
if (DayOfWeek == 6) // All the sundays are holidays
ClassForDay = (Mon == MonthToDraw) ? 'DAY_HLD' :
'DAY_HLD_LIGHT';
/* Date being drawn is today? */
IsToday = (Yea == YearToDraw &&
Mon == MonthToDraw &&
Mon == CurrentMonth &&
Day == CurrentDay);
/* Check if day has an exam announcement */
ThisDayHasEvent = false;
if (!DrawingCalendar || Mon == MonthToDraw) // If drawing calendar and the month is not the real one, don't draw exam announcements
for (NumExamAnnouncement = 0;
NumExamAnnouncement < LstExamAnnouncements.length;
NumExamAnnouncement++)
if (Yea == LstExamAnnouncements[NumExamAnnouncement].Year &&
Mon == LstExamAnnouncements[NumExamAnnouncement].Month &&
Day == LstExamAnnouncements[NumExamAnnouncement].Day)
{
ThisDayHasEvent = true;
if (!PrintView)
TextForDay = STR_EXAM + ': ' +
LstExamAnnouncements[NumExamAnnouncement].Year + '-' +
LstExamAnnouncements[NumExamAnnouncement].Month + '-' +
LstExamAnnouncements[NumExamAnnouncement].Day;
break;
}
/***** Write the box with the day *****/
HTMLContent += '<td class="' +
((IsToday && !PrintView) ? (ThisDayHasEvent ? 'TODAY_EVENT' :
'TODAY') :
(ThisDayHasEvent ? 'DAY_EVENT' :
'DAY')) +
'">';
/* If day has an exam announcement */
if (!PrintView && ThisDayHasEvent)
{
FormIdNum++;
FormId = id + '_event_' + FormIdNum;
HTMLContent += '<form method="post" action="' +
CGI +
'" id="' +
FormId +
'">';
HTMLContent += FormEventParams;
HTMLContent += '<div class="' + ClassForDay + '"';
if (TextForDay.length)
HTMLContent += ' title="' + TextForDay + '"';
HTMLContent += '>';
HTMLContent += '<a href="" class="' + ClassForDay + '"' +
' onclick="document.getElementById(\'' + FormId + '\').submit();return false;">';
}
else
{
HTMLContent += '<div class="' + ClassForDay + '"';
if (TextForDay.length)
HTMLContent += ' title="' + TextForDay + '"';
HTMLContent += '>';
}
/* Write the day of month */
HTMLContent += Day;
/* If day has an exam announcement */
if (!PrintView && ThisDayHasEvent)
HTMLContent += '</a></div></form>';
else
HTMLContent += '</div>';
HTMLContent += '</td>';
/***** Set the next day *****/
NumDaysInMonth = (Mon == 2) ? GetNumDaysFebruary (Yea) :
NumDaysMonth[Mon];
if (++Day > NumDaysInMonth)
{
if (++Mon > 12)
{
Yea++;
Mon = 1;
}
Day = 1;
}
} }
HTMLContent += '</tr>'; Gbl_HTMLContent += MONTHS_CAPS[MonthToDraw - 1] + ' ' + YearToDraw;
} if (DrawingCalendar)
Gbl_HTMLContent += '</div>';
else
Gbl_HTMLContent += '</a></div></form>';
/***** End of month *****/ /***** Month head: first letter for each day of week *****/
HTMLContent += '</table></div>'; Gbl_HTMLContent += '<table class="MONTH_TABLE_DAYS">' + '<tr>';
} for (DayOfWeek = 0; DayOfWeek < 7; DayOfWeek++)
Gbl_HTMLContent += '<td class="' +
((DayOfWeek == 6) ? 'DAY_NO_WRK_HEAD' :
'DAY_WRK_HEAD') +
'">' +
DAYS_CAPS[DayOfWeek] +
'</td>';
Gbl_HTMLContent += '</tr>';
/***** Draw every week of the month *****/
for (Week = 0;
Week < 6;
Week++) {
Gbl_HTMLContent += '<tr>';
/***** Draw every day of the week *****/
for (DayOfWeek = 0;
DayOfWeek < 7;
DayOfWeek++) {
/***** Set class for day being drawn *****/
ClassForDay = ((Mon == MonthToDraw) ? 'DAY_WRK' :
'DAY_WRK_LIGHT');
TextForDay = '';
/* Check if day is a holiday or a school day */
YYYYMMDD = Yea * 10000 + Mon * 100 + Day;
for (NumHld = 0, ContinueSearching = true;
NumHld < Hlds.length && ContinueSearching;
NumHld++)
if (Hlds[NumHld].PlcCod <= 0 ||
Hlds[NumHld].PlcCod == CurrentPlcCod) {
if (Hlds[NumHld].StartDate > YYYYMMDD) // List is ordered by start date. If start date is greater than date being drawn, don't continue searching
ContinueSearching = false;
else
// start date <= date being drawn
switch (Hlds[NumHld].HldTyp) {
case Hld_HOLIDAY:
if (Hlds[NumHld].StartDate == YYYYMMDD) { // If start date == date being drawn
ClassForDay = ((Mon == MonthToDraw) ? 'DAY_HLD' :
'DAY_HLD_LIGHT');
TextForDay = Hlds[NumHld].Name;
ContinueSearching = false;
}
break;
case Hld_NON_SCHOOL_PERIOD:
if (Hlds[NumHld].EndDate >= YYYYMMDD) { // If start date <= date being drawn <= end date
ClassForDay = ((Mon == MonthToDraw) ? 'DAY_NO_WORK' :
'DAY_NO_WORK_LIGHT');
TextForDay = Hlds[NumHld].Name;
}
break;
}
}
/* Day being drawn is sunday? */
if (DayOfWeek == 6) // All the sundays are holidays
ClassForDay = (Mon == MonthToDraw) ? 'DAY_HLD' :
'DAY_HLD_LIGHT';
/* Date being drawn is today? */
IsToday = (Yea == YearToDraw &&
Mon == MonthToDraw &&
Mon == CurrentMonth &&
Day == CurrentDay);
/* Check if day has an exam announcement */
ThisDayHasEvent = false;
if (!DrawingCalendar || Mon == MonthToDraw) // If drawing calendar and the month is not the real one, don't draw exam announcements
for (NumExamAnnouncement = 0;
NumExamAnnouncement < LstExamAnnouncements.length;
NumExamAnnouncement++)
if (Yea == LstExamAnnouncements[NumExamAnnouncement].Year &&
Mon == LstExamAnnouncements[NumExamAnnouncement].Month &&
Day == LstExamAnnouncements[NumExamAnnouncement].Day) {
ThisDayHasEvent = true;
if (!PrintView)
TextForDay = STR_EXAM + ': ' +
LstExamAnnouncements[NumExamAnnouncement].Year + '-' +
LstExamAnnouncements[NumExamAnnouncement].Month + '-' +
LstExamAnnouncements[NumExamAnnouncement].Day;
break;
}
/***** Write the box with the day *****/
Gbl_HTMLContent += '<td class="' +
((IsToday && !PrintView) ? (ThisDayHasEvent ? 'TODAY_EVENT' :
'TODAY') :
(ThisDayHasEvent ? 'DAY_EVENT' :
'DAY')) +
'">';
/* If day has an exam announcement */
if (!PrintView && ThisDayHasEvent) {
FormIdNum++;
FormId = id + '_event_' + FormIdNum;
Gbl_HTMLContent += '<form method="post" action="' + CGI + '" id="' + FormId + '">' +
FormEventParams +
'<div class="' + ClassForDay + '"';
if (TextForDay.length)
Gbl_HTMLContent += ' title="' + TextForDay + '"';
Gbl_HTMLContent += '><a href="" class="' + ClassForDay + '"' +
' onclick="document.getElementById(\'' + FormId +
'\').submit();return false;">';
} else {
Gbl_HTMLContent += '<div class="' + ClassForDay + '"';
if (TextForDay.length)
Gbl_HTMLContent += ' title="' + TextForDay + '"';
Gbl_HTMLContent += '>';
}
/* Write the day of month */
Gbl_HTMLContent += Day;
/* If day has an exam announcement */
if (!PrintView && ThisDayHasEvent)
Gbl_HTMLContent += '</a></div></form>';
else
Gbl_HTMLContent += '</div>';
Gbl_HTMLContent += '</td>';
/***** Set the next day *****/
NumDaysInMonth = (Mon == 2) ? GetNumDaysFebruary (Yea) :
NumDaysMonth[Mon];
if (++Day > NumDaysInMonth) {
if (++Mon > 12) {
Yea++;
Mon = 1;
}
Day = 1;
}
}
Gbl_HTMLContent += '</tr>';
}
/***** End of month *****/
Gbl_HTMLContent += '</table></div>';
}
/*****************************************************************************/ /*****************************************************************************/
/***************** Compute day of the week from a given date *****************/ /***************** Compute day of the week from a given date *****************/
/*****************************************************************************/ /*****************************************************************************/
// Return 0 for monday, 1 for tuesday,... 6 for sunday // Return 0 for monday, 1 for tuesday,... 6 for sunday
function GetDayOfWeek (Year,Month,Day) function GetDayOfWeek (Year,Month,Day) {
{ if (Month <= 2) {
if (Month <= 2)
{
Month += 12; Month += 12;
Year--; Year--;
} }
return ( return (((Day +
( (Month * 2) +
( Math.floor (((Month + 1) * 3) / 5) +
Day+ Year +
(Month*2)+ Math.floor (Year / 4) -
Math.floor(((Month+1)*3)/5)+ Math.floor (Year/100) +
Year+ Math.floor (Year/400) +
Math.floor(Year/4)- 2) % 7) + 5) % 7;
Math.floor(Year/100)+ }
Math.floor(Year/400)
+2
) % 7
) + 5
) % 7;
}
/*****************************************************************************/ /*****************************************************************************/
/****************** Return the number of days of february ********************/ /****************** Return the number of days of february ********************/
/*****************************************************************************/ /*****************************************************************************/
function GetNumDaysFebruary (Year) function GetNumDaysFebruary (Year) {
{ return (GetIfLeapYear (Year) ? 29 : 28);
return (GetIfLeapYear (Year) ? 29 : }
28);
}
/*****************************************************************************/ /*****************************************************************************/
/************************* Return true if year is leap ***********************/ /************************* Return true if year is leap ***********************/
/*****************************************************************************/ /*****************************************************************************/
function GetIfLeapYear (Year) function GetIfLeapYear (Year) {
{
return (Year % 4 == 0) && ((Year % 100 != 0) || (Year % 400 == 0)); return (Year % 4 == 0) && ((Year % 100 != 0) || (Year % 400 == 0));
} }

View File

@ -2053,7 +2053,7 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
/* ActAdmAsgWrkUsr */{ 792, 2,TabAss,ActAdmAsgWrkUsr ,0x008,0x000,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Brw_ShowFileBrowserOrWorks ,"editfolderuser" }, /* ActAdmAsgWrkUsr */{ 792, 2,TabAss,ActAdmAsgWrkUsr ,0x008,0x000,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Brw_ShowFileBrowserOrWorks ,"editfolderuser" },
/* ActReqAsgWrkCrs */{ 899, 3,TabAss,ActReqAsgWrkCrs ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Brw_AskEditWorksCrs ,"folderusers" }, /* ActReqAsgWrkCrs */{ 899, 3,TabAss,ActReqAsgWrkCrs ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Brw_AskEditWorksCrs ,"folderusers" },
/* ActReqTst */{ 103, 4,TabAss,ActReqTst ,0x118,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Tst_ShowFormAskTst ,"test" }, /* ActReqTst */{ 103, 4,TabAss,ActReqTst ,0x118,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Tst_ShowFormAskTst ,"test" },
/* ActSeeCal */{ 16, 5,TabAss,ActSeeCal ,0x1FF,0x1FF,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Cal_DrawCalendar ,"date" }, /* ActSeeCal */{ 16, 5,TabAss,ActSeeCal ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Cal_DrawCalendar ,"date" },
/* ActSeeExaAnn */{ 85, 6,TabAss,ActSeeExaAnn ,0x1FF,0x1FF,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Exa_ListExamAnnouncementsSee ,"announce" }, /* ActSeeExaAnn */{ 85, 6,TabAss,ActSeeExaAnn ,0x1FF,0x1FF,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Exa_ListExamAnnouncementsSee ,"announce" },
/* ActSeeAdmMrk */{ 17, 7,TabAss,ActSeeAdmMrk ,0x118,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Brw_ShowFileBrowserOrWorks ,"grades" }, /* ActSeeAdmMrk */{ 17, 7,TabAss,ActSeeAdmMrk ,0x118,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Brw_ShowFileBrowserOrWorks ,"grades" },
@ -2182,7 +2182,7 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
/* ActSeeUsrTstExa */{1081,-1,TabAss,ActReqTst ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Tst_ShowUsrsTestResults ,NULL}, /* ActSeeUsrTstExa */{1081,-1,TabAss,ActReqTst ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Tst_ShowUsrsTestResults ,NULL},
/* ActSeeOneTstExaOth*/{1082,-1,TabAss,ActReqTst ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Tst_ShowOneTestExam ,NULL}, /* ActSeeOneTstExaOth*/{1082,-1,TabAss,ActReqTst ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Tst_ShowOneTestExam ,NULL},
/* ActPrnCal */{ 71,-1,TabAss,ActSeeCal ,0x1FF,0x1FF,0x000,Act_CONTENT_NORM,Act_NEW_WINDOW ,NULL ,Cal_DrawCalendar ,NULL}, /* ActPrnCal */{ 71,-1,TabAss,ActSeeCal ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_NEW_WINDOW ,NULL ,Cal_DrawCalendar ,NULL},
/* ActEdiExaAnn */{ 91,-1,TabAss,ActSeeExaAnn ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Exa_PutFrmEditAExamAnnouncement,NULL}, /* ActEdiExaAnn */{ 91,-1,TabAss,ActSeeExaAnn ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Exa_PutFrmEditAExamAnnouncement,NULL},
/* ActRcvExaAnn */{ 110,-1,TabAss,ActSeeExaAnn ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Exa_ReceiveExamAnnouncement ,NULL}, /* ActRcvExaAnn */{ 110,-1,TabAss,ActSeeExaAnn ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Exa_ReceiveExamAnnouncement ,NULL},

View File

@ -44,9 +44,6 @@ extern struct Globals Gbl;
/***************************** Private prototypes ****************************/ /***************************** Private prototypes ****************************/
/*****************************************************************************/ /*****************************************************************************/
static void Cal_DrawMonth (unsigned RealYear,unsigned RealMonth,
bool DrawingCalendar,bool PrintView);
/*****************************************************************************/ /*****************************************************************************/
/***************************** Draw current month ****************************/ /***************************** Draw current month ****************************/
/*****************************************************************************/ /*****************************************************************************/
@ -66,26 +63,23 @@ void Cal_DrawCurrentMonth (void)
/***** Create list of dates of exam announcements *****/ /***** Create list of dates of exam announcements *****/
Exa_CreateListOfExamAnnouncements (); Exa_CreateListOfExamAnnouncements ();
/***** Draw the month *****/
// Cal_DrawMonth (Gbl.Now.Date.Year,Gbl.Now.Date.Month,false,false);
/***** Draw the month in JavaScript *****/ /***** Draw the month in JavaScript *****/
/* JavaScript will write HTML here */ /* JavaScript will write HTML here */
fprintf (Gbl.F.Out,"<div id=\"CurrentMonth\">" fprintf (Gbl.F.Out,"<div id=\"CurrentMonth\">"
"</div>"); "</div>");
/* Write script to draw the month */ /* Write script to draw the month */
fprintf (Gbl.F.Out,"<script type=\"text/javascript\">\n" fprintf (Gbl.F.Out,"<script type=\"text/javascript\">"
" var HTMLContent = '';\n" " Gbl_HTMLContent = '';"
" DrawCurrentMonth ('CurrentMonth',%ld,'%s/%s',%ld,", " DrawCurrentMonth ('CurrentMonth',%ld,%ld,'%s/%s',",
(long) Gbl.StartExecutionTimeUTC, (long) Gbl.StartExecutionTimeUTC,
Cfg_HTTPS_URL_SWAD_CGI,Txt_STR_LANG_ID[Gbl.Prefs.Language], Gbl.CurrentCtr.Ctr.PlcCod,
Gbl.CurrentCtr.Ctr.PlcCod); Cfg_HTTPS_URL_SWAD_CGI,Txt_STR_LANG_ID[Gbl.Prefs.Language]);
Act_SetParamsForm (Params,ActSeeCal,true); Act_SetParamsForm (Params,ActSeeCal,true);
fprintf (Gbl.F.Out,"'%s',",Params); fprintf (Gbl.F.Out,"'%s',",Params);
Act_SetParamsForm (Params,ActSeeExaAnn,true); Act_SetParamsForm (Params,ActSeeExaAnn,true);
fprintf (Gbl.F.Out,"'%s');\n" fprintf (Gbl.F.Out,"'%s');"
"</script>\n",Params); "</script>",Params);
/***** Free list of dates of exam announcements *****/ /***** Free list of dates of exam announcements *****/
Exa_FreeListExamAnnouncements (); Exa_FreeListExamAnnouncements ();
@ -114,28 +108,6 @@ void Cal_DrawCurrentMonth (void)
void Cal_DrawCalendar (void) void Cal_DrawCalendar (void)
{ {
extern const char *Txt_Print; extern const char *Txt_Print;
/*
static unsigned StartingMonth[1+12] = // Calendar starts one row before current month
{
0, // Not used
9, // January --> September
9, // February --> September
9, // Mars --> September
9, // April --> September
1, // May --> January
1, // June --> January
1, // July --> January
1, // August --> January
5, // September --> May
5, // October --> May
5, // November --> May
5, // December --> May
};
*/
// unsigned Row,Col;
// unsigned Month = StartingMonth[Gbl.Now.Date.Month];
// unsigned Year = (Month < Gbl.Now.Date.Month) ? Gbl.Now.Date.Year :
// Gbl.Now.Date.Year - 1;
bool PrintView = (Gbl.CurrentAct == ActPrnCal); bool PrintView = (Gbl.CurrentAct == ActPrnCal);
extern const char *Txt_STR_LANG_ID[Txt_NUM_LANGUAGES]; extern const char *Txt_STR_LANG_ID[Txt_NUM_LANGUAGES];
@ -172,46 +144,25 @@ void Cal_DrawCalendar (void)
"<div id=\"calendar\">" "<div id=\"calendar\">"
"</div>"); "</div>");
/*
for (Row = 0;
Row < 4;
Row++)
{
fprintf (Gbl.F.Out,"<tr>");
for (Col = 0;
Col < 4;
Col++)
{
fprintf (Gbl.F.Out,"<td class=\"CENTER_TOP\" style=\"width:150px;\">");
Cal_DrawMonth (Year,Month,true,(Gbl.CurrentAct == ActPrnCal));
fprintf (Gbl.F.Out,"</td>");
if (++Month == 13)
{
Month = 1;
Year++;
}
}
fprintf (Gbl.F.Out,"</tr>");
}
fprintf (Gbl.F.Out,"</table>"
"</td>"
"</tr>");
*/
/* Write script to draw the month */ /* Write script to draw the month */
fprintf (Gbl.F.Out,"<script type=\"text/javascript\">\n" fprintf (Gbl.F.Out,"<script type=\"text/javascript\">"
" var HTMLContent = '';\n" " Gbl_HTMLContent = '';"
" Cal_DrawCalendar('calendar',%ld,%s,'%s/%s',%ld,", " Cal_DrawCalendar('calendar',%ld,%ld,%s,'%s/%s',",
(long) Gbl.StartExecutionTimeUTC, (long) Gbl.StartExecutionTimeUTC,
(Gbl.CurrentAct == ActPrnCal) ? "true" : "false", Gbl.CurrentCtr.Ctr.PlcCod,
Cfg_HTTPS_URL_SWAD_CGI,Txt_STR_LANG_ID[Gbl.Prefs.Language], (Gbl.CurrentAct == ActPrnCal) ? "true" :
Gbl.CurrentCtr.Ctr.PlcCod); "false",
Cfg_HTTPS_URL_SWAD_CGI,Txt_STR_LANG_ID[Gbl.Prefs.Language]);
Act_SetParamsForm (Params,ActSeeCal,true); Act_SetParamsForm (Params,ActSeeCal,true);
fprintf (Gbl.F.Out,"'%s',",Params); fprintf (Gbl.F.Out,"'%s',",
Params);
Act_SetParamsForm (Params,ActSeeExaAnn,true); Act_SetParamsForm (Params,ActSeeExaAnn,true);
fprintf (Gbl.F.Out,"'%s');\n" fprintf (Gbl.F.Out,"'%s');"
"</script>\n",Params); "</script>",
Params);
fprintf (Gbl.F.Out,"</td></tr>"); fprintf (Gbl.F.Out,"</td>"
"</tr>");
/***** Free list of dates of exam announcements *****/ /***** Free list of dates of exam announcements *****/
Exa_FreeListExamAnnouncements (); Exa_FreeListExamAnnouncements ();
@ -219,241 +170,3 @@ void Cal_DrawCalendar (void)
/***** End frame *****/ /***** End frame *****/
Lay_EndRoundFrameTable (); Lay_EndRoundFrameTable ();
} }
/*****************************************************************************/
/******************************** Draw a month *******************************/
/*****************************************************************************/
static void Cal_DrawMonth (unsigned RealYear,unsigned RealMonth,
bool DrawingCalendar,bool PrintView)
{
extern const unsigned Dat_NumDaysMonth[1+12];
extern const char *Txt_Show_calendar;
extern const char *Txt_DAYS_CAPS[7];
extern const char *Txt_MONTHS_CAPS[12];
extern const char *Txt_Exam_of_X;
char StrExamOfX[512+Crs_MAX_LENGTH_COURSE_FULL_NAME];
unsigned Week;
unsigned DayOfWeek; /* 0, 1, 2, 3, 4, 5, 6 */
unsigned DayOfMonth;
unsigned NumDaysInMonth;
unsigned Year = RealYear;
unsigned Month = RealMonth;
char YYYYMMDD[4+2+2+1];
unsigned NumHld;
char *ClassForDay; // Class of day depending on type of day
char *TextForDay; // Text associated to a day, for example the name of the holiday
unsigned NumExamAnnouncement; // Number of exam announcement
int ResultOfCmpStartDate;
bool ContinueSearching;
bool PutLinkToCalendar = !DrawingCalendar && Gbl.CurrentCrs.Crs.CrsCod > 0;
bool ThisDayHasEvent = false;
bool IsToday;
/***** Compute number of day of month for the first box *****/
/* The initial day of month can be -5, -4, -3, -2, -1, 0, or 1
If it's -5 then write 6 boxes of the previous month.
If it's -4 then write 5 boxes of the previous month.
If it's -3 then write 4 boxes of the previous month.
If it's -2 then write 3 boxes of the previous month.
If it's -1 then write 2 boxes of the previous month.
If it's 0 then write 1 box of the previous month.
If it's 1 then write 0 boxes of the previous month. */
if ((DayOfWeek = Dat_GetDayOfWeek (Year,Month,1)) == 0)
DayOfMonth = 1;
else
{
if (Month <= 1)
{
Month = 12;
Year--;
}
else
Month--;
NumDaysInMonth = (Month == 2) ? Dat_GetNumDaysFebruary (Year) :
Dat_NumDaysMonth[Month];
DayOfMonth = NumDaysInMonth - DayOfWeek + 1;
}
/***** Start of month *****/
fprintf (Gbl.F.Out,"<div class=\"MONTH_CONTAINER\">");
/***** Month name *****/
fprintf (Gbl.F.Out,"<div class=\"MONTH\">");
if (PutLinkToCalendar)
{
Act_FormStart (ActSeeCal);
Act_LinkFormSubmit (Txt_Show_calendar,"MONTH");
}
fprintf (Gbl.F.Out,"%s %u",
Txt_MONTHS_CAPS[RealMonth-1],RealYear);
if (PutLinkToCalendar)
{
fprintf (Gbl.F.Out,"</a>");
Act_FormEnd ();
}
fprintf (Gbl.F.Out,"</div>");
/***** Month head: first letter for each day of week *****/
fprintf (Gbl.F.Out,"<table class=\"MONTH_TABLE_DAYS\">"
"<tr>");
for (DayOfWeek = 0;
DayOfWeek < 7;
DayOfWeek++)
fprintf (Gbl.F.Out,"<td class=\"%s\">"
"%c"
"</td>",
(DayOfWeek == 6) ? "DAY_NO_WRK_HEAD" :
"DAY_WRK_HEAD",
Txt_DAYS_CAPS[DayOfWeek][0]);
fprintf (Gbl.F.Out,"</tr>");
/***** Draw every week of the month *****/
for (Week = 0;
Week < 6;
Week++)
{
fprintf (Gbl.F.Out,"<tr>");
/***** Draw every day of the week *****/
for (DayOfWeek = 0;
DayOfWeek < 7;
DayOfWeek++)
{
/***** Set class for day being drawn *****/
ClassForDay = (Month == RealMonth) ? "DAY_WRK" :
"DAY_WRK_LIGHT";
TextForDay = NULL;
/* Check if day is a holiday or a school day */
sprintf (YYYYMMDD,"%04u%02u%02u",Year,Month,DayOfMonth);
for (NumHld = 0, ContinueSearching = true;
NumHld < Gbl.Hlds.Num && ContinueSearching;
NumHld++)
if (Gbl.Hlds.Lst[NumHld].PlcCod <= 0 ||
Gbl.Hlds.Lst[NumHld].PlcCod == Gbl.CurrentCtr.Ctr.PlcCod)
{
ResultOfCmpStartDate = strcmp (Gbl.Hlds.Lst[NumHld].StartDate.YYYYMMDD,YYYYMMDD);
if (ResultOfCmpStartDate > 0) // List is ordered by start date. If start date is greater than date being drawn, don't continue searching
ContinueSearching = false;
else // ResultOfCmpStartDate <= 0 <==> start date <= date being drawn
switch (Gbl.Hlds.Lst[NumHld].HldTyp)
{
case Hld_HOLIDAY:
if (ResultOfCmpStartDate == 0) // If start date == date being drawn
{
ClassForDay = (Month == RealMonth) ? "DAY_HLD" :
"DAY_HLD_LIGHT";
TextForDay = Gbl.Hlds.Lst[NumHld].Name;
ContinueSearching = false;
}
break;
case Hld_NON_SCHOOL_PERIOD:
if (strcmp (Gbl.Hlds.Lst[NumHld].EndDate.YYYYMMDD,YYYYMMDD) >= 0) // If start date <= date being drawn <= end date
{
ClassForDay = (Month == RealMonth) ? "DAY_NO_WORK" :
"DAY_NO_WORK_LIGHT";
TextForDay = Gbl.Hlds.Lst[NumHld].Name;
}
break;
}
}
/* Day being drawn is sunday? */
if (DayOfWeek == 6) // All the sundays are holidays
ClassForDay = (Month == RealMonth) ? "DAY_HLD" :
"DAY_HLD_LIGHT";
/* Date being drawn is today? */
IsToday = (Month == RealMonth &&
Year == Gbl.Now.Date.Year &&
Month == Gbl.Now.Date.Month &&
DayOfMonth == Gbl.Now.Date.Day);
/* Check if day has an exam announcement */
ThisDayHasEvent = false;
if (!DrawingCalendar || Month == RealMonth) // If drawing calendar and the month is not the real one, don't draw exam announcements
for (NumExamAnnouncement = 0;
NumExamAnnouncement < Gbl.LstExamAnnouncements.NumExamAnnounc;
NumExamAnnouncement++)
if (Year == Gbl.LstExamAnnouncements.Lst[NumExamAnnouncement].Year &&
Month == Gbl.LstExamAnnouncements.Lst[NumExamAnnouncement].Month &&
DayOfMonth == Gbl.LstExamAnnouncements.Lst[NumExamAnnouncement].Day)
{
ThisDayHasEvent = true;
if (!PrintView)
{
sprintf (StrExamOfX,Txt_Exam_of_X,Gbl.CurrentCrs.Crs.FullName);
sprintf (Gbl.Title,"%s: %02u/%02u/%04u",
StrExamOfX,
Gbl.LstExamAnnouncements.Lst[NumExamAnnouncement].Day,
Gbl.LstExamAnnouncements.Lst[NumExamAnnouncement].Month,
Gbl.LstExamAnnouncements.Lst[NumExamAnnouncement].Year);
}
break;
}
/***** Write the box with the day *****/
fprintf (Gbl.F.Out,"<td class=\"%s\">",
(IsToday && !PrintView) ? (ThisDayHasEvent ? "TODAY_EVENT" :
"TODAY") :
(ThisDayHasEvent ? "DAY_EVENT" :
"DAY" ));
/* If day has an exam announcement */
if (!PrintView && ThisDayHasEvent)
{
Act_FormStart (ActSeeExaAnn);
fprintf (Gbl.F.Out,"<table style=\"width:100%%;\">"
"<tr>"
"<td class=\"%s\">",
ClassForDay);
Act_LinkFormSubmit (Gbl.Title,ClassForDay);
}
else
{
fprintf (Gbl.F.Out,"<div class=\"%s\"",ClassForDay);
if (!PrintView && TextForDay)
fprintf (Gbl.F.Out," title=\"%s\"",TextForDay);
fprintf (Gbl.F.Out,">");
}
/* Write the day of month */
fprintf (Gbl.F.Out,"%u",DayOfMonth);
/* If day has an exam announcement */
if (!PrintView && ThisDayHasEvent)
{
fprintf (Gbl.F.Out,"</a>"
"</td>"
"</tr>"
"</table>");
Act_FormEnd ();
}
else
fprintf (Gbl.F.Out,"</div>");
fprintf (Gbl.F.Out,"</td>");
/***** Set the next day *****/
NumDaysInMonth = (Month == 2) ? Dat_GetNumDaysFebruary (Year) :
Dat_NumDaysMonth[Month];
if (++DayOfMonth > NumDaysInMonth)
{
if (++Month > 12)
{
Year++;
Month = 1;
}
DayOfMonth = 1;
}
}
fprintf (Gbl.F.Out,"</tr>");
}
/***** End of month *****/
fprintf (Gbl.F.Out,"</table>"
"</div>");
}

View File

@ -103,17 +103,19 @@
// TODO: Put headers Content-type and Content-disposition when redirecting with Location: // TODO: Put headers Content-type and Content-disposition when redirecting with Location:
// TODO: System admin should be able to remove/edit user's mail (when he/she detects a recipient does not exists, for example) // TODO: System admin should be able to remove/edit user's mail (when he/she detects a recipient does not exists, for example)
// TODO: When a new assignment/attendance/survey is incorrect, the second time the form is shown, it should be filled with partial data, now is always empty // TODO: When a new assignment/attendance/survey is incorrect, the second time the form is shown, it should be filled with partial data, now is always empty
// TODO: Global announcements should be available for all users?
// TODO: Dates in Holidays should be shown in big-endian // TODO: Dates in Holidays should be shown in big-endian
/*****************************************************************************/ /*****************************************************************************/
/****************************** Public constants *****************************/ /****************************** Public constants *****************************/
/*****************************************************************************/ /*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 15.31 (2015/10/30)" #define Log_PLATFORM_VERSION "SWAD 15.32 (2015/10/30)"
// Number of lines (includes comments but not blank lines) has been got with the following command: // Number of lines (includes comments but not blank lines) has been got with the following command:
// nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1 // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1
/* /*
Version 15.32: Oct 30, 2015 Code refactoring and cleaning related to calendar. (186617 lines)
Version 15.31: Oct 30, 2015 Calendar is drawn in browser using JavaScript. (186902 lines) Version 15.31: Oct 30, 2015 Calendar is drawn in browser using JavaScript. (186902 lines)
Version 15.30: Oct 30, 2015 Current month is drawn in browser using JavaScript. (186795 lines) Version 15.30: Oct 30, 2015 Current month is drawn in browser using JavaScript. (186795 lines)
Version 15.29.4: Oct 29, 2015 Writing JavaScript function to draw a month in browser. Not finished. (186729 lines) Version 15.29.4: Oct 29, 2015 Writing JavaScript function to draw a month in browser. Not finished. (186729 lines)

View File

@ -35,6 +35,7 @@
#include "swad_config.h" #include "swad_config.h"
#include "swad_connected.h" #include "swad_connected.h"
#include "swad_database.h" #include "swad_database.h"
#include "swad_exam.h"
#include "swad_global.h" #include "swad_global.h"
#include "swad_logo.h" #include "swad_logo.h"
#include "swad_notice.h" #include "swad_notice.h"
@ -451,7 +452,6 @@ static void Lay_WriteScripts (void)
unsigned DayOfWeek; /* 0, 1, 2, 3, 4, 5, 6 */ unsigned DayOfWeek; /* 0, 1, 2, 3, 4, 5, 6 */
unsigned NumHld; unsigned NumHld;
unsigned NumExamAnnouncement; // Number of exam announcement unsigned NumExamAnnouncement; // Number of exam announcement
char Params[256+256+Ses_LENGTH_SESSION_ID+256];
/***** General scripts for swad *****/ /***** General scripts for swad *****/
fprintf (Gbl.F.Out,"<script type=\"text/javascript\" src=\"%s/swad.js\">" fprintf (Gbl.F.Out,"<script type=\"text/javascript\" src=\"%s/swad.js\">"
@ -532,7 +532,7 @@ static void Lay_WriteScripts (void)
fprintf (Gbl.F.Out," var STR_EXAM = '"); fprintf (Gbl.F.Out," var STR_EXAM = '");
fprintf (Gbl.F.Out,Txt_Exam_of_X,Gbl.CurrentCrs.Crs.FullName); fprintf (Gbl.F.Out,Txt_Exam_of_X,Gbl.CurrentCrs.Crs.FullName);
fprintf (Gbl.F.Out,"';"); fprintf (Gbl.F.Out,"';\n");
fprintf (Gbl.F.Out," var Hlds = [];\n"); fprintf (Gbl.F.Out," var Hlds = [];\n");
for (NumHld = 0; for (NumHld = 0;
@ -554,8 +554,7 @@ static void Lay_WriteScripts (void)
Gbl.LstExamAnnouncements.Lst[NumExamAnnouncement].Month, Gbl.LstExamAnnouncements.Lst[NumExamAnnouncement].Month,
Gbl.LstExamAnnouncements.Lst[NumExamAnnouncement].Day); Gbl.LstExamAnnouncements.Lst[NumExamAnnouncement].Day);
fprintf (Gbl.F.Out," var HTMLContent;" fprintf (Gbl.F.Out,"</script>\n");
"</script>\n");
} }
/***** Scripts depending on action *****/ /***** Scripts depending on action *****/

View File

@ -293,9 +293,8 @@ static bool Tab_CheckIfICanViewTab (Act_Tab_t Tab)
return (Gbl.CurrentDeg.Deg.DegCod > 0 && return (Gbl.CurrentDeg.Deg.DegCod > 0 &&
Gbl.CurrentCrs.Crs.CrsCod <= 0); Gbl.CurrentCrs.Crs.CrsCod <= 0);
case TabCrs: case TabCrs:
case TabAss:
return (Gbl.CurrentCrs.Crs.CrsCod > 0); return (Gbl.CurrentCrs.Crs.CrsCod > 0);
case TabMsg: case TabMsg: // TODO: Show this tab in any case when Announcements will be available for all
return (Gbl.Usrs.Me.Logged || return (Gbl.Usrs.Me.Logged ||
Gbl.CurrentCrs.Crs.CrsCod > 0); Gbl.CurrentCrs.Crs.CrsCod > 0);
default: default: