From c82388c3820d248ad55716ec1898302651a91c24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Thu, 5 May 2016 14:20:38 +0200 Subject: [PATCH] Version 15.209 --- swad_changelog.h | 3 +- swad_global.h | 5 ++ swad_record.c | 167 ++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 172 insertions(+), 3 deletions(-) diff --git a/swad_changelog.h b/swad_changelog.h index bcd77ee97..6524531bb 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -138,13 +138,14 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 15.208.6 (2016-05-05)" +#define Log_PLATFORM_VERSION "SWAD 15.209 (2016-05-05)" #define CSS_FILE "swad15.204.1.css" #define JS_FILE "swad15.197.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.209: May 05, 2016 Commands/shortcuts in record are cloned to top of window. (201614 lines) Version 15.208.6: May 05, 2016 Integrated "Configure" link in tests at top of window, near "Edit" icon. (201463 lines) Version 15.208.5: May 05, 2016 Changes in Statistics > Degrees. (201469 lines) Version 15.208.4: May 05, 2016 In Statistics > Degrees, show all degrees with students. (201458 lines) diff --git a/swad_global.h b/swad_global.h index 78ab7db49..e625aad21 100644 --- a/swad_global.h +++ b/swad_global.h @@ -401,6 +401,11 @@ struct Globals bool Error; // To signal that an error has happened const char *NicknameForQR; // Used as parameter in contextual links } Usrs; + struct + { + struct UsrData *UsrDat; + Rec_RecordViewType_t TypeOfView; + } Record; struct { Sco_Scope_t Current; diff --git a/swad_record.c b/swad_record.c index e7eb04846..8172531a0 100644 --- a/swad_record.c +++ b/swad_record.c @@ -83,6 +83,11 @@ static void Rec_ShowCrsRecord (Rec_RecordViewType_t TypeOfView,struct UsrData *U const char *Anchor); static void Rec_ShowMyCrsRecordUpdated (void); +static void Rec_PutIconsCommands (void); +static void Rec_PutParamUsrCodEncrypted (void); +static void Rec_PutParamsWorks (void); +static void Rec_PutParamsStudent (void); +static void Rec_PutParamsMsgUsr (void); static void Rec_ShowInstitutionInHead (struct Institution *Ins,bool PutFormLinks); static void Rec_ShowPhoto (struct UsrData *UsrDat); static void Rec_ShowCommands (struct UsrData *UsrDat, @@ -2066,7 +2071,12 @@ void Rec_ShowSharedUsrRecord (Rec_RecordViewType_t TypeOfView, /***** Start frame *****/ sprintf (StrRecordWidth,"%upx",Rec_RECORD_WIDTH); - Lay_StartRoundFrameTable (StrRecordWidth,2,NULL); + Gbl.Record.UsrDat = UsrDat; + Gbl.Record.TypeOfView = TypeOfView; + Lay_StartRoundFrame (StrRecordWidth,NULL,Rec_PutIconsCommands); + + /***** Start table *****/ + fprintf (Gbl.F.Out,""); /***** Institution and user's photo *****/ fprintf (Gbl.F.Out,""); @@ -2229,8 +2239,161 @@ void Rec_ShowSharedUsrRecord (Rec_RecordViewType_t TypeOfView, ""); } + /***** End table *****/ + fprintf (Gbl.F.Out,"
"); + /***** End frame *****/ - Lay_EndRoundFrameTable (); + Lay_EndRoundFrame (); + } + +/*****************************************************************************/ +/*********** Show commands (icon to make actions) in record card *************/ +/*****************************************************************************/ + +static void Rec_PutIconsCommands (void) + { + extern struct Act_Actions Act_Actions[Act_NUM_ACTIONS]; + extern const char *Txt_Edit; + extern const char *Txt_View_record_for_this_course; + extern const char *Txt_Admin_user; + extern const char *Txt_Write_a_message; + extern const char *Txt_View_works; + extern const char *Txt_See_exams; + extern const char *Txt_Attendance; + extern const char *Txt_Following_unfollow; + extern const char *Txt_Follow; + bool ItsMe = (Gbl.Usrs.Me.UsrDat.UsrCod == Gbl.Record.UsrDat->UsrCod); + bool IAmLoggedAsStudent = (Gbl.Usrs.Me.LoggedRole == Rol_STUDENT); // My current role is student + bool IAmLoggedAsTeacher = (Gbl.Usrs.Me.LoggedRole == Rol_TEACHER); // My current role is teacher + bool IAmLoggedAsSysAdm = (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM); // My current role is superuser + bool HeBelongsToCurrentCrs = (Gbl.Record.UsrDat->RoleInCurrentCrsDB == Rol_STUDENT || + Gbl.Record.UsrDat->RoleInCurrentCrsDB == Rol_TEACHER); + + if (!Gbl.Form.Inside && // Only if not inside another form + Act_Actions[Gbl.Action.Act].BrowserWindow == Act_MAIN_WINDOW && // Only in main window + Gbl.Usrs.Me.Logged) // Only if I am logged + { + fprintf (Gbl.F.Out,"
"); + + /***** Button to edit my record card *****/ + if (ItsMe) + Lay_PutContextualLink (ActReqEdiRecCom,NULL,"edit64x64.png", + Txt_Edit,NULL); + + /***** Button to view user's record card in course when: + - a course is selected && the user belongs to it && + - I can view user's record card in course *****/ + if (HeBelongsToCurrentCrs && + (IAmLoggedAsStudent || + IAmLoggedAsTeacher || + IAmLoggedAsSysAdm)) + Lay_PutContextualLink (Gbl.Record.UsrDat->RoleInCurrentCrsDB == Rol_STUDENT ? ActSeeRecOneStd : + ActSeeRecOneTch, + Rec_PutParamUsrCodEncrypted, + "card64x64.gif", + Txt_View_record_for_this_course,NULL); + + /***** Button to admin user *****/ + if (ItsMe || + (Gbl.CurrentCrs.Crs.CrsCod > 0 && Gbl.Usrs.Me.LoggedRole == Rol_TEACHER) || + (Gbl.CurrentDeg.Deg.DegCod > 0 && Gbl.Usrs.Me.LoggedRole == Rol_DEG_ADM) || + (Gbl.CurrentCtr.Ctr.CtrCod > 0 && Gbl.Usrs.Me.LoggedRole == Rol_CTR_ADM) || + (Gbl.CurrentIns.Ins.InsCod > 0 && Gbl.Usrs.Me.LoggedRole == Rol_INS_ADM) || + Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM) + Lay_PutContextualLink ( Gbl.Record.UsrDat->RoleInCurrentCrsDB == Rol_STUDENT ? ActReqMdfStd : + (Gbl.Record.UsrDat->RoleInCurrentCrsDB == Rol_TEACHER ? ActReqMdfTch : + ActReqMdfOth), + Rec_PutParamUsrCodEncrypted, + "config64x64.gif", + Txt_Admin_user,NULL); + + if (Gbl.CurrentCrs.Crs.CrsCod > 0 && // A course is selected + Gbl.Record.UsrDat->RoleInCurrentCrsDB == Rol_STUDENT && // He/she is a student in the current course + (ItsMe || IAmLoggedAsTeacher || IAmLoggedAsSysAdm)) // I can view + { + /***** Button to view user's assignments and works *****/ + if (ItsMe) // I am a student + Lay_PutContextualLink (ActAdmAsgWrkUsr,NULL, + "folder64x64.gif", + Txt_View_works,NULL); + else // I am a teacher or superuser + Lay_PutContextualLink (ActAdmAsgWrkCrs,Rec_PutParamsWorks, + "folder64x64.gif", + Txt_View_works,NULL); + + /***** Button to view user's test exams *****/ + if (ItsMe) + Lay_PutContextualLink (ActSeeMyTstExa,NULL, + "file64x64.gif", + Txt_See_exams,NULL); + else + Lay_PutContextualLink (ActSeeUsrTstExa,Rec_PutParamsStudent, + "file64x64.gif", + Txt_See_exams,NULL); + + /***** Button to view user's attendance *****/ + if (IAmLoggedAsStudent || + IAmLoggedAsTeacher || + IAmLoggedAsSysAdm) + { + if (IAmLoggedAsStudent) + // As student, I can see my attendance + Lay_PutContextualLink (ActSeeLstMyAtt,NULL, + "rollcall64x64.gif", + Txt_Attendance,NULL); + else // IAmLoggedAsTeacher || IAmLoggedAsSysAdm + // As teacher, I can see attendance of the student + Lay_PutContextualLink (ActSeeLstStdAtt,Rec_PutParamsStudent, + "rollcall64x64.gif", + Txt_Attendance,NULL); + } + } + + /***** Button to send a message *****/ + Lay_PutContextualLink (ActReqMsgUsr,Rec_PutParamsMsgUsr, + "msg64x64.gif", + Txt_Write_a_message,NULL); + + /***** Button to follow / unfollow *****/ + if (Gbl.Record.TypeOfView == Rec_RECORD_PUBLIC && + !ItsMe) + { + if (Fol_CheckUsrIsFollowerOf (Gbl.Usrs.Me.UsrDat.UsrCod,Gbl.Record.UsrDat->UsrCod)) // I follow user + Lay_PutContextualLink (ActUnfUsr,Rec_PutParamUsrCodEncrypted, + "following64x64.png", + Txt_Following_unfollow,NULL); + else // I do not follow user + Lay_PutContextualLink (ActFolUsr,Rec_PutParamUsrCodEncrypted, + "follow64x64.png", + Txt_Follow,NULL); + } + + fprintf (Gbl.F.Out,"
"); + } + } + +static void Rec_PutParamUsrCodEncrypted (void) + { + Usr_PutParamUsrCodEncrypted (Gbl.Record.UsrDat->EncryptedUsrCod); + } + +static void Rec_PutParamsWorks (void) + { + Rec_PutParamsStudent (); + Par_PutHiddenParamChar ("FullTree",'Y'); // By default, show all files + } + +static void Rec_PutParamsStudent (void) + { + Par_PutHiddenParamString ("UsrCodStd",Gbl.Record.UsrDat->EncryptedUsrCod); + Grp_PutParamAllGroups (); + } + +static void Rec_PutParamsMsgUsr (void) + { + Rec_PutParamUsrCodEncrypted (); + Grp_PutParamAllGroups (); + Par_PutHiddenParamChar ("ShowOnlyOneRecipient",'Y'); } /*****************************************************************************/