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;
|
CREATE TABLE clipboard_backup LIKE clipboard;
|
||||||
INSERT INTO clipboard_backup SELECT * FROM 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
|
-- 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 (
|
CREATE TABLE IF NOT EXISTS ann_seen (
|
||||||
AnnCod INT NOT NULL,
|
AnnCod INT NOT NULL,
|
||||||
UsrCod 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)
|
bool ID_ICanSeeTeacherID (struct UsrData *UsrDat)
|
||||||
{
|
{
|
||||||
if (Gbl.Usrs.Me.LoggedRole == Rol_ROLE_DEG_ADMIN)
|
if (Gbl.Usrs.Me.LoggedRole == Rol_ROLE_DEG_ADMIN)
|
||||||
{
|
// If I am an administrator of current degree, I only can see the users' IDs from current degree
|
||||||
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
|
|
||||||
return Usr_CheckIfUsrBelongsToDeg (UsrDat->UsrCod,Gbl.CurrentDeg.Deg.DegCod);
|
return Usr_CheckIfUsrBelongsToDeg (UsrDat->UsrCod,Gbl.CurrentDeg.Deg.DegCod);
|
||||||
}
|
|
||||||
return (Gbl.Usrs.Me.LoggedRole == Rol_ROLE_SUPERUSER);
|
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 *****/
|
/***** Remove user as administrator of any degree *****/
|
||||||
sprintf (Query,"DELETE FROM deg_admin"
|
sprintf (Query,"DELETE FROM admin"
|
||||||
" WHERE UsrCod='%ld'",
|
" WHERE UsrCod='%ld'",
|
||||||
UsrDat->UsrCod);
|
UsrDat->UsrCod);
|
||||||
DB_QueryDELETE (Query,"can not remove a user as administrator");
|
DB_QueryDELETE (Query,"can not remove a user as administrator");
|
||||||
|
|
|
@ -39,11 +39,18 @@
|
||||||
/****************************** Public constants *****************************/
|
/****************************** 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:
|
// 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
|
// 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.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.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)
|
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)
|
switch (Gbl.Scope.Current)
|
||||||
{
|
{
|
||||||
case Sco_SCOPE_PLATFORM: // Show connected users in the whole platform
|
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)
|
if (Gbl.Usrs.Me.LoggedRole != Rol_ROLE_SUPERUSER)
|
||||||
return;
|
return;
|
||||||
break;
|
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
|
case Sco_SCOPE_DEGREE: // Show connected users in the current degree
|
||||||
if (!(Gbl.Usrs.Me.LoggedRole == Rol_ROLE_DEG_ADMIN ||
|
if (!(Gbl.Usrs.Me.LoggedRole == Rol_ROLE_DEG_ADMIN ||
|
||||||
Gbl.Usrs.Me.LoggedRole == Rol_ROLE_SUPERUSER))
|
Gbl.Usrs.Me.LoggedRole == Rol_ROLE_SUPERUSER))
|
||||||
|
@ -589,11 +597,19 @@ static void Con_ShowConnectedUsrsWithARoleBelongingToCurrentLocationOnRightColum
|
||||||
switch (Gbl.Scope.Current)
|
switch (Gbl.Scope.Current)
|
||||||
{
|
{
|
||||||
case Sco_SCOPE_PLATFORM: // Show connected users in the whole platform
|
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)
|
if (Gbl.Usrs.Me.LoggedRole != Rol_ROLE_SUPERUSER)
|
||||||
return;
|
return;
|
||||||
break;
|
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
|
case Sco_SCOPE_DEGREE: // Show connected users in the current degree
|
||||||
if (!(Gbl.Usrs.Me.LoggedRole == Rol_ROLE_DEG_ADMIN ||
|
if (!(Gbl.Usrs.Me.LoggedRole == Rol_ROLE_DEG_ADMIN ||
|
||||||
Gbl.Usrs.Me.LoggedRole == Rol_ROLE_SUPERUSER))
|
Gbl.Usrs.Me.LoggedRole == Rol_ROLE_SUPERUSER))
|
||||||
|
|
|
@ -169,6 +169,24 @@ mysql> DESCRIBE actions_MFU;
|
||||||
"LastClick DATETIME NOT NULL,"
|
"LastClick DATETIME NOT NULL,"
|
||||||
"UNIQUE INDEX(UsrCod,ActCod))");
|
"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 *****/
|
/***** Table ann_seen *****/
|
||||||
/*
|
/*
|
||||||
mysql> DESCRIBE ann_seen;
|
mysql> DESCRIBE ann_seen;
|
||||||
|
@ -185,7 +203,6 @@ mysql> DESCRIBE ann_seen;
|
||||||
"UsrCod INT NOT NULL,"
|
"UsrCod INT NOT NULL,"
|
||||||
"UNIQUE INDEX(AnnCod,UsrCod))");
|
"UNIQUE INDEX(AnnCod,UsrCod))");
|
||||||
|
|
||||||
|
|
||||||
/***** Table announcements *****/
|
/***** Table announcements *****/
|
||||||
/*
|
/*
|
||||||
mysql> DESCRIBE announcements;
|
mysql> DESCRIBE announcements;
|
||||||
|
@ -806,22 +823,6 @@ mysql> DESCRIBE crs_usr_requests;
|
||||||
"RequestTime DATETIME NOT NULL,"
|
"RequestTime DATETIME NOT NULL,"
|
||||||
"UNIQUE INDEX(ReqCod),UNIQUE INDEX(CrsCod,UsrCod),INDEX(UsrCod))");
|
"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 *****/
|
/***** Table deg_types *****/
|
||||||
/*
|
/*
|
||||||
mysql> DESCRIBE deg_types;
|
mysql> DESCRIBE deg_types;
|
||||||
|
|
|
@ -164,12 +164,13 @@ void Deg_SeeDegWithPendingCrss (void)
|
||||||
{
|
{
|
||||||
case Rol_ROLE_DEG_ADMIN:
|
case Rol_ROLE_DEG_ADMIN:
|
||||||
sprintf (Query,"SELECT courses.DegCod,COUNT(*)"
|
sprintf (Query,"SELECT courses.DegCod,COUNT(*)"
|
||||||
" FROM courses,deg_admin,degrees"
|
" FROM admin,courses,degrees"
|
||||||
" WHERE (courses.Status & %u)<>0"
|
" WHERE admin.UsrCod='%ld' AND admin.Scope='Deg'"
|
||||||
" AND courses.DegCod=deg_admin.DegCod AND deg_admin.UsrCod='%ld'"
|
" AND admin.Cod=courses.DegCod"
|
||||||
|
" AND (courses.Status & %u)<>0"
|
||||||
" AND courses.DegCod=degrees.DegCod"
|
" AND courses.DegCod=degrees.DegCod"
|
||||||
" GROUP BY courses.DegCod ORDER BY degrees.ShortName",
|
" 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;
|
break;
|
||||||
case Rol_ROLE_SUPERUSER:
|
case Rol_ROLE_SUPERUSER:
|
||||||
sprintf (Query,"SELECT courses.DegCod,COUNT(*)"
|
sprintf (Query,"SELECT courses.DegCod,COUNT(*)"
|
||||||
|
@ -303,7 +304,7 @@ static void Deg_Configuration (bool PrintView)
|
||||||
/* Link to show courses */
|
/* Link to show courses */
|
||||||
Act_FormStart (ActSeeCrs);
|
Act_FormStart (ActSeeCrs);
|
||||||
Act_LinkFormSubmit (Txt_Courses,The_ClassFormul[Gbl.Prefs.Theme]);
|
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>");
|
fprintf (Gbl.F.Out,"</form>");
|
||||||
|
|
||||||
if (!PrintView)
|
if (!PrintView)
|
||||||
|
@ -2507,8 +2508,9 @@ void Deg_GetListDegsAdminByMe (void)
|
||||||
else // Gbl.Usrs.Me.LoggedRole == Rol_ROLE_DEG_ADMIN
|
else // Gbl.Usrs.Me.LoggedRole == Rol_ROLE_DEG_ADMIN
|
||||||
sprintf (Query,"SELECT degrees.DegCod,degrees.CtrCod,degrees.DegTypCod,degrees.Status,degrees.RequesterUsrCod,"
|
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"
|
"degrees.ShortName,degrees.FullName,degrees.FirstYear,degrees.LastYear,degrees.OptYear,degrees.WWW"
|
||||||
" FROM deg_admin,degrees"
|
" FROM admin,degrees"
|
||||||
" WHERE deg_admin.UsrCod='%ld' AND deg_admin.DegCod<>'-1' AND deg_admin.DegCod=degrees.DegCod"
|
" WHERE admin.UsrCod='%ld' AND admin.Scope='Deg'"
|
||||||
|
" AND admin.Cod=degrees.DegCod"
|
||||||
" ORDER BY degrees.ShortName",
|
" ORDER BY degrees.ShortName",
|
||||||
Gbl.Usrs.Me.UsrDat.UsrCod);
|
Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||||
Gbl.Usrs.Me.MyAdminDegs.Num = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get degrees admin by you");
|
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);
|
Brw_RemoveTree (PathDeg);
|
||||||
|
|
||||||
/***** Remove administrators of this degree *****/
|
/***** 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);
|
DegCod);
|
||||||
DB_QueryDELETE (Query,"can not remove administrators of a degree");
|
DB_QueryDELETE (Query,"can not remove administrators of a degree");
|
||||||
|
|
||||||
|
@ -3904,14 +3906,14 @@ void Deg_GetAndWriteDegreesAdminBy (long UsrCod,unsigned ColSpan)
|
||||||
long DegCod;
|
long DegCod;
|
||||||
|
|
||||||
/***** Get degrees admin by a user from database *****/
|
/***** Get degrees admin by a user from database *****/
|
||||||
sprintf (Query,"(SELECT DegCod,'' AS ShortName,''"
|
sprintf (Query,"(SELECT -1 AS DegCod,'' AS ShortName,''"
|
||||||
" FROM deg_admin"
|
" FROM admin"
|
||||||
" WHERE UsrCod='%ld' AND DegCod<'0')"
|
" WHERE UsrCod='%ld' AND Scope='Sys')"
|
||||||
" UNION "
|
" UNION "
|
||||||
"(SELECT degrees.DegCod,degrees.ShortName AS ShortName,degrees.FullName"
|
"(SELECT degrees.DegCod,degrees.ShortName AS ShortName,degrees.FullName"
|
||||||
" FROM deg_admin,degrees"
|
" FROM admin,degrees"
|
||||||
" WHERE deg_admin.UsrCod='%ld' AND deg_admin.DegCod>='0'"
|
" WHERE admin.UsrCod='%ld' AND admin.Scope='Deg'"
|
||||||
" AND deg_admin.DegCod=degrees.DegCod)"
|
" AND admin.Cod=degrees.DegCod)"
|
||||||
" ORDER BY ShortName",
|
" ORDER BY ShortName",
|
||||||
UsrCod,UsrCod);
|
UsrCod,UsrCod);
|
||||||
if ((NumRows = DB_QuerySELECT (Query,&mysql_res,"can not get degrees admin by a user"))) // If degrees found for this administrator
|
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;
|
break;
|
||||||
case Rol_ROLE_DEG_ADMIN:
|
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')"
|
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"
|
" FROM admin,courses,crs_usr_requests"
|
||||||
" WHERE deg_admin.UsrCod='%ld'"
|
" WHERE admin.UsrCod='%ld' AND admin.Scope='Deg'"
|
||||||
" AND deg_admin.DegCod=courses.DegCod"
|
" AND admin.Cod=courses.DegCod"
|
||||||
" AND courses.CrsCod=crs_usr_requests.CrsCod"
|
" AND courses.CrsCod=crs_usr_requests.CrsCod"
|
||||||
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
|
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
|
||||||
" ORDER BY crs_usr_requests.RequestTime DESC",
|
" ORDER BY crs_usr_requests.RequestTime DESC",
|
||||||
|
@ -2115,11 +2115,11 @@ void Enr_ShowEnrollmentRequests (void)
|
||||||
break;
|
break;
|
||||||
case Rol_ROLE_DEG_ADMIN:
|
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')"
|
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"
|
" FROM admin,centres,degrees,courses,crs_usr_requests"
|
||||||
" WHERE deg_admin.UsrCod='%ld'"
|
" WHERE admin.UsrCod='%ld' AND admin.Scope='Deg'"
|
||||||
" AND centres.InsCod='%ld'"
|
" AND centres.InsCod='%ld'"
|
||||||
" AND deg_admin.DegCod=degrees.DegCod"
|
" AND admin.Cod=degrees.DegCod"
|
||||||
" AND deg_admin.DegCod=courses.DegCod"
|
" AND admin.Cod=courses.DegCod"
|
||||||
" AND degrees.CtrCod=centres.CtrCod"
|
" AND degrees.CtrCod=centres.CtrCod"
|
||||||
" AND courses.CrsCod=crs_usr_requests.CrsCod"
|
" AND courses.CrsCod=crs_usr_requests.CrsCod"
|
||||||
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
|
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
|
||||||
|
@ -2164,11 +2164,11 @@ void Enr_ShowEnrollmentRequests (void)
|
||||||
break;
|
break;
|
||||||
case Rol_ROLE_DEG_ADMIN:
|
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')"
|
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"
|
" FROM admin,degrees,courses,crs_usr_requests"
|
||||||
" WHERE deg_admin.UsrCod='%ld'"
|
" WHERE admin.UsrCod='%ld' AND admin.Scope='Deg'"
|
||||||
" AND degrees.CtrCod='%ld'"
|
" AND degrees.CtrCod='%ld'"
|
||||||
" AND deg_admin.DegCod=degrees.DegCod"
|
" AND admin.Cod=degrees.DegCod"
|
||||||
" AND deg_admin.DegCod=courses.DegCod"
|
" AND admin.Cod=courses.DegCod"
|
||||||
" AND courses.CrsCod=crs_usr_requests.CrsCod"
|
" AND courses.CrsCod=crs_usr_requests.CrsCod"
|
||||||
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
|
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
|
||||||
" ORDER BY crs_usr_requests.RequestTime DESC",
|
" 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
|
if (Usr_CheckIfUsrIsAdmOfDeg (UsrDat->UsrCod,Gbl.CurrentDeg.Deg.DegCod)) // User is administrator of current degree
|
||||||
{
|
{
|
||||||
/***** Remove user from the table of courses-users *****/
|
/***** Remove user from the table of courses-users *****/
|
||||||
sprintf (Query,"DELETE FROM deg_admin"
|
sprintf (Query,"DELETE FROM admin"
|
||||||
" WHERE UsrCod='%ld' AND DegCod='%ld'",
|
" WHERE UsrCod='%ld' AND Scope='Deg' AND Cod='%ld'",
|
||||||
UsrDat->UsrCod,Gbl.CurrentDeg.Deg.DegCod);
|
UsrDat->UsrCod,Gbl.CurrentDeg.Deg.DegCod);
|
||||||
DB_QueryDELETE (Query,"can not remove an administrator from a degree");
|
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
|
// and I want to be a teacher (checked before calling this function
|
||||||
// to not send requests to be a student to admins)
|
// to not send requests to be a student to admins)
|
||||||
// ==> send notification to administrators or superusers
|
// ==> send notification to administrators or superusers
|
||||||
sprintf (Query,"SELECT UsrCod FROM deg_admin"
|
sprintf (Query,"SELECT UsrCod FROM admin"
|
||||||
" WHERE (DegCod='%ld' OR DegCod<=0) AND UsrCod<>'%ld'",
|
" 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.CurrentDeg.Deg.DegCod,
|
||||||
Gbl.Usrs.Me.UsrDat.UsrCod);
|
Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -811,9 +811,7 @@ bool Pwd_CheckIfICanChangeOtherUsrPassword (long UsrCod)
|
||||||
switch (Gbl.Usrs.Me.LoggedRole)
|
switch (Gbl.Usrs.Me.LoggedRole)
|
||||||
{
|
{
|
||||||
case Rol_ROLE_DEG_ADMIN:
|
case Rol_ROLE_DEG_ADMIN:
|
||||||
if (Usr_CheckIfUsrIsAdmOfAllDegs (Gbl.Usrs.Me.UsrDat.UsrCod)) // If I am admin of all degrees
|
/* If I am an administrator of current degree,
|
||||||
return true;
|
|
||||||
/* If I am an administrator of current degree, but not of all degrees,
|
|
||||||
I only can change the password of users from current degree */
|
I only can change the password of users from current degree */
|
||||||
return Usr_CheckIfUsrBelongsToDeg (UsrCod,Gbl.CurrentDeg.Deg.DegCod);
|
return Usr_CheckIfUsrBelongsToDeg (UsrCod,Gbl.CurrentDeg.Deg.DegCod);
|
||||||
case Rol_ROLE_SUPERUSER:
|
case Rol_ROLE_SUPERUSER:
|
||||||
|
|
|
@ -125,9 +125,7 @@ bool Pho_CheckIfICanChangeOtherUsrPhoto (long UsrCod)
|
||||||
case Rol_ROLE_TEACHER:
|
case Rol_ROLE_TEACHER:
|
||||||
return Usr_CheckIfUsrBelongsToCrs (UsrCod,Gbl.CurrentCrs.Crs.CrsCod);
|
return Usr_CheckIfUsrBelongsToCrs (UsrCod,Gbl.CurrentCrs.Crs.CrsCod);
|
||||||
case Rol_ROLE_DEG_ADMIN:
|
case Rol_ROLE_DEG_ADMIN:
|
||||||
if (Usr_CheckIfUsrIsAdmOfAllDegs (Gbl.Usrs.Me.UsrDat.UsrCod)) // If I am admin of all degrees
|
/* If I am an administrator of current degree,
|
||||||
return true;
|
|
||||||
/* If I am an administrator of current degree, but not of all degrees,
|
|
||||||
I only can change the photo of users from current degree */
|
I only can change the photo of users from current degree */
|
||||||
return Usr_CheckIfUsrBelongsToDeg (UsrCod,Gbl.CurrentDeg.Deg.DegCod);
|
return Usr_CheckIfUsrBelongsToDeg (UsrCod,Gbl.CurrentDeg.Deg.DegCod);
|
||||||
case Rol_ROLE_SUPERUSER:
|
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"
|
"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_USR 9
|
||||||
#define Usr_NUM_MAIN_FIELDS_DATA_ADM 8
|
#define Usr_NUM_MAIN_FIELDS_DATA_ADM 8
|
||||||
#define Usr_NUM_ALL_FIELDS_DATA_INV 17
|
#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)
|
bool Usr_CheckIfUsrIsAdmOfDeg (long UsrCod,long DegCod)
|
||||||
|
@ -703,27 +699,12 @@ bool Usr_CheckIfUsrIsAdmOfDeg (long UsrCod,long DegCod)
|
||||||
char Query[512];
|
char Query[512];
|
||||||
|
|
||||||
/***** Get if a user is administrator of a degree from database *****/
|
/***** Get if a user is administrator of a degree from database *****/
|
||||||
sprintf (Query,"SELECT COUNT(*) FROM deg_admin"
|
sprintf (Query,"SELECT COUNT(*) FROM admin"
|
||||||
" WHERE UsrCod='%ld' AND DegCod='%ld'",
|
" WHERE UsrCod='%ld' AND Scope='Deg' AND Cod='%ld'",
|
||||||
UsrCod,DegCod);
|
UsrCod,DegCod);
|
||||||
return (DB_QueryCOUNT (Query,"can not check if a user is administrator of a degree") != 0);
|
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 ************************/
|
/********************* Check if a user is a superuser ************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -733,9 +714,9 @@ bool Usr_CheckIfUsrIsSuperuser (long UsrCod)
|
||||||
char Query[512];
|
char Query[512];
|
||||||
|
|
||||||
/***** Get if a user is superuser from database *****/
|
/***** Get if a user is superuser from database *****/
|
||||||
sprintf (Query,"SELECT COUNT(*) FROM deg_admin"
|
sprintf (Query,"SELECT COUNT(*) FROM admin"
|
||||||
" WHERE UsrCod='%ld' AND DegCod='%ld'",
|
" WHERE UsrCod='%ld' AND Scope='Sys'",
|
||||||
UsrCod,Usr_SPECIAL_CODE_SUPERUSER);
|
UsrCod);
|
||||||
return (DB_QueryCOUNT (Query,"can not check if a user is superuser") != 0);
|
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)
|
if (Gbl.CurrentDeg.Deg.DegCod > 0)
|
||||||
/* Check if I am and administrator of current degree */
|
/* Check if I am and administrator of current degree */
|
||||||
ICanBeAdmin = Usr_CheckIfUsrIsAdmOfDeg (Gbl.Usrs.Me.UsrDat.UsrCod,Gbl.CurrentDeg.Deg.DegCod);
|
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 *****/
|
/***** Check if I belong to current course *****/
|
||||||
if (Gbl.CurrentCrs.Crs.CrsCod > 0)
|
if (Gbl.CurrentCrs.Crs.CrsCod > 0)
|
||||||
|
@ -3964,41 +3943,48 @@ static void Usr_GetAdmsLst (Sco_Scope_t Scope)
|
||||||
switch (Scope)
|
switch (Scope)
|
||||||
{
|
{
|
||||||
case Sco_SCOPE_PLATFORM:
|
case Sco_SCOPE_PLATFORM:
|
||||||
strcpy (Query,"SELECT DISTINCT deg_admin.UsrCod,'Y',usr_data.Sex"
|
strcpy (Query,"SELECT DISTINCT admin.UsrCod,'Y',usr_data.Sex"
|
||||||
" FROM deg_admin,usr_data"
|
" FROM admin,usr_data"
|
||||||
" WHERE deg_admin.UsrCod=usr_data.UsrCod "
|
" WHERE (admin.Scope='Deg'"
|
||||||
|
" OR admin.Scope='Sys')"
|
||||||
|
" AND admin.UsrCod=usr_data.UsrCod "
|
||||||
" ORDER BY usr_data.Surname1,usr_data.Surname2,"
|
" ORDER BY usr_data.Surname1,usr_data.Surname2,"
|
||||||
"usr_data.FirstName,usr_data.UsrCod");
|
"usr_data.FirstName,usr_data.UsrCod");
|
||||||
break;
|
break;
|
||||||
case Sco_SCOPE_INSTITUTION:
|
case Sco_SCOPE_INSTITUTION:
|
||||||
sprintf (Query,"SELECT DISTINCT deg_admin.UsrCod,'Y',usr_data.Sex"
|
sprintf (Query,"SELECT DISTINCT admin.UsrCod,'Y',usr_data.Sex"
|
||||||
" FROM centres,degrees,deg_admin,usr_data"
|
" FROM centres,degrees,admin,usr_data"
|
||||||
" WHERE ((centres.InsCod='%ld' AND centres.CtrCod=degrees.CtrCod AND degrees.DegCod=deg_admin.DegCod) OR deg_admin.DegCod='%ld')"
|
" WHERE ((centres.InsCod='%ld'"
|
||||||
" AND deg_admin.UsrCod=usr_data.UsrCod "
|
" 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,"
|
" ORDER BY usr_data.Surname1,usr_data.Surname2,"
|
||||||
"usr_data.FirstName,usr_data.UsrCod",
|
"usr_data.FirstName,usr_data.UsrCod",
|
||||||
Gbl.CurrentIns.Ins.InsCod,
|
Gbl.CurrentIns.Ins.InsCod);
|
||||||
Usr_SPECIAL_CODE_GLOBAL_ADMIN);
|
|
||||||
break;
|
break;
|
||||||
case Sco_SCOPE_CENTRE:
|
case Sco_SCOPE_CENTRE:
|
||||||
sprintf (Query,"SELECT DISTINCT deg_admin.UsrCod,'Y',usr_data.Sex"
|
sprintf (Query,"SELECT DISTINCT admin.UsrCod,'Y',usr_data.Sex"
|
||||||
" FROM degrees,deg_admin,usr_data"
|
" FROM degrees,admin,usr_data"
|
||||||
" WHERE ((degrees.CtrCod='%ld' AND degrees.DegCod=deg_admin.DegCod) OR deg_admin.DegCod='%ld')"
|
" WHERE ((degrees.CtrCod='%ld'"
|
||||||
" AND deg_admin.UsrCod=usr_data.UsrCod "
|
" 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,"
|
" ORDER BY usr_data.Surname1,usr_data.Surname2,"
|
||||||
"usr_data.FirstName,usr_data.UsrCod",
|
"usr_data.FirstName,usr_data.UsrCod",
|
||||||
Gbl.CurrentCtr.Ctr.CtrCod,
|
Gbl.CurrentCtr.Ctr.CtrCod);
|
||||||
Usr_SPECIAL_CODE_GLOBAL_ADMIN);
|
|
||||||
break;
|
break;
|
||||||
case Sco_SCOPE_DEGREE:
|
case Sco_SCOPE_DEGREE:
|
||||||
sprintf (Query,"SELECT DISTINCT deg_admin.UsrCod,'Y',usr_data.Sex"
|
sprintf (Query,"SELECT DISTINCT admin.UsrCod,'Y',usr_data.Sex"
|
||||||
" FROM deg_admin,usr_data"
|
" FROM admin,usr_data"
|
||||||
" WHERE (deg_admin.DegCod='%ld' OR deg_admin.DegCod='%ld')"
|
" WHERE ((admin.Scope='Deg' AND admin.Cod='%ld')"
|
||||||
" AND deg_admin.UsrCod=usr_data.UsrCod "
|
" OR admin.Scope='Sys')"
|
||||||
|
" AND admin.UsrCod=usr_data.UsrCod "
|
||||||
" ORDER BY usr_data.Surname1,usr_data.Surname2,"
|
" ORDER BY usr_data.Surname1,usr_data.Surname2,"
|
||||||
"usr_data.FirstName,usr_data.UsrCod",
|
"usr_data.FirstName,usr_data.UsrCod",
|
||||||
Gbl.CurrentDeg.Deg.DegCod,
|
Gbl.CurrentDeg.Deg.DegCod);
|
||||||
Usr_SPECIAL_CODE_GLOBAL_ADMIN);
|
|
||||||
break;
|
break;
|
||||||
default: // not aplicable
|
default: // not aplicable
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -207,7 +207,6 @@ void Usr_BuildFullName (struct UsrData *UsrDat);
|
||||||
void Usr_RestrictLengthAndWriteName (struct UsrData *UsrDat,unsigned MaxChars);
|
void Usr_RestrictLengthAndWriteName (struct UsrData *UsrDat,unsigned MaxChars);
|
||||||
|
|
||||||
bool Usr_CheckIfUsrIsAdmOfDeg (long UsrCod,long DegCod);
|
bool Usr_CheckIfUsrIsAdmOfDeg (long UsrCod,long DegCod);
|
||||||
bool Usr_CheckIfUsrIsAdmOfAllDegs (long UsrCod);
|
|
||||||
bool Usr_CheckIfUsrIsSuperuser (long UsrCod);
|
bool Usr_CheckIfUsrIsSuperuser (long UsrCod);
|
||||||
bool Usr_CheckIfUsrSharesAnyOfMyCrs (long UsrCod);
|
bool Usr_CheckIfUsrSharesAnyOfMyCrs (long UsrCod);
|
||||||
void Usr_GetMyInstitutions (void);
|
void Usr_GetMyInstitutions (void);
|
||||||
|
|
Loading…
Reference in New Issue