From dd0e89f8a6eec83cb502679dc7b30ff677d46996 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Fri, 22 Apr 2016 12:39:36 +0200 Subject: [PATCH] Version 15.201.2 --- swad_changelog.h | 3 +- swad_record.c | 515 +++++++++++++++++++++++++---------------------- 2 files changed, 278 insertions(+), 240 deletions(-) diff --git a/swad_changelog.h b/swad_changelog.h index db96f9fd6..902368ae1 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -137,13 +137,14 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 15.201.1 (2016-04-22)" +#define Log_PLATFORM_VERSION "SWAD 15.201.2 (2016-04-22)" #define CSS_FILE "swad15.198.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.201.2: Apr 22, 2016 Code refactoring in record card. (200806 lines) Version 15.201.1: Apr 22, 2016 Code refactoring in record card. (200778 lines) Version 15.201: Apr 21, 2016 New private file zone for the teachers who belong to a course. (200768 lines) 50 changes necessary in database: diff --git a/swad_record.c b/swad_record.c index 29e738957..877fc5f99 100644 --- a/swad_record.c +++ b/swad_record.c @@ -85,6 +85,10 @@ static void Rec_ShowCrsRecord (Rec_RecordViewType_t TypeOfView,struct UsrData *U static void Rec_ShowMyCrsRecordUpdated (void); static void Rec_ShowInstitution (struct Institution *Ins,bool PutFormLinks); +static void Rec_ShowPhoto (struct UsrData *UsrDat); +static void Rec_ShowCommands (struct UsrData *UsrDat, + Rec_RecordViewType_t TypeOfView, + bool PutFormLinks); static void Rec_WriteLinkToDataProtectionClause (void); @@ -1948,18 +1952,7 @@ void Rec_ShowSharedUsrRecord (Rec_RecordViewType_t TypeOfView, { extern const char *Usr_StringsSexDB[Usr_NUM_SEXS]; extern const char *The_ClassForm[The_NUM_THEMES]; - extern const char *Txt_Edit_my_personal_data; - extern const char *Txt_Edit; - extern const char *Txt_View_record_for_this_course; - extern const char *Txt_Admin_user; extern const char *Txt_ID; - 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_Unfollow; - extern const char *Txt_Follow; extern const char *Txt_View_public_profile; extern const char *Txt_Email; extern const char *Txt_Sex; @@ -1987,14 +1980,10 @@ void Rec_ShowSharedUsrRecord (Rec_RecordViewType_t TypeOfView, char StrRecordWidth[10+1]; const char *ClassForm = "REC_DAT"; char Name[Usr_MAX_BYTES_NAME+1]; // To shorten length of FirstName, Surname1, Surname2 - char PhotoURL[PATH_MAX+1]; bool ItsMe = (Gbl.Usrs.Me.UsrDat.UsrCod == 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 HeIsTeacherInAnyCourse = (UsrDat->Roles & (1 << Rol_TEACHER)); // He/she already is a teacher in any course - bool HeBelongsToCurrentCrs = (UsrDat->RoleInCurrentCrsDB == Rol_STUDENT || - UsrDat->RoleInCurrentCrsDB == Rol_TEACHER); bool CountryForm = (TypeOfView == Rec_FORM_MY_COMMON_RECORD); bool RoleForm = (TypeOfView == Rec_FORM_SIGN_UP || TypeOfView == Rec_FORM_NEW_RECORD_OTHER_NEW_USR || @@ -2053,7 +2042,6 @@ void Rec_ShowSharedUsrRecord (Rec_RecordViewType_t TypeOfView, Usr_Sex_t Sex; Rol_Role_t Role; Rol_Role_t DefaultRoleInCurrentCrs; - bool ShowPhoto; unsigned NumCty; struct Institution Ins; struct Centre Ctr; @@ -2085,237 +2073,27 @@ void Rec_ShowSharedUsrRecord (Rec_RecordViewType_t TypeOfView, sprintf (StrRecordWidth,"%upx",Rec_RECORD_WIDTH); Lay_StartRoundFrameTable (StrRecordWidth,2,NULL); - /***** Institution *****/ + /***** Institution and user's photo *****/ fprintf (Gbl.F.Out,""); + + /* Institution */ Ins.InsCod = UsrDat->InsCod; if (Ins.InsCod > 0) Ins_GetDataOfInstitutionByCod (&Ins,Ins_GET_BASIC_DATA); Rec_ShowInstitution (&Ins,PutFormLinks); - /***** Photo *****/ - ShowPhoto = Pho_ShowUsrPhotoIsAllowed (UsrDat,PhotoURL); - fprintf (Gbl.F.Out,"", - Rec_C3_TOP); - Pho_ShowUsrPhoto (UsrDat,ShowPhoto ? PhotoURL : - NULL, - "PHOTO186x248",Pho_NO_ZOOM,false); - fprintf (Gbl.F.Out,"" - ""); + /* User's photo */ + Rec_ShowPhoto (UsrDat); - /***** Commands *****/ - fprintf (Gbl.F.Out,"" - "", - Rec_C1_TOP); + fprintf (Gbl.F.Out,""); - if (PutFormLinks && Gbl.Usrs.Me.Logged) - { - fprintf (Gbl.F.Out,"
"); + /***** Commands and full name *****/ + fprintf (Gbl.F.Out,""); - /***** Button to edit my record card *****/ - if (ItsMe) - { - Act_FormStart (ActReqEdiRecCom); - Act_LinkFormSubmit (Txt_Edit_my_personal_data,NULL); - fprintf (Gbl.F.Out,"
" - "\"%s\"" - "
" - "", - Gbl.Prefs.IconsURL, - Txt_Edit,Txt_Edit); - Act_FormEnd (); - } + /* Commands */ + Rec_ShowCommands (UsrDat,TypeOfView,PutFormLinks); - /***** 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)) - { - Act_FormStart (UsrDat->RoleInCurrentCrsDB == Rol_STUDENT ? ActSeeRecOneStd : - ActSeeRecOneTch); - Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod); - Act_LinkFormSubmit (Txt_View_record_for_this_course,NULL); - fprintf (Gbl.F.Out,"
" - "\"%s\"" - "
" - "", - Gbl.Prefs.IconsURL, - Txt_View_record_for_this_course, - Txt_View_record_for_this_course); - Act_FormEnd (); - } - - /***** 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) - { - Act_FormStart ( UsrDat->RoleInCurrentCrsDB == Rol_STUDENT ? ActReqMdfStd : - (UsrDat->RoleInCurrentCrsDB == Rol_TEACHER ? ActReqMdfTch : - ActReqMdfOth)); - Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod); - Act_LinkFormSubmit (Txt_Admin_user,NULL); - fprintf (Gbl.F.Out,"
" - "\"%s\"" - "
" - "", - Gbl.Prefs.IconsURL, - Txt_Admin_user,Txt_Admin_user); - Act_FormEnd (); - } - - if (Gbl.CurrentCrs.Crs.CrsCod > 0 && // A course is selected - 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 - Act_FormStart (ActAdmAsgWrkUsr); - else // I am a teacher or superuser - { - Act_FormStart (ActAdmAsgWrkCrs); - Par_PutHiddenParamString ("UsrCodStd",UsrDat->EncryptedUsrCod); - } - Grp_PutParamAllGroups (); - Par_PutHiddenParamChar ("FullTree",'Y'); // By default, show all files - Act_LinkFormSubmit (Txt_View_works,"REC_DAT_BOLD"); - fprintf (Gbl.F.Out,"
" - "\"%s\"" - "
" - "", - Gbl.Prefs.IconsURL, - Txt_View_works,Txt_View_works); - Act_FormEnd (); - - /***** Button to view user's test exams *****/ - if (ItsMe) - Act_FormStart (ActSeeMyTstExa); - else - { - Act_FormStart (ActSeeUsrTstExa); - Par_PutHiddenParamString ("UsrCodStd",UsrDat->EncryptedUsrCod); - } - Grp_PutParamAllGroups (); - Act_LinkFormSubmit (Txt_See_exams,"REC_DAT_BOLD"); - fprintf (Gbl.F.Out,"
" - "\"%s\"" - "
" - "", - Gbl.Prefs.IconsURL, - Txt_See_exams,Txt_See_exams); - Act_FormEnd (); - - /***** Button to view user's attendance *****/ - if (IAmLoggedAsStudent || - IAmLoggedAsTeacher || - IAmLoggedAsSysAdm) - { - if (IAmLoggedAsStudent) - // As student, I can see my attendance - Act_FormStart (ActSeeLstMyAtt); - else // IAmLoggedAsTeacher || IAmLoggedAsSysAdm - { - // As teacher, I can see attendance of the student - Act_FormStart (ActSeeLstStdAtt); - Par_PutHiddenParamString ("UsrCodStd",UsrDat->EncryptedUsrCod); - Grp_PutParamAllGroups (); - } - Act_LinkFormSubmit (Txt_Attendance,"REC_DAT_BOLD"); - fprintf (Gbl.F.Out,"
" - "\"%s\"" - "
" - "", - Gbl.Prefs.IconsURL, - Txt_Attendance,Txt_Attendance); - Act_FormEnd (); - } - } - - /***** Button to send a message *****/ - Act_FormStart (ActReqMsgUsr); - Grp_PutParamAllGroups (); - Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod); - Par_PutHiddenParamChar ("ShowOnlyOneRecipient",'Y'); - Act_LinkFormSubmit (Txt_Write_a_message,"REC_DAT_BOLD"); - fprintf (Gbl.F.Out,"
" - "\"%s\"" - "
" - "", - Gbl.Prefs.IconsURL, - Txt_Write_a_message,Txt_Write_a_message); - Act_FormEnd (); - - /***** Button to follow / unfollow *****/ - if (TypeOfView == Rec_RECORD_PUBLIC && - !ItsMe) - { - if (Fol_CheckUsrIsFollowerOf (Gbl.Usrs.Me.UsrDat.UsrCod,UsrDat->UsrCod)) // I follow user - { - Act_FormStart (ActUnfUsr); - Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod); - Act_LinkFormSubmit (Txt_Following_unfollow,"REC_DAT_BOLD"); - fprintf (Gbl.F.Out,"
" - "\"%s\"" - "
" - "", - Gbl.Prefs.IconsURL, - Txt_Unfollow,Txt_Following_unfollow); - Act_FormEnd (); - } - else // I do not follow user - { - Act_FormStart (ActFolUsr); - Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod); - Act_LinkFormSubmit (Txt_Follow,"REC_DAT_BOLD"); - fprintf (Gbl.F.Out,"
" - "\"%s\"" - "
" - "", - Gbl.Prefs.IconsURL, - Txt_Follow,Txt_Follow); - Act_FormEnd (); - } - } - - fprintf (Gbl.F.Out,"
"); - } - fprintf (Gbl.F.Out,""); - - /***** Full name *****/ + /* Full name */ fprintf (Gbl.F.Out,"", Rec_C2_TOP); @@ -3116,6 +2894,7 @@ void Rec_ShowSharedUsrRecord (Rec_RecordViewType_t TypeOfView, static void Rec_ShowInstitution (struct Institution *Ins,bool PutFormLinks) { + /***** Institution logo *****/ fprintf (Gbl.F.Out,"", Rec_C1_TOP,Rec_C1_TOP); @@ -3136,8 +2915,10 @@ static void Rec_ShowInstitution (struct Institution *Ins,bool PutFormLinks) Act_FormEnd (); } } - fprintf (Gbl.F.Out,"" - ""); + + /***** Institution name *****/ + fprintf (Gbl.F.Out,"", Rec_C2_TOP,Rec_C1_TOP); if (Ins->InsCod > 0) @@ -3159,6 +2940,262 @@ static void Rec_ShowInstitution (struct Institution *Ins,bool PutFormLinks) fprintf (Gbl.F.Out,""); } +/*****************************************************************************/ +/********************** Show user's photo in record card *********************/ +/*****************************************************************************/ + +static void Rec_ShowPhoto (struct UsrData *UsrDat) + { + char PhotoURL[PATH_MAX+1]; + bool ShowPhoto = Pho_ShowUsrPhotoIsAllowed (UsrDat,PhotoURL); + + /***** User's photo *****/ + fprintf (Gbl.F.Out,"", + Rec_C3_TOP); + Pho_ShowUsrPhoto (UsrDat,ShowPhoto ? PhotoURL : + NULL, + "PHOTO186x248",Pho_NO_ZOOM,false); + fprintf (Gbl.F.Out,""); + } + +/*****************************************************************************/ +/*********** Show commands (icon to make actions) in record card *************/ +/*****************************************************************************/ + +static void Rec_ShowCommands (struct UsrData *UsrDat, + Rec_RecordViewType_t TypeOfView, + bool PutFormLinks) + { + extern const char *Txt_Edit_my_personal_data; + 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_Unfollow; + extern const char *Txt_Follow; + bool ItsMe = (Gbl.Usrs.Me.UsrDat.UsrCod == 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 = (UsrDat->RoleInCurrentCrsDB == Rol_STUDENT || + UsrDat->RoleInCurrentCrsDB == Rol_TEACHER); + + fprintf (Gbl.F.Out,"", + Rec_C1_TOP); + + if (PutFormLinks && Gbl.Usrs.Me.Logged) + { + fprintf (Gbl.F.Out,"
"); + + /***** Button to edit my record card *****/ + if (ItsMe) + { + Act_FormStart (ActReqEdiRecCom); + Act_LinkFormSubmit (Txt_Edit_my_personal_data,NULL); + fprintf (Gbl.F.Out,"
" + "\"%s\"" + "
" + "", + Gbl.Prefs.IconsURL, + Txt_Edit,Txt_Edit); + Act_FormEnd (); + } + + /***** 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)) + { + Act_FormStart (UsrDat->RoleInCurrentCrsDB == Rol_STUDENT ? ActSeeRecOneStd : + ActSeeRecOneTch); + Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod); + Act_LinkFormSubmit (Txt_View_record_for_this_course,NULL); + fprintf (Gbl.F.Out,"
" + "\"%s\"" + "
" + "", + Gbl.Prefs.IconsURL, + Txt_View_record_for_this_course, + Txt_View_record_for_this_course); + Act_FormEnd (); + } + + /***** 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) + { + Act_FormStart ( UsrDat->RoleInCurrentCrsDB == Rol_STUDENT ? ActReqMdfStd : + (UsrDat->RoleInCurrentCrsDB == Rol_TEACHER ? ActReqMdfTch : + ActReqMdfOth)); + Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod); + Act_LinkFormSubmit (Txt_Admin_user,NULL); + fprintf (Gbl.F.Out,"
" + "\"%s\"" + "
" + "", + Gbl.Prefs.IconsURL, + Txt_Admin_user,Txt_Admin_user); + Act_FormEnd (); + } + + if (Gbl.CurrentCrs.Crs.CrsCod > 0 && // A course is selected + 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 + Act_FormStart (ActAdmAsgWrkUsr); + else // I am a teacher or superuser + { + Act_FormStart (ActAdmAsgWrkCrs); + Par_PutHiddenParamString ("UsrCodStd",UsrDat->EncryptedUsrCod); + } + Grp_PutParamAllGroups (); + Par_PutHiddenParamChar ("FullTree",'Y'); // By default, show all files + Act_LinkFormSubmit (Txt_View_works,"REC_DAT_BOLD"); + fprintf (Gbl.F.Out,"
" + "\"%s\"" + "
" + "", + Gbl.Prefs.IconsURL, + Txt_View_works,Txt_View_works); + Act_FormEnd (); + + /***** Button to view user's test exams *****/ + if (ItsMe) + Act_FormStart (ActSeeMyTstExa); + else + { + Act_FormStart (ActSeeUsrTstExa); + Par_PutHiddenParamString ("UsrCodStd",UsrDat->EncryptedUsrCod); + } + Grp_PutParamAllGroups (); + Act_LinkFormSubmit (Txt_See_exams,"REC_DAT_BOLD"); + fprintf (Gbl.F.Out,"
" + "\"%s\"" + "
" + "", + Gbl.Prefs.IconsURL, + Txt_See_exams,Txt_See_exams); + Act_FormEnd (); + + /***** Button to view user's attendance *****/ + if (IAmLoggedAsStudent || + IAmLoggedAsTeacher || + IAmLoggedAsSysAdm) + { + if (IAmLoggedAsStudent) + // As student, I can see my attendance + Act_FormStart (ActSeeLstMyAtt); + else // IAmLoggedAsTeacher || IAmLoggedAsSysAdm + { + // As teacher, I can see attendance of the student + Act_FormStart (ActSeeLstStdAtt); + Par_PutHiddenParamString ("UsrCodStd",UsrDat->EncryptedUsrCod); + Grp_PutParamAllGroups (); + } + Act_LinkFormSubmit (Txt_Attendance,"REC_DAT_BOLD"); + fprintf (Gbl.F.Out,"
" + "\"%s\"" + "
" + "", + Gbl.Prefs.IconsURL, + Txt_Attendance,Txt_Attendance); + Act_FormEnd (); + } + } + + /***** Button to send a message *****/ + Act_FormStart (ActReqMsgUsr); + Grp_PutParamAllGroups (); + Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod); + Par_PutHiddenParamChar ("ShowOnlyOneRecipient",'Y'); + Act_LinkFormSubmit (Txt_Write_a_message,"REC_DAT_BOLD"); + fprintf (Gbl.F.Out,"
" + "\"%s\"" + "
" + "", + Gbl.Prefs.IconsURL, + Txt_Write_a_message,Txt_Write_a_message); + Act_FormEnd (); + + /***** Button to follow / unfollow *****/ + if (TypeOfView == Rec_RECORD_PUBLIC && + !ItsMe) + { + if (Fol_CheckUsrIsFollowerOf (Gbl.Usrs.Me.UsrDat.UsrCod,UsrDat->UsrCod)) // I follow user + { + Act_FormStart (ActUnfUsr); + Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod); + Act_LinkFormSubmit (Txt_Following_unfollow,"REC_DAT_BOLD"); + fprintf (Gbl.F.Out,"
" + "\"%s\"" + "
" + "", + Gbl.Prefs.IconsURL, + Txt_Unfollow,Txt_Following_unfollow); + Act_FormEnd (); + } + else // I do not follow user + { + Act_FormStart (ActFolUsr); + Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod); + Act_LinkFormSubmit (Txt_Follow,"REC_DAT_BOLD"); + fprintf (Gbl.F.Out,"
" + "\"%s\"" + "
" + "", + Gbl.Prefs.IconsURL, + Txt_Follow,Txt_Follow); + Act_FormEnd (); + } + } + + fprintf (Gbl.F.Out,"
"); + } + fprintf (Gbl.F.Out,""); + } + /*****************************************************************************/ /*********************** Write a link to netiquette rules ********************/ /*****************************************************************************/