// swad_enrolment_database.h: enrolment (registration) or removing of users, operations with database /* SWAD (Shared Workspace At a Distance), is a web platform developed at the University of Granada (Spain), and used to support university teaching. This file is part of SWAD core. Copyright (C) 1999-2021 Antonio Caņas Vargas This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General 3 License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ /*****************************************************************************/ /*********************************** Headers *********************************/ /*****************************************************************************/ // #define _GNU_SOURCE // For asprintf // #include // For asprintf // #include // For exit, system, malloc, free, rand, etc. // #include // For string functions // #include "swad_account.h" // #include "swad_announcement.h" // #include "swad_attendance_database.h" // #include "swad_box.h" #include "swad_database.h" // #include "swad_duplicate.h" #include "swad_enrolment.h" #include "swad_enrolment_database.h" #include "swad_error.h" // #include "swad_exam_print.h" // #include "swad_form.h" #include "swad_global.h" // #include "swad_hierarchy.h" // #include "swad_HTML.h" // #include "swad_ID.h" // #include "swad_match.h" // #include "swad_message.h" // #include "swad_notification.h" // #include "swad_parameter.h" // #include "swad_photo.h" // #include "swad_role.h" // #include "swad_test_print.h" // #include "swad_user.h" /*****************************************************************************/ /****************************** Public constants *****************************/ /*****************************************************************************/ /*****************************************************************************/ /***************************** Private constants *****************************/ /*****************************************************************************/ /*****************************************************************************/ /******************************* Private types *******************************/ /*****************************************************************************/ /*****************************************************************************/ /************** External global variables from others modules ****************/ /*****************************************************************************/ extern struct Globals Gbl; /*****************************************************************************/ /************************** Private global variables *************************/ /*****************************************************************************/ /*****************************************************************************/ /***************************** Private prototypes ****************************/ /*****************************************************************************/ /*****************************************************************************/ /*************** Register user in current course in database *****************/ /*****************************************************************************/ void Enr_DB_InsertUsrInCurrentCrs (long UsrCod,Rol_Role_t NewRole, Enr_KeepOrSetAccepted_t KeepOrSetAccepted) { DB_QueryINSERT ("can not register user in course", "INSERT INTO crs_users" " (CrsCod,UsrCod,Role,Accepted)" " VALUES" " (%ld,%ld,%u,'%c')", Gbl.Hierarchy.Crs.CrsCod, UsrCod, (unsigned) NewRole, KeepOrSetAccepted == Enr_SET_ACCEPTED_TO_TRUE ? 'Y' : 'N'); } /*****************************************************************************/ /**************** Update institution, center and department ******************/ /*****************************************************************************/ void Enr_DB_UpdateInstitutionCenterDepartment (void) { DB_QueryUPDATE ("can not update institution, center and department", "UPDATE usr_data" " SET InsCtyCod=%ld," "InsCod=%ld," "CtrCod=%ld," "DptCod=%ld" " WHERE UsrCod=%ld", Gbl.Usrs.Me.UsrDat.InsCtyCod, Gbl.Usrs.Me.UsrDat.InsCod, Gbl.Usrs.Me.UsrDat.Tch.CtrCod, Gbl.Usrs.Me.UsrDat.Tch.DptCod, Gbl.Usrs.Me.UsrDat.UsrCod); } /*****************************************************************************/ /********* Set a user's acceptation to true in the current course ************/ /*****************************************************************************/ void Enr_DB_AcceptUsrInCrs (long UsrCod) { /***** Set enrolment of a user to "accepted" in the current course *****/ DB_QueryUPDATE ("can not confirm user's enrolment", "UPDATE crs_users" " SET Accepted='Y'" " WHERE CrsCod=%ld" " AND UsrCod=%ld", Gbl.Hierarchy.Crs.CrsCod, UsrCod); } /*****************************************************************************/ /********* Set a user's acceptation to true in the current course ************/ /*****************************************************************************/ unsigned Enr_DB_GetEnrolmentRequests (MYSQL_RES **mysql_res,unsigned RolesSelected) { switch (Gbl.Scope.Current) { case HieLvl_SYS: // Show requesters for the whole platform switch (Gbl.Usrs.Me.Role.Logged) { case Rol_TCH: // Requests in all courses in which I am teacher return (unsigned) DB_QuerySELECT (mysql_res,"can not get requests for enrolment", "SELECT crs_requests.ReqCod," // row[0] "crs_requests.CrsCod," // row[1] "crs_requests.UsrCod," // row[2] "crs_requests.Role," // row[3] "UNIX_TIMESTAMP(crs_requests.RequestTime)" // row[4] " FROM crs_users," "crs_requests" " WHERE crs_users.UsrCod=%ld" " AND crs_users.Role=%u" " AND crs_users.CrsCod=crs_requests.CrsCod" " AND ((1<0" " ORDER BY crs_requests.RequestTime DESC", Gbl.Usrs.Me.UsrDat.UsrCod, (unsigned) Rol_TCH, RolesSelected); case Rol_DEG_ADM: // Requests in all degrees administrated by me return (unsigned) DB_QuerySELECT (mysql_res,"can not get requests for enrolment", "SELECT crs_requests.ReqCod," // row[0] "crs_requests.CrsCod," // row[1] "crs_requests.UsrCod," // row[2] "crs_requests.Role," // row[3] "UNIX_TIMESTAMP(crs_requests.RequestTime)" // row[4] " FROM usr_admins," "crs_courses," "crs_requests" " WHERE usr_admins.UsrCod=%ld" " AND usr_admins.Scope='%s'" " AND usr_admins.Cod=crs_courses.DegCod" " AND crs_courses.CrsCod=crs_requests.CrsCod" " AND ((1<0" " ORDER BY crs_requests.RequestTime DESC", Gbl.Usrs.Me.UsrDat.UsrCod,Sco_GetDBStrFromScope (HieLvl_DEG), RolesSelected); case Rol_CTR_ADM: // Requests in all centers administrated by me return (unsigned) DB_QuerySELECT (mysql_res,"can not get requests for enrolment", "SELECT crs_requests.ReqCod," // row[0] "crs_requests.CrsCod," // row[1] "crs_requests.UsrCod," // row[2] "crs_requests.Role," // row[3] "UNIX_TIMESTAMP(crs_requests.RequestTime)" // row[4] " FROM usr_admins," "deg_degrees," "crs_courses," "crs_requests" " WHERE usr_admins.UsrCod=%ld" " AND usr_admins.Scope='%s'" " AND usr_admins.Cod=deg_degrees.CtrCod" " AND deg_degrees.DegCod=crs_courses.DegCod" " AND crs_courses.CrsCod=crs_requests.CrsCod" " AND ((1<0" " ORDER BY crs_requests.RequestTime DESC", Gbl.Usrs.Me.UsrDat.UsrCod,Sco_GetDBStrFromScope (HieLvl_CTR), RolesSelected); case Rol_INS_ADM: // Requests in all institutions administrated by me return (unsigned) DB_QuerySELECT (mysql_res,"can not get requests for enrolment", "SELECT crs_requests.ReqCod," // row[0] "crs_requests.CrsCod," // row[1] "crs_requests.UsrCod," // row[2] "crs_requests.Role," // row[3] "UNIX_TIMESTAMP(crs_requests.RequestTime)" // row[4] " FROM usr_admins," "ctr_centers," "deg_degrees," "crs_courses," "crs_requests" " WHERE usr_admins.UsrCod=%ld" " AND usr_admins.Scope='%s'" " AND usr_admins.Cod=ctr_centers.InsCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND deg_degrees.DegCod=crs_courses.DegCod" " AND crs_courses.CrsCod=crs_requests.CrsCod" " AND ((1<0" " ORDER BY crs_requests.RequestTime DESC", Gbl.Usrs.Me.UsrDat.UsrCod,Sco_GetDBStrFromScope (HieLvl_INS), RolesSelected); case Rol_SYS_ADM: // All requests return (unsigned) DB_QuerySELECT (mysql_res,"can not get requests for enrolment", "SELECT ReqCod," // row[0] "CrsCod," // row[1] "UsrCod," // row[2] "Role," // row[3] "UNIX_TIMESTAMP(RequestTime)" // row[4] " FROM crs_requests" " WHERE ((1<0" " ORDER BY RequestTime DESC", RolesSelected); default: Err_NoPermissionExit (); return 0; // Not reached } break; case HieLvl_CTY: // Show requesters for the current country switch (Gbl.Usrs.Me.Role.Logged) { case Rol_TCH: // Requests in courses of this country in which I am teacher return (unsigned) DB_QuerySELECT (mysql_res,"can not get requests for enrolment", "SELECT crs_requests.ReqCod," // row[0] "crs_requests.CrsCod," // row[1] "crs_requests.UsrCod," // row[2] "crs_requests.Role," // row[3] "UNIX_TIMESTAMP(crs_requests.RequestTime)" // roe[4] " FROM crs_users," "ins_instits," "ctr_centers," "deg_degrees," "crs_courses," "crs_requests" " WHERE crs_users.UsrCod=%ld" " AND crs_users.Role=%u" " AND crs_users.CrsCod=crs_courses.CrsCod" " AND crs_courses.DegCod=deg_degrees.DegCod" " AND deg_degrees.CtrCod=ctr_centers.CtrCod" " AND ctr_centers.InsCod=ins_instits.InsCod" " AND ins_instits.CtyCod=%ld" " AND crs_courses.CrsCod=crs_requests.CrsCod" " AND ((1<0" " ORDER BY crs_requests.RequestTime DESC", Gbl.Usrs.Me.UsrDat.UsrCod, (unsigned) Rol_TCH, Gbl.Hierarchy.Cty.CtyCod, RolesSelected); case Rol_DEG_ADM: // Requests in degrees of this country administrated by me return (unsigned) DB_QuerySELECT (mysql_res,"can not get requests for enrolment", "SELECT crs_requests.ReqCod," // row[0] "crs_requests.CrsCod," // row[1] "crs_requests.UsrCod," // row[2] "crs_requests.Role," // row[3] "UNIX_TIMESTAMP(crs_requests.RequestTime)" // row[4] " FROM usr_admins," "ins_instits," "ctr_centers," "deg_degrees," "crs_courses," "crs_requests" " WHERE usr_admins.UsrCod=%ld" " AND usr_admins.Scope='%s'" " AND usr_admins.Cod=deg_degrees.DegCod" " AND deg_degrees.CtrCod=ctr_centers.CtrCod" " AND ctr_centers.InsCod=ins_instits.InsCod" " AND ins_instits.CtyCod=%ld" " AND deg_degrees.DegCod=crs_courses.DegCod" " AND crs_courses.CrsCod=crs_requests.CrsCod" " AND ((1<0" " ORDER BY crs_requests.RequestTime DESC", Gbl.Usrs.Me.UsrDat.UsrCod, Sco_GetDBStrFromScope (HieLvl_DEG), Gbl.Hierarchy.Cty.CtyCod, RolesSelected); case Rol_CTR_ADM: // Requests in centers of this country administrated by me return (unsigned) DB_QuerySELECT (mysql_res,"can not get requests for enrolment", "SELECT crs_requests.ReqCod," // row[0] "crs_requests.CrsCod," // row[1] "crs_requests.UsrCod," // row[2] "crs_requests.Role," // row[3] "UNIX_TIMESTAMP(crs_requests.RequestTime)" // row[4] " FROM usr_admins," "ins_instits," "ctr_centers," "deg_degrees," "crs_courses," "crs_requests" " WHERE usr_admins.UsrCod=%ld" " AND usr_admins.Scope='%s'" " AND usr_admins.Cod=ctr_centers.CtrCod" " AND ctr_centers.InsCod=ins_instits.InsCod" " AND ins_instits.CtyCod=%ld" " AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND deg_degrees.DegCod=crs_courses.DegCod" " AND crs_courses.CrsCod=crs_requests.CrsCod" " AND ((1<0" " ORDER BY crs_requests.RequestTime DESC", Gbl.Usrs.Me.UsrDat.UsrCod, Sco_GetDBStrFromScope (HieLvl_CTR), Gbl.Hierarchy.Cty.CtyCod, RolesSelected); case Rol_INS_ADM: // Requests in institutions of this country administrated by me return (unsigned) DB_QuerySELECT (mysql_res,"can not get requests for enrolment", "SELECT crs_requests.ReqCod," // row[0] "crs_requests.CrsCod," // row[1] "crs_requests.UsrCod," // row[2] "crs_requests.Role," // row[3] "UNIX_TIMESTAMP(crs_requests.RequestTime)" // row[4] " FROM usr_admins," "ins_instits," "ctr_centers," "deg_degrees," "crs_courses," "crs_requests" " WHERE usr_admins.UsrCod=%ld" " AND usr_admins.Scope='%s'" " AND usr_admins.Cod=ins_instits.InsCod" " AND ins_instits.CtyCod=%ld" " AND ins_instits.InsCod=ctr_centers.InsCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND deg_degrees.DegCod=crs_courses.DegCod" " AND crs_courses.CrsCod=crs_requests.CrsCod" " AND ((1<0" " ORDER BY crs_requests.RequestTime DESC", Gbl.Usrs.Me.UsrDat.UsrCod, Sco_GetDBStrFromScope (HieLvl_INS), Gbl.Hierarchy.Cty.CtyCod, RolesSelected); case Rol_SYS_ADM: // Requests in any course of this country return (unsigned) DB_QuerySELECT (mysql_res,"can not get requests for enrolment", "SELECT crs_requests.ReqCod," // row[0] "crs_requests.CrsCod," // row[1] "crs_requests.UsrCod," // row[2] "crs_requests.Role," // row[3] "UNIX_TIMESTAMP(crs_requests.RequestTime)" // row[4] " FROM ins_instits," "ctr_centers," "deg_degrees," "crs_courses," "crs_requests" " WHERE ins_instits.CtyCod=%ld" " AND ins_instits.InsCod=ctr_centers.InsCod" " AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND deg_degrees.DegCod=crs_courses.DegCod" " AND crs_courses.CrsCod=crs_requests.CrsCod" " AND ((1<0" " ORDER BY crs_requests.RequestTime DESC", Gbl.Hierarchy.Cty.CtyCod, RolesSelected); default: Err_NoPermissionExit (); return 0; // Not reached } return 0; // Not reached case HieLvl_INS: // Show requesters for the current institution switch (Gbl.Usrs.Me.Role.Logged) { case Rol_TCH: // Requests in courses of this institution in which I am teacher return (unsigned) DB_QuerySELECT (mysql_res,"can not get requests for enrolment", "SELECT crs_requests.ReqCod," // row[0] "crs_requests.CrsCod," // row[1] "crs_requests.UsrCod," // row[2] "crs_requests.Role," // row[3] "UNIX_TIMESTAMP(crs_requests.RequestTime)" // row[4] " FROM crs_users," "ctr_centers," "deg_degrees," "crs_courses," "crs_requests" " WHERE crs_users.UsrCod=%ld" " AND crs_users.Role=%u" " AND crs_users.CrsCod=crs_courses.CrsCod" " AND crs_courses.DegCod=deg_degrees.DegCod" " AND deg_degrees.CtrCod=ctr_centers.CtrCod" " AND ctr_centers.InsCod=%ld" " AND crs_courses.CrsCod=crs_requests.CrsCod" " AND ((1<0" " ORDER BY crs_requests.RequestTime DESC", Gbl.Usrs.Me.UsrDat.UsrCod, (unsigned) Rol_TCH, Gbl.Hierarchy.Ins.InsCod, RolesSelected); case Rol_DEG_ADM: // Requests in degrees of this institution administrated by me return (unsigned) DB_QuerySELECT (mysql_res,"can not get requests for enrolment", "SELECT crs_requests.ReqCod," // row[0] "crs_requests.CrsCod," // row[1] "crs_requests.UsrCod," // row[2] "crs_requests.Role," // row[3] "UNIX_TIMESTAMP(crs_requests.RequestTime)" // row[4] " FROM usr_admins," "ctr_centers," "deg_degrees," "crs_courses," "crs_requests" " WHERE usr_admins.UsrCod=%ld" " AND usr_admins.Scope='%s'" " AND usr_admins.Cod=deg_degrees.DegCod" " AND deg_degrees.CtrCod=ctr_centers.CtrCod" " AND ctr_centers.InsCod=%ld" " AND deg_degrees.DegCod=crs_courses.DegCod" " AND crs_courses.CrsCod=crs_requests.CrsCod" " AND ((1<0" " ORDER BY crs_requests.RequestTime DESC", Gbl.Usrs.Me.UsrDat.UsrCod, Sco_GetDBStrFromScope (HieLvl_DEG), Gbl.Hierarchy.Ins.InsCod, RolesSelected); case Rol_CTR_ADM: // Requests in centers of this institution administrated by me return (unsigned) DB_QuerySELECT (mysql_res,"can not get requests for enrolment", "SELECT crs_requests.ReqCod," // row[0] "crs_requests.CrsCod," // row[1] "crs_requests.UsrCod," // row[2] "crs_requests.Role," // row[3] "UNIX_TIMESTAMP(crs_requests.RequestTime)" // row[4] " FROM usr_admins," "ctr_centers," "deg_degrees," "crs_courses," "crs_requests" " WHERE usr_admins.UsrCod=%ld" " AND usr_admins.Scope='%s'" " AND usr_admins.Cod=ctr_centers.CtrCod" " AND ctr_centers.InsCod=%ld" " AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND deg_degrees.DegCod=crs_courses.DegCod" " AND crs_courses.CrsCod=crs_requests.CrsCod" " AND ((1<0" " ORDER BY crs_requests.RequestTime DESC", Gbl.Usrs.Me.UsrDat.UsrCod,Sco_GetDBStrFromScope (HieLvl_CTR), Gbl.Hierarchy.Ins.InsCod, RolesSelected); case Rol_INS_ADM: // If I am logged as admin of this institution, I can view all the requesters from this institution case Rol_SYS_ADM: // Requests in any course of this institution return (unsigned) DB_QuerySELECT (mysql_res,"can not get requests for enrolment", "SELECT crs_requests.ReqCod," // row[0] "crs_requests.CrsCod," // row[1] "crs_requests.UsrCod," // row[2] "crs_requests.Role," // row[3] "UNIX_TIMESTAMP(crs_requests.RequestTime)" // row[4] " FROM ctr_centers," "deg_degrees," "crs_courses," "crs_requests" " WHERE ctr_centers.InsCod=%ld" " AND ctr_centers.CtrCod=deg_degrees.CtrCod" " AND deg_degrees.DegCod=crs_courses.DegCod" " AND crs_courses.CrsCod=crs_requests.CrsCod" " AND ((1<0" " ORDER BY crs_requests.RequestTime DESC", Gbl.Hierarchy.Ins.InsCod, RolesSelected); default: Err_NoPermissionExit (); return 0; // Not reached } return 0; // Not reached case HieLvl_CTR: // Show requesters for the current center switch (Gbl.Usrs.Me.Role.Logged) { case Rol_TCH: // Requests in courses of this center in which I am teacher return (unsigned) DB_QuerySELECT (mysql_res,"can not get requests for enrolment", "SELECT crs_requests.ReqCod," // row[0] "crs_requests.CrsCod," // row[1] "crs_requests.UsrCod," // row[2] "crs_requests.Role," // row[3] "UNIX_TIMESTAMP(crs_requests.RequestTime)" // row[4] " FROM crs_users," "deg_degrees," "crs_courses," "crs_requests" " WHERE crs_users.UsrCod=%ld" " AND crs_users.Role=%u" " AND crs_users.CrsCod=crs_courses.CrsCod" " AND crs_courses.DegCod=deg_degrees.DegCod" " AND deg_degrees.CtrCod=%ld" " AND crs_courses.CrsCod=crs_requests.CrsCod" " AND ((1<0" " ORDER BY crs_requests.RequestTime DESC", Gbl.Usrs.Me.UsrDat.UsrCod, (unsigned) Rol_TCH, Gbl.Hierarchy.Ctr.CtrCod, RolesSelected); case Rol_DEG_ADM: // Requests in degrees of this center administrated by me return (unsigned) DB_QuerySELECT (mysql_res,"can not get requests for enrolment", "SELECT crs_requests.ReqCod," // row[0] "crs_requests.CrsCod," // row[1] "crs_requests.UsrCod," // row[2] "crs_requests.Role," // row[3] "UNIX_TIMESTAMP(crs_requests.RequestTime)" // row[4] " FROM usr_admins," "deg_degrees," "crs_courses," "crs_requests" " WHERE usr_admins.UsrCod=%ld" " AND usr_admins.Scope='%s'" " AND usr_admins.Cod=deg_degrees.DegCod" " AND deg_degrees.CtrCod=%ld" " AND deg_degrees.DegCod=crs_courses.DegCod" " AND crs_courses.CrsCod=crs_requests.CrsCod" " AND ((1<0" " ORDER BY crs_requests.RequestTime DESC", Gbl.Usrs.Me.UsrDat.UsrCod, Sco_GetDBStrFromScope (HieLvl_DEG), Gbl.Hierarchy.Ctr.CtrCod, RolesSelected); case Rol_CTR_ADM: // If I am logged as admin of this center , I can view all the requesters from this center case Rol_INS_ADM: // If I am logged as admin of this institution, I can view all the requesters from this center case Rol_SYS_ADM: // Request in any course of this center return (unsigned) DB_QuerySELECT (mysql_res,"can not get requests for enrolment", "SELECT crs_requests.ReqCod," // row[0] "crs_requests.CrsCod," // row[1] "crs_requests.UsrCod," // row[2] "crs_requests.Role," // row[3] "UNIX_TIMESTAMP(crs_requests.RequestTime)" // row[4] " FROM deg_degrees," "crs_courses," "crs_requests" " WHERE deg_degrees.CtrCod=%ld" " AND deg_degrees.DegCod=crs_courses.DegCod" " AND crs_courses.CrsCod=crs_requests.CrsCod" " AND ((1<0" " ORDER BY crs_requests.RequestTime DESC", Gbl.Hierarchy.Ctr.CtrCod, RolesSelected); default: Err_NoPermissionExit (); return 0; // Not reached } return 0; // Not reached case HieLvl_DEG: // Show requesters for the current degree switch (Gbl.Usrs.Me.Role.Logged) { case Rol_TCH: // Requests in courses of this degree in which I am teacher return (unsigned) DB_QuerySELECT (mysql_res,"can not get requests for enrolment", "SELECT crs_requests.ReqCod," // row[0] "crs_requests.CrsCod," // row[1] "crs_requests.UsrCod," // row[2] "crs_requests.Role," // row[3] "UNIX_TIMESTAMP(crs_requests.RequestTime)" // row[4] " FROM crs_users," "crs_courses," "crs_requests" " WHERE crs_users.UsrCod=%ld" " AND crs_users.Role=%u" " AND crs_users.CrsCod=crs_courses.CrsCod" " AND crs_courses.DegCod=%ld" " AND crs_courses.CrsCod=crs_requests.CrsCod" " AND ((1<0" " ORDER BY crs_requests.RequestTime DESC", Gbl.Usrs.Me.UsrDat.UsrCod, (unsigned) Rol_TCH, Gbl.Hierarchy.Deg.DegCod, RolesSelected); case Rol_DEG_ADM: // If I am logged as admin of this degree , I can view all the requesters from this degree case Rol_CTR_ADM: // If I am logged as admin of this center , I can view all the requesters from this degree case Rol_INS_ADM: // If I am logged as admin of this institution, I can view all the requesters from this degree case Rol_SYS_ADM: // Requests in any course of this degree return (unsigned) DB_QuerySELECT (mysql_res,"can not get requests for enrolment", "SELECT crs_requests.ReqCod," // row[0] "crs_requests.CrsCod," // row[1] "crs_requests.UsrCod," // row[2] "crs_requests.Role," // row[3] "UNIX_TIMESTAMP(crs_requests.RequestTime)" // row[4] " FROM crs_courses," "crs_requests" " WHERE crs_courses.DegCod=%ld" " AND crs_courses.CrsCod=crs_requests.CrsCod" " AND ((1<0" " ORDER BY crs_requests.RequestTime DESC", Gbl.Hierarchy.Deg.DegCod, RolesSelected); default: Err_NoPermissionExit (); return 0; // Not reached } return 0; // Not reached case HieLvl_CRS: // Show requesters for the current course switch (Gbl.Usrs.Me.Role.Logged) { case Rol_TCH: // If I am logged as teacher of this course , I can view all the requesters from this course case Rol_DEG_ADM: // If I am logged as admin of this degree , I can view all the requesters from this course case Rol_CTR_ADM: // If I am logged as admin of this center , I can view all the requesters from this course case Rol_INS_ADM: // If I am logged as admin of this institution, I can view all the requesters from this course case Rol_SYS_ADM: // Requests in this course return (unsigned) DB_QuerySELECT (mysql_res,"can not get requests for enrolment", "SELECT ReqCod," // row[0] "CrsCod," // row[1] "UsrCod," // row[2] "Role," // row[3] "UNIX_TIMESTAMP(RequestTime)" // row[4] " FROM crs_requests" " WHERE CrsCod=%ld" " AND ((1<0" " ORDER BY RequestTime DESC", Gbl.Hierarchy.Crs.CrsCod, RolesSelected); default: Err_NoPermissionExit (); return 0; // Not reached } return 0; // Not reached default: Err_WrongScopeExit (); return 0; // Not reached } } /*****************************************************************************/ /****** Get enrolment request (user and requested role) given its code *******/ /*****************************************************************************/ unsigned Enr_DB_GetEnrolmentRequestByCod (MYSQL_RES **mysql_res,long ReqCod) { return (unsigned) DB_QuerySELECT (mysql_res,"can not get enrolment request", "SELECT UsrCod," // row[0] "Role" // row[1] " FROM crs_requests" " WHERE ReqCod=%ld", ReqCod); } /*****************************************************************************/ /********** Try to get an enrolment request from a user in a course **********/ /*****************************************************************************/ long Enr_DB_GetUsrEnrolmentRequestInCrs (long CrsCod,long UsrCod) { return DB_QuerySELECTCode ("can not get enrolment request", "SELECT ReqCod" " FROM crs_requests" " WHERE CrsCod=%ld" " AND UsrCod=%ld", CrsCod, UsrCod); } /*****************************************************************************/ /************ Create my enrolment request in the current course **************/ /*****************************************************************************/ long Enr_DB_CreateMyEnrolmentRequestInCurrentCrs (Rol_Role_t NewRole) { return DB_QueryINSERTandReturnCode ("can not save enrolment request", "INSERT INTO crs_requests" " (CrsCod,UsrCod,Role,RequestTime)" " VALUES" " (%ld,%ld,%u,NOW())", Gbl.Hierarchy.Crs.CrsCod, Gbl.Usrs.Me.UsrDat.UsrCod, (unsigned) NewRole); } /*****************************************************************************/ /************* Update my enrolment request in the current course *************/ /*****************************************************************************/ void Enr_DB_UpdateMyEnrolmentRequestInCurrentCrs (long ReqCod,Rol_Role_t NewRole) { DB_QueryUPDATE ("can not update enrolment request", "UPDATE crs_requests" " SET Role=%u," "RequestTime=NOW()" " WHERE ReqCod=%ld" " AND CrsCod=%ld" " AND UsrCod=%ld", (unsigned) NewRole, ReqCod, Gbl.Hierarchy.Crs.CrsCod, Gbl.Usrs.Me.UsrDat.UsrCod); } /*****************************************************************************/ /************************** Remove enrolment request *************************/ /*****************************************************************************/ void Enr_DB_RemRequest (long ReqCod) { DB_QueryDELETE ("can not remove a request for enrolment", "DELETE FROM crs_requests" " WHERE ReqCod=%ld", ReqCod); } /*****************************************************************************/ /*********** Remove all users' requests for inscription in a course **********/ /*****************************************************************************/ void Enr_DB_RemCrsRequests (long CrsCod) { DB_QueryDELETE ("can not remove requests for inscription to a course", "DELETE FROM crs_requests" " WHERE CrsCod=%ld", CrsCod); } /*****************************************************************************/ /************ Remove user's requests for inscription from a course ***********/ /*****************************************************************************/ void Enr_DB_RemUsrRequests (long UsrCod) { DB_QueryDELETE ("can not remove user's requests for inscription", "DELETE FROM crs_requests" " WHERE UsrCod=%ld", UsrCod); } /*****************************************************************************/ /*************** Remove all users from settings in a course ******************/ /*****************************************************************************/ void Enr_DB_RemAllUsrsFromCrsSettings (long CrsCod) { DB_QueryDELETE ("can not remove users from a course settings", "DELETE FROM crs_user_settings" " WHERE CrsCod=%ld", CrsCod); } /*****************************************************************************/ /*************** Remove all users from settings in a course ******************/ /*****************************************************************************/ void Enr_DB_RemAllUsrsFromCrs (long CrsCod) { DB_QueryDELETE ("can not remove users from a course", "DELETE FROM crs_users" " WHERE CrsCod=%ld", CrsCod); } /*****************************************************************************/ /************************ Remove a user from a course ************************/ /*****************************************************************************/ void Enr_DB_RemUsrFromAllCrss (long UsrCod) { DB_QueryDELETE ("can not remove a user from all courses", "DELETE FROM crs_users" " WHERE UsrCod=%ld", UsrCod); } /*****************************************************************************/ /******* Remove user as administrator of any degree/center/institution *******/ /*****************************************************************************/ void Enr_DB_RemUsrAsAdmin (long UsrCod) { DB_QueryDELETE ("can not remove a user as administrator", "DELETE FROM usr_admins" " WHERE UsrCod=%ld", UsrCod); } /*****************************************************************************/ /********* Remove administrators of an institution, center or degree *********/ /*****************************************************************************/ void Enr_DB_RemAdmins (HieLvl_Level_t Scope,long Cod) { DB_QueryDELETE ("can not remove administrators", "DELETE FROM usr_admins" " WHERE Scope='%s'" " AND Cod=%ld", Sco_GetDBStrFromScope (Scope), Cod); } /*****************************************************************************/ /***** Remove user as administrator of an institution, center or degree ******/ /*****************************************************************************/ void Enr_DB_RemAdmin (long UsrCod,HieLvl_Level_t Scope,long Cod) { DB_QueryDELETE ("can not remove an administrator", "DELETE FROM usr_admins" " WHERE UsrCod=%ld" " AND Scope='%s'" " AND Cod=%ld", UsrCod, Sco_GetDBStrFromScope (Scope), Cod); }