Version 14.71

This commit is contained in:
Antonio Cañas Vargas 2015-01-29 01:03:31 +01:00
parent b25b244028
commit 04d00ba365
14 changed files with 134 additions and 113 deletions

View File

@ -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;

View File

@ -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,

View File

@ -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);
}

View File

@ -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");

View File

@ -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)

View File

@ -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))

View File

@ -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;

View File

@ -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

View File

@ -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");

View File

@ -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;

View File

@ -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:

View File

@ -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:

View File

@ -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;

View File

@ -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);