diff --git a/swad_changelog.h b/swad_changelog.h index 753152529..c95490b0d 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -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: diff --git a/swad_course.c b/swad_course.c index 1d21272e4..641926798 100644 --- a/swad_course.c +++ b/swad_course.c @@ -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 */ diff --git a/swad_degree.c b/swad_degree.c index ab255f367..c2ed75255 100644 --- a/swad_degree.c +++ b/swad_degree.c @@ -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; diff --git a/swad_enrollment.c b/swad_enrollment.c index 0e108d924..4d96e7bbf 100644 --- a/swad_enrollment.c +++ b/swad_enrollment.c @@ -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<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<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<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<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<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<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<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<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<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; diff --git a/swad_notification.c b/swad_notification.c index 499e512e0..26a6c1db0 100644 --- a/swad_notification.c +++ b/swad_notification.c @@ -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 diff --git a/swad_survey.c b/swad_survey.c index f485463f3..e36da00d5 100644 --- a/swad_survey.c +++ b/swad_survey.c @@ -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."); diff --git a/swad_survey.h b/swad_survey.h index cf6d369fd..c7cf704d8 100644 --- a/swad_survey.h +++ b/swad_survey.h @@ -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); diff --git a/swad_user.c b/swad_user.c index 055a93eea..01cd75557 100644 --- a/swad_user.c +++ b/swad_user.c @@ -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.");