From 9e1efb5b022276d923fc34a7bea943104f226ef3 Mon Sep 17 00:00:00 2001 From: acanas Date: Sat, 5 Jun 2021 12:21:14 +0200 Subject: [PATCH] Version 20.89.1: Jun 05, 2021 Queries moved to module swad_department_database. --- swad_changelog.h | 3 +- swad_department.c | 95 +++------------------------ swad_department_database.c | 131 ++++++++++++++++++++++++++++++++++++- swad_department_database.h | 13 +++- 4 files changed, 150 insertions(+), 92 deletions(-) diff --git a/swad_changelog.h b/swad_changelog.h index f42d2b15..be0bf90a 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -602,13 +602,14 @@ TODO: FIX BUG, URGENT! En las fechas como par TODO: En las encuestas, que los estudiantes no puedan ver los resultados hasta que no finalice el plazo. */ -#define Log_PLATFORM_VERSION "SWAD 20.89 (2021-06-02)" +#define Log_PLATFORM_VERSION "SWAD 20.89.1 (2021-06-05)" #define CSS_FILE "swad20.45.css" #define JS_FILE "swad20.69.1.js" /* TODO: Rename CENTRE to CENTER in help wiki. TODO: Rename ASSESSMENT.Announcements to ASSESSMENT.Calls_for_exams + Version 20.89.1: Jun 05, 2021 Queries moved to module swad_department_database. (312869 lines) Version 20.89: Jun 02, 2021 New module swad_department_database for database queries related to departments. (312824 lines) Version 20.88.3: Jun 02, 2021 Queries moved to module swad_center_database. (312755 lines) Version 20.88.2: Jun 02, 2021 Queries moved to module swad_center_database. diff --git a/swad_department.c b/swad_department.c index 6611e5d3..bf0a9f82 100644 --- a/swad_department.c +++ b/swad_department.c @@ -321,11 +321,6 @@ static void Dpt_EditDepartmentsInternal (void) static void Dpt_GetListDepartments (struct Dpt_Departments *Departments,long InsCod) { - static const char *OrderBySubQuery[Dpt_NUM_ORDERS] = - { - [Dpt_ORDER_BY_DEPARTMENT] = "FullName", - [Dpt_ORDER_BY_NUM_TCHS ] = "NumTchs DESC,FullName", - }; MYSQL_RES *mysql_res; MYSQL_ROW row; unsigned NumDpt; @@ -337,40 +332,8 @@ static void Dpt_GetListDepartments (struct Dpt_Departments *Departments,long Ins if (InsCod > 0) // Institution specified { /***** Get departments from database *****/ - Departments->Num = (unsigned) - DB_QuerySELECT (&mysql_res,"can not get departments", - "(SELECT dpt_departments.DptCod," // row[0] - "dpt_departments.InsCod," // row[1] - "dpt_departments.ShortName," // row[2] - "dpt_departments.FullName," // row[3] - "dpt_departments.WWW," // row[4] - "COUNT(DISTINCT usr_data.UsrCod) AS NumTchs" // row[5] - " FROM dpt_departments," - "usr_data," - "crs_users" - " WHERE dpt_departments.InsCod=%ld" - " AND dpt_departments.DptCod=usr_data.DptCod" - " AND usr_data.UsrCod=crs_users.UsrCod" - " AND crs_users.Role IN (%u,%u)" - " GROUP BY dpt_departments.DptCod)" - " UNION " - "(SELECT DptCod," // row[0] - "InsCod," // row[1] - "ShortName," // row[2] - "FullName," // row[3] - "WWW," // row[4] - "0 AS NumTchs" // row[5] - " FROM dpt_departments" - " WHERE InsCod=%ld" - " AND DptCod NOT IN" - " (SELECT DISTINCT usr_data.DptCod" - " FROM usr_data,crs_users" - " WHERE crs_users.Role IN (%u,%u)" - " AND crs_users.UsrCod=usr_data.UsrCod))" - " ORDER BY %s", - InsCod,(unsigned) Rol_NET,(unsigned) Rol_TCH, - InsCod,(unsigned) Rol_NET,(unsigned) Rol_TCH, - OrderBySubQuery[Departments->SelectedOrder]); + Departments->Num = Dpt_DB_GetListDepartments (&mysql_res,InsCod, + Departments->SelectedOrder); if (Departments->Num) // Departments found... { /***** Create list with courses in degree *****/ @@ -414,7 +377,7 @@ static void Dpt_GetListDepartments (struct Dpt_Departments *Departments,long Ins } /*****************************************************************************/ -/************************** Get department full name *************************/ +/****************** Get data of department using its code ********************/ /*****************************************************************************/ void Dpt_GetDataOfDepartmentByCod (struct Dpt_Department *Dpt) @@ -437,36 +400,7 @@ void Dpt_GetDataOfDepartmentByCod (struct Dpt_Department *Dpt) else if (Dpt->DptCod > 0) { /***** Get data of a department from database *****/ - if (DB_QuerySELECT (&mysql_res,"can not get data of a department", - "(SELECT dpt_departments.InsCod," // row[0] - "dpt_departments.ShortName," // row[1] - "dpt_departments.FullName," // row[2] - "dpt_departments.WWW," // row[3] - "COUNT(DISTINCT usr_data.UsrCod) AS NumTchs" // row[4] - " FROM dpt_departments," - "usr_data," - "crs_users" - " WHERE dpt_departments.DptCod=%ld" - " AND dpt_departments.DptCod=usr_data.DptCod" - " AND usr_data.UsrCod=crs_users.UsrCod" - " AND crs_users.Role=%u" - " GROUP BY dpt_departments.DptCod)" - " UNION " - "(SELECT InsCod," // row[0] - "ShortName," // row[1] - "FullName," // row[2] - "WWW," // row[3] - "0" // row[4] - " FROM dpt_departments" - " WHERE DptCod=%ld" - " AND DptCod NOT IN" - " (SELECT DISTINCT usr_data.DptCod" - " FROM usr_data," - "crs_users" - " WHERE crs_users.Role=%u" - " AND crs_users.UsrCod=usr_data.UsrCod))", - Dpt->DptCod,(unsigned) Rol_TCH, - Dpt->DptCod,(unsigned) Rol_TCH)) // Department found... + if (Dpt_DB_GetDataOfDepartmentByCod (&mysql_res,Dpt->DptCod)) // Department found... { /* Get row */ row = mysql_fetch_row (mysql_res); @@ -658,10 +592,7 @@ void Dpt_RemoveDepartment (void) else // Department has no teachers ==> remove it { /***** Remove department *****/ - DB_QueryDELETE ("can not remove a department", - "DELETE FROM dpt_departments" - " WHERE DptCod=%ld", - Dpt_EditingDpt->DptCod); + Dpt_DB_RemoveDepartment (Dpt_EditingDpt->DptCod); /***** Write message to show the change made *****/ Ale_CreateAlert (Ale_SUCCESS,NULL, @@ -693,12 +624,7 @@ void Dpt_ChangeDepartIns (void) Dpt_GetDataOfDepartmentByCod (Dpt_EditingDpt); /***** Update institution in table of departments *****/ - DB_QueryUPDATE ("can not update the institution of a department", - "UPDATE dpt_departments" - " SET InsCod=%ld" - " WHERE DptCod=%ld", - NewInsCod, - Dpt_EditingDpt->DptCod); + Dpt_DB_UpdateDptIns (Dpt_EditingDpt->DptCod,NewInsCod); /***** Write message to show the change made *****/ Ale_CreateAlert (Ale_SUCCESS,NULL, @@ -787,7 +713,7 @@ static void Dpt_RenameDepartment (Cns_ShrtOrFullName_t ShrtOrFullName) else { /* Update the table changing old name by new name */ - Dpt_DB_UpdateDegName (Dpt_EditingDpt->DptCod,FieldName,NewDptName); + Dpt_DB_UpdateDptName (Dpt_EditingDpt->DptCod,FieldName,NewDptName); /* Write message to show the change made */ Ale_CreateAlert (Ale_SUCCESS,NULL, @@ -833,12 +759,7 @@ void Dpt_ChangeDptWWW (void) if (NewWWW[0]) { /* Update the table changing old WWW by new WWW */ - DB_QueryUPDATE ("can not update the web of a department", - "UPDATE dpt_departments" - " SET WWW='%s'" - " WHERE DptCod=%ld", - NewWWW, - Dpt_EditingDpt->DptCod); + Dpt_DB_UpdateDptWWW (Dpt_EditingDpt->DptCod,NewWWW); /***** Write message to show the change made *****/ Ale_CreateAlert (Ale_SUCCESS,NULL, diff --git a/swad_department_database.c b/swad_department_database.c index 3a572382..c291a58a 100644 --- a/swad_department_database.c +++ b/swad_department_database.c @@ -84,6 +84,94 @@ void Dpt_DB_CreateDepartment (const struct Dpt_Department *Dpt) Dpt->WWW); } +/*****************************************************************************/ +/************************** Get list of departments **************************/ +/*****************************************************************************/ + +unsigned Dpt_DB_GetListDepartments (MYSQL_RES **mysql_res, + long InsCod,Dpt_Order_t SelectedOrder) + { + static const char *OrderBySubQuery[Dpt_NUM_ORDERS] = + { + [Dpt_ORDER_BY_DEPARTMENT] = "FullName", + [Dpt_ORDER_BY_NUM_TCHS ] = "NumTchs DESC,FullName", + }; + + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get departments", + "(SELECT dpt_departments.DptCod," // row[0] + "dpt_departments.InsCod," // row[1] + "dpt_departments.ShortName," // row[2] + "dpt_departments.FullName," // row[3] + "dpt_departments.WWW," // row[4] + "COUNT(DISTINCT usr_data.UsrCod) AS NumTchs" // row[5] + " FROM dpt_departments," + "usr_data," + "crs_users" + " WHERE dpt_departments.InsCod=%ld" + " AND dpt_departments.DptCod=usr_data.DptCod" + " AND usr_data.UsrCod=crs_users.UsrCod" + " AND crs_users.Role IN (%u,%u)" + " GROUP BY dpt_departments.DptCod)" + " UNION " + "(SELECT DptCod," // row[0] + "InsCod," // row[1] + "ShortName," // row[2] + "FullName," // row[3] + "WWW," // row[4] + "0 AS NumTchs" // row[5] + " FROM dpt_departments" + " WHERE InsCod=%ld" + " AND DptCod NOT IN" + " (SELECT DISTINCT usr_data.DptCod" + " FROM usr_data,crs_users" + " WHERE crs_users.Role IN (%u,%u)" + " AND crs_users.UsrCod=usr_data.UsrCod))" + " ORDER BY %s", + InsCod,(unsigned) Rol_NET,(unsigned) Rol_TCH, + InsCod,(unsigned) Rol_NET,(unsigned) Rol_TCH, + OrderBySubQuery[SelectedOrder]); + } + +/*****************************************************************************/ +/****************** Get data of department using its code ********************/ +/*****************************************************************************/ + +unsigned Dpt_DB_GetDataOfDepartmentByCod (MYSQL_RES **mysql_res,long DptCod) + { + return (unsigned) + DB_QuerySELECT (mysql_res,"can not get data of a department", + "(SELECT dpt_departments.InsCod," // row[0] + "dpt_departments.ShortName," // row[1] + "dpt_departments.FullName," // row[2] + "dpt_departments.WWW," // row[3] + "COUNT(DISTINCT usr_data.UsrCod) AS NumTchs" // row[4] + " FROM dpt_departments," + "usr_data," + "crs_users" + " WHERE dpt_departments.DptCod=%ld" + " AND dpt_departments.DptCod=usr_data.DptCod" + " AND usr_data.UsrCod=crs_users.UsrCod" + " AND crs_users.Role=%u" + " GROUP BY dpt_departments.DptCod)" + " UNION " + "(SELECT InsCod," // row[0] + "ShortName," // row[1] + "FullName," // row[2] + "WWW," // row[3] + "0" // row[4] + " FROM dpt_departments" + " WHERE DptCod=%ld" + " AND DptCod NOT IN" + " (SELECT DISTINCT usr_data.DptCod" + " FROM usr_data," + "crs_users" + " WHERE crs_users.Role=%u" + " AND crs_users.UsrCod=usr_data.UsrCod))", + DptCod,(unsigned) Rol_TCH, + DptCod,(unsigned) Rol_TCH); + } + /*****************************************************************************/ /******************* Check if the name of department exists ******************/ /*****************************************************************************/ @@ -115,13 +203,26 @@ unsigned Dpt_DB_GetNumDepartmentsInInstitution (long InsCod) InsCod); } +/*****************************************************************************/ +/****************** Update institution in table of departments ***************/ +/*****************************************************************************/ + +void Dpt_DB_UpdateDptIns (long DptCod,long NewInsCod) + { + DB_QueryUPDATE ("can not update the institution of a department", + "UPDATE dpt_departments" + " SET InsCod=%ld" + " WHERE DptCod=%ld", + NewInsCod, + DptCod); + } + /*****************************************************************************/ /************* Update department name in table of departments ****************/ /*****************************************************************************/ -void Dpt_DB_UpdateDegName (long DptCod,const char *FieldName,const char *NewDptName) +void Dpt_DB_UpdateDptName (long DptCod,const char *FieldName,const char *NewDptName) { - /***** Update department changing old name by new name *****/ DB_QueryUPDATE ("can not update the name of a department", "UPDATE dpt_departments" " SET %s='%s'" @@ -129,3 +230,29 @@ void Dpt_DB_UpdateDegName (long DptCod,const char *FieldName,const char *NewDptN FieldName,NewDptName, DptCod); } + +/*****************************************************************************/ +/**************** Update the table changing old WWW by new WWW ***************/ +/*****************************************************************************/ + +void Dpt_DB_UpdateDptWWW (long DptCod,char NewWWW[Cns_MAX_BYTES_WWW + 1]) + { + DB_QueryUPDATE ("can not update the web of a department", + "UPDATE dpt_departments" + " SET WWW='%s'" + " WHERE DptCod=%ld", + NewWWW, + DptCod); + } + +/*****************************************************************************/ +/***************************** Remove a department ***************************/ +/*****************************************************************************/ + +void Dpt_DB_RemoveDepartment (long DptCod) + { + DB_QueryDELETE ("can not remove a department", + "DELETE FROM dpt_departments" + " WHERE DptCod=%ld", + DptCod); + } diff --git a/swad_department_database.h b/swad_department_database.h index 87112ee7..665237b0 100644 --- a/swad_department_database.h +++ b/swad_department_database.h @@ -27,7 +27,9 @@ /********************************* Headers ***********************************/ /*****************************************************************************/ -// #include "swad_constant.h" +#include // To access MySQL databases + +#include "swad_constant.h" #include "swad_department.h" /*****************************************************************************/ @@ -40,9 +42,16 @@ void Dpt_DB_CreateDepartment (const struct Dpt_Department *Dpt); +unsigned Dpt_DB_GetListDepartments (MYSQL_RES **mysql_res, + long InsCod,Dpt_Order_t SelectedOrder); +unsigned Dpt_DB_GetDataOfDepartmentByCod (MYSQL_RES **mysql_res,long DptCod); bool Dpt_DB_CheckIfDepartmentNameExists (const char *FieldName,const char *Name,long DptCod); unsigned Dpt_DB_GetNumDepartmentsInInstitution (long InsCod); -void Dpt_DB_UpdateDegName (long DptCod,const char *FieldName,const char *NewDptName); +void Dpt_DB_UpdateDptIns (long DptCod,long NewInsCod); +void Dpt_DB_UpdateDptName (long DptCod,const char *FieldName,const char *NewDptName); +void Dpt_DB_UpdateDptWWW (long DptCod,char NewWWW[Cns_MAX_BYTES_WWW + 1]); + +void Dpt_DB_RemoveDepartment (long DptCod); #endif