mirror of https://github.com/acanas/swad-core.git
Version 14.71
This commit is contained in:
parent
b25b244028
commit
04d00ba365
|
@ -10496,5 +10496,9 @@ INSERT INTO expanded_folders_backup SELECT * FROM expanded_folders;
|
|||
CREATE TABLE clipboard_backup LIKE clipboard;
|
||||
INSERT INTO clipboard_backup SELECT * FROM clipboard;
|
||||
|
||||
----- 2015-01-29, swad14.71
|
||||
|
||||
|
||||
CREATE TABLE IF NOT EXISTS admin (UsrCod INT NOT NULL,Scope ENUM('Sys','Ins','Ctr','Deg') NOT NULL,Cod INT NOT NULL,UNIQUE INDEX(UsrCod,Scope,Cod));
|
||||
INSERT INTO admin (UsrCod,Scope,Cod) SELECT UsrCod,'Deg',DegCod FROM deg_admin WHERE DegCod>'0';
|
||||
INSERT INTO admin (UsrCod,Scope,Cod) SELECT UsrCod,'Sys',DegCod FROM deg_admin WHERE DegCod='-2';
|
||||
DROP TABLE deg_admin;
|
||||
|
|
|
@ -46,6 +46,14 @@ CREATE TABLE IF NOT EXISTS actions_MFU (
|
|||
--
|
||||
-- Table ann_seen: stores users who have seen global announcements
|
||||
--
|
||||
CREATE TABLE IF NOT EXISTS admin (
|
||||
UsrCod INT NOT NULL,
|
||||
Scope ENUM('Sys','Ins','Ctr','Deg') NOT NULL,
|
||||
Cod INT NOT NULL,
|
||||
UNIQUE INDEX(UsrCod,Scope,Cod));
|
||||
--
|
||||
-- Table ann_seen: stores users who have seen global announcements
|
||||
--
|
||||
CREATE TABLE IF NOT EXISTS ann_seen (
|
||||
AnnCod INT NOT NULL,
|
||||
UsrCod INT NOT NULL,
|
||||
|
|
|
@ -837,11 +837,7 @@ void ID_ConfirmUsrID (long UsrCod,const char *UsrID)
|
|||
bool ID_ICanSeeTeacherID (struct UsrData *UsrDat)
|
||||
{
|
||||
if (Gbl.Usrs.Me.LoggedRole == Rol_ROLE_DEG_ADMIN)
|
||||
{
|
||||
if (Usr_CheckIfUsrIsAdmOfAllDegs (Gbl.Usrs.Me.UsrDat.UsrCod)) // If I am admin of all degrees
|
||||
return true;
|
||||
// If I am an administrator of current degree, but not of all degrees, I only can see the users' IDs from current degree
|
||||
// If I am an administrator of current degree, I only can see the users' IDs from current degree
|
||||
return Usr_CheckIfUsrBelongsToDeg (UsrDat->UsrCod,Gbl.CurrentDeg.Deg.DegCod);
|
||||
}
|
||||
return (Gbl.Usrs.Me.LoggedRole == Rol_ROLE_SUPERUSER);
|
||||
}
|
||||
|
|
|
@ -677,7 +677,7 @@ void Acc_CompletelyEliminateAccount (struct UsrData *UsrDat,
|
|||
}
|
||||
|
||||
/***** Remove user as administrator of any degree *****/
|
||||
sprintf (Query,"DELETE FROM deg_admin"
|
||||
sprintf (Query,"DELETE FROM admin"
|
||||
" WHERE UsrCod='%ld'",
|
||||
UsrDat->UsrCod);
|
||||
DB_QueryDELETE (Query,"can not remove a user as administrator");
|
||||
|
|
|
@ -39,11 +39,18 @@
|
|||
/****************************** Public constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define Log_PLATFORM_VERSION "SWAD 14.70.6 (2015/01/28)"
|
||||
#define Log_PLATFORM_VERSION "SWAD 14.71 (2015/01/29)"
|
||||
|
||||
// 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 | tail -1
|
||||
/*
|
||||
Version 14.71: Jan 29, 2015 New table admin to store system, institution, centre or degree admins. (176255 lines)
|
||||
4 changes necessary in database:
|
||||
CREATE TABLE IF NOT EXISTS admin (UsrCod INT NOT NULL,Scope ENUM('Sys','Ins','Ctr','Deg') NOT NULL,Cod INT NOT NULL,UNIQUE INDEX(UsrCod,Scope,Cod));
|
||||
INSERT INTO admin (UsrCod,Scope,Cod) SELECT UsrCod,'Deg',DegCod FROM deg_admin WHERE DegCod>'0';
|
||||
INSERT INTO admin (UsrCod,Scope,Cod) SELECT UsrCod,'Sys',DegCod FROM deg_admin WHERE DegCod='-2';
|
||||
DROP TABLE IF EXISTS deg_admin;
|
||||
|
||||
Version 14.70.6: Jan 28, 2015 Buttons to view list of institutions, centres, degrees and courses in information options. (176242 lines)
|
||||
Version 14.70.5: Jan 28, 2015 Links in list of countries, institutions, centres and degrees now go to information options. (176219 lines)
|
||||
Version 14.70.4: Jan 28, 2015 Links in breadcrumbs now go to information options. (176218 lines)
|
||||
|
|
|
@ -520,11 +520,19 @@ static void Con_ShowConnectedUsrsWithARoleBelongingToCurrentLocationOnMainZone (
|
|||
switch (Gbl.Scope.Current)
|
||||
{
|
||||
case Sco_SCOPE_PLATFORM: // Show connected users in the whole platform
|
||||
case Sco_SCOPE_INSTITUTION: // Show connected users in the current centre
|
||||
case Sco_SCOPE_CENTRE: // Show connected users in the current centre
|
||||
if (Gbl.Usrs.Me.LoggedRole != Rol_ROLE_SUPERUSER)
|
||||
return;
|
||||
break;
|
||||
case Sco_SCOPE_INSTITUTION: // Show connected users in the current institution
|
||||
if (!(Gbl.Usrs.Me.LoggedRole == Rol_ROLE_INS_ADMIN ||
|
||||
Gbl.Usrs.Me.LoggedRole == Rol_ROLE_SUPERUSER))
|
||||
return;
|
||||
break;
|
||||
case Sco_SCOPE_CENTRE: // Show connected users in the current centre
|
||||
if (!(Gbl.Usrs.Me.LoggedRole == Rol_ROLE_CTR_ADMIN ||
|
||||
Gbl.Usrs.Me.LoggedRole == Rol_ROLE_SUPERUSER))
|
||||
return;
|
||||
break;
|
||||
case Sco_SCOPE_DEGREE: // Show connected users in the current degree
|
||||
if (!(Gbl.Usrs.Me.LoggedRole == Rol_ROLE_DEG_ADMIN ||
|
||||
Gbl.Usrs.Me.LoggedRole == Rol_ROLE_SUPERUSER))
|
||||
|
@ -589,11 +597,19 @@ static void Con_ShowConnectedUsrsWithARoleBelongingToCurrentLocationOnRightColum
|
|||
switch (Gbl.Scope.Current)
|
||||
{
|
||||
case Sco_SCOPE_PLATFORM: // Show connected users in the whole platform
|
||||
case Sco_SCOPE_INSTITUTION: // Show connected users in the current institution
|
||||
case Sco_SCOPE_CENTRE: // Show connected users in the current centre
|
||||
if (Gbl.Usrs.Me.LoggedRole != Rol_ROLE_SUPERUSER)
|
||||
return;
|
||||
break;
|
||||
case Sco_SCOPE_INSTITUTION: // Show connected users in the current institution
|
||||
if (!(Gbl.Usrs.Me.LoggedRole == Rol_ROLE_INS_ADMIN ||
|
||||
Gbl.Usrs.Me.LoggedRole == Rol_ROLE_SUPERUSER))
|
||||
return;
|
||||
break;
|
||||
case Sco_SCOPE_CENTRE: // Show connected users in the current centre
|
||||
if (!(Gbl.Usrs.Me.LoggedRole == Rol_ROLE_CTR_ADMIN ||
|
||||
Gbl.Usrs.Me.LoggedRole == Rol_ROLE_SUPERUSER))
|
||||
return;
|
||||
break;
|
||||
case Sco_SCOPE_DEGREE: // Show connected users in the current degree
|
||||
if (!(Gbl.Usrs.Me.LoggedRole == Rol_ROLE_DEG_ADMIN ||
|
||||
Gbl.Usrs.Me.LoggedRole == Rol_ROLE_SUPERUSER))
|
||||
|
|
|
@ -169,6 +169,24 @@ mysql> DESCRIBE actions_MFU;
|
|||
"LastClick DATETIME NOT NULL,"
|
||||
"UNIQUE INDEX(UsrCod,ActCod))");
|
||||
|
||||
/***** Table admin *****/
|
||||
/*
|
||||
mysql> DESCRIBE admin;
|
||||
+--------+-------------------------------+------+-----+---------+-------+
|
||||
| Field | Type | Null | Key | Default | Extra |
|
||||
+--------+-------------------------------+------+-----+---------+-------+
|
||||
| UsrCod | int(11) | NO | PRI | NULL | |
|
||||
| Scope | enum('Sys','Ins','Ctr','Deg') | NO | PRI | NULL | |
|
||||
| Cod | int(11) | NO | PRI | NULL | |
|
||||
+--------+-------------------------------+------+-----+---------+-------+
|
||||
3 rows in set (0.00 sec)
|
||||
*/
|
||||
DB_CreateTable ("CREATE TABLE IF NOT EXISTS admin ("
|
||||
"UsrCod INT NOT NULL,"
|
||||
"Scope ENUM('Sys','Ins','Ctr','Deg') NOT NULL,"
|
||||
"Cod INT NOT NULL,"
|
||||
"UNIQUE INDEX(UsrCod,Scope,Cod))");
|
||||
|
||||
/***** Table ann_seen *****/
|
||||
/*
|
||||
mysql> DESCRIBE ann_seen;
|
||||
|
@ -185,7 +203,6 @@ mysql> DESCRIBE ann_seen;
|
|||
"UsrCod INT NOT NULL,"
|
||||
"UNIQUE INDEX(AnnCod,UsrCod))");
|
||||
|
||||
|
||||
/***** Table announcements *****/
|
||||
/*
|
||||
mysql> DESCRIBE announcements;
|
||||
|
@ -806,22 +823,6 @@ mysql> DESCRIBE crs_usr_requests;
|
|||
"RequestTime DATETIME NOT NULL,"
|
||||
"UNIQUE INDEX(ReqCod),UNIQUE INDEX(CrsCod,UsrCod),INDEX(UsrCod))");
|
||||
|
||||
/***** Table deg_admin *****/
|
||||
/*
|
||||
mysql> DESCRIBE deg_admin;
|
||||
+--------+---------+------+-----+---------+-------+
|
||||
| Field | Type | Null | Key | Default | Extra |
|
||||
+--------+---------+------+-----+---------+-------+
|
||||
| UsrCod | int(11) | NO | PRI | NULL | |
|
||||
| DegCod | int(11) | NO | PRI | NULL | |
|
||||
+--------+---------+------+-----+---------+-------+
|
||||
2 rows in set (0.00 sec)
|
||||
*/
|
||||
DB_CreateTable ("CREATE TABLE IF NOT EXISTS deg_admin ("
|
||||
"UsrCod INT NOT NULL,"
|
||||
"DegCod INT NOT NULL,"
|
||||
"UNIQUE INDEX(UsrCod,DegCod))");
|
||||
|
||||
/***** Table deg_types *****/
|
||||
/*
|
||||
mysql> DESCRIBE deg_types;
|
||||
|
|
|
@ -164,12 +164,13 @@ void Deg_SeeDegWithPendingCrss (void)
|
|||
{
|
||||
case Rol_ROLE_DEG_ADMIN:
|
||||
sprintf (Query,"SELECT courses.DegCod,COUNT(*)"
|
||||
" FROM courses,deg_admin,degrees"
|
||||
" WHERE (courses.Status & %u)<>0"
|
||||
" AND courses.DegCod=deg_admin.DegCod AND deg_admin.UsrCod='%ld'"
|
||||
" FROM admin,courses,degrees"
|
||||
" WHERE admin.UsrCod='%ld' AND admin.Scope='Deg'"
|
||||
" AND admin.Cod=courses.DegCod"
|
||||
" AND (courses.Status & %u)<>0"
|
||||
" AND courses.DegCod=degrees.DegCod"
|
||||
" GROUP BY courses.DegCod ORDER BY degrees.ShortName",
|
||||
(unsigned) Crs_STATUS_BIT_PENDING,Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod,(unsigned) Crs_STATUS_BIT_PENDING);
|
||||
break;
|
||||
case Rol_ROLE_SUPERUSER:
|
||||
sprintf (Query,"SELECT courses.DegCod,COUNT(*)"
|
||||
|
@ -303,7 +304,7 @@ static void Deg_Configuration (bool PrintView)
|
|||
/* Link to show courses */
|
||||
Act_FormStart (ActSeeCrs);
|
||||
Act_LinkFormSubmit (Txt_Courses,The_ClassFormul[Gbl.Prefs.Theme]);
|
||||
Lay_PutSendIcon ("deg",Txt_Courses,Txt_Courses);
|
||||
Lay_PutSendIcon ("crs",Txt_Courses,Txt_Courses);
|
||||
fprintf (Gbl.F.Out,"</form>");
|
||||
|
||||
if (!PrintView)
|
||||
|
@ -2507,8 +2508,9 @@ void Deg_GetListDegsAdminByMe (void)
|
|||
else // Gbl.Usrs.Me.LoggedRole == Rol_ROLE_DEG_ADMIN
|
||||
sprintf (Query,"SELECT degrees.DegCod,degrees.CtrCod,degrees.DegTypCod,degrees.Status,degrees.RequesterUsrCod,"
|
||||
"degrees.ShortName,degrees.FullName,degrees.FirstYear,degrees.LastYear,degrees.OptYear,degrees.WWW"
|
||||
" FROM deg_admin,degrees"
|
||||
" WHERE deg_admin.UsrCod='%ld' AND deg_admin.DegCod<>'-1' AND deg_admin.DegCod=degrees.DegCod"
|
||||
" FROM admin,degrees"
|
||||
" WHERE admin.UsrCod='%ld' AND admin.Scope='Deg'"
|
||||
" AND admin.Cod=degrees.DegCod"
|
||||
" ORDER BY degrees.ShortName",
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||
Gbl.Usrs.Me.MyAdminDegs.Num = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get degrees admin by you");
|
||||
|
@ -3206,7 +3208,7 @@ static void Deg_RemoveDegreeCompletely (long DegCod)
|
|||
Brw_RemoveTree (PathDeg);
|
||||
|
||||
/***** Remove administrators of this degree *****/
|
||||
sprintf (Query,"DELETE FROM deg_admin WHERE DegCod='%ld'",
|
||||
sprintf (Query,"DELETE FROM admin WHERE Scope='Deg' AND Cod='%ld'",
|
||||
DegCod);
|
||||
DB_QueryDELETE (Query,"can not remove administrators of a degree");
|
||||
|
||||
|
@ -3904,14 +3906,14 @@ void Deg_GetAndWriteDegreesAdminBy (long UsrCod,unsigned ColSpan)
|
|||
long DegCod;
|
||||
|
||||
/***** Get degrees admin by a user from database *****/
|
||||
sprintf (Query,"(SELECT DegCod,'' AS ShortName,''"
|
||||
" FROM deg_admin"
|
||||
" WHERE UsrCod='%ld' AND DegCod<'0')"
|
||||
sprintf (Query,"(SELECT -1 AS DegCod,'' AS ShortName,''"
|
||||
" FROM admin"
|
||||
" WHERE UsrCod='%ld' AND Scope='Sys')"
|
||||
" UNION "
|
||||
"(SELECT degrees.DegCod,degrees.ShortName AS ShortName,degrees.FullName"
|
||||
" FROM deg_admin,degrees"
|
||||
" WHERE deg_admin.UsrCod='%ld' AND deg_admin.DegCod>='0'"
|
||||
" AND deg_admin.DegCod=degrees.DegCod)"
|
||||
" FROM admin,degrees"
|
||||
" WHERE admin.UsrCod='%ld' AND admin.Scope='Deg'"
|
||||
" AND admin.Cod=degrees.DegCod)"
|
||||
" ORDER BY ShortName",
|
||||
UsrCod,UsrCod);
|
||||
if ((NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get degrees admin by a user"))) // If degrees found for this administrator
|
||||
|
|
|
@ -2075,9 +2075,9 @@ void Enr_ShowEnrollmentRequests (void)
|
|||
break;
|
||||
case Rol_ROLE_DEG_ADMIN:
|
||||
sprintf (Query,"SELECT crs_usr_requests.ReqCod,crs_usr_requests.CrsCod,crs_usr_requests.UsrCod,crs_usr_requests.Role,DATE_FORMAT(crs_usr_requests.RequestTime,'%%Y%%m%%d%%H%%i%%S')"
|
||||
" FROM deg_admin,courses,crs_usr_requests"
|
||||
" WHERE deg_admin.UsrCod='%ld'"
|
||||
" AND deg_admin.DegCod=courses.DegCod"
|
||||
" FROM admin,courses,crs_usr_requests"
|
||||
" WHERE admin.UsrCod='%ld' AND admin.Scope='Deg'"
|
||||
" AND admin.Cod=courses.DegCod"
|
||||
" AND courses.CrsCod=crs_usr_requests.CrsCod"
|
||||
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
|
||||
" ORDER BY crs_usr_requests.RequestTime DESC",
|
||||
|
@ -2115,11 +2115,11 @@ void Enr_ShowEnrollmentRequests (void)
|
|||
break;
|
||||
case Rol_ROLE_DEG_ADMIN:
|
||||
sprintf (Query,"SELECT crs_usr_requests.ReqCod,crs_usr_requests.CrsCod,crs_usr_requests.UsrCod,crs_usr_requests.Role,DATE_FORMAT(crs_usr_requests.RequestTime,'%%Y%%m%%d%%H%%i%%S')"
|
||||
" FROM deg_admin,centres,degrees,courses,crs_usr_requests"
|
||||
" WHERE deg_admin.UsrCod='%ld'"
|
||||
" FROM admin,centres,degrees,courses,crs_usr_requests"
|
||||
" WHERE admin.UsrCod='%ld' AND admin.Scope='Deg'"
|
||||
" AND centres.InsCod='%ld'"
|
||||
" AND deg_admin.DegCod=degrees.DegCod"
|
||||
" AND deg_admin.DegCod=courses.DegCod"
|
||||
" AND admin.Cod=degrees.DegCod"
|
||||
" AND admin.Cod=courses.DegCod"
|
||||
" AND degrees.CtrCod=centres.CtrCod"
|
||||
" AND courses.CrsCod=crs_usr_requests.CrsCod"
|
||||
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
|
||||
|
@ -2164,11 +2164,11 @@ void Enr_ShowEnrollmentRequests (void)
|
|||
break;
|
||||
case Rol_ROLE_DEG_ADMIN:
|
||||
sprintf (Query,"SELECT crs_usr_requests.ReqCod,crs_usr_requests.CrsCod,crs_usr_requests.UsrCod,crs_usr_requests.Role,DATE_FORMAT(crs_usr_requests.RequestTime,'%%Y%%m%%d%%H%%i%%S')"
|
||||
" FROM deg_admin,degrees,courses,crs_usr_requests"
|
||||
" WHERE deg_admin.UsrCod='%ld'"
|
||||
" FROM admin,degrees,courses,crs_usr_requests"
|
||||
" WHERE admin.UsrCod='%ld' AND admin.Scope='Deg'"
|
||||
" AND degrees.CtrCod='%ld'"
|
||||
" AND deg_admin.DegCod=degrees.DegCod"
|
||||
" AND deg_admin.DegCod=courses.DegCod"
|
||||
" AND admin.Cod=degrees.DegCod"
|
||||
" AND admin.Cod=courses.DegCod"
|
||||
" AND courses.CrsCod=crs_usr_requests.CrsCod"
|
||||
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
|
||||
" ORDER BY crs_usr_requests.RequestTime DESC",
|
||||
|
@ -3294,8 +3294,8 @@ static void Enr_EffectivelyRemAdmFromDeg (struct UsrData *UsrDat)
|
|||
if (Usr_CheckIfUsrIsAdmOfDeg (UsrDat->UsrCod,Gbl.CurrentDeg.Deg.DegCod)) // User is administrator of current degree
|
||||
{
|
||||
/***** Remove user from the table of courses-users *****/
|
||||
sprintf (Query,"DELETE FROM deg_admin"
|
||||
" WHERE UsrCod='%ld' AND DegCod='%ld'",
|
||||
sprintf (Query,"DELETE FROM admin"
|
||||
" WHERE UsrCod='%ld' AND Scope='Deg' AND Cod='%ld'",
|
||||
UsrDat->UsrCod,Gbl.CurrentDeg.Deg.DegCod);
|
||||
DB_QueryDELETE (Query,"can not remove an administrator from a degree");
|
||||
|
||||
|
|
|
@ -1061,8 +1061,14 @@ unsigned Ntf_StoreNotifyEventsToAllUsrs (Ntf_NotifyEvent_t NotifyEvent,long Cod)
|
|||
// and I want to be a teacher (checked before calling this function
|
||||
// to not send requests to be a student to admins)
|
||||
// ==> send notification to administrators or superusers
|
||||
sprintf (Query,"SELECT UsrCod FROM deg_admin"
|
||||
" WHERE (DegCod='%ld' OR DegCod<=0) AND UsrCod<>'%ld'",
|
||||
sprintf (Query,"SELECT UsrCod FROM admin"
|
||||
" WHERE (Scope='Sys'"
|
||||
" OR (Scope='Ins' AND Cod='%ld')"
|
||||
" OR (Scope='Ctr' AND Cod='%ld')"
|
||||
" OR (Scope='Deg' AND Cod='%ld'))"
|
||||
" AND UsrCod<>'%ld'",
|
||||
Gbl.CurrentIns.Ins.InsCod,
|
||||
Gbl.CurrentCtr.Ctr.CtrCod,
|
||||
Gbl.CurrentDeg.Deg.DegCod,
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||
break;
|
||||
|
|
|
@ -811,9 +811,7 @@ bool Pwd_CheckIfICanChangeOtherUsrPassword (long UsrCod)
|
|||
switch (Gbl.Usrs.Me.LoggedRole)
|
||||
{
|
||||
case Rol_ROLE_DEG_ADMIN:
|
||||
if (Usr_CheckIfUsrIsAdmOfAllDegs (Gbl.Usrs.Me.UsrDat.UsrCod)) // If I am admin of all degrees
|
||||
return true;
|
||||
/* If I am an administrator of current degree, but not of all degrees,
|
||||
/* If I am an administrator of current degree,
|
||||
I only can change the password of users from current degree */
|
||||
return Usr_CheckIfUsrBelongsToDeg (UsrCod,Gbl.CurrentDeg.Deg.DegCod);
|
||||
case Rol_ROLE_SUPERUSER:
|
||||
|
|
|
@ -125,9 +125,7 @@ bool Pho_CheckIfICanChangeOtherUsrPhoto (long UsrCod)
|
|||
case Rol_ROLE_TEACHER:
|
||||
return Usr_CheckIfUsrBelongsToCrs (UsrCod,Gbl.CurrentCrs.Crs.CrsCod);
|
||||
case Rol_ROLE_DEG_ADMIN:
|
||||
if (Usr_CheckIfUsrIsAdmOfAllDegs (Gbl.Usrs.Me.UsrDat.UsrCod)) // If I am admin of all degrees
|
||||
return true;
|
||||
/* If I am an administrator of current degree, but not of all degrees,
|
||||
/* If I am an administrator of current degree,
|
||||
I only can change the photo of users from current degree */
|
||||
return Usr_CheckIfUsrBelongsToDeg (UsrCod,Gbl.CurrentDeg.Deg.DegCod);
|
||||
case Rol_ROLE_SUPERUSER:
|
||||
|
|
82
swad_user.c
82
swad_user.c
|
@ -80,10 +80,6 @@ const char *Usr_IconsClassPhotoOrList[Usr_NUM_USR_LIST_TYPES] =
|
|||
"list"
|
||||
};
|
||||
|
||||
/* Special codes for global administrator and superuser deg_admin table */
|
||||
#define Usr_SPECIAL_CODE_GLOBAL_ADMIN -1L
|
||||
#define Usr_SPECIAL_CODE_SUPERUSER -2L
|
||||
|
||||
#define Usr_NUM_MAIN_FIELDS_DATA_USR 9
|
||||
#define Usr_NUM_MAIN_FIELDS_DATA_ADM 8
|
||||
#define Usr_NUM_ALL_FIELDS_DATA_INV 17
|
||||
|
@ -695,7 +691,7 @@ void Usr_RestrictLengthAndWriteName (struct UsrData *UsrDat,unsigned MaxChars)
|
|||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/********** Check if a user is an administrator of current degree ************/
|
||||
/************* Check if a user is an administrator of a degree ***************/
|
||||
/*****************************************************************************/
|
||||
|
||||
bool Usr_CheckIfUsrIsAdmOfDeg (long UsrCod,long DegCod)
|
||||
|
@ -703,27 +699,12 @@ bool Usr_CheckIfUsrIsAdmOfDeg (long UsrCod,long DegCod)
|
|||
char Query[512];
|
||||
|
||||
/***** Get if a user is administrator of a degree from database *****/
|
||||
sprintf (Query,"SELECT COUNT(*) FROM deg_admin"
|
||||
" WHERE UsrCod='%ld' AND DegCod='%ld'",
|
||||
sprintf (Query,"SELECT COUNT(*) FROM admin"
|
||||
" WHERE UsrCod='%ld' AND Scope='Deg' AND Cod='%ld'",
|
||||
UsrCod,DegCod);
|
||||
return (DB_QueryCOUNT (Query,"can not check if a user is administrator of a degree") != 0);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/********** Check if a user is an administrator of current degree ************/
|
||||
/*****************************************************************************/
|
||||
|
||||
bool Usr_CheckIfUsrIsAdmOfAllDegs (long UsrCod)
|
||||
{
|
||||
char Query[512];
|
||||
|
||||
/***** Get if a user is administrator of all degrees from database *****/
|
||||
sprintf (Query,"SELECT COUNT(*) FROM deg_admin"
|
||||
" WHERE UsrCod='%ld' AND DegCod='%ld'",
|
||||
UsrCod,Usr_SPECIAL_CODE_GLOBAL_ADMIN);
|
||||
return (DB_QueryCOUNT (Query,"can not check if a user is administrator of all degrees") != 0);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/********************* Check if a user is a superuser ************************/
|
||||
/*****************************************************************************/
|
||||
|
@ -733,9 +714,9 @@ bool Usr_CheckIfUsrIsSuperuser (long UsrCod)
|
|||
char Query[512];
|
||||
|
||||
/***** Get if a user is superuser from database *****/
|
||||
sprintf (Query,"SELECT COUNT(*) FROM deg_admin"
|
||||
" WHERE UsrCod='%ld' AND DegCod='%ld'",
|
||||
UsrCod,Usr_SPECIAL_CODE_SUPERUSER);
|
||||
sprintf (Query,"SELECT COUNT(*) FROM admin"
|
||||
" WHERE UsrCod='%ld' AND Scope='Sys'",
|
||||
UsrCod);
|
||||
return (DB_QueryCOUNT (Query,"can not check if a user is superuser") != 0);
|
||||
}
|
||||
|
||||
|
@ -2241,8 +2222,6 @@ static void Usr_SetUsrRoleAndPrefs (void)
|
|||
if (Gbl.CurrentDeg.Deg.DegCod > 0)
|
||||
/* Check if I am and administrator of current degree */
|
||||
ICanBeAdmin = Usr_CheckIfUsrIsAdmOfDeg (Gbl.Usrs.Me.UsrDat.UsrCod,Gbl.CurrentDeg.Deg.DegCod);
|
||||
if (!ICanBeAdmin)
|
||||
ICanBeAdmin = Usr_CheckIfUsrIsAdmOfAllDegs (Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||
|
||||
/***** Check if I belong to current course *****/
|
||||
if (Gbl.CurrentCrs.Crs.CrsCod > 0)
|
||||
|
@ -3964,41 +3943,48 @@ static void Usr_GetAdmsLst (Sco_Scope_t Scope)
|
|||
switch (Scope)
|
||||
{
|
||||
case Sco_SCOPE_PLATFORM:
|
||||
strcpy (Query,"SELECT DISTINCT deg_admin.UsrCod,'Y',usr_data.Sex"
|
||||
" FROM deg_admin,usr_data"
|
||||
" WHERE deg_admin.UsrCod=usr_data.UsrCod "
|
||||
strcpy (Query,"SELECT DISTINCT admin.UsrCod,'Y',usr_data.Sex"
|
||||
" FROM admin,usr_data"
|
||||
" WHERE (admin.Scope='Deg'"
|
||||
" OR admin.Scope='Sys')"
|
||||
" AND admin.UsrCod=usr_data.UsrCod "
|
||||
" ORDER BY usr_data.Surname1,usr_data.Surname2,"
|
||||
"usr_data.FirstName,usr_data.UsrCod");
|
||||
break;
|
||||
case Sco_SCOPE_INSTITUTION:
|
||||
sprintf (Query,"SELECT DISTINCT deg_admin.UsrCod,'Y',usr_data.Sex"
|
||||
" FROM centres,degrees,deg_admin,usr_data"
|
||||
" WHERE ((centres.InsCod='%ld' AND centres.CtrCod=degrees.CtrCod AND degrees.DegCod=deg_admin.DegCod) OR deg_admin.DegCod='%ld')"
|
||||
" AND deg_admin.UsrCod=usr_data.UsrCod "
|
||||
sprintf (Query,"SELECT DISTINCT admin.UsrCod,'Y',usr_data.Sex"
|
||||
" FROM centres,degrees,admin,usr_data"
|
||||
" WHERE ((centres.InsCod='%ld'"
|
||||
" AND centres.CtrCod=degrees.CtrCod"
|
||||
" AND degrees.DegCod=admin.Cod"
|
||||
" AND admin.Scope='Deg')"
|
||||
" OR admin.Scope='Sys')"
|
||||
" AND admin.UsrCod=usr_data.UsrCod "
|
||||
" ORDER BY usr_data.Surname1,usr_data.Surname2,"
|
||||
"usr_data.FirstName,usr_data.UsrCod",
|
||||
Gbl.CurrentIns.Ins.InsCod,
|
||||
Usr_SPECIAL_CODE_GLOBAL_ADMIN);
|
||||
Gbl.CurrentIns.Ins.InsCod);
|
||||
break;
|
||||
case Sco_SCOPE_CENTRE:
|
||||
sprintf (Query,"SELECT DISTINCT deg_admin.UsrCod,'Y',usr_data.Sex"
|
||||
" FROM degrees,deg_admin,usr_data"
|
||||
" WHERE ((degrees.CtrCod='%ld' AND degrees.DegCod=deg_admin.DegCod) OR deg_admin.DegCod='%ld')"
|
||||
" AND deg_admin.UsrCod=usr_data.UsrCod "
|
||||
sprintf (Query,"SELECT DISTINCT admin.UsrCod,'Y',usr_data.Sex"
|
||||
" FROM degrees,admin,usr_data"
|
||||
" WHERE ((degrees.CtrCod='%ld'"
|
||||
" AND degrees.DegCod=admin.Cod"
|
||||
" AND admin.Scope='Deg')"
|
||||
" OR admin.Scope='Sys')"
|
||||
" AND admin.UsrCod=usr_data.UsrCod "
|
||||
" ORDER BY usr_data.Surname1,usr_data.Surname2,"
|
||||
"usr_data.FirstName,usr_data.UsrCod",
|
||||
Gbl.CurrentCtr.Ctr.CtrCod,
|
||||
Usr_SPECIAL_CODE_GLOBAL_ADMIN);
|
||||
Gbl.CurrentCtr.Ctr.CtrCod);
|
||||
break;
|
||||
case Sco_SCOPE_DEGREE:
|
||||
sprintf (Query,"SELECT DISTINCT deg_admin.UsrCod,'Y',usr_data.Sex"
|
||||
" FROM deg_admin,usr_data"
|
||||
" WHERE (deg_admin.DegCod='%ld' OR deg_admin.DegCod='%ld')"
|
||||
" AND deg_admin.UsrCod=usr_data.UsrCod "
|
||||
sprintf (Query,"SELECT DISTINCT admin.UsrCod,'Y',usr_data.Sex"
|
||||
" FROM admin,usr_data"
|
||||
" WHERE ((admin.Scope='Deg' AND admin.Cod='%ld')"
|
||||
" OR admin.Scope='Sys')"
|
||||
" AND admin.UsrCod=usr_data.UsrCod "
|
||||
" ORDER BY usr_data.Surname1,usr_data.Surname2,"
|
||||
"usr_data.FirstName,usr_data.UsrCod",
|
||||
Gbl.CurrentDeg.Deg.DegCod,
|
||||
Usr_SPECIAL_CODE_GLOBAL_ADMIN);
|
||||
Gbl.CurrentDeg.Deg.DegCod);
|
||||
break;
|
||||
default: // not aplicable
|
||||
return;
|
||||
|
|
|
@ -207,7 +207,6 @@ void Usr_BuildFullName (struct UsrData *UsrDat);
|
|||
void Usr_RestrictLengthAndWriteName (struct UsrData *UsrDat,unsigned MaxChars);
|
||||
|
||||
bool Usr_CheckIfUsrIsAdmOfDeg (long UsrCod,long DegCod);
|
||||
bool Usr_CheckIfUsrIsAdmOfAllDegs (long UsrCod);
|
||||
bool Usr_CheckIfUsrIsSuperuser (long UsrCod);
|
||||
bool Usr_CheckIfUsrSharesAnyOfMyCrs (long UsrCod);
|
||||
void Usr_GetMyInstitutions (void);
|
||||
|
|
Loading…
Reference in New Issue