Version 16.45.2

This commit is contained in:
Antonio Cañas Vargas 2016-10-27 22:16:03 +02:00
parent 902437f326
commit db4c7737b0
8 changed files with 103 additions and 136 deletions

View File

@ -154,13 +154,14 @@
/****************************** Public constants *****************************/
/*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 16.45.1 (2016-10-27)"
#define Log_PLATFORM_VERSION "SWAD 16.45.2 (2016-10-27)"
#define CSS_FILE "swad16.32.1.css"
#define JS_FILE "swad15.238.1.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.45.2: Oct 27, 2016 Code refactoring related with scopes. (205896 lines)
Version 16.45.1: Oct 27, 2016 Fixed bugs in surveys. (? lines)
Version 16.45: Oct 27, 2016 Changes in database table for surveys. Not finished. (205927 lines)
10 changes necessary in database:

View File

@ -2230,7 +2230,7 @@ static void Crs_EmptyCourseCompletely (long CrsCod)
Att_RemoveCrsAttEvents (CrsCod);
/***** Remove surveys of the course *****/
Svy_RemoveCrsSurveys (CrsCod);
Svy_RemoveSurveys (Sco_SCOPE_CRS,CrsCod);
/***** Remove notices in the course *****/
/* Copy all notices from the course to table of deleted notices */

View File

@ -137,6 +137,7 @@ void Deg_SeePending (void)
void Deg_SeeDegWithPendingCrss (void)
{
extern const char *Sco_ScopeDB[Sco_NUM_SCOPES];
extern const char *Txt_Degrees_with_pending_courses;
extern const char *Txt_Degree;
extern const char *Txt_Courses_ABBREVIATION;
@ -155,12 +156,13 @@ void Deg_SeeDegWithPendingCrss (void)
case Rol_DEG_ADM:
sprintf (Query,"SELECT courses.DegCod,COUNT(*)"
" FROM admin,courses,degrees"
" WHERE admin.UsrCod='%ld' AND admin.Scope='Deg'"
" WHERE admin.UsrCod='%ld' AND admin.Scope='%s'"
" AND admin.Cod=courses.DegCod"
" AND (courses.Status & %u)<>0"
" AND courses.DegCod=degrees.DegCod"
" GROUP BY courses.DegCod ORDER BY degrees.ShortName",
Gbl.Usrs.Me.UsrDat.UsrCod,(unsigned) Crs_STATUS_BIT_PENDING);
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_DEG],
(unsigned) Crs_STATUS_BIT_PENDING);
break;
case Rol_SYS_ADM:
sprintf (Query,"SELECT courses.DegCod,COUNT(*)"
@ -2250,6 +2252,7 @@ long Deg_GetInsCodOfDegreeByCod (long DegCod)
void Deg_RemoveDegreeCompletely (long DegCod)
{
extern const char *Sco_ScopeDB[Sco_NUM_SCOPES];
char Query[512];
MYSQL_RES *mysql_res;
MYSQL_ROW row;
@ -2281,8 +2284,10 @@ void Deg_RemoveDegreeCompletely (long DegCod)
/* Free structure that stores the query result */
DB_FreeMySQLResult (&mysql_res);
/***** Remove surveys of the degree (not including surveys of courses in degree, already removed) *****/
Svy_RemoveDegSurveys (DegCod);
/***** Remove surveys of the degree
(not including surveys of courses in degree,
already removed) *****/
Svy_RemoveSurveys (Sco_SCOPE_DEG,DegCod);
/***** Remove all the threads and posts in degree forums *****/
/* Remove disabled posts */
@ -2327,8 +2332,8 @@ void Deg_RemoveDegreeCompletely (long DegCod)
Fil_RemoveTree (PathDeg);
/***** Remove administrators of this degree *****/
sprintf (Query,"DELETE FROM admin WHERE Scope='Deg' AND Cod='%ld'",
DegCod);
sprintf (Query,"DELETE FROM admin WHERE Scope='%s' AND Cod='%ld'",
Sco_ScopeDB[Sco_SCOPE_DEG],DegCod);
DB_QueryDELETE (Query,"can not remove administrators of a degree");
/***** Remove the degree *****/
@ -2854,6 +2859,7 @@ unsigned Deg_GetNumDegsWithUsrs (Rol_Role_t Role,const char *SubQuery)
void Deg_GetAndWriteInsCtrDegAdminBy (long UsrCod,unsigned ColSpan)
{
extern const char *Sco_ScopeDB[Sco_NUM_SCOPES];
extern const char *Txt_all_degrees;
char Query[1024];
MYSQL_RES *mysql_res;
@ -2868,30 +2874,31 @@ void Deg_GetAndWriteInsCtrDegAdminBy (long UsrCod,unsigned ColSpan)
sprintf (Query,"(SELECT '%u' AS S,'-1' AS Cod,'' AS FullName"
" FROM admin"
" WHERE UsrCod='%ld'"
" AND Scope='Sys')"
" AND Scope='%s')"
" UNION "
"(SELECT '%u' AS S,admin.Cod,institutions.FullName"
" FROM admin,institutions"
" WHERE admin.UsrCod='%ld'"
" AND admin.Scope='Ins'"
" AND admin.Scope='%s'"
" AND admin.Cod=institutions.InsCod)"
" UNION "
"(SELECT '%u' AS S,admin.Cod,centres.FullName"
" FROM admin,centres"
" WHERE admin.UsrCod='%ld'"
" AND admin.Scope='Ctr'"
" AND admin.Scope='%s'"
" AND admin.Cod=centres.CtrCod)"
" UNION "
"(SELECT '%u' AS S,admin.Cod,degrees.FullName"
" FROM admin,degrees"
" WHERE admin.UsrCod='%ld'"
" AND admin.Scope='Deg'"
" AND admin.Scope='%s'"
" AND admin.Cod=degrees.DegCod)"
" ORDER BY S,FullName",
(unsigned) Sco_SCOPE_SYS,UsrCod,
(unsigned) Sco_SCOPE_INS,UsrCod,
(unsigned) Sco_SCOPE_CTR,UsrCod,
(unsigned) Sco_SCOPE_DEG,UsrCod);
(unsigned) Sco_SCOPE_SYS,UsrCod,Sco_ScopeDB[Sco_SCOPE_SYS],
(unsigned) Sco_SCOPE_INS,UsrCod,Sco_ScopeDB[Sco_SCOPE_INS],
(unsigned) Sco_SCOPE_CTR,UsrCod,Sco_ScopeDB[Sco_SCOPE_CTR],
(unsigned) Sco_SCOPE_DEG,UsrCod,Sco_ScopeDB[Sco_SCOPE_DEG]);
if ((NumRows = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get institutions, centres, degrees admin by a user")))
/***** Get the list of degrees *****/
for (NumRow = 1;

View File

@ -2080,6 +2080,7 @@ void Enr_UpdateEnrollmentRequests (void)
static void Enr_ShowEnrollmentRequestsGivenRoles (unsigned RolesSelected)
{
extern const char *Sco_ScopeDB[Sco_NUM_SCOPES];
extern const char *The_ClassForm[The_NUM_THEMES];
extern const char *Txt_Enrollment_requests;
extern const char *Txt_Scope;
@ -2190,12 +2191,12 @@ static void Enr_ShowEnrollmentRequestsGivenRoles (unsigned RolesSelected)
"crs_usr_requests.Role,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" FROM admin,courses,crs_usr_requests"
" WHERE admin.UsrCod='%ld' AND admin.Scope='Deg'"
" WHERE admin.UsrCod='%ld' AND admin.Scope='%s'"
" 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",
Gbl.Usrs.Me.UsrDat.UsrCod,
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_DEG],
RolesSelected);
break;
case Rol_CTR_ADM:
@ -2206,13 +2207,13 @@ static void Enr_ShowEnrollmentRequestsGivenRoles (unsigned RolesSelected)
"crs_usr_requests.Role,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" FROM admin,degrees,courses,crs_usr_requests"
" WHERE admin.UsrCod='%ld' AND admin.Scope='Ctr'"
" WHERE admin.UsrCod='%ld' AND admin.Scope='%s'"
" AND admin.Cod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr_requests.CrsCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
" ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Usrs.Me.UsrDat.UsrCod,
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_CTR],
RolesSelected);
break;
case Rol_INS_ADM:
@ -2223,14 +2224,14 @@ static void Enr_ShowEnrollmentRequestsGivenRoles (unsigned RolesSelected)
"crs_usr_requests.Role,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" FROM admin,centres,degrees,courses,crs_usr_requests"
" WHERE admin.UsrCod='%ld' AND admin.Scope='Ins'"
" WHERE admin.UsrCod='%ld' AND admin.Scope='%s'"
" AND admin.Cod=centres.InsCod"
" AND centres.CtrCod=degrees.CtrCod"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr_requests.CrsCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
" ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Usrs.Me.UsrDat.UsrCod,
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_INS],
RolesSelected);
break;
case Rol_SYS_ADM:
@ -2284,7 +2285,7 @@ static void Enr_ShowEnrollmentRequestsGivenRoles (unsigned RolesSelected)
"crs_usr_requests.Role,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" FROM admin,institutions,centres,degrees,courses,crs_usr_requests"
" WHERE admin.UsrCod='%ld' AND admin.Scope='Deg'"
" WHERE admin.UsrCod='%ld' AND admin.Scope='%s'"
" AND admin.Cod=degrees.DegCod"
" AND degrees.CtrCod=centres.CtrCod"
" AND centres.InsCod=institutions.InsCod"
@ -2293,7 +2294,7 @@ static void Enr_ShowEnrollmentRequestsGivenRoles (unsigned RolesSelected)
" AND courses.CrsCod=crs_usr_requests.CrsCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
" ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Usrs.Me.UsrDat.UsrCod,
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_DEG],
Gbl.CurrentCty.Cty.CtyCod,
RolesSelected);
break;
@ -2305,7 +2306,7 @@ static void Enr_ShowEnrollmentRequestsGivenRoles (unsigned RolesSelected)
"crs_usr_requests.Role,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" FROM admin,institutions,centres,degrees,courses,crs_usr_requests"
" WHERE admin.UsrCod='%ld' AND admin.Scope='Ctr'"
" WHERE admin.UsrCod='%ld' AND admin.Scope='%s'"
" AND admin.Cod=centres.CtrCod"
" AND centres.InsCod=institutions.InsCod"
" AND institutions.CtyCod='%ld'"
@ -2314,7 +2315,7 @@ static void Enr_ShowEnrollmentRequestsGivenRoles (unsigned RolesSelected)
" AND courses.CrsCod=crs_usr_requests.CrsCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
" ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Usrs.Me.UsrDat.UsrCod,
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_CTR],
Gbl.CurrentCty.Cty.CtyCod,
RolesSelected);
break;
@ -2326,7 +2327,7 @@ static void Enr_ShowEnrollmentRequestsGivenRoles (unsigned RolesSelected)
"crs_usr_requests.Role,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" FROM admin,institutions,centres,degrees,courses,crs_usr_requests"
" WHERE admin.UsrCod='%ld' AND admin.Scope='Ins'"
" WHERE admin.UsrCod='%ld' AND admin.Scope='%s'"
" AND admin.Cod=institutions.InsCod"
" AND institutions.CtyCod='%ld'"
" AND institutions.InsCod=centres.InsCod"
@ -2335,7 +2336,7 @@ static void Enr_ShowEnrollmentRequestsGivenRoles (unsigned RolesSelected)
" AND courses.CrsCod=crs_usr_requests.CrsCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
" ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Usrs.Me.UsrDat.UsrCod,
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_INS],
Gbl.CurrentCty.Cty.CtyCod,
RolesSelected);
break;
@ -2395,7 +2396,7 @@ static void Enr_ShowEnrollmentRequestsGivenRoles (unsigned RolesSelected)
"crs_usr_requests.Role,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" FROM admin,centres,degrees,courses,crs_usr_requests"
" WHERE admin.UsrCod='%ld' AND admin.Scope='Deg'"
" WHERE admin.UsrCod='%ld' AND admin.Scope='%s'"
" AND admin.Cod=degrees.DegCod"
" AND degrees.CtrCod=centres.CtrCod"
" AND centres.InsCod='%ld'"
@ -2403,7 +2404,7 @@ static void Enr_ShowEnrollmentRequestsGivenRoles (unsigned RolesSelected)
" AND courses.CrsCod=crs_usr_requests.CrsCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
" ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Usrs.Me.UsrDat.UsrCod,
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_DEG],
Gbl.CurrentIns.Ins.InsCod,
RolesSelected);
break;
@ -2415,7 +2416,7 @@ static void Enr_ShowEnrollmentRequestsGivenRoles (unsigned RolesSelected)
"crs_usr_requests.Role,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" FROM admin,centres,degrees,courses,crs_usr_requests"
" WHERE admin.UsrCod='%ld' AND admin.Scope='Ctr'"
" WHERE admin.UsrCod='%ld' AND admin.Scope='%s'"
" AND admin.Cod=centres.CtrCod"
" AND centres.InsCod='%ld'"
" AND centres.CtrCod=degrees.CtrCod"
@ -2423,7 +2424,7 @@ static void Enr_ShowEnrollmentRequestsGivenRoles (unsigned RolesSelected)
" AND courses.CrsCod=crs_usr_requests.CrsCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
" ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Usrs.Me.UsrDat.UsrCod,
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_CTR],
Gbl.CurrentIns.Ins.InsCod,
RolesSelected);
break;
@ -2482,14 +2483,14 @@ static void Enr_ShowEnrollmentRequestsGivenRoles (unsigned RolesSelected)
"crs_usr_requests.Role,"
"UNIX_TIMESTAMP(crs_usr_requests.RequestTime)"
" FROM admin,degrees,courses,crs_usr_requests"
" WHERE admin.UsrCod='%ld' AND admin.Scope='Deg'"
" WHERE admin.UsrCod='%ld' AND admin.Scope='%s'"
" AND admin.Cod=degrees.DegCod"
" AND degrees.CtrCod='%ld'"
" AND degrees.DegCod=courses.DegCod"
" AND courses.CrsCod=crs_usr_requests.CrsCod"
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
" ORDER BY crs_usr_requests.RequestTime DESC",
Gbl.Usrs.Me.UsrDat.UsrCod,
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_DEG],
Gbl.CurrentCtr.Ctr.CtrCod,
RolesSelected);
break;

View File

@ -1265,14 +1265,15 @@ unsigned Ntf_StoreNotifyEventsToAllUsrs (Ntf_NotifyEvent_t NotifyEvent,long Cod)
// to not send requests to be a student to admins)
// ==> send notification to administrators or superusers
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'))"
" WHERE (Scope='%s'"
" OR (Scope='%s' AND Cod='%ld')"
" OR (Scope='%s' AND Cod='%ld')"
" OR (Scope='%s' AND Cod='%ld'))"
" AND UsrCod<>'%ld'",
Gbl.CurrentIns.Ins.InsCod,
Gbl.CurrentCtr.Ctr.CtrCod,
Gbl.CurrentDeg.Deg.DegCod,
Sco_ScopeDB[Sco_SCOPE_SYS],
Sco_ScopeDB[Sco_SCOPE_INS],Gbl.CurrentIns.Ins.InsCod,
Sco_ScopeDB[Sco_SCOPE_CTR],Gbl.CurrentCtr.Ctr.CtrCod,
Sco_ScopeDB[Sco_SCOPE_DEG],Gbl.CurrentDeg.Deg.DegCod,
Gbl.Usrs.Me.UsrDat.UsrCod);
break;
case Ntf_EVENT_TIMELINE_COMMENT: // New comment to one of my social notes or comments

View File

@ -2176,8 +2176,7 @@ static void Svy_CreateSurvey (struct Survey *Svy,const char *Txt)
" VALUES ('%s','%ld','N','%u','%ld',"
"FROM_UNIXTIME('%ld'),FROM_UNIXTIME('%ld'),"
"'%s','%s')",
Sco_ScopeDB[Svy->Scope],
Svy->Cod,
Sco_ScopeDB[Svy->Scope],Svy->Cod,
Svy->Roles,
Gbl.Usrs.Me.UsrDat.UsrCod,
Svy->TimeUTC[Svy_START_TIME],
@ -2397,56 +2396,11 @@ static void Svy_GetAndWriteNamesOfGrpsAssociatedToSvy (struct Survey *Svy)
}
/*****************************************************************************/
/********************* Remove all the surveys of a degree ********************/
/************ Remove all the surveys of a place on the hierarchy *************/
/************ (country, institution, centre, degree or course) *************/
/*****************************************************************************/
void Svy_RemoveDegSurveys (long DegCod)
{
extern const char *Sco_ScopeDB[Sco_NUM_SCOPES];
char Query[512];
/***** Remove all the users in degree surveys
(not including surveys of courses in degree) *****/
sprintf (Query,"DELETE FROM svy_users"
" USING surveys,svy_users"
" WHERE surveys.Scope='%s' AND surveys.Cod='%ld'"
" AND surveys.SvyCod=svy_users.SvyCod",
Sco_ScopeDB[Sco_SCOPE_DEG],DegCod);
DB_QueryDELETE (Query,"can not remove users"
" who had answered surveys in a degree");
/***** Remove all the answers in degree surveys
(not including surveys of courses in degree) *****/
sprintf (Query,"DELETE FROM svy_answers"
" USING surveys,svy_questions,svy_answers"
" WHERE surveys.Scope='%s' AND surveys.Cod='%ld'"
" AND surveys.SvyCod=svy_questions.SvyCod"
" AND svy_questions.QstCod=svy_answers.QstCod",
Sco_ScopeDB[Sco_SCOPE_DEG],DegCod);
DB_QueryDELETE (Query,"can not remove answers of surveys in a degree");
/***** Remove all the questions in this survey
(not including surveys of courses in degree) *****/
sprintf (Query,"DELETE FROM svy_questions"
" USING surveys,svy_questions"
" WHERE surveys.Scope='%s' AND surveys.Cod='%ld'"
" AND surveys.SvyCod=svy_questions.SvyCod",
Sco_ScopeDB[Sco_SCOPE_DEG],DegCod);
DB_QueryDELETE (Query,"can not remove questions of surveys in a degree");
/***** Remove degree surveys
(not including surveys of courses in degree) *****/
sprintf (Query,"DELETE FROM surveys"
" WHERE Scope='%s' AND Cod='%ld'",
Sco_ScopeDB[Sco_SCOPE_DEG],DegCod);
DB_QueryDELETE (Query,"can not remove all the surveys of a course");
}
/*****************************************************************************/
/********************* Remove all the surveys of a course ********************/
/*****************************************************************************/
void Svy_RemoveCrsSurveys (long CrsCod)
void Svy_RemoveSurveys (Sco_Scope_t Scope,long Cod)
{
extern const char *Sco_ScopeDB[Sco_NUM_SCOPES];
char Query[512];
@ -2456,9 +2410,9 @@ void Svy_RemoveCrsSurveys (long CrsCod)
" USING surveys,svy_users"
" WHERE surveys.Scope='%s' AND surveys.Cod='%ld'"
" AND surveys.SvyCod=svy_users.SvyCod",
Sco_ScopeDB[Sco_SCOPE_CRS],CrsCod);
Sco_ScopeDB[Scope],Cod);
DB_QueryDELETE (Query,"can not remove users"
" who had answered surveys in a course");
" who had answered surveys in a place on the hierarchy");
/***** Remove all the answers in course surveys *****/
sprintf (Query,"DELETE FROM svy_answers"
@ -2466,31 +2420,31 @@ void Svy_RemoveCrsSurveys (long CrsCod)
" WHERE surveys.Scope='%s' AND surveys.Cod='%ld'"
" AND surveys.SvyCod=svy_questions.SvyCod"
" AND svy_questions.QstCod=svy_answers.QstCod",
Sco_ScopeDB[Sco_SCOPE_CRS],CrsCod);
DB_QueryDELETE (Query,"can not remove answers of surveys in a course");
Sco_ScopeDB[Scope],Cod);
DB_QueryDELETE (Query,"can not remove answers of surveys in a place on the hierarchy");
/***** Remove all the questions in course surveys *****/
sprintf (Query,"DELETE FROM svy_questions"
" USING surveys,svy_questions"
" WHERE surveys.Scope='%s' AND surveys.Cod='%ld'"
" AND surveys.SvyCod=svy_questions.SvyCod",
Sco_ScopeDB[Sco_SCOPE_CRS],CrsCod);
DB_QueryDELETE (Query,"can not remove questions of surveys in a course");
Sco_ScopeDB[Scope],Cod);
DB_QueryDELETE (Query,"can not remove questions of surveys in a place on the hierarchy");
/***** Remove groups *****/
sprintf (Query,"DELETE FROM svy_grp"
" USING surveys,svy_grp"
" WHERE surveys.Scope='%s' AND surveys.Cod='%ld'"
" AND surveys.SvyCod=svy_grp.SvyCod",
Sco_ScopeDB[Sco_SCOPE_CRS],CrsCod);
Sco_ScopeDB[Scope],Cod);
DB_QueryDELETE (Query,"can not remove all the groups"
" associated to surveys of a course");
/***** Remove course surveys *****/
sprintf (Query,"DELETE FROM surveys"
" WHERE Scope='%s' AND Cod='%ld'",
Sco_ScopeDB[Sco_SCOPE_CRS],CrsCod);
DB_QueryDELETE (Query,"can not remove all the surveys of a course");
Sco_ScopeDB[Scope],Cod);
DB_QueryDELETE (Query,"can not remove all the surveys in a place on the hierarchy");
}
/*****************************************************************************/
@ -4002,12 +3956,10 @@ float Svy_GetNumQstsPerCrsSurvey (Sco_Scope_t Scope)
sprintf (Query,"SELECT AVG(NumQsts) FROM"
" (SELECT COUNT(svy_questions.QstCod) AS NumQsts"
" FROM surveys,svy_questions"
" WHERE surveys.Scope='%s'"
" AND surveys.CrsCod='%ld'"
" WHERE surveys.Scope='%s' AND surveys.Cod='%ld'"
" AND surveys.SvyCod=svy_questions.SvyCod"
" GROUP BY svy_questions.SvyCod) AS NumQstsTable",
Sco_ScopeDB[Sco_SCOPE_CRS],
Gbl.CurrentCrs.Crs.CrsCod);
Sco_ScopeDB[Sco_SCOPE_CRS],Gbl.CurrentCrs.Crs.CrsCod);
break;
default:
Lay_ShowErrorAndExit ("Wrong scope.");

View File

@ -98,8 +98,7 @@ void Svy_RecFormSurvey (void);
bool Svy_CheckIfSvyIsAssociatedToGrp (long SvyCod,long GrpCod);
void Svy_RemoveGroup (long GrpCod);
void Svy_RemoveGroupsOfType (long GrpTypCod);
void Svy_RemoveDegSurveys (long DegCod);
void Svy_RemoveCrsSurveys (long CrsCod);
void Svy_RemoveSurveys (long CrsCod);
void Svy_RequestEditQuestion (void);
void Svy_ReceiveQst (void);

View File

@ -773,12 +773,13 @@ bool Usr_CheckIfUsrIsAdm (long UsrCod,Sco_Scope_t Scope,long Cod)
bool Usr_CheckIfUsrIsSuperuser (long UsrCod)
{
extern const char *Sco_ScopeDB[Sco_NUM_SCOPES];
char Query[128];
/***** Get if a user is superuser from database *****/
sprintf (Query,"SELECT COUNT(*) FROM admin"
" WHERE UsrCod='%ld' AND Scope='Sys'",
UsrCod);
" WHERE UsrCod='%ld' AND Scope='%s'",
UsrCod,Sco_ScopeDB[Sco_SCOPE_SYS]);
return (DB_QueryCOUNT (Query,"can not check if a user is superuser") != 0);
}
@ -4114,6 +4115,7 @@ void Usr_DropTmpTableWithCandidateUsrs (void)
static void Usr_GetAdmsLst (Sco_Scope_t Scope)
{
extern const char *Sco_ScopeDB[Sco_NUM_SCOPES];
char Query[1024];
const char *QueryFields =
"UsrCod,"
@ -4156,30 +4158,31 @@ static void Usr_GetAdmsLst (Sco_Scope_t Scope)
sprintf (Query,"SELECT %s FROM usr_data"
" WHERE UsrCod IN "
"(SELECT UsrCod FROM admin"
" WHERE Scope='Sys')"
" WHERE Scope='%s')"
" OR UsrCod IN "
"(SELECT admin.UsrCod FROM admin,institutions"
" WHERE admin.Scope='Ins'"
" WHERE admin.Scope='%s'"
" AND admin.Cod=institutions.InsCod"
" AND institutions.CtyCod='%ld')"
" OR UsrCod IN "
"(SELECT admin.UsrCod FROM admin,centres,institutions"
" WHERE admin.Scope='Ctr'"
" WHERE admin.Scope='%s'"
" AND admin.Cod=centres.CtrCod"
" AND centres.InsCod=institutions.InsCod"
" AND institutions.CtyCod='%ld')"
" OR UsrCod IN "
"(SELECT admin.UsrCod FROM admin,degrees,centres,institutions"
" WHERE admin.Scope='Deg'"
" WHERE admin.Scope='%s'"
" AND admin.Cod=degrees.DegCod"
" AND degrees.CtrCod=centres.CtrCod"
" AND centres.InsCod=institutions.InsCod"
" AND institutions.CtyCod='%ld')"
" ORDER BY Surname1,Surname2,FirstName,UsrCod",
QueryFields,
Gbl.CurrentCty.Cty.CtyCod,
Gbl.CurrentCty.Cty.CtyCod,
Gbl.CurrentCty.Cty.CtyCod);
Sco_ScopeDB[Sco_SCOPE_SYS],
Sco_ScopeDB[Sco_SCOPE_INS],Gbl.CurrentCty.Cty.CtyCod,
Sco_ScopeDB[Sco_SCOPE_CTR],Gbl.CurrentCty.Cty.CtyCod,
Sco_ScopeDB[Sco_SCOPE_DEG],Gbl.CurrentCty.Cty.CtyCod);
break;
case Sco_SCOPE_INS: // System admins,
// admins of the current institution,
@ -4187,26 +4190,27 @@ static void Usr_GetAdmsLst (Sco_Scope_t Scope)
sprintf (Query,"SELECT %s FROM usr_data"
" WHERE UsrCod IN "
"(SELECT UsrCod FROM admin"
" WHERE Scope='Sys')"
" WHERE Scope='%s')"
" OR UsrCod IN "
"(SELECT UsrCod FROM admin"
" WHERE Scope='Ins' AND Cod='%ld')"
" WHERE Scope='%s' AND Cod='%ld')"
" OR UsrCod IN "
"(SELECT admin.UsrCod FROM admin,centres"
" WHERE admin.Scope='Ctr'"
" WHERE admin.Scope='%s'"
" AND admin.Cod=centres.CtrCod"
" AND centres.InsCod='%ld')"
" OR UsrCod IN "
"(SELECT admin.UsrCod FROM admin,degrees,centres"
" WHERE admin.Scope='Deg'"
" WHERE admin.Scope='%s'"
" AND admin.Cod=degrees.DegCod"
" AND degrees.CtrCod=centres.CtrCod"
" AND centres.InsCod='%ld')"
" ORDER BY Surname1,Surname2,FirstName,UsrCod",
QueryFields,
Gbl.CurrentIns.Ins.InsCod,
Gbl.CurrentIns.Ins.InsCod,
Gbl.CurrentIns.Ins.InsCod);
Sco_ScopeDB[Sco_SCOPE_SYS],
Sco_ScopeDB[Sco_SCOPE_INS],Gbl.CurrentIns.Ins.InsCod,
Sco_ScopeDB[Sco_SCOPE_CTR],Gbl.CurrentIns.Ins.InsCod,
Sco_ScopeDB[Sco_SCOPE_DEG],Gbl.CurrentIns.Ins.InsCod);
break;
case Sco_SCOPE_CTR: // System admins,
// admins of the current institution,
@ -4215,44 +4219,46 @@ static void Usr_GetAdmsLst (Sco_Scope_t Scope)
sprintf (Query,"SELECT %s FROM usr_data"
" WHERE UsrCod IN "
"(SELECT UsrCod FROM admin"
" WHERE Scope='Sys')"
" WHERE Scope='%s')"
" OR UsrCod IN "
"(SELECT UsrCod FROM admin"
" WHERE Scope='Ins' AND Cod='%ld')"
" WHERE Scope='%s' AND Cod='%ld')"
" OR UsrCod IN "
"(SELECT UsrCod FROM admin"
" WHERE Scope='Ctr' AND Cod='%ld')"
" WHERE Scope='%s' AND Cod='%ld')"
" OR UsrCod IN "
"(SELECT admin.UsrCod FROM admin,degrees"
" WHERE admin.Scope='Deg'"
" WHERE admin.Scope='%s'"
" AND admin.Cod=degrees.DegCod"
" AND degrees.CtrCod='%ld')"
" ORDER BY Surname1,Surname2,FirstName,UsrCod",
QueryFields,
Gbl.CurrentIns.Ins.InsCod,
Gbl.CurrentCtr.Ctr.CtrCod,
Gbl.CurrentCtr.Ctr.CtrCod);
Sco_ScopeDB[Sco_SCOPE_SYS],
Sco_ScopeDB[Sco_SCOPE_INS],Gbl.CurrentIns.Ins.InsCod,
Sco_ScopeDB[Sco_SCOPE_CTR],Gbl.CurrentCtr.Ctr.CtrCod,
Sco_ScopeDB[Sco_SCOPE_DEG],Gbl.CurrentCtr.Ctr.CtrCod);
break;
case Sco_SCOPE_DEG: // System admins
// and admins of the current institution, centre or degree
sprintf (Query,"SELECT %s FROM usr_data"
" WHERE UsrCod IN "
"(SELECT UsrCod FROM admin"
" WHERE Scope='Sys')"
" WHERE Scope='%s')"
" OR UsrCod IN "
"(SELECT UsrCod FROM admin"
" WHERE Scope='Ins' AND Cod='%ld')"
" WHERE Scope='%s' AND Cod='%ld')"
" OR UsrCod IN "
"(SELECT UsrCod FROM admin"
" WHERE Scope='Ctr' AND Cod='%ld')"
" WHERE Scope='%s' AND Cod='%ld')"
" OR UsrCod IN "
"(SELECT UsrCod FROM admin"
" WHERE Scope='Deg' AND Cod='%ld')"
" WHERE Scope='%s' AND Cod='%ld')"
" ORDER BY Surname1,Surname2,FirstName,UsrCod",
QueryFields,
Gbl.CurrentIns.Ins.InsCod,
Gbl.CurrentCtr.Ctr.CtrCod,
Gbl.CurrentDeg.Deg.DegCod);
Sco_ScopeDB[Sco_SCOPE_SYS],
Sco_ScopeDB[Sco_SCOPE_INS],Gbl.CurrentIns.Ins.InsCod,
Sco_ScopeDB[Sco_SCOPE_CTR],Gbl.CurrentCtr.Ctr.CtrCod,
Sco_ScopeDB[Sco_SCOPE_DEG],Gbl.CurrentDeg.Deg.DegCod);
break;
default: // not aplicable
Lay_ShowErrorAndExit ("Wrong scope.");