diff --git a/swad_action.c b/swad_action.c index a2112125..8f4d670e 100644 --- a/swad_action.c +++ b/swad_action.c @@ -816,7 +816,8 @@ Assessment: 670. ActPrnCal Show print view of the academic calendar of the course 671. ActChgCal1stDay Change first day of week and show academic calendar of the course - NEW. ActSeeOneExaAnn Show one exam announcement highlighted + NEW. ActSeeOneExaAnn Show one exam announcement + NEW. ActSeeDatExaAnn Show exam announcements of a given date 672. ActEdiExaAnn Edit an exam announcement 673. ActRcvExaAnn Receive an exam announcement 674. ActPrnExaAnn Show an exam announcement ready to be printed @@ -2183,7 +2184,8 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = /* ActPrnCal */{ 71,-1,TabAss,ActSeeCal ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_NEW_WINDOW ,NULL ,Cal_DrawCalendar ,NULL}, /* ActChgCal1stDay */{1485,-1,TabAss,ActSeeCal ,0x1FF,0x1FF,0x1FF,Act_CONTENT_NORM,Act_MAIN_WINDOW,Cal_ChangeFirstDayOfWeek ,Cal_DrawCalendar ,NULL}, - /* ActSeeOneExaAnn */{1571,-1,TabAss,ActSeeAllExaAnn ,0x1FF,0x1FF,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,Exa_GetExaToShowHighlighted ,Exa_ListExamAnnouncementsSee ,NULL}, + /* ActSeeOneExaAnn */{1572,-1,TabAss,ActSeeAllExaAnn ,0x1FF,0x1FF,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,Exa_GetExaCodToHighlight ,Exa_ListExamAnnouncementsSee ,NULL}, + /* ActSeeDatExaAnn */{1571,-1,TabAss,ActSeeAllExaAnn ,0x1FF,0x1FF,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,Exa_GetDateToHighlight ,Exa_ListExamAnnouncementsSee ,NULL}, /* ActEdiExaAnn */{ 91,-1,TabAss,ActSeeAllExaAnn ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Exa_PutFrmEditAExamAnnouncement,NULL}, /* ActRcvExaAnn */{ 110,-1,TabAss,ActSeeAllExaAnn ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Exa_ReceiveExamAnnouncement ,NULL}, /* ActPrnExaAnn */{ 179,-1,TabAss,ActSeeAllExaAnn ,0x1FF,0x1FF,0x000,Act_CONTENT_NORM,Act_NEW_WINDOW ,NULL ,Exa_PrintExamAnnouncement ,NULL}, @@ -2648,7 +2650,7 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = /* ActRevAnn */{1471,-1,TabMsg,ActSeeAnn ,0x100,0x100,0x100,Act_CONTENT_NORM,Act_MAIN_WINDOW,Ann_RevealHiddenAnnouncement,Ann_ShowAllAnnouncements ,NULL}, /* ActRemAnn */{1236,-1,TabMsg,ActSeeAnn ,0x100,0x100,0x100,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Ann_RemoveAnnouncement ,NULL}, - /* ActSeeOneNot */{1164,-1,TabMsg,ActSeeAllNot ,0x1FF,0x1FF,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,Not_GetNotToShowHighlighted ,Not_ListFullNotices ,NULL}, + /* ActSeeOneNot */{1164,-1,TabMsg,ActSeeAllNot ,0x1FF,0x1FF,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,Not_GetNotCodToHighlight ,Not_ListFullNotices ,NULL}, /* ActWriNot */{ 59,-1,TabMsg,ActSeeAllNot ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Not_ShowFormNotice ,NULL}, /* ActRcvNot */{ 60,-1,TabMsg,ActSeeAllNot ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,Not_ReceiveNotice ,Not_ListFullNotices ,NULL}, /* ActHidNot */{ 763,-1,TabMsg,ActSeeAllNot ,0x110,0x100,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,Not_HideActiveNotice ,Not_ListFullNotices ,NULL}, @@ -4393,7 +4395,8 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq ActCnfID_Oth, // #1568 ActCnfID_Std, // #1569 ActCnfID_Tch, // #1570 - ActSeeOneExaAnn, // #1571 + ActSeeDatExaAnn, // #1571 + ActSeeOneExaAnn, // #1572 }; /*****************************************************************************/ diff --git a/swad_action.h b/swad_action.h index b62c1d2f..525a2372 100644 --- a/swad_action.h +++ b/swad_action.h @@ -72,9 +72,9 @@ typedef enum typedef int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action -#define Act_NUM_ACTIONS (1+9+51+15+90+70+67+245+185+150+172+36+28+83) +#define Act_NUM_ACTIONS (1+9+51+15+90+70+67+245+186+150+172+36+28+83) -#define Act_MAX_ACTION_COD 1571 +#define Act_MAX_ACTION_COD 1572 #define Act_MAX_OPTIONS_IN_MENU_PER_TAB 20 @@ -848,72 +848,73 @@ typedef int Act_Action_t; // Must be a signed type, because -1 is used to indica #define ActChgCal1stDay (ActRcvRchTxtCrsLnk+124) #define ActSeeOneExaAnn (ActRcvRchTxtCrsLnk+125) -#define ActEdiExaAnn (ActRcvRchTxtCrsLnk+126) -#define ActRcvExaAnn (ActRcvRchTxtCrsLnk+127) -#define ActPrnExaAnn (ActRcvRchTxtCrsLnk+128) -#define ActRemExaAnn (ActRcvRchTxtCrsLnk+129) +#define ActSeeDatExaAnn (ActRcvRchTxtCrsLnk+126) +#define ActEdiExaAnn (ActRcvRchTxtCrsLnk+127) +#define ActRcvExaAnn (ActRcvRchTxtCrsLnk+128) +#define ActPrnExaAnn (ActRcvRchTxtCrsLnk+129) +#define ActRemExaAnn (ActRcvRchTxtCrsLnk+130) -#define ActChgToSeeMrk (ActRcvRchTxtCrsLnk+130) +#define ActChgToSeeMrk (ActRcvRchTxtCrsLnk+131) -#define ActSeeMrkCrs (ActRcvRchTxtCrsLnk+131) -#define ActExpSeeMrkCrs (ActRcvRchTxtCrsLnk+132) -#define ActConSeeMrkCrs (ActRcvRchTxtCrsLnk+133) -#define ActReqDatSeeMrkCrs (ActRcvRchTxtCrsLnk+134) -#define ActSeeMyMrkCrs (ActRcvRchTxtCrsLnk+135) +#define ActSeeMrkCrs (ActRcvRchTxtCrsLnk+132) +#define ActExpSeeMrkCrs (ActRcvRchTxtCrsLnk+133) +#define ActConSeeMrkCrs (ActRcvRchTxtCrsLnk+134) +#define ActReqDatSeeMrkCrs (ActRcvRchTxtCrsLnk+135) +#define ActSeeMyMrkCrs (ActRcvRchTxtCrsLnk+136) -#define ActSeeMrkGrp (ActRcvRchTxtCrsLnk+136) -#define ActExpSeeMrkGrp (ActRcvRchTxtCrsLnk+137) -#define ActConSeeMrkGrp (ActRcvRchTxtCrsLnk+138) -#define ActReqDatSeeMrkGrp (ActRcvRchTxtCrsLnk+139) -#define ActSeeMyMrkGrp (ActRcvRchTxtCrsLnk+140) +#define ActSeeMrkGrp (ActRcvRchTxtCrsLnk+137) +#define ActExpSeeMrkGrp (ActRcvRchTxtCrsLnk+138) +#define ActConSeeMrkGrp (ActRcvRchTxtCrsLnk+139) +#define ActReqDatSeeMrkGrp (ActRcvRchTxtCrsLnk+140) +#define ActSeeMyMrkGrp (ActRcvRchTxtCrsLnk+141) -#define ActChgToAdmMrk (ActRcvRchTxtCrsLnk+141) +#define ActChgToAdmMrk (ActRcvRchTxtCrsLnk+142) -#define ActAdmMrkCrs (ActRcvRchTxtCrsLnk+142) -#define ActReqRemFilMrkCrs (ActRcvRchTxtCrsLnk+143) -#define ActRemFilMrkCrs (ActRcvRchTxtCrsLnk+144) -#define ActRemFolMrkCrs (ActRcvRchTxtCrsLnk+145) -#define ActCopMrkCrs (ActRcvRchTxtCrsLnk+146) -#define ActPasMrkCrs (ActRcvRchTxtCrsLnk+147) -#define ActRemTreMrkCrs (ActRcvRchTxtCrsLnk+148) -#define ActFrmCreMrkCrs (ActRcvRchTxtCrsLnk+149) -#define ActCreFolMrkCrs (ActRcvRchTxtCrsLnk+150) -#define ActRenFolMrkCrs (ActRcvRchTxtCrsLnk+151) -#define ActRcvFilMrkCrsDZ (ActRcvRchTxtCrsLnk+152) -#define ActRcvFilMrkCrsCla (ActRcvRchTxtCrsLnk+153) -#define ActExpAdmMrkCrs (ActRcvRchTxtCrsLnk+154) -#define ActConAdmMrkCrs (ActRcvRchTxtCrsLnk+155) -#define ActZIPAdmMrkCrs (ActRcvRchTxtCrsLnk+156) -#define ActShoMrkCrs (ActRcvRchTxtCrsLnk+157) -#define ActHidMrkCrs (ActRcvRchTxtCrsLnk+158) -#define ActReqDatAdmMrkCrs (ActRcvRchTxtCrsLnk+159) -#define ActChgDatAdmMrkCrs (ActRcvRchTxtCrsLnk+160) -#define ActDowAdmMrkCrs (ActRcvRchTxtCrsLnk+161) -#define ActChgNumRowHeaCrs (ActRcvRchTxtCrsLnk+162) -#define ActChgNumRowFooCrs (ActRcvRchTxtCrsLnk+163) +#define ActAdmMrkCrs (ActRcvRchTxtCrsLnk+143) +#define ActReqRemFilMrkCrs (ActRcvRchTxtCrsLnk+144) +#define ActRemFilMrkCrs (ActRcvRchTxtCrsLnk+145) +#define ActRemFolMrkCrs (ActRcvRchTxtCrsLnk+146) +#define ActCopMrkCrs (ActRcvRchTxtCrsLnk+147) +#define ActPasMrkCrs (ActRcvRchTxtCrsLnk+148) +#define ActRemTreMrkCrs (ActRcvRchTxtCrsLnk+149) +#define ActFrmCreMrkCrs (ActRcvRchTxtCrsLnk+150) +#define ActCreFolMrkCrs (ActRcvRchTxtCrsLnk+151) +#define ActRenFolMrkCrs (ActRcvRchTxtCrsLnk+152) +#define ActRcvFilMrkCrsDZ (ActRcvRchTxtCrsLnk+153) +#define ActRcvFilMrkCrsCla (ActRcvRchTxtCrsLnk+154) +#define ActExpAdmMrkCrs (ActRcvRchTxtCrsLnk+155) +#define ActConAdmMrkCrs (ActRcvRchTxtCrsLnk+156) +#define ActZIPAdmMrkCrs (ActRcvRchTxtCrsLnk+157) +#define ActShoMrkCrs (ActRcvRchTxtCrsLnk+158) +#define ActHidMrkCrs (ActRcvRchTxtCrsLnk+159) +#define ActReqDatAdmMrkCrs (ActRcvRchTxtCrsLnk+160) +#define ActChgDatAdmMrkCrs (ActRcvRchTxtCrsLnk+161) +#define ActDowAdmMrkCrs (ActRcvRchTxtCrsLnk+162) +#define ActChgNumRowHeaCrs (ActRcvRchTxtCrsLnk+163) +#define ActChgNumRowFooCrs (ActRcvRchTxtCrsLnk+164) -#define ActAdmMrkGrp (ActRcvRchTxtCrsLnk+164) -#define ActReqRemFilMrkGrp (ActRcvRchTxtCrsLnk+165) -#define ActRemFilMrkGrp (ActRcvRchTxtCrsLnk+166) -#define ActRemFolMrkGrp (ActRcvRchTxtCrsLnk+167) -#define ActCopMrkGrp (ActRcvRchTxtCrsLnk+168) -#define ActPasMrkGrp (ActRcvRchTxtCrsLnk+169) -#define ActRemTreMrkGrp (ActRcvRchTxtCrsLnk+170) -#define ActFrmCreMrkGrp (ActRcvRchTxtCrsLnk+171) -#define ActCreFolMrkGrp (ActRcvRchTxtCrsLnk+172) -#define ActRenFolMrkGrp (ActRcvRchTxtCrsLnk+173) -#define ActRcvFilMrkGrpDZ (ActRcvRchTxtCrsLnk+174) -#define ActRcvFilMrkGrpCla (ActRcvRchTxtCrsLnk+175) -#define ActExpAdmMrkGrp (ActRcvRchTxtCrsLnk+176) -#define ActConAdmMrkGrp (ActRcvRchTxtCrsLnk+177) -#define ActZIPAdmMrkGrp (ActRcvRchTxtCrsLnk+178) -#define ActShoMrkGrp (ActRcvRchTxtCrsLnk+179) -#define ActHidMrkGrp (ActRcvRchTxtCrsLnk+180) -#define ActReqDatAdmMrkGrp (ActRcvRchTxtCrsLnk+181) -#define ActChgDatAdmMrkGrp (ActRcvRchTxtCrsLnk+182) -#define ActDowAdmMrkGrp (ActRcvRchTxtCrsLnk+183) -#define ActChgNumRowHeaGrp (ActRcvRchTxtCrsLnk+184) -#define ActChgNumRowFooGrp (ActRcvRchTxtCrsLnk+185) +#define ActAdmMrkGrp (ActRcvRchTxtCrsLnk+165) +#define ActReqRemFilMrkGrp (ActRcvRchTxtCrsLnk+166) +#define ActRemFilMrkGrp (ActRcvRchTxtCrsLnk+167) +#define ActRemFolMrkGrp (ActRcvRchTxtCrsLnk+168) +#define ActCopMrkGrp (ActRcvRchTxtCrsLnk+169) +#define ActPasMrkGrp (ActRcvRchTxtCrsLnk+170) +#define ActRemTreMrkGrp (ActRcvRchTxtCrsLnk+171) +#define ActFrmCreMrkGrp (ActRcvRchTxtCrsLnk+172) +#define ActCreFolMrkGrp (ActRcvRchTxtCrsLnk+173) +#define ActRenFolMrkGrp (ActRcvRchTxtCrsLnk+174) +#define ActRcvFilMrkGrpDZ (ActRcvRchTxtCrsLnk+175) +#define ActRcvFilMrkGrpCla (ActRcvRchTxtCrsLnk+176) +#define ActExpAdmMrkGrp (ActRcvRchTxtCrsLnk+177) +#define ActConAdmMrkGrp (ActRcvRchTxtCrsLnk+178) +#define ActZIPAdmMrkGrp (ActRcvRchTxtCrsLnk+179) +#define ActShoMrkGrp (ActRcvRchTxtCrsLnk+180) +#define ActHidMrkGrp (ActRcvRchTxtCrsLnk+181) +#define ActReqDatAdmMrkGrp (ActRcvRchTxtCrsLnk+182) +#define ActChgDatAdmMrkGrp (ActRcvRchTxtCrsLnk+183) +#define ActDowAdmMrkGrp (ActRcvRchTxtCrsLnk+184) +#define ActChgNumRowHeaGrp (ActRcvRchTxtCrsLnk+185) +#define ActChgNumRowFooGrp (ActRcvRchTxtCrsLnk+186) /*****************************************************************************/ /******************************* Users tab ***********************************/ diff --git a/swad_calendar.c b/swad_calendar.c index f9894f3f..bd4edd06 100644 --- a/swad_calendar.c +++ b/swad_calendar.c @@ -199,7 +199,7 @@ void Cal_DrawCurrentMonth (void) Txt_STR_LANG_ID[Gbl.Prefs.Language]); Act_SetParamsForm (ParamsStr,ActSeeCal,true); fprintf (Gbl.F.Out,"'%s',",ParamsStr); - Act_SetParamsForm (ParamsStr,ActSeeOneExaAnn,true); + Act_SetParamsForm (ParamsStr,ActSeeDatExaAnn,true); fprintf (Gbl.F.Out,"'%s');" "",ParamsStr); } @@ -269,7 +269,7 @@ void Cal_DrawCalendar (void) Act_SetParamsForm (ParamsStr,ActSeeCal,true); fprintf (Gbl.F.Out,"'%s',", ParamsStr); - Act_SetParamsForm (ParamsStr,ActSeeOneExaAnn,true); + Act_SetParamsForm (ParamsStr,ActSeeDatExaAnn,true); fprintf (Gbl.F.Out,"'%s');" "", ParamsStr); diff --git a/swad_changelog.h b/swad_changelog.h index 55c93700..a60a73bc 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -132,27 +132,31 @@ // TODO: Check value returned by setlocale in all calls // TODO: Write "Tab > Action" in title of text in most frequent actions // TODO: Fix bug in copy-paste from Briefcase to another file browser -// TODO: Fix bug: Asignatura: Arquitectura de Computadores, Crear ZIP de todos los trabajos del grupo C3 /*****************************************************************************/ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 15.216 (2016-06-01)" +#define Log_PLATFORM_VERSION "SWAD 15.217.1 (2016-06-01)" #define CSS_FILE "swad15.210.css" #define JS_FILE "swad15.216.js" // 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 /* - Version 15.216: Jun 01, 2016 When clicking on an exam announcement, it will be shown alone. (201751 lines) + Version 15.217.1: Jun 03, 2016 Fixed bug when creating zip file for students works, reported by Francisco Barranco Expósito. (201809 lines) + Version 15.217: Jun 01, 2016 When clicking on a social note associated to an exam announcement, show that exam announcement highlighted. (201801 lines) 1 change necessary in database: -INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1571','es','N','Ver convocatoria'); +INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1572','es','N','Ver convocatoria'); + + Version 15.216: Jun 01, 2016 When clicking on a day on calendar, all exam announcements in that day are shown highlighted. (201751 lines) + 1 change necessary in database: +INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1571','es','N','Ver convocatorias de una fecha'); Version 15.215: Jun 01, 2016 List exam announcements as a list, like notices. (201670 lines) Version 15.214: May 31, 2016 Fixed bug in renaming test tags. (201589 lines) Version 15.213: May 31, 2016 Code refactoring related to renaming test tags. - Fixed bug in dates reported by Christian A. Morillas Gutiérrez. (201581 lines) + Fixed bug in dates, reported by Christian A. Morillas Gutiérrez. (201581 lines) Version 15.212.9: May 30, 2016 Link to list institutions of country in country configuration. (201567 lines) Version 15.212.8: May 30, 2016 Link to list centres of institution in institution configuration. (201555 lines) Version 15.212.7: May 30, 2016 Link to list degrees of centre in centre configuration. (201547 lines) diff --git a/swad_exam.c b/swad_exam.c index ceee053a..ab33c4df 100644 --- a/swad_exam.c +++ b/swad_exam.c @@ -83,7 +83,6 @@ static void Exa_GetDataExamAnnouncementFromDB (long ExaCod); static void Exa_ShowExamAnnouncement (long ExaCod,Exa_TypeViewExamAnnouncement_t TypeViewExamAnnouncement); static void Exa_PutIconsExamAnnouncement (void); static void Exa_PutParamExaCodToEdit (void); -static void Exa_PutHiddenParamExaCod (long ExaCod); static long Exa_GetParamExaCod (void); static void Exa_GetNotifContentExamAnnouncement (char **ContentStr); @@ -423,10 +422,21 @@ static void Exa_ListExamAnnouncementsEdit (void) } /*****************************************************************************/ -/*************** Get exam announcement to show highlighted *******************/ +/*********** Get date of exam announcements to show highlighted **************/ /*****************************************************************************/ -void Exa_GetExaToShowHighlighted (void) +void Exa_GetExaCodToHighlight (void) + { + /***** Get the exam announcement code + of the exam announcement to highlight *****/ + Gbl.ExamAnnouncements.HighlightExaCod = Exa_GetParamExaCod (); + } + +/*****************************************************************************/ +/*********** Get date of exam announcements to show highlighted **************/ +/*****************************************************************************/ + +void Exa_GetDateToHighlight (void) { /***** Get the date (in YYYY-MM-DD format) of the exam announcements to highlight *****/ @@ -451,12 +461,49 @@ static void Exa_ListExamAnnouncements (Exa_TypeViewExamAnnouncement_t TypeViewEx bool ICanEdit = (Gbl.Usrs.Me.LoggedRole == Rol_TEACHER || Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM); - /***** Show highlighted exam announcement *****/ + /***** Show one highlighted exam announcement *****/ + if (Gbl.ExamAnnouncements.HighlightExaCod > 0) + { + /***** Get one exam announcement from database *****/ + sprintf (Query,"SELECT ExaCod" + " FROM exam_announcements" + " WHERE ExaCod='%ld' AND CrsCod='%ld' AND Status<>'%u'", + Gbl.ExamAnnouncements.HighlightExaCod, + Gbl.CurrentCrs.Crs.CrsCod, + (unsigned) Exa_DELETED_EXAM_ANNOUNCEMENT); + NumExaAnns = DB_QuerySELECT (Query,&mysql_res,"can not get exam announcements in this course for listing"); + + /***** List the existing exam announcements *****/ + for (NumExaAnn = 0; + NumExaAnn < NumExaAnns; + NumExaAnn++) + { + /***** Get the code of the exam announcement (row[0]) *****/ + row = mysql_fetch_row (mysql_res); + + if (sscanf (row[0],"%ld",&ExaCod) != 1) + Lay_ShowErrorAndExit ("Wrong code of exam announcement."); + + /***** Allocate memory for the exam announcement *****/ + Exa_AllocMemExamAnnouncement (); + + /***** Read the data of the exam announcement *****/ + Exa_GetDataExamAnnouncementFromDB (ExaCod); + + /***** Show exam announcement *****/ + Exa_ShowExamAnnouncement (ExaCod,TypeViewExamAnnouncement); + + /***** Free memory of the exam announcement *****/ + Exa_FreeMemExamAnnouncement (); + } + } + + /***** Show highlighted exam announcements of a date *****/ if (Gbl.ExamAnnouncements.HighlightDate[0]) { /***** Get exam announcements (the most recent first) in current course for a date from database *****/ - sprintf (Query,"SELECT ExaCod,ExamDate" + sprintf (Query,"SELECT ExaCod" " FROM exam_announcements" " WHERE CrsCod='%ld' AND Status<>'%u'" " AND DATE(ExamDate)='%s'" @@ -493,7 +540,7 @@ static void Exa_ListExamAnnouncements (Exa_TypeViewExamAnnouncement_t TypeViewEx /***** Get exam announcements (the most recent first) in current course from database *****/ - sprintf (Query,"SELECT ExaCod,ExamDate" + sprintf (Query,"SELECT ExaCod" " FROM exam_announcements" " WHERE CrsCod='%ld' AND Status<>'%u'" " ORDER BY ExamDate DESC", @@ -503,8 +550,9 @@ static void Exa_ListExamAnnouncements (Exa_TypeViewExamAnnouncement_t TypeViewEx /***** Start frame *****/ Lay_StartRoundFrame (NULL, - Gbl.ExamAnnouncements.HighlightDate[0] ? Txt_All_announcements_of_exam : - Txt_Announcements_of_exam, + (Gbl.ExamAnnouncements.HighlightExaCod > 0 || + Gbl.ExamAnnouncements.HighlightDate[0]) ? Txt_All_announcements_of_exam : + Txt_Announcements_of_exam, ICanEdit ? Exa_PutIconToCreateNewExamAnnouncement : NULL); @@ -1335,7 +1383,7 @@ static void Exa_PutParamExaCodToEdit (void) Exa_PutHiddenParamExaCod (Gbl.ExamAnnouncements.ExaCodToEdit); } -static void Exa_PutHiddenParamExaCod (long ExaCod) +void Exa_PutHiddenParamExaCod (long ExaCod) { Par_PutHiddenParamLong ("ExaCod",ExaCod); } diff --git a/swad_exam.h b/swad_exam.h index 6aa4fd8c..7cdedcdf 100644 --- a/swad_exam.h +++ b/swad_exam.h @@ -59,9 +59,11 @@ void Exa_FreeMemExamAnnouncement (void); void Exa_FreeListExamAnnouncements (void); void Exa_ListExamAnnouncementsSee (void); -void Exa_GetExaToShowHighlighted (void); +void Exa_GetExaCodToHighlight (void); +void Exa_GetDateToHighlight (void); void Exa_CreateListOfExamAnnouncements (void); +void Exa_PutHiddenParamExaCod (long ExaCod); void Exa_GetSummaryAndContentExamAnnouncement (char *SummaryStr,char **ContentStr, long ExaCod,unsigned MaxChars,bool GetContent); diff --git a/swad_file_browser.c b/swad_file_browser.c index 989be8dd..47046b40 100644 --- a/swad_file_browser.c +++ b/swad_file_browser.c @@ -3223,6 +3223,8 @@ static void Brw_ShowFileBrowsersAsgWrkCrs (void) Par_GetNextStrUntilSeparParamMult (&Ptr,UsrDat.EncryptedUsrCod, Cry_LENGTH_ENCRYPTED_STR_SHA256_BASE64); Usr_GetUsrCodFromEncryptedUsrCod (&UsrDat); + + if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat)) // Get user's data from database if (Usr_CheckIfUsrBelongsToCrs (UsrDat.UsrCod, Gbl.CurrentCrs.Crs.CrsCod, diff --git a/swad_global.c b/swad_global.c index 141efb92..a1cfaf55 100644 --- a/swad_global.c +++ b/swad_global.c @@ -196,6 +196,7 @@ void Gbl_InitializeGlobals (void) Gbl.ExamAnnouncements.NumExaAnns = 0; Gbl.ExamAnnouncements.Lst = NULL; + Gbl.ExamAnnouncements.HighlightExaCod = -1L; Gbl.ExamAnnouncements.HighlightDate[0] = '\0'; // No exam announcements highlighted Gbl.Usrs.Select.All = diff --git a/swad_global.h b/swad_global.h index 2e6ecddf..1e814f8c 100644 --- a/swad_global.h +++ b/swad_global.h @@ -482,6 +482,7 @@ struct Globals struct Date *Lst; // List of dates of exam announcements unsigned NumExaAnns; // Number of announcements of exam in the list long ExaCodToEdit; // Used as parameter in contextual links + long HighlightExaCod; // Exam announcement to be highlighted char HighlightDate[4+1+2+1+2+1]; // Date with exam announcements to be highlighted (in YYYY-MM-DD format) struct { diff --git a/swad_notice.c b/swad_notice.c index c21c55c0..b994d7fa 100644 --- a/swad_notice.c +++ b/swad_notice.c @@ -337,7 +337,7 @@ void Not_RemoveNotice (void) /********************* Get notice to show highlighted ************************/ /*****************************************************************************/ -void Not_GetNotToShowHighlighted (void) +void Not_GetNotCodToHighlight (void) { /***** Get the code of the notice to highlight *****/ Gbl.CurrentCrs.Notices.HighlightNotCod = Not_GetParamNotCod (); diff --git a/swad_notice.h b/swad_notice.h index 04945551..0858bfa9 100644 --- a/swad_notice.h +++ b/swad_notice.h @@ -66,7 +66,7 @@ void Not_RevealHiddenNotice (void); void Not_RequestRemNotice (void); void Not_RemoveNotice (void); -void Not_GetNotToShowHighlighted (void); +void Not_GetNotCodToHighlight (void); void Not_ShowNotices (Not_Listing_t TypeNoticesListing,bool ICanEdit); void Not_GetSummaryAndContentNotice (char *SummaryStr,char **ContentStr, long NotCod,unsigned MaxChars,bool GetContent); diff --git a/swad_social.c b/swad_social.c index 62920bd6..9c144728 100644 --- a/swad_social.c +++ b/swad_social.c @@ -1528,7 +1528,7 @@ static void Soc_PutFormGoToAction (const struct SocialNote *SocNot) ActReqDatShaCrs, // Soc_NOTE_CRS_SHA_PUB_FILE /* Assessment tab */ - ActSeeAllExaAnn, // Soc_NOTE_EXAM_ANNOUNCEMENT + ActSeeOneExaAnn, // Soc_NOTE_EXAM_ANNOUNCEMENT /* Users tab */ @@ -1629,7 +1629,7 @@ static void Soc_PutFormGoToAction (const struct SocialNote *SocNot) break; case Soc_NOTE_EXAM_ANNOUNCEMENT: Act_FormStartUnique (Soc_DefaultActions[SocNot->NoteType]); - Not_PutHiddenParamNotCod (SocNot->Cod); + Exa_PutHiddenParamExaCod (SocNot->Cod); if (SocNot->HieCod != Gbl.CurrentCrs.Crs.CrsCod) // Not the current course Crs_PutParamCrsCod (SocNot->HieCod); // Go to another course break; diff --git a/swad_zip.c b/swad_zip.c index d07d2995..a8b402ca 100644 --- a/swad_zip.c +++ b/swad_zip.c @@ -260,20 +260,28 @@ void ZIP_CreateDirCompressionUsr (struct UsrData *UsrDat) /***** Create a link in the tree of compression with a name that identifies the owner of the assignments and works *****/ - sprintf (FullNameAndUsrID,"%s%s%s%s%s%s", - UsrDat->Surname1 , - UsrDat->Surname1[0] ? "_" : - "", - UsrDat->Surname2 , - UsrDat->Surname2[0] ? "_" : - "", - UsrDat->FirstName, - UsrDat->FirstName[0] ? "-" : - ""); + /* Create link name for this user */ + strcpy (FullNameAndUsrID,UsrDat->Surname1); + if (UsrDat->Surname1[0] && + UsrDat->Surname2[0]) + strcat (FullNameAndUsrID,"_"); // Separation between surname 1 and surname 2 + strcat (FullNameAndUsrID,UsrDat->Surname2); + if ((UsrDat->Surname1[0] || + UsrDat->Surname2[0]) && + UsrDat->FirstName[0]) + strcat (FullNameAndUsrID,"_"); // Separation between surnames and first name + strcat (FullNameAndUsrID,UsrDat->FirstName); + if ((UsrDat->Surname1[0] || + UsrDat->Surname2[0] || + UsrDat->FirstName[0]) && + UsrDat->IDs.Num) + strcat (FullNameAndUsrID,"-"); // Separation between name and ID Str_LimitLengthHTMLStr (FullNameAndUsrID,50); - strcat (FullNameAndUsrID,UsrDat->IDs.List[0].ID); // First user's ID + if (UsrDat->IDs.Num) // If this user has at least one ID + strcat (FullNameAndUsrID,UsrDat->IDs.List[0].ID); // First user's ID Str_ConvertToValidFileName (FullNameAndUsrID); + /* Create path to folder and link */ sprintf (PathFolderUsrInsideCrs,"%s/usr/%02u/%ld", Gbl.CurrentCrs.PathPriv, (unsigned) (UsrDat->UsrCod % 100),