diff --git a/swad_changelog.h b/swad_changelog.h
index 9c236071..1fb31dba 100644
--- a/swad_changelog.h
+++ b/swad_changelog.h
@@ -233,14 +233,15 @@
/****************************** Public constants *****************************/
/*****************************************************************************/
-#define Log_PLATFORM_VERSION "SWAD 16.220.8 (2017-05-21)"
+#define Log_PLATFORM_VERSION "SWAD 16.220.9 (2017-05-22)"
#define CSS_FILE "swad16.209.3.css"
#define JS_FILE "swad16.206.3.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.220.8: May 21, 2017 Changes related with new role. Not finished. (219663 lines)
+ Version 16.220.9: May 22, 2017 Changes related with new role. Not finished. (219720 lines)
+ Version 16.220.8: May 22, 2017 Changes related with new role. Not finished. (219663 lines)
4 changes necessary in database:
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1644','es','N','Confirmar modif. profesor no editor');
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1645','es','N','Crear usuario como profesor no editor');
diff --git a/swad_file_browser.c b/swad_file_browser.c
index e9f6e3ae..d3047f9a 100644
--- a/swad_file_browser.c
+++ b/swad_file_browser.c
@@ -2082,11 +2082,22 @@ void Brw_GetParAndInitFileBrowser (void)
/***** Marks *****/
case ActSeeAdmMrk: // Access to a marks zone from menu
/* Set file browser type acording to last group accessed */
- Gbl.FileBrowser.Type = (Gbl.Usrs.Me.LoggedRole == Rol_STD) ?
- (Gbl.CurrentCrs.Grps.GrpCod > 0 ? Brw_SHOW_MARKS_GRP :
- Brw_SHOW_MARKS_CRS) :
- (Gbl.CurrentCrs.Grps.GrpCod > 0 ? Brw_ADMI_MARKS_GRP :
- Brw_ADMI_MARKS_CRS);
+ switch (Gbl.Usrs.Me.LoggedRole)
+ {
+ case Rol_STD:
+ case Rol_NET:
+ Gbl.FileBrowser.Type = (Gbl.CurrentCrs.Grps.GrpCod > 0) ? Brw_SHOW_MARKS_GRP :
+ Brw_SHOW_MARKS_CRS;
+ break;
+ case Rol_TCH:
+ case Rol_SYS_ADM:
+ Gbl.FileBrowser.Type = (Gbl.CurrentCrs.Grps.GrpCod > 0) ? Brw_ADMI_MARKS_GRP :
+ Brw_ADMI_MARKS_CRS;
+ break;
+ default:
+ Lay_ShowErrorAndExit ("Wrong role.");
+ break;
+ }
break;
case ActChgToSeeMrk: // Access to see a marks zone
/* Set file browser type acording to last group accessed */
@@ -3097,10 +3108,12 @@ void Brw_AskEditWorksCrs (void)
Grp_GetParCodsSeveralGrpsToShowUsrs ();
/***** Get and order lists of users from this course *****/
- Usr_GetListUsrs (Rol_TCH,Sco_SCOPE_CRS);
Usr_GetListUsrs (Rol_STD,Sco_SCOPE_CRS);
- NumTotalUsrs = Gbl.Usrs.LstUsrs[Rol_TCH].NumUsrs +
- Gbl.Usrs.LstUsrs[Rol_STD].NumUsrs;
+ Usr_GetListUsrs (Rol_NET,Sco_SCOPE_CRS);
+ Usr_GetListUsrs (Rol_TCH,Sco_SCOPE_CRS);
+ NumTotalUsrs = Gbl.Usrs.LstUsrs[Rol_STD].NumUsrs +
+ Gbl.Usrs.LstUsrs[Rol_NET].NumUsrs +
+ Gbl.Usrs.LstUsrs[Rol_TCH].NumUsrs;
/***** Draw class photos to select users *****/
Lay_StartRoundFrame (NULL,Txt_Users,
@@ -3125,6 +3138,7 @@ void Brw_AskEditWorksCrs (void)
/* Put list of users to select some of them */
Lay_StartTableCenter (0);
Usr_ListUsersToSelect (Rol_TCH);
+ Usr_ListUsersToSelect (Rol_NET);
Usr_ListUsersToSelect (Rol_STD);
Lay_EndTable ();
@@ -3143,6 +3157,7 @@ void Brw_AskEditWorksCrs (void)
/***** Free memory for users' list *****/
Usr_FreeUsrsList (Rol_TCH);
+ Usr_FreeUsrsList (Rol_NET);
Usr_FreeUsrsList (Rol_STD);
/***** Free memory used by list of selected users' codes *****/
@@ -3389,6 +3404,7 @@ static void Brw_ShowDataOwnerAsgWrk (struct UsrData *UsrDat)
extern const char *Txt_View_record_for_this_course;
bool ShowPhoto;
char PhotoURL[PATH_MAX + 1];
+ Act_Action_t NextAction;
/***** Show user's photo *****/
fprintf (Gbl.F.Out,"
");
@@ -3403,8 +3419,21 @@ static void Brw_ShowDataOwnerAsgWrk (struct UsrData *UsrDat)
fprintf (Gbl.F.Out," RoleInCurrentCrsDB == Rol_STD ? ActSeeRecOneStd :
- ActSeeRecOneTch);
+ switch (UsrDat->RoleInCurrentCrsDB)
+ {
+ case Rol_STD:
+ NextAction = ActSeeRecOneStd;
+ break;
+ case Rol_NET:
+ case Rol_TCH:
+ NextAction = ActSeeRecOneTch;
+ break;
+ default:
+ NextAction = ActUnk;
+ Lay_ShowErrorAndExit ("Wrong role.");
+ break;
+ }
+ Act_FormStart (NextAction);
Usr_PutParamUsrCodEncrypted (UsrDat->EncryptedUsrCod);
/***** Show user's ID *****/
@@ -3972,12 +4001,23 @@ static void Brw_WriteSubtitleOfFileBrowser (void)
break;
case Brw_SHOW_MARKS_CRS:
case Brw_SHOW_MARKS_GRP:
- if (Gbl.Usrs.Me.LoggedRole == Rol_STD)
- sprintf (Subtitle,"(%s)",
- Txt_accessible_only_for_reading_by_you_and_the_teachers_of_the_course);
- else
- sprintf (Subtitle,"(%s)",
- Txt_the_marks_of_a_student_chosen_at_random_);
+ switch (Gbl.Usrs.Me.LoggedRole)
+ {
+ case Rol_STD:
+ sprintf (Subtitle,"(%s)",
+ Txt_accessible_only_for_reading_by_you_and_the_teachers_of_the_course);
+ break;
+ case Rol_NET:
+ case Rol_TCH:
+ case Rol_SYS_ADM:
+ sprintf (Subtitle,"(%s)",
+ Txt_the_marks_of_a_student_chosen_at_random_);
+ break;
+ default:
+ Subtitle[0] = '\0';
+ Lay_ShowErrorAndExit ("Wrong role.");
+ break;
+ }
break;
case Brw_ADMI_MARKS_CRS:
case Brw_ADMI_MARKS_GRP:
@@ -5307,8 +5347,8 @@ static bool Brw_WriteRowFileBrowser (unsigned Level,Brw_ExpandTree_t ExpandTree,
/***** Put icon to download ZIP of folder *****/
fprintf (Gbl.F.Out," | ",Gbl.RowEvenOdd);
if (Gbl.Usrs.Me.LoggedRole >= Rol_STD && // Only ZIP folders if I am student, teacher...
- !SeeMarks && // Do not ZIP folders when seeing marks
- !(SeeDocsZone && RowSetAsHidden)) // When seeing docs, if folder is not hidden (this could happen for Level == 0)
+ !SeeMarks && // Do not ZIP folders when seeing marks
+ !(SeeDocsZone && RowSetAsHidden)) // When seeing docs, if folder is not hidden (this could happen for Level == 0)
ZIP_PutButtonToDownloadZIPOfAFolder (PathInTree,FileName);
fprintf (Gbl.F.Out," | ");
}
@@ -10884,10 +10924,17 @@ static bool Brw_CheckIfICanEditFileOrFolder (unsigned Level)
if (!Gbl.FileBrowser.Asg.IBelongToCrsOrGrps) // If I do not belong to course / groups of this assignment
return false; // I can not edit this assignment
- return ((Gbl.Usrs.Me.LoggedRole == Rol_STD && // Students can edit
- Gbl.FileBrowser.Asg.Open) || // inside open assignments
- Gbl.Usrs.Me.LoggedRole >= Rol_TCH); // Teachers can edit
- // inside open or closed assignments
+ switch (Gbl.Usrs.Me.LoggedRole)
+ {
+ case Rol_STD: // Students...
+ case Rol_NET: // ...and non-editing teachers...
+ return Gbl.FileBrowser.Asg.Open; // ...can edit inside open assignments
+ case Rol_TCH: // Teachers...
+ return true; // ...can edit inside open or closed assignments
+ default:
+ break;
+ }
+ return false;
default:
return Brw_FileBrowserIsEditable[Gbl.FileBrowser.Type];
}
@@ -10929,10 +10976,17 @@ static bool Brw_CheckIfICanCreateIntoFolder (unsigned Level)
if (!Gbl.FileBrowser.Asg.IBelongToCrsOrGrps) // If I do not belong to course / groups of this assignment
return false; // I can not create anything inside this assignment
- return ((Gbl.Usrs.Me.LoggedRole == Rol_STD && // Students can create
- Gbl.FileBrowser.Asg.Open) || // inside open assignments
- Gbl.Usrs.Me.LoggedRole >= Rol_TCH); // Teachers can create
- // inside open or closed assignments
+ switch (Gbl.Usrs.Me.LoggedRole)
+ {
+ case Rol_STD: // Students...
+ case Rol_NET: // ...and non-editing teachers...
+ return Gbl.FileBrowser.Asg.Open; // ...can create inside open assignments
+ case Rol_TCH: // Teachers...
+ return true; // ...can create inside open or closed assignments
+ default:
+ break;
+ }
+ return false;
default:
return Brw_FileBrowserIsEditable[Gbl.FileBrowser.Type];
}
@@ -10957,7 +11011,8 @@ static bool Brw_CheckIfICanModifySharedFileOrFolder (void)
switch (Gbl.Usrs.Me.LoggedRole)
{
- case Rol_STD: // If I am a student, I can modify the file/folder if I am the publisher
+ case Rol_STD: // If I am a student or a non-editing teacher...
+ case Rol_NET: // ...I can modify the file/folder if I am the publisher
/***** Get all the distinct publishers of files starting by Gbl.FileBrowser.Priv.FullPathInTree from database *****/
sprintf (Query,"SELECT DISTINCT(PublisherUsrCod) FROM files"
" WHERE FileBrowser=%u AND Cod=%ld"
diff --git a/swad_forum.c b/swad_forum.c
index b7c1f5ca..540ea80d 100644
--- a/swad_forum.c
+++ b/swad_forum.c
@@ -3757,7 +3757,7 @@ static void For_RestrictAccess (void)
break;
case For_FORUM_INSTIT_TCHS:
ICanSeeForum = (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM ||
- Rol_GetMyMaxRoleInIns (Gbl.Forum.ForumSelected.Location) >= Rol_TCH);
+ Rol_GetMyMaxRoleInIns (Gbl.Forum.ForumSelected.Location) >= Rol_NET);
break;
case For_FORUM_CENTRE_USRS:
ICanSeeForum = (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM ||
@@ -3765,7 +3765,7 @@ static void For_RestrictAccess (void)
break;
case For_FORUM_CENTRE_TCHS:
ICanSeeForum = (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM ||
- Rol_GetMyMaxRoleInCtr (Gbl.Forum.ForumSelected.Location) >= Rol_TCH);
+ Rol_GetMyMaxRoleInCtr (Gbl.Forum.ForumSelected.Location) >= Rol_NET);
break;
case For_FORUM_DEGREE_USRS:
ICanSeeForum = (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM ||
@@ -3773,7 +3773,7 @@ static void For_RestrictAccess (void)
break;
case For_FORUM_DEGREE_TCHS:
ICanSeeForum = (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM ||
- Rol_GetMyMaxRoleInDeg (Gbl.Forum.ForumSelected.Location) >= Rol_TCH);
+ Rol_GetMyMaxRoleInDeg (Gbl.Forum.ForumSelected.Location) >= Rol_NET);
break;
case For_FORUM_COURSE_USRS:
ICanSeeForum = (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM ||
@@ -3781,7 +3781,7 @@ static void For_RestrictAccess (void)
break;
case For_FORUM_COURSE_TCHS:
ICanSeeForum = (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM ||
- Rol_GetMyRoleInCrs (Gbl.Forum.ForumSelected.Location) >= Rol_TCH);
+ Rol_GetMyRoleInCrs (Gbl.Forum.ForumSelected.Location) >= Rol_NET);
break;
default:
ICanSeeForum = false;
diff --git a/swad_global.c b/swad_global.c
index 3af1502e..3ec4ab76 100644
--- a/swad_global.c
+++ b/swad_global.c
@@ -452,6 +452,7 @@ void Gbl_InitializeGlobals (void)
void Gbl_Cleanup (void)
{
extern struct Act_Actions Act_Actions[Act_NUM_ACTIONS];
+ Rol_Role_t Role;
if (!Gbl.Action.UsesAJAX &&
!Gbl.WebService.IsWebService &&
@@ -478,10 +479,12 @@ void Gbl_Cleanup (void)
Hld_FreeListHolidays ();
Lnk_FreeListLinks ();
Plg_FreeListPlugins ();
- Usr_FreeUsrsList (Rol_GST);
- Usr_FreeUsrsList (Rol_STD);
- Usr_FreeUsrsList (Rol_TCH);
- Usr_FreeUsrsList (Rol_DEG_ADM);
+
+ for (Role = (Rol_Role_t) 0;
+ Role < Rol_NUM_ROLES;
+ Role++)
+ Usr_FreeUsrsList (Role);
+
Usr_FreeListOtherRecipients ();
Usr_FreeListsSelectedUsrsCods ();
Syl_FreeListItemsSyllabus ();