diff --git a/sql/swad.sql b/sql/swad.sql index 14f429a7e..eadf81098 100644 --- a/sql/swad.sql +++ b/sql/swad.sql @@ -41,14 +41,14 @@ CREATE TABLE IF NOT EXISTS actions_MFU ( CREATE TABLE IF NOT EXISTS agendas ( AgdCod INT NOT NULL AUTO_INCREMENT, UsrCod INT NOT NULL, - Hidden ENUM('N','Y') NOT NULL DEFAULT 'N', + Public ENUM('N','Y') NOT NULL DEFAULT 'N', StartTime DATETIME NOT NULL, EndTime DATETIME NOT NULL, Event VARCHAR(255) NOT NULL, Location VARCHAR(255) NOT NULL, Txt TEXT NOT NULL, UNIQUE INDEX(AgdCod), - INDEX(UsrCod,Hidden)); + INDEX(UsrCod,Public)); -- -- Table ann_seen: stores users who have seen global announcements -- diff --git a/swad_action.c b/swad_action.c index 3dc931d7c..e37da6c8e 100644 --- a/swad_action.c +++ b/swad_action.c @@ -2778,11 +2778,11 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = /* ActFrmRolSes */{ 843, 1,TabPrf,ActFrmRolSes ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Usr_WriteFormLogout ,"keyuser64x64.gif" }, /* ActMyCrs */{ 987, 2,TabPrf,ActMyCrs ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Crs_ReqSelectOneOfMyCourses ,"mygroups64x64.gif" }, /* ActSeeMyTT */{ 408, 3,TabPrf,ActSeeMyTT ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,TT_ShowClassTimeTable ,"clock64x64.gif" }, - /* ActSeeMyAgd */{1602, 5,TabPrf,ActSeeMyAgd ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Agd_ShowMyAgenda ,"date64x64.gif" }, - /* ActFrmMyAcc */{ 36, 6,TabPrf,ActFrmMyAcc ,0x1FF,0x1FF,0x1FF,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Acc_ShowFormMyAccount ,"arroba64x64.gif" }, - /* ActReqEdiRecCom */{ 285, 7,TabPrf,ActReqEdiRecCom ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Rec_ShowFormMySharedRecord ,"card64x64.gif" }, - /* ActEdiPrf */{ 673, 8,TabPrf,ActEdiPrf ,0x1FF,0x1FF,0x1FF,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Pre_EditPrefs ,"heart64x64.gif" }, - /* ActAdmBrf */{ 23, 9,TabPrf,ActAdmBrf ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Brw_ShowFileBrowserOrWorks ,"pendrive64x64.gif" }, + /* ActSeeMyAgd */{1602, 4,TabPrf,ActSeeMyAgd ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Agd_ShowMyAgenda ,"date64x64.gif" }, + /* ActFrmMyAcc */{ 36, 5,TabPrf,ActFrmMyAcc ,0x1FF,0x1FF,0x1FF,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Acc_ShowFormMyAccount ,"arroba64x64.gif" }, + /* ActReqEdiRecCom */{ 285, 6,TabPrf,ActReqEdiRecCom ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Rec_ShowFormMySharedRecord ,"card64x64.gif" }, + /* ActEdiPrf */{ 673, 7,TabPrf,ActEdiPrf ,0x1FF,0x1FF,0x1FF,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Pre_EditPrefs ,"heart64x64.gif" }, + /* ActAdmBrf */{ 23, 8,TabPrf,ActAdmBrf ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Brw_ShowFileBrowserOrWorks ,"pendrive64x64.gif" }, // Actions not in menu: /* ActReqSndNewPwd */{ 665,-1,TabUnk,ActFrmLogIn ,0x000,0x001,0x001,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Pwd_ShowFormSendNewPwd ,NULL}, @@ -2801,8 +2801,8 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = /* ActChgEvtMyAgd */{1606,-1,TabUnk,ActSeeMyAgd ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Agd_RecFormEvent ,NULL}, /* ActReqRemEvtMyAgd */{1607,-1,TabUnk,ActSeeMyAgd ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Agd_AskRemEvent ,NULL}, /* ActRemEvtMyAgd */{1608,-1,TabUnk,ActSeeMyAgd ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Agd_RemoveEvent ,NULL}, - /* ActHidEvtMyAgd */{1609,-1,TabUnk,ActSeeMyAgd ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Agd_HideEvent ,NULL}, - /* ActShoEvtMyAgd */{1610,-1,TabUnk,ActSeeMyAgd ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Agd_ShowEvent ,NULL}, + /* ActHidEvtMyAgd */{1609,-1,TabUnk,ActSeeMyAgd ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Agd_SetEventPrivate ,NULL}, + /* ActShoEvtMyAgd */{1610,-1,TabUnk,ActSeeMyAgd ,0x1FE,0x1FE,0x1FE,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Agd_SetEventPublic ,NULL}, /* ActChkUsrAcc */{1584,-1,TabUnk,ActFrmMyAcc ,0x1FF,0x1FF,0x1FF,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Acc_CheckIfEmptyAccountExists ,NULL}, /* ActCreUsrAcc */{1163,-1,TabUnk,ActFrmMyAcc ,0x1FF,0x1FF,0x1FF,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Acc_AfterCreationNewAccount ,NULL}, diff --git a/swad_agenda.c b/swad_agenda.c index 046e77aa1..fa3a4ad0a 100644 --- a/swad_agenda.c +++ b/swad_agenda.c @@ -78,7 +78,7 @@ static void Agd_ShowOneEvent (Agd_AgendaType_t AgendaType,long AgdCod); static void Agd_WriteEventAuthor (struct AgendaEvent *AgdEvent); static void Agd_GetParamEventOrderType (void); -static void Agd_PutFormsToRemEditOneEvent (long AgdCod,bool Hidden); +static void Agd_PutFormsToRemEditOneEvent (long AgdCod,bool Public); static void Agd_PutParams (void); static void Agd_GetListEvents (Agd_AgendaType_t AgendaType); static void Agd_GetDataOfEventByCod (struct AgendaEvent *AgdEvent); @@ -315,8 +315,8 @@ static void Agd_ShowOneEvent (Agd_AgendaType_t AgendaType,long AgdCod) "" "", UniqueId, - AgdEvent.Hidden ? Dat_TimeStatusClassHidden[AgdEvent.TimeStatus] : - Dat_TimeStatusClassVisible[AgdEvent.TimeStatus], + AgdEvent.Public ? Dat_TimeStatusClassVisible[AgdEvent.TimeStatus] : + Dat_TimeStatusClassHidden[AgdEvent.TimeStatus], Gbl.RowEvenOdd, UniqueId,AgdEvent.TimeUTC[Agd_START_TIME],Txt_Today); @@ -328,8 +328,8 @@ static void Agd_ShowOneEvent (Agd_AgendaType_t AgendaType,long AgdCod) "" "", UniqueId, - AgdEvent.Hidden ? Dat_TimeStatusClassHidden[AgdEvent.TimeStatus] : - Dat_TimeStatusClassVisible[AgdEvent.TimeStatus], + AgdEvent.Public ? Dat_TimeStatusClassVisible[AgdEvent.TimeStatus] : + Dat_TimeStatusClassHidden[AgdEvent.TimeStatus], Gbl.RowEvenOdd, UniqueId,AgdEvent.TimeUTC[Agd_END_TIME],Txt_Today); @@ -338,8 +338,8 @@ static void Agd_ShowOneEvent (Agd_AgendaType_t AgendaType,long AgdCod) "
%s
" "", Gbl.RowEvenOdd, - AgdEvent.Hidden ? "ASG_TITLE_LIGHT" : - "ASG_TITLE", + AgdEvent.Public ? "ASG_TITLE" : + "ASG_TITLE_LIGHT", AgdEvent.Event); /* Event */ @@ -348,8 +348,8 @@ static void Agd_ShowOneEvent (Agd_AgendaType_t AgendaType,long AgdCod) "" "", Gbl.RowEvenOdd, - AgdEvent.Hidden ? "ASG_TITLE_LIGHT" : - "ASG_TITLE", + AgdEvent.Public ? "ASG_TITLE" : + "ASG_TITLE_LIGHT", AgdEvent.Location); /***** Write second row of data of this event *****/ @@ -362,7 +362,7 @@ static void Agd_ShowOneEvent (Agd_AgendaType_t AgendaType,long AgdCod) /* Forms to remove/edit this event */ if (AgendaType == Agd_MY_AGENDA) - Agd_PutFormsToRemEditOneEvent (AgdEvent.AgdCod,AgdEvent.Hidden); + Agd_PutFormsToRemEditOneEvent (AgdEvent.AgdCod,AgdEvent.Public); fprintf (Gbl.F.Out,""); @@ -379,8 +379,8 @@ static void Agd_ShowOneEvent (Agd_AgendaType_t AgendaType,long AgdCod) "

" "" "", - AgdEvent.Hidden ? "DAT_LIGHT" : - "DAT", + AgdEvent.Public ? "DAT" : + "DAT_LIGHT", Txt); Gbl.RowEvenOdd = 1 - Gbl.RowEvenOdd; @@ -422,8 +422,8 @@ static void Agd_WriteEventAuthor (struct AgendaEvent *AgdEvent) Str_LimitLengthHTMLStr (FirstName,9); Str_LimitLengthHTMLStr (Surnames,9); fprintf (Gbl.F.Out,"%s %s", - AgdEvent->Hidden ? "MSG_AUT_LIGHT" : - "MSG_AUT", + AgdEvent->Public ? "MSG_AUT" : + "MSG_AUT_LIGHT", FirstName,Surnames); /***** Free memory used for user's data *****/ @@ -459,7 +459,7 @@ void Agd_PutHiddenParamEventsOrderType (void) /******************* Put a link (form) to edit one event *********************/ /*****************************************************************************/ -static void Agd_PutFormsToRemEditOneEvent (long AgdCod,bool Hidden) +static void Agd_PutFormsToRemEditOneEvent (long AgdCod,bool Public) { extern const char *Txt_Remove; extern const char *Txt_Event_private_click_to_make_it_visible_to_the_users_of_your_courses; @@ -476,24 +476,27 @@ static void Agd_PutFormsToRemEditOneEvent (long AgdCod,bool Hidden) Txt_Remove,NULL, NULL); - /***** Put form to hide/show event *****/ - if (Hidden) - Lay_PutContextualLink (ActShoEvtMyAgd,Agd_PutParams, - "closed_on16x16.gif", - Txt_Event_private_click_to_make_it_visible_to_the_users_of_your_courses,NULL, - NULL); - else - Lay_PutContextualLink (ActHidEvtMyAgd,Agd_PutParams, - "open_on16x16.gif", - Txt_Event_visible_to_the_users_of_your_courses_click_to_make_it_private,NULL, - NULL); - /***** Put form to edit event *****/ Lay_PutContextualLink (ActEdiOneEvtMyAgd,Agd_PutParams, "edit64x64.png", Txt_Edit,NULL, NULL); + /***** Put form to hide/show event *****/ + if (Gbl.Usrs.Me.AvailableRoles & (1 << Rol_TEACHER)) // I am a teacher in some courses + { + if (Public) + Lay_PutContextualLink (ActHidEvtMyAgd,Agd_PutParams, + "open_on16x16.gif", + Txt_Event_visible_to_the_users_of_your_courses_click_to_make_it_private,NULL, + NULL); + else + Lay_PutContextualLink (ActShoEvtMyAgd,Agd_PutParams, + "closed_on16x16.gif", + Txt_Event_private_click_to_make_it_visible_to_the_users_of_your_courses,NULL, + NULL); + } + fprintf (Gbl.F.Out,""); } @@ -539,8 +542,8 @@ static void Agd_GetListEvents (Agd_AgendaType_t AgendaType) case Agd_USR_AGENDA: sprintf (Query,"SELECT AgdCod" " FROM agendas" - " WHERE UsrCod='%ld' AND Hidden='N'" - " AND EndTime>NOW()" // Only not obsolete events + " WHERE UsrCod='%ld' AND Public='Y'" + " AND EndTime>NOW()" // Only present and future events " ORDER BY %s", Gbl.Usrs.Other.UsrDat.UsrCod,OrderBySubQuery); break; @@ -591,7 +594,7 @@ static void Agd_GetDataOfEventByCod (struct AgendaEvent *AgdEvent) char Query[1024]; /***** Build query *****/ - sprintf (Query,"SELECT AgdCod,UsrCod,Hidden," + sprintf (Query,"SELECT AgdCod,UsrCod,Public," "UNIX_TIMESTAMP(StartTime)," "UNIX_TIMESTAMP(EndTime)," "NOW()>EndTime," // Past event? @@ -618,7 +621,7 @@ static void Agd_GetDataOfEvent (struct AgendaEvent *AgdEvent,const char *Query) /***** Clear all event data *****/ AgdEvent->AgdCod = -1L; AgdEvent->UsrCod = -1L; - AgdEvent->Hidden = false; + AgdEvent->Public = false; AgdEvent->TimeUTC[Agd_START_TIME] = AgdEvent->TimeUTC[Agd_END_TIME ] = (time_t) 0; AgdEvent->TimeStatus = Dat_FUTURE; @@ -633,7 +636,7 @@ static void Agd_GetDataOfEvent (struct AgendaEvent *AgdEvent,const char *Query) /* Get row: row[0] AgdCod row[1] UsrCod - row[2] Hidden + row[2] Public row[3] UNIX_TIMESTAMP(StartTime) row[4] UNIX_TIMESTAMP(EndTime) row[5] NOW()>EndTime // Past event? @@ -649,8 +652,8 @@ static void Agd_GetDataOfEvent (struct AgendaEvent *AgdEvent,const char *Query) /* Get author of the event (row[1]) */ AgdEvent->UsrCod = Str_ConvertStrCodToLongCod (row[1]); - /* Get whether the event is hidden or not (row[2]) */ - AgdEvent->Hidden = (row[2][0] == 'Y'); + /* Get whether the event is public or not (row[2]) */ + AgdEvent->Public = (row[2][0] == 'Y'); /* Get start date (row[3] holds the start UTC time) */ AgdEvent->TimeUTC[Agd_START_TIME] = Dat_GetUNIXTimeFromStr (row[3]); @@ -818,10 +821,10 @@ void Agd_RemoveEvent (void) } /*****************************************************************************/ -/********************* Hide an event (make it private) ***********************/ +/****************************** Set event private ****************************/ /*****************************************************************************/ -void Agd_HideEvent (void) +void Agd_SetEventPrivate (void) { extern const char *Txt_Event_X_is_now_private; char Query[512]; @@ -835,11 +838,11 @@ void Agd_HideEvent (void) AgdEvent.UsrCod = Gbl.Usrs.Me.UsrDat.UsrCod; Agd_GetDataOfEventByCod (&AgdEvent); - /***** Hide event *****/ - sprintf (Query,"UPDATE agendas SET Hidden='Y'" + /***** Set event private *****/ + sprintf (Query,"UPDATE agendas SET Public='N'" " WHERE AgdCod='%ld' AND UsrCod='%ld'", AgdEvent.AgdCod,Gbl.Usrs.Me.UsrDat.UsrCod); - DB_QueryUPDATE (Query,"can not hide event"); + DB_QueryUPDATE (Query,"can not set event as private"); /***** Write message to show the change made *****/ sprintf (Gbl.Message,Txt_Event_X_is_now_private,AgdEvent.Event); @@ -850,10 +853,10 @@ void Agd_HideEvent (void) } /*****************************************************************************/ -/********* Show an event (make it viewable to users of my courses) ***********/ +/********* Set event public (make it visible to users of my courses) *********/ /*****************************************************************************/ -void Agd_ShowEvent (void) +void Agd_SetEventPublic (void) { extern const char *Txt_Event_X_is_now_visible_to_users_of_your_courses; char Query[256]; @@ -867,8 +870,8 @@ void Agd_ShowEvent (void) AgdEvent.UsrCod = Gbl.Usrs.Me.UsrDat.UsrCod; Agd_GetDataOfEventByCod (&AgdEvent); - /***** Hide event *****/ - sprintf (Query,"UPDATE agendas SET Hidden='N'" + /***** Set event public *****/ + sprintf (Query,"UPDATE agendas SET Public='Y'" " WHERE AgdCod='%ld' AND UsrCod='%ld'", AgdEvent.AgdCod,Gbl.Usrs.Me.UsrDat.UsrCod); DB_QueryUPDATE (Query,"can not show event"); diff --git a/swad_agenda.h b/swad_agenda.h index 5e99e94a2..d1151a72e 100644 --- a/swad_agenda.h +++ b/swad_agenda.h @@ -47,7 +47,7 @@ typedef enum struct AgendaEvent { long AgdCod; - bool Hidden; + bool Public; long UsrCod; time_t TimeUTC[Agd_NUM_DATES]; Dat_TimeStatus_t TimeStatus; @@ -77,8 +77,8 @@ void Agd_FreeListEvents (void); long Agd_GetParamAgdCod (void); void Agd_AskRemEvent (void); void Agd_RemoveEvent (void); -void Agd_HideEvent (void); -void Agd_ShowEvent (void); +void Agd_SetEventPrivate (void); +void Agd_SetEventPublic (void); void Agd_RecFormEvent (void); void Agd_RemoveUsrEvents (long UsrCod); unsigned Agd_GetNumEventsFromUsr (long UsrCod); diff --git a/swad_changelog.h b/swad_changelog.h index 950ff3767..954b9b3b7 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -187,13 +187,22 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 16.82.2 (2016-12-02)" +#define Log_PLATFORM_VERSION "SWAD 16.83 (2016-12-03)" #define CSS_FILE "swad16.82.2.css" #define JS_FILE "swad16.46.1.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 16.83: Dec 03, 2016 Change in layout of agenda. + Agenda events are private by default. (? lines) + 5 changes necessary in database: +ALTER TABLE agendas ADD COLUMN Public ENUM('N','Y') NOT NULL DEFAULT 'N' AFTER Hidden; +UPDATE agendas SET Public='Y' WHERE Hidden='N'; +DROP INDEX UsrCod ON agendas; +ALTER TABLE agendas DROP COLUMN Hidden; +ALTER TABLE agendas ADD INDEX(UsrCod,Public); + Version 16.82.2: Dec 02, 2016 Changes in colors of dates in agenda. Default order of events in agenda now is "by end date". (209477 lines) Version 16.82.1: Dec 02, 2016 Changes in another user's agenda. (209450 lines) diff --git a/swad_database.c b/swad_database.c index 0aa5b55d2..7fc4dbdb1 100644 --- a/swad_database.c +++ b/swad_database.c @@ -222,7 +222,7 @@ mysql> DESCRIBE agendas; +-----------+---------------+------+-----+---------+----------------+ | AgdCod | int(11) | NO | PRI | NULL | auto_increment | | UsrCod | int(11) | NO | MUL | NULL | | -| Hidden | enum('N','Y') | NO | | N | | +| Public | enum('N','Y') | NO | | N | | | StartTime | datetime | NO | | NULL | | | EndTime | datetime | NO | | NULL | | | Event | varchar(255) | NO | | NULL | | @@ -234,14 +234,14 @@ mysql> DESCRIBE agendas; DB_CreateTable ("CREATE TABLE IF NOT EXISTS agendas (" "AgdCod INT NOT NULL AUTO_INCREMENT," "UsrCod INT NOT NULL," - "Hidden ENUM('N','Y') NOT NULL DEFAULT 'N'," + "Public ENUM('N','Y') NOT NULL DEFAULT 'N'," "StartTime DATETIME NOT NULL," "EndTime DATETIME NOT NULL," "Event VARCHAR(255) NOT NULL," "Location VARCHAR(255) NOT NULL," "Txt TEXT NOT NULL," "UNIQUE INDEX(AgdCod)," - "INDEX(UsrCod,Hidden))"); + "INDEX(UsrCod,Public))"); /***** Table asg_grp *****/ /*