mirror of https://github.com/acanas/swad-core.git
Version 18.7.19
This commit is contained in:
parent
20bb37c40e
commit
d06dcb0895
|
@ -355,10 +355,11 @@ En OpenSWAD:
|
|||
ps2pdf source.ps destination.pdf
|
||||
*/
|
||||
|
||||
#define Log_PLATFORM_VERSION "SWAD 18.7.18 (2018-10-20)"
|
||||
#define Log_PLATFORM_VERSION "SWAD 18.7.19 (2018-10-20)"
|
||||
#define CSS_FILE "swad18.4.css"
|
||||
#define JS_FILE "swad17.17.1.js"
|
||||
/*
|
||||
Version 18.7.19: Oct 20, 2018 Some sprintf for database queries changed by asprintf. (237089 lines)
|
||||
Version 18.7.18: Oct 20, 2018 Some sprintf for database queries changed by asprintf. (237060 lines)
|
||||
Version 18.7.17: Oct 20, 2018 Some sprintf for database queries changed by asprintf. (237047 lines)
|
||||
Version 18.7.16: Oct 20, 2018 Some sprintf for database queries changed by asprintf. (237016 lines)
|
||||
|
|
|
@ -25,6 +25,9 @@
|
|||
/*********************************** Headers *********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#define _GNU_SOURCE // For asprintf
|
||||
#include <stdio.h> // For asprintf
|
||||
|
||||
#include "swad_account.h"
|
||||
#include "swad_box.h"
|
||||
#include "swad_database.h"
|
||||
|
@ -79,7 +82,7 @@ void Dup_ReportUsrAsPossibleDuplicate (void)
|
|||
{
|
||||
extern const char *Txt_Thank_you_for_reporting_a_possible_duplicate_user;
|
||||
extern const char *Txt_User_not_found_or_you_do_not_have_permission_;
|
||||
char Query[256];
|
||||
char *Query;
|
||||
bool ItsMe;
|
||||
|
||||
/***** Get user to be reported as possible duplicate *****/
|
||||
|
@ -90,13 +93,14 @@ void Dup_ReportUsrAsPossibleDuplicate (void)
|
|||
if (!ItsMe && Gbl.Usrs.Me.Role.Logged >= Rol_TCH)
|
||||
{
|
||||
/***** Insert possible duplicate into database *****/
|
||||
sprintf (Query,"REPLACE INTO usr_duplicated"
|
||||
if (asprintf (&Query,"REPLACE INTO usr_duplicated"
|
||||
" (UsrCod,InformerCod,InformTime)"
|
||||
" VALUES"
|
||||
" (%ld,%ld,NOW())",
|
||||
Gbl.Usrs.Other.UsrDat.UsrCod,
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||
DB_QueryINSERT (Query,"can not report duplicate");
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_QueryINSERT_free (Query,"can not report duplicate");
|
||||
|
||||
/***** Show feedback message *****/
|
||||
Ale_ShowAlert (Ale_SUCCESS,Txt_Thank_you_for_reporting_a_possible_duplicate_user);
|
||||
|
@ -132,7 +136,7 @@ void Dup_ListDuplicateUsrs (void)
|
|||
extern const char *Hlp_USERS_Duplicates_possibly_duplicate_users;
|
||||
extern const char *Txt_Possibly_duplicate_users;
|
||||
extern const char *Txt_Informants;
|
||||
char Query[1024];
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumUsrs;
|
||||
|
@ -145,11 +149,12 @@ void Dup_ListDuplicateUsrs (void)
|
|||
Hlp_USERS_Duplicates_possibly_duplicate_users,Box_NOT_CLOSABLE);
|
||||
|
||||
/***** Build query *****/
|
||||
sprintf (Query,"SELECT UsrCod,COUNT(*) AS N,MIN(UNIX_TIMESTAMP(InformTime)) AS T"
|
||||
if (asprintf (&Query,"SELECT UsrCod,COUNT(*) AS N,MIN(UNIX_TIMESTAMP(InformTime)) AS T"
|
||||
" FROM usr_duplicated"
|
||||
" GROUP BY UsrCod"
|
||||
" ORDER BY N DESC,T DESC");
|
||||
NumUsrs = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get possibly duplicate users");
|
||||
" ORDER BY N DESC,T DESC") < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
NumUsrs = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get possibly duplicate users");
|
||||
|
||||
/***** List possible duplicated users *****/
|
||||
if (NumUsrs)
|
||||
|
@ -229,6 +234,9 @@ void Dup_ListDuplicateUsrs (void)
|
|||
/***** Show warning indicating no users found *****/
|
||||
Usr_ShowWarningNoUsersFound (Rol_UNK);
|
||||
|
||||
/***** Free structure that stores the query result *****/
|
||||
DB_FreeMySQLResult (&mysql_res);
|
||||
|
||||
/***** End box *****/
|
||||
Box_EndBox ();
|
||||
}
|
||||
|
@ -253,7 +261,7 @@ static void Dup_ListSimilarUsrs (void)
|
|||
extern const char *Hlp_USERS_Duplicates_similar_users;
|
||||
extern const char *Txt_Similar_users;
|
||||
struct UsrData UsrDat;
|
||||
char Query[512 + Usr_MAX_BYTES_FIRSTNAME_OR_SURNAME * 3];
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumUsrs;
|
||||
|
@ -266,7 +274,8 @@ static void Dup_ListSimilarUsrs (void)
|
|||
/***** Build query *****/
|
||||
if (Gbl.Usrs.Other.UsrDat.Surname1[0] &&
|
||||
Gbl.Usrs.Other.UsrDat.FirstName[0]) // Name and surname 1 not empty
|
||||
sprintf (Query,"SELECT DISTINCT UsrCod FROM"
|
||||
{
|
||||
if (asprintf (&Query,"SELECT DISTINCT UsrCod FROM"
|
||||
"(SELECT DISTINCT UsrCod FROM usr_IDs"
|
||||
" WHERE UsrID IN (SELECT UsrID FROM usr_IDs WHERE UsrCod=%ld)"
|
||||
" UNION"
|
||||
|
@ -276,12 +285,15 @@ static void Dup_ListSimilarUsrs (void)
|
|||
Gbl.Usrs.Other.UsrDat.UsrCod,
|
||||
Gbl.Usrs.Other.UsrDat.Surname1,
|
||||
Gbl.Usrs.Other.UsrDat.Surname2,
|
||||
Gbl.Usrs.Other.UsrDat.FirstName);
|
||||
Gbl.Usrs.Other.UsrDat.FirstName) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
}
|
||||
else
|
||||
sprintf (Query,"SELECT DISTINCT UsrCod FROM usr_IDs"
|
||||
if (asprintf (&Query,"SELECT DISTINCT UsrCod FROM usr_IDs"
|
||||
" WHERE UsrID IN (SELECT UsrID FROM usr_IDs WHERE UsrCod=%ld)",
|
||||
Gbl.Usrs.Other.UsrDat.UsrCod);
|
||||
NumUsrs = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get similar users");
|
||||
Gbl.Usrs.Other.UsrDat.UsrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
NumUsrs = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get similar users");
|
||||
|
||||
/***** List possible similar users *****/
|
||||
if (NumUsrs)
|
||||
|
@ -370,6 +382,9 @@ static void Dup_ListSimilarUsrs (void)
|
|||
/***** Show warning indicating no users found *****/
|
||||
Usr_ShowWarningNoUsersFound (Rol_UNK);
|
||||
|
||||
/***** Free structure that stores the query result *****/
|
||||
DB_FreeMySQLResult (&mysql_res);
|
||||
|
||||
/***** End box *****/
|
||||
Box_EndBox ();
|
||||
}
|
||||
|
@ -380,11 +395,12 @@ static void Dup_ListSimilarUsrs (void)
|
|||
|
||||
static bool Dup_CheckIfUsrIsDup (long UsrCod)
|
||||
{
|
||||
char Query[128];
|
||||
char *Query;
|
||||
|
||||
sprintf (Query,"SELECT COUNT(*) FROM usr_duplicated WHERE UsrCod=%ld",
|
||||
UsrCod);
|
||||
return (DB_QueryCOUNT (Query,"can not if user is in list of possible duplicate users") != 0);
|
||||
if (asprintf (&Query,"SELECT COUNT(*) FROM usr_duplicated WHERE UsrCod=%ld",
|
||||
UsrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
return (DB_QueryCOUNT_free (Query,"can not if user is in list of possible duplicate users") != 0);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -460,10 +476,11 @@ void Dup_RemoveUsrFromListDupUsrs (void)
|
|||
|
||||
void Dup_RemoveUsrFromDuplicated (long UsrCod)
|
||||
{
|
||||
char Query[128];
|
||||
char *Query;
|
||||
|
||||
/***** Remove user from list of duplicated users *****/
|
||||
sprintf (Query,"DELETE FROM usr_duplicated WHERE UsrCod=%ld",
|
||||
UsrCod);
|
||||
DB_QueryDELETE (Query,"can not remove a user from possible duplicates");
|
||||
if (asprintf (&Query,"DELETE FROM usr_duplicated WHERE UsrCod=%ld",
|
||||
UsrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_QueryDELETE_free (Query,"can not remove a user from possible duplicates");
|
||||
}
|
||||
|
|
296
swad_enrolment.c
296
swad_enrolment.c
|
@ -209,7 +209,7 @@ void Enr_PutLinkToRequestSignUp (void)
|
|||
|
||||
void Enr_ModifyRoleInCurrentCrs (struct UsrData *UsrDat,Rol_Role_t NewRole)
|
||||
{
|
||||
char Query[256];
|
||||
char *Query;
|
||||
|
||||
/***** Check if user's role is allowed *****/
|
||||
switch (NewRole)
|
||||
|
@ -223,10 +223,11 @@ void Enr_ModifyRoleInCurrentCrs (struct UsrData *UsrDat,Rol_Role_t NewRole)
|
|||
}
|
||||
|
||||
/***** Update the role of a user in a course *****/
|
||||
sprintf (Query,"UPDATE crs_usr SET Role=%u"
|
||||
if (asprintf (&Query,"UPDATE crs_usr SET Role=%u"
|
||||
" WHERE CrsCod=%ld AND UsrCod=%ld",
|
||||
(unsigned) NewRole,Gbl.CurrentCrs.Crs.CrsCod,UsrDat->UsrCod);
|
||||
DB_QueryUPDATE (Query,"can not modify user's role in course");
|
||||
(unsigned) NewRole,Gbl.CurrentCrs.Crs.CrsCod,UsrDat->UsrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_QueryUPDATE_free (Query,"can not modify user's role in course");
|
||||
|
||||
/***** Flush caches *****/
|
||||
Usr_FlushCachesUsr ();
|
||||
|
@ -253,7 +254,7 @@ void Enr_RegisterUsrInCurrentCrs (struct UsrData *UsrDat,Rol_Role_t NewRole,
|
|||
Enr_KeepOrSetAccepted_t KeepOrSetAccepted)
|
||||
{
|
||||
extern const char *Usr_StringsUsrListTypeInDB[Usr_NUM_USR_LIST_TYPES];
|
||||
char Query[1024];
|
||||
char *Query;
|
||||
|
||||
/***** Check if user's role is allowed *****/
|
||||
switch (NewRole)
|
||||
|
@ -267,7 +268,7 @@ void Enr_RegisterUsrInCurrentCrs (struct UsrData *UsrDat,Rol_Role_t NewRole,
|
|||
}
|
||||
|
||||
/***** Register user in current course in database *****/
|
||||
sprintf (Query,"INSERT INTO crs_usr"
|
||||
if (asprintf (&Query,"INSERT INTO crs_usr"
|
||||
" (CrsCod,UsrCod,Role,Accepted,"
|
||||
"LastDowGrpCod,LastComGrpCod,LastAssGrpCod,"
|
||||
"NumAccTst,LastAccTst,NumQstsLastTst,"
|
||||
|
@ -284,8 +285,9 @@ void Enr_RegisterUsrInCurrentCrs (struct UsrData *UsrDat,Rol_Role_t NewRole,
|
|||
Usr_StringsUsrListTypeInDB[Usr_SHOW_USRS_TYPE_DEFAULT],
|
||||
Usr_CLASS_PHOTO_COLS_DEF,
|
||||
Usr_LIST_WITH_PHOTOS_DEF ? 'Y' :
|
||||
'N');
|
||||
DB_QueryINSERT (Query,"can not register user in course");
|
||||
'N') < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_QueryINSERT_free (Query,"can not register user in course");
|
||||
|
||||
/***** Flush caches *****/
|
||||
Usr_FlushCachesUsr ();
|
||||
|
@ -466,31 +468,29 @@ void Enr_ReqAcceptRegisterInCrs (void)
|
|||
/*****************************************************************************/
|
||||
/****************** Put an enrolment into a notification ********************/
|
||||
/*****************************************************************************/
|
||||
// This function may be called inside a web service, so don't report error
|
||||
|
||||
void Enr_GetNotifEnrolment (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
|
||||
long CrsCod,long UsrCod)
|
||||
{
|
||||
extern const char *Txt_ROLES_SINGUL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
|
||||
char Query[256];
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
struct UsrData UsrDat;
|
||||
Rol_Role_t Role;
|
||||
|
||||
SummaryStr[0] = '\0'; // Return nothing on error
|
||||
// This function may be called inside a web service, so don't report error
|
||||
|
||||
/***** Get user's role in course from database *****/
|
||||
sprintf (Query,"SELECT Role"
|
||||
if (asprintf (&Query,"SELECT Role"
|
||||
" FROM crs_usr"
|
||||
" WHERE CrsCod=%ld AND UsrCod=%ld",
|
||||
CrsCod,UsrCod);
|
||||
CrsCod,UsrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
|
||||
if (!mysql_query (&Gbl.mysql,Query))
|
||||
if ((mysql_res = mysql_store_result (&Gbl.mysql)) != NULL)
|
||||
{
|
||||
/***** Result should have a unique row *****/
|
||||
if (mysql_num_rows (mysql_res) == 1)
|
||||
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get user's role"
|
||||
" in course") == 1) // Result should have a unique row
|
||||
{
|
||||
/***** Get user's role in course *****/
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
|
@ -511,8 +511,8 @@ void Enr_GetNotifEnrolment (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
|
|||
Usr_UsrDataDestructor (&UsrDat);
|
||||
}
|
||||
|
||||
mysql_free_result (mysql_res);
|
||||
}
|
||||
/***** Free structure that stores the query result *****/
|
||||
DB_FreeMySQLResult (&mysql_res);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -525,7 +525,6 @@ void Enr_UpdateUsrData (struct UsrData *UsrDat)
|
|||
extern const char *Usr_StringsSexDB[Usr_NUM_SEXS];
|
||||
char BirthdayStrDB[Usr_BIRTHDAY_STR_DB_LENGTH + 1];
|
||||
char *Query;
|
||||
size_t CommentsLength;
|
||||
|
||||
/***** Check if user's code is initialized *****/
|
||||
if (UsrDat->UsrCod <= 0)
|
||||
|
@ -536,22 +535,7 @@ void Enr_UpdateUsrData (struct UsrData *UsrDat)
|
|||
|
||||
/***** Update user's common data *****/
|
||||
Usr_CreateBirthdayStrDB (UsrDat,BirthdayStrDB); // It can include start and ending apostrophes
|
||||
if (UsrDat->Comments)
|
||||
CommentsLength = strlen (UsrDat->Comments);
|
||||
else
|
||||
CommentsLength = 0;
|
||||
if ((Query = (char *) malloc (2048 +
|
||||
Pwd_BYTES_ENCRYPTED_PASSWORD + // Password
|
||||
Usr_MAX_BYTES_FIRSTNAME_OR_SURNAME * 3 +// Surname1, Surname2, FirstName
|
||||
Usr_MAX_BYTES_ADDRESS + // LocalAddress
|
||||
Usr_MAX_BYTES_PHONE + // LocalPhone
|
||||
Usr_MAX_BYTES_ADDRESS + // FamilyAddress
|
||||
Usr_MAX_BYTES_PHONE + // FamilyPhone
|
||||
Usr_MAX_BYTES_ADDRESS + // OriginPlace
|
||||
Usr_BIRTHDAY_STR_DB_LENGTH + // BirthdayStrDB
|
||||
CommentsLength)) == NULL) // Comments
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
sprintf (Query,"UPDATE usr_data"
|
||||
if (asprintf (&Query,"UPDATE usr_data"
|
||||
" SET Password='%s',"
|
||||
"Surname1='%s',Surname2='%s',FirstName='%s',Sex='%s',"
|
||||
"CtyCod=%ld,"
|
||||
|
@ -568,11 +552,11 @@ void Enr_UpdateUsrData (struct UsrData *UsrDat)
|
|||
UsrDat->FamilyAddress,UsrDat->FamilyPhone,
|
||||
UsrDat->OriginPlace,
|
||||
BirthdayStrDB,
|
||||
CommentsLength ? UsrDat->Comments :
|
||||
UsrDat->Comments ? UsrDat->Comments :
|
||||
"",
|
||||
UsrDat->UsrCod);
|
||||
DB_QueryUPDATE (Query,"can not update user's data");
|
||||
free ((void *) Query);
|
||||
UsrDat->UsrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_QueryUPDATE_free (Query,"can not update user's data");
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -595,17 +579,18 @@ void Enr_FilterUsrDat (struct UsrData *UsrDat)
|
|||
|
||||
void Enr_UpdateInstitutionCentreDepartment (void)
|
||||
{
|
||||
char Query[256];
|
||||
char *Query;
|
||||
|
||||
sprintf (Query,"UPDATE usr_data"
|
||||
if (asprintf (&Query,"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);
|
||||
DB_QueryUPDATE (Query,"can not update institution, centre and department");
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_QueryUPDATE_free (Query,"can not update institution, centre and department");
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -869,7 +854,7 @@ void Enr_RemoveOldUsrs (void)
|
|||
extern const char *Txt_X_users_have_been_eliminated;
|
||||
unsigned MonthsWithoutAccess;
|
||||
time_t SecondsWithoutAccess;
|
||||
char Query[1024];
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned long NumUsr;
|
||||
|
@ -888,7 +873,7 @@ void Enr_RemoveOldUsrs (void)
|
|||
SecondsWithoutAccess = (time_t) MonthsWithoutAccess * Dat_SECONDS_IN_ONE_MONTH;
|
||||
|
||||
/***** Get old users from database *****/
|
||||
sprintf (Query,"SELECT UsrCod FROM"
|
||||
if (asprintf (&Query,"SELECT UsrCod FROM"
|
||||
"("
|
||||
"SELECT UsrCod FROM usr_last WHERE"
|
||||
" LastTime<FROM_UNIXTIME(UNIX_TIMESTAMP()-'%lu')"
|
||||
|
@ -897,8 +882,9 @@ void Enr_RemoveOldUsrs (void)
|
|||
" UsrCod NOT IN (SELECT UsrCod FROM usr_last)"
|
||||
") AS candidate_usrs"
|
||||
" WHERE UsrCod NOT IN (SELECT DISTINCT UsrCod FROM crs_usr)",
|
||||
(unsigned long) SecondsWithoutAccess);
|
||||
if ((NumUsrs = DB_QuerySELECT (Query,&mysql_res,"can not get old users")))
|
||||
(unsigned long) SecondsWithoutAccess) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
if ((NumUsrs = DB_QuerySELECT_free (Query,&mysql_res,"can not get old users")))
|
||||
{
|
||||
snprintf (Gbl.Alert.Txt,sizeof (Gbl.Alert.Txt),
|
||||
Txt_Eliminating_X_users_who_were_not_enroled_in_any_course_and_with_more_than_Y_months_without_access_to_Z,
|
||||
|
@ -2027,7 +2013,7 @@ void Enr_SignUpInCrs (void)
|
|||
extern const char *Txt_You_were_already_enroled_as_X_in_the_course_Y;
|
||||
extern const char *Txt_ROLES_SINGUL_abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
|
||||
extern const char *Txt_Your_request_for_enrolment_as_X_in_the_course_Y_has_been_accepted_for_processing;
|
||||
char Query[512];
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
Rol_Role_t RoleFromForm;
|
||||
|
@ -2058,11 +2044,12 @@ void Enr_SignUpInCrs (void)
|
|||
Lay_ShowErrorAndExit ("Wrong role.");
|
||||
|
||||
/***** Try to get and old request of the same user in the same course from database *****/
|
||||
sprintf (Query,"SELECT ReqCod FROM crs_usr_requests"
|
||||
if (asprintf (&Query,"SELECT ReqCod FROM crs_usr_requests"
|
||||
" WHERE CrsCod=%ld AND UsrCod=%ld",
|
||||
Gbl.CurrentCrs.Crs.CrsCod,
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||
if (DB_QuerySELECT (Query,&mysql_res,"can not get enrolment request"))
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get enrolment request"))
|
||||
{
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
/* Get request code (row[0]) */
|
||||
|
@ -2074,24 +2061,26 @@ void Enr_SignUpInCrs (void)
|
|||
/***** Request user in current course in database *****/
|
||||
if (ReqCod > 0) // Old request exists in database
|
||||
{
|
||||
sprintf (Query,"UPDATE crs_usr_requests SET Role=%u,RequestTime=NOW()"
|
||||
if (asprintf (&Query,"UPDATE crs_usr_requests SET Role=%u,RequestTime=NOW()"
|
||||
" WHERE ReqCod=%ld AND CrsCod=%ld AND UsrCod=%ld",
|
||||
(unsigned) RoleFromForm,
|
||||
ReqCod,
|
||||
Gbl.CurrentCrs.Crs.CrsCod,
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod);
|
||||
DB_QueryUPDATE (Query,"can not update enrolment request");
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_QueryUPDATE_free (Query,"can not update enrolment request");
|
||||
}
|
||||
else // No request in database for this user in this course
|
||||
{
|
||||
sprintf (Query,"INSERT INTO crs_usr_requests"
|
||||
if (asprintf (&Query,"INSERT INTO crs_usr_requests"
|
||||
" (CrsCod,UsrCod,Role,RequestTime)"
|
||||
" VALUES"
|
||||
" (%ld,%ld,%u,NOW())",
|
||||
Gbl.CurrentCrs.Crs.CrsCod,
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||
(unsigned) RoleFromForm);
|
||||
ReqCod = DB_QueryINSERTandReturnCode (Query,"can not save enrolment request");
|
||||
(unsigned) RoleFromForm) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
ReqCod = DB_QueryINSERTandReturnCode_free (Query,"can not save enrolment request");
|
||||
}
|
||||
|
||||
/***** Show confirmation message *****/
|
||||
|
@ -2113,32 +2102,29 @@ void Enr_SignUpInCrs (void)
|
|||
/*****************************************************************************/
|
||||
/************** Put an enrolment request into a notification *****************/
|
||||
/*****************************************************************************/
|
||||
// This function may be called inside a web service, so don't report error
|
||||
|
||||
void Enr_GetNotifEnrolmentRequest (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
|
||||
char **ContentStr,
|
||||
long ReqCod,bool GetContent)
|
||||
{
|
||||
extern const char *Txt_ROLES_SINGUL_Abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
|
||||
char Query[256];
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
struct UsrData UsrDat;
|
||||
Rol_Role_t DesiredRole;
|
||||
|
||||
SummaryStr[0] = '\0'; // Return nothing on error
|
||||
// This function may be called inside a web service, so don't report error
|
||||
|
||||
/***** Get user and requested role from database *****/
|
||||
sprintf (Query,"SELECT UsrCod,Role"
|
||||
if (asprintf (&Query,"SELECT UsrCod,Role"
|
||||
" FROM crs_usr_requests"
|
||||
" WHERE ReqCod=%ld",
|
||||
ReqCod);
|
||||
ReqCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
|
||||
if (!mysql_query (&Gbl.mysql,Query))
|
||||
if ((mysql_res = mysql_store_result (&Gbl.mysql)) != NULL)
|
||||
{
|
||||
/***** Result should have a unique row *****/
|
||||
if (mysql_num_rows (mysql_res) == 1)
|
||||
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get enrolment request") == 1) // Result should have a unique row
|
||||
{
|
||||
/***** Get user and requested role *****/
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
|
@ -2166,8 +2152,8 @@ void Enr_GetNotifEnrolmentRequest (char SummaryStr[Ntf_MAX_BYTES_SUMMARY + 1],
|
|||
Usr_UsrDataDestructor (&UsrDat);
|
||||
}
|
||||
|
||||
mysql_free_result (mysql_res);
|
||||
}
|
||||
/***** Free structure that stores the query result *****/
|
||||
DB_FreeMySQLResult (&mysql_res);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -2338,7 +2324,7 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
|
|||
extern const char *Txt_Register;
|
||||
extern const char *Txt_Reject;
|
||||
extern const char *Txt_No_enrolment_requests;
|
||||
char Query[1024];
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
unsigned NumReq;
|
||||
|
@ -2414,7 +2400,7 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
|
|||
{
|
||||
case Rol_TCH:
|
||||
// Requests in all courses in which I am teacher
|
||||
sprintf (Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
if (asprintf (&Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
"crs_usr_requests.CrsCod,"
|
||||
"crs_usr_requests.UsrCod,"
|
||||
"crs_usr_requests.Role,"
|
||||
|
@ -2427,11 +2413,12 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
|
|||
" ORDER BY crs_usr_requests.RequestTime DESC",
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||
(unsigned) Rol_TCH,
|
||||
RolesSelected);
|
||||
RolesSelected) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
break;
|
||||
case Rol_DEG_ADM:
|
||||
// Requests in all degrees administrated by me
|
||||
sprintf (Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
if (asprintf (&Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
"crs_usr_requests.CrsCod,"
|
||||
"crs_usr_requests.UsrCod,"
|
||||
"crs_usr_requests.Role,"
|
||||
|
@ -2443,11 +2430,12 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
|
|||
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
|
||||
" ORDER BY crs_usr_requests.RequestTime DESC",
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_DEG],
|
||||
RolesSelected);
|
||||
RolesSelected) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
break;
|
||||
case Rol_CTR_ADM:
|
||||
// Requests in all centres administrated by me
|
||||
sprintf (Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
if (asprintf (&Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
"crs_usr_requests.CrsCod,"
|
||||
"crs_usr_requests.UsrCod,"
|
||||
"crs_usr_requests.Role,"
|
||||
|
@ -2460,11 +2448,12 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
|
|||
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
|
||||
" ORDER BY crs_usr_requests.RequestTime DESC",
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_CTR],
|
||||
RolesSelected);
|
||||
RolesSelected) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
break;
|
||||
case Rol_INS_ADM:
|
||||
// Requests in all institutions administrated by me
|
||||
sprintf (Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
if (asprintf (&Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
"crs_usr_requests.CrsCod,"
|
||||
"crs_usr_requests.UsrCod,"
|
||||
"crs_usr_requests.Role,"
|
||||
|
@ -2478,11 +2467,12 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
|
|||
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
|
||||
" ORDER BY crs_usr_requests.RequestTime DESC",
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_INS],
|
||||
RolesSelected);
|
||||
RolesSelected) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
break;
|
||||
case Rol_SYS_ADM:
|
||||
// All requests
|
||||
sprintf (Query,"SELECT ReqCod,"
|
||||
if (asprintf (&Query,"SELECT ReqCod,"
|
||||
"CrsCod,"
|
||||
"UsrCod,"
|
||||
"Role,"
|
||||
|
@ -2490,7 +2480,8 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
|
|||
" FROM crs_usr_requests"
|
||||
" WHERE ((1<<Role)&%u)<>0"
|
||||
" ORDER BY RequestTime DESC",
|
||||
RolesSelected);
|
||||
RolesSelected) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
break;
|
||||
default:
|
||||
Lay_ShowErrorAndExit ("You don't have permission to list requesters.");
|
||||
|
@ -2502,7 +2493,7 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
|
|||
{
|
||||
case Rol_TCH:
|
||||
// Requests in courses of this country in which I am teacher
|
||||
sprintf (Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
if (asprintf (&Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
"crs_usr_requests.CrsCod,"
|
||||
"crs_usr_requests.UsrCod,"
|
||||
"crs_usr_requests.Role,"
|
||||
|
@ -2521,11 +2512,12 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
|
|||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||
(unsigned) Rol_TCH,
|
||||
Gbl.CurrentCty.Cty.CtyCod,
|
||||
RolesSelected);
|
||||
RolesSelected) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
break;
|
||||
case Rol_DEG_ADM:
|
||||
// Requests in degrees of this country administrated by me
|
||||
sprintf (Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
if (asprintf (&Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
"crs_usr_requests.CrsCod,"
|
||||
"crs_usr_requests.UsrCod,"
|
||||
"crs_usr_requests.Role,"
|
||||
|
@ -2542,11 +2534,12 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
|
|||
" ORDER BY crs_usr_requests.RequestTime DESC",
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_DEG],
|
||||
Gbl.CurrentCty.Cty.CtyCod,
|
||||
RolesSelected);
|
||||
RolesSelected) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
break;
|
||||
case Rol_CTR_ADM:
|
||||
// Requests in centres of this country administrated by me
|
||||
sprintf (Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
if (asprintf (&Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
"crs_usr_requests.CrsCod,"
|
||||
"crs_usr_requests.UsrCod,"
|
||||
"crs_usr_requests.Role,"
|
||||
|
@ -2563,11 +2556,12 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
|
|||
" ORDER BY crs_usr_requests.RequestTime DESC",
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_CTR],
|
||||
Gbl.CurrentCty.Cty.CtyCod,
|
||||
RolesSelected);
|
||||
RolesSelected) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
break;
|
||||
case Rol_INS_ADM:
|
||||
// Requests in institutions of this country administrated by me
|
||||
sprintf (Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
if (asprintf (&Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
"crs_usr_requests.CrsCod,"
|
||||
"crs_usr_requests.UsrCod,"
|
||||
"crs_usr_requests.Role,"
|
||||
|
@ -2584,11 +2578,12 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
|
|||
" ORDER BY crs_usr_requests.RequestTime DESC",
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_INS],
|
||||
Gbl.CurrentCty.Cty.CtyCod,
|
||||
RolesSelected);
|
||||
RolesSelected) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
break;
|
||||
case Rol_SYS_ADM:
|
||||
// Requests in any course of this country
|
||||
sprintf (Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
if (asprintf (&Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
"crs_usr_requests.CrsCod,"
|
||||
"crs_usr_requests.UsrCod,"
|
||||
"crs_usr_requests.Role,"
|
||||
|
@ -2602,7 +2597,8 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
|
|||
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
|
||||
" ORDER BY crs_usr_requests.RequestTime DESC",
|
||||
Gbl.CurrentCty.Cty.CtyCod,
|
||||
RolesSelected);
|
||||
RolesSelected) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
break;
|
||||
default:
|
||||
Lay_ShowErrorAndExit ("You don't have permission to list requesters.");
|
||||
|
@ -2614,7 +2610,7 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
|
|||
{
|
||||
case Rol_TCH:
|
||||
// Requests in courses of this institution in which I am teacher
|
||||
sprintf (Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
if (asprintf (&Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
"crs_usr_requests.CrsCod,"
|
||||
"crs_usr_requests.UsrCod,"
|
||||
"crs_usr_requests.Role,"
|
||||
|
@ -2632,11 +2628,12 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
|
|||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||
(unsigned) Rol_TCH,
|
||||
Gbl.CurrentIns.Ins.InsCod,
|
||||
RolesSelected);
|
||||
RolesSelected) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
break;
|
||||
case Rol_DEG_ADM:
|
||||
// Requests in degrees of this institution administrated by me
|
||||
sprintf (Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
if (asprintf (&Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
"crs_usr_requests.CrsCod,"
|
||||
"crs_usr_requests.UsrCod,"
|
||||
"crs_usr_requests.Role,"
|
||||
|
@ -2652,11 +2649,12 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
|
|||
" ORDER BY crs_usr_requests.RequestTime DESC",
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_DEG],
|
||||
Gbl.CurrentIns.Ins.InsCod,
|
||||
RolesSelected);
|
||||
RolesSelected) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
break;
|
||||
case Rol_CTR_ADM:
|
||||
// Requests in centres of this institution administrated by me
|
||||
sprintf (Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
if (asprintf (&Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
"crs_usr_requests.CrsCod,"
|
||||
"crs_usr_requests.UsrCod,"
|
||||
"crs_usr_requests.Role,"
|
||||
|
@ -2672,12 +2670,13 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
|
|||
" ORDER BY crs_usr_requests.RequestTime DESC",
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_CTR],
|
||||
Gbl.CurrentIns.Ins.InsCod,
|
||||
RolesSelected);
|
||||
RolesSelected) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
break;
|
||||
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
|
||||
sprintf (Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
if (asprintf (&Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
"crs_usr_requests.CrsCod,"
|
||||
"crs_usr_requests.UsrCod,"
|
||||
"crs_usr_requests.Role,"
|
||||
|
@ -2690,7 +2689,8 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
|
|||
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
|
||||
" ORDER BY crs_usr_requests.RequestTime DESC",
|
||||
Gbl.CurrentIns.Ins.InsCod,
|
||||
RolesSelected);
|
||||
RolesSelected) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
break;
|
||||
default:
|
||||
Lay_ShowErrorAndExit ("You don't have permission to list requesters.");
|
||||
|
@ -2702,7 +2702,7 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
|
|||
{
|
||||
case Rol_TCH:
|
||||
// Requests in courses of this centre in which I am teacher
|
||||
sprintf (Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
if (asprintf (&Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
"crs_usr_requests.CrsCod,"
|
||||
"crs_usr_requests.UsrCod,"
|
||||
"crs_usr_requests.Role,"
|
||||
|
@ -2719,11 +2719,12 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
|
|||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||
(unsigned) Rol_TCH,
|
||||
Gbl.CurrentCtr.Ctr.CtrCod,
|
||||
RolesSelected);
|
||||
RolesSelected) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
break;
|
||||
case Rol_DEG_ADM:
|
||||
// Requests in degrees of this centre administrated by me
|
||||
sprintf (Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
if (asprintf (&Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
"crs_usr_requests.CrsCod,"
|
||||
"crs_usr_requests.UsrCod,"
|
||||
"crs_usr_requests.Role,"
|
||||
|
@ -2738,13 +2739,14 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
|
|||
" ORDER BY crs_usr_requests.RequestTime DESC",
|
||||
Gbl.Usrs.Me.UsrDat.UsrCod,Sco_ScopeDB[Sco_SCOPE_DEG],
|
||||
Gbl.CurrentCtr.Ctr.CtrCod,
|
||||
RolesSelected);
|
||||
RolesSelected) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
break;
|
||||
case Rol_CTR_ADM: // If I am logged as admin of this centre , I can view all the requesters from this centre
|
||||
case Rol_INS_ADM: // If I am logged as admin of this institution, I can view all the requesters from this centre
|
||||
case Rol_SYS_ADM:
|
||||
// Request in any course of this centre
|
||||
sprintf (Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
if (asprintf (&Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
"crs_usr_requests.CrsCod,"
|
||||
"crs_usr_requests.UsrCod,"
|
||||
"crs_usr_requests.Role,"
|
||||
|
@ -2756,7 +2758,8 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
|
|||
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
|
||||
" ORDER BY crs_usr_requests.RequestTime DESC",
|
||||
Gbl.CurrentCtr.Ctr.CtrCod,
|
||||
RolesSelected);
|
||||
RolesSelected) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
break;
|
||||
default:
|
||||
Lay_ShowErrorAndExit ("You don't have permission to list requesters.");
|
||||
|
@ -2768,7 +2771,7 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
|
|||
{
|
||||
case Rol_TCH:
|
||||
// Requests in courses of this degree in which I am teacher
|
||||
sprintf (Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
if (asprintf (&Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
"crs_usr_requests.CrsCod,"
|
||||
"crs_usr_requests.UsrCod,"
|
||||
"crs_usr_requests.Role,"
|
||||
|
@ -2784,14 +2787,15 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
|
|||
Gbl.Usrs.Me.UsrDat.UsrCod,
|
||||
(unsigned) Rol_TCH,
|
||||
Gbl.CurrentDeg.Deg.DegCod,
|
||||
RolesSelected);
|
||||
RolesSelected) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
break;
|
||||
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 centre , 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
|
||||
sprintf (Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
if (asprintf (&Query,"SELECT crs_usr_requests.ReqCod,"
|
||||
"crs_usr_requests.CrsCod,"
|
||||
"crs_usr_requests.UsrCod,"
|
||||
"crs_usr_requests.Role,"
|
||||
|
@ -2802,7 +2806,8 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
|
|||
" AND ((1<<crs_usr_requests.Role)&%u)<>0"
|
||||
" ORDER BY crs_usr_requests.RequestTime DESC",
|
||||
Gbl.CurrentDeg.Deg.DegCod,
|
||||
RolesSelected);
|
||||
RolesSelected) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
break;
|
||||
default:
|
||||
Lay_ShowErrorAndExit ("You don't have permission to list requesters.");
|
||||
|
@ -2818,14 +2823,15 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
|
|||
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
|
||||
sprintf (Query,"SELECT ReqCod,CrsCod,UsrCod,Role,"
|
||||
if (asprintf (&Query,"SELECT ReqCod,CrsCod,UsrCod,Role,"
|
||||
"UNIX_TIMESTAMP(RequestTime)"
|
||||
" FROM crs_usr_requests"
|
||||
" WHERE CrsCod=%ld"
|
||||
" AND ((1<<Role)&%u)<>0"
|
||||
" ORDER BY RequestTime DESC",
|
||||
Gbl.CurrentCrs.Crs.CrsCod,
|
||||
RolesSelected);
|
||||
RolesSelected) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
break;
|
||||
default:
|
||||
Lay_ShowErrorAndExit ("You don't have permission to list requesters.");
|
||||
|
@ -2837,7 +2843,7 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
|
|||
break;
|
||||
}
|
||||
|
||||
NumRequests = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get requests for enrolment");
|
||||
NumRequests = (unsigned) DB_QuerySELECT_free (Query,&mysql_res,"can not get requests for enrolment");
|
||||
|
||||
/***** List requests *****/
|
||||
if (NumRequests)
|
||||
|
@ -3023,7 +3029,7 @@ static void Enr_ShowEnrolmentRequestsGivenRoles (unsigned RolesSelected)
|
|||
|
||||
static void Enr_RemoveEnrolmentRequest (long CrsCod,long UsrCod)
|
||||
{
|
||||
char Query[256];
|
||||
char *Query;
|
||||
MYSQL_RES *mysql_res;
|
||||
MYSQL_ROW row;
|
||||
long ReqCod;
|
||||
|
@ -3031,10 +3037,11 @@ static void Enr_RemoveEnrolmentRequest (long CrsCod,long UsrCod)
|
|||
/***** Mark possible notifications as removed
|
||||
Important: do this before removing the request *****/
|
||||
/* Request request code (returns 0 or 1 rows) */
|
||||
sprintf (Query,"SELECT ReqCod FROM crs_usr_requests"
|
||||
if (asprintf (&Query,"SELECT ReqCod FROM crs_usr_requests"
|
||||
" WHERE CrsCod=%ld AND UsrCod=%ld",
|
||||
CrsCod,UsrCod);
|
||||
if (DB_QuerySELECT (Query,&mysql_res,"can not get request code")) // Request exists
|
||||
CrsCod,UsrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
if (DB_QuerySELECT_free (Query,&mysql_res,"can not get request code")) // Request exists
|
||||
{
|
||||
/* Get request code */
|
||||
row = mysql_fetch_row (mysql_res);
|
||||
|
@ -3047,10 +3054,11 @@ static void Enr_RemoveEnrolmentRequest (long CrsCod,long UsrCod)
|
|||
DB_FreeMySQLResult (&mysql_res);
|
||||
|
||||
/***** Remove enrolment request *****/
|
||||
sprintf (Query,"DELETE FROM crs_usr_requests"
|
||||
if (asprintf (&Query,"DELETE FROM crs_usr_requests"
|
||||
" WHERE CrsCod=%ld AND UsrCod=%ld",
|
||||
CrsCod,UsrCod);
|
||||
DB_QueryDELETE (Query,"can not remove a request for enrolment");
|
||||
CrsCod,UsrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_QueryDELETE_free (Query,"can not remove a request for enrolment");
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -3059,25 +3067,27 @@ static void Enr_RemoveEnrolmentRequest (long CrsCod,long UsrCod)
|
|||
|
||||
static void Enr_RemoveExpiredEnrolmentRequests (void)
|
||||
{
|
||||
char Query[512];
|
||||
char *Query;
|
||||
|
||||
/***** Mark possible notifications as removed
|
||||
Important: do this before removing the request *****/
|
||||
sprintf (Query,"UPDATE notif,crs_usr_requests"
|
||||
if (asprintf (&Query,"UPDATE notif,crs_usr_requests"
|
||||
" SET notif.Status=(notif.Status | %u)"
|
||||
" WHERE notif.NotifyEvent=%u"
|
||||
" AND notif.Cod=crs_usr_requests.ReqCod"
|
||||
" AND crs_usr_requests.RequestTime<FROM_UNIXTIME(UNIX_TIMESTAMP()-'%lu')",
|
||||
(unsigned) Ntf_STATUS_BIT_REMOVED,
|
||||
(unsigned) Ntf_EVENT_ENROLMENT_REQUEST,
|
||||
Cfg_TIME_TO_DELETE_ENROLMENT_REQUESTS);
|
||||
DB_QueryUPDATE (Query,"can not set notification(s) as removed");
|
||||
Cfg_TIME_TO_DELETE_ENROLMENT_REQUESTS) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_QueryUPDATE_free (Query,"can not set notification(s) as removed");
|
||||
|
||||
/***** Remove expired requests for enrolment *****/
|
||||
sprintf (Query,"DELETE FROM crs_usr_requests"
|
||||
if (asprintf (&Query,"DELETE FROM crs_usr_requests"
|
||||
" WHERE RequestTime<FROM_UNIXTIME(UNIX_TIMESTAMP()-'%lu')",
|
||||
Cfg_TIME_TO_DELETE_ENROLMENT_REQUESTS);
|
||||
DB_QueryDELETE (Query,"can not remove expired requests for enrolment");
|
||||
Cfg_TIME_TO_DELETE_ENROLMENT_REQUESTS) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_QueryDELETE_free (Query,"can not remove expired requests for enrolment");
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -3463,7 +3473,7 @@ static void Enr_RegisterAdmin (struct UsrData *UsrDat,Sco_Scope_t Scope,long Cod
|
|||
extern const char *Sco_ScopeDB[Sco_NUM_SCOPES];
|
||||
extern const char *Txt_THE_USER_X_is_already_an_administrator_of_Y;
|
||||
extern const char *Txt_THE_USER_X_has_been_enroled_as_administrator_of_Y;
|
||||
char Query[512];
|
||||
char *Query;
|
||||
|
||||
/***** Check if user was and administrator of current institution/centre/degree *****/
|
||||
if (Usr_CheckIfUsrIsAdm (UsrDat->UsrCod,Scope,Cod))
|
||||
|
@ -3473,12 +3483,13 @@ static void Enr_RegisterAdmin (struct UsrData *UsrDat,Sco_Scope_t Scope,long Cod
|
|||
else // User was not administrator of current institution/centre/degree
|
||||
{
|
||||
/***** Insert or replace administrator in current institution/centre/degree *****/
|
||||
sprintf (Query,"REPLACE INTO admin"
|
||||
if (asprintf (&Query,"REPLACE INTO admin"
|
||||
" (UsrCod,Scope,Cod)"
|
||||
" VALUES"
|
||||
" (%ld,'%s',%ld)",
|
||||
UsrDat->UsrCod,Sco_ScopeDB[Scope],Cod);
|
||||
DB_QueryREPLACE (Query,"can not create administrator");
|
||||
UsrDat->UsrCod,Sco_ScopeDB[Scope],Cod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_QueryREPLACE_free (Query,"can not create administrator");
|
||||
|
||||
snprintf (Gbl.Alert.Txt,sizeof (Gbl.Alert.Txt),
|
||||
Txt_THE_USER_X_has_been_enroled_as_administrator_of_Y,
|
||||
|
@ -4129,13 +4140,14 @@ void Enr_ModifyUsr2 (void)
|
|||
|
||||
void Enr_AcceptUsrInCrs (long UsrCod)
|
||||
{
|
||||
char Query[512];
|
||||
char *Query;
|
||||
|
||||
/***** Set enrolment of a user to "accepted" in the current course *****/
|
||||
sprintf (Query,"UPDATE crs_usr SET Accepted='Y'"
|
||||
if (asprintf (&Query,"UPDATE crs_usr SET Accepted='Y'"
|
||||
" WHERE CrsCod=%ld AND UsrCod=%ld",
|
||||
Gbl.CurrentCrs.Crs.CrsCod,UsrCod);
|
||||
DB_QueryUPDATE (Query,"can not confirm user's enrolment");
|
||||
Gbl.CurrentCrs.Crs.CrsCod,UsrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_QueryUPDATE_free (Query,"can not confirm user's enrolment");
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -4207,7 +4219,7 @@ static void Enr_EffectivelyRemUsrFromCrs (struct UsrData *UsrDat,struct Course *
|
|||
{
|
||||
extern const char *Txt_THE_USER_X_has_been_removed_from_the_course_Y;
|
||||
extern const char *Txt_User_not_found_or_you_do_not_have_permission_;
|
||||
char Query[1024];
|
||||
char *Query;
|
||||
bool ItsMe = Usr_ItsMe (UsrDat->UsrCod);
|
||||
|
||||
if (Usr_CheckIfUsrBelongsToCurrentCrs (UsrDat))
|
||||
|
@ -4239,10 +4251,11 @@ static void Enr_EffectivelyRemUsrFromCrs (struct UsrData *UsrDat,struct Course *
|
|||
Ntf_MarkNotifInCrsAsRemoved (UsrDat->UsrCod,Crs->CrsCod);
|
||||
|
||||
/***** Remove user from the table of courses-users *****/
|
||||
sprintf (Query,"DELETE FROM crs_usr"
|
||||
if (asprintf (&Query,"DELETE FROM crs_usr"
|
||||
" WHERE CrsCod=%ld AND UsrCod=%ld",
|
||||
Crs->CrsCod,UsrDat->UsrCod);
|
||||
DB_QueryDELETE (Query,"can not remove a user from a course");
|
||||
Crs->CrsCod,UsrDat->UsrCod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_QueryDELETE_free (Query,"can not remove a user from a course");
|
||||
|
||||
/***** Flush caches *****/
|
||||
Usr_FlushCachesUsr ();
|
||||
|
@ -4347,15 +4360,16 @@ static void Enr_EffectivelyRemAdm (struct UsrData *UsrDat,Sco_Scope_t Scope,
|
|||
extern const char *Sco_ScopeDB[Sco_NUM_SCOPES];
|
||||
extern const char *Txt_THE_USER_X_has_been_removed_as_administrator_of_Y;
|
||||
extern const char *Txt_THE_USER_X_is_not_an_administrator_of_Y;
|
||||
char Query[1024];
|
||||
char *Query;
|
||||
|
||||
if (Usr_CheckIfUsrIsAdm (UsrDat->UsrCod,Scope,Cod)) // User is administrator of current institution/centre/degree
|
||||
{
|
||||
/***** Remove user from the table of admins *****/
|
||||
sprintf (Query,"DELETE FROM admin"
|
||||
if (asprintf (&Query,"DELETE FROM admin"
|
||||
" WHERE UsrCod=%ld AND Scope='%s' AND Cod=%ld",
|
||||
UsrDat->UsrCod,Sco_ScopeDB[Scope],Cod);
|
||||
DB_QueryDELETE (Query,"can not remove an administrator");
|
||||
UsrDat->UsrCod,Sco_ScopeDB[Scope],Cod) < 0)
|
||||
Lay_NotEnoughMemoryExit ();
|
||||
DB_QueryDELETE_free (Query,"can not remove an administrator");
|
||||
|
||||
snprintf (Gbl.Alert.Txt,sizeof (Gbl.Alert.Txt),
|
||||
Txt_THE_USER_X_has_been_removed_as_administrator_of_Y,
|
||||
|
|
Loading…
Reference in New Issue