mirror of https://github.com/acanas/swad-core.git
Version 20.92: Jun 09, 2021 New modules swad_admin and swad_admin_database for administrators.
This commit is contained in:
parent
486382daaa
commit
59a34f37fe
9
Makefile
9
Makefile
|
@ -26,10 +26,11 @@
|
|||
# #
|
||||
###############################################################################
|
||||
|
||||
OBJS = swad_account.o swad_account_database.o swad_action.o swad_agenda.o \
|
||||
swad_agenda_database.o swad_alert.o swad_announcement.o \
|
||||
swad_announcement_database.o swad_API.o swad_assignment.o \
|
||||
swad_assignment_database.o swad_attendance.o swad_attendance_database.o \
|
||||
OBJS = swad_account.o swad_account_database.o swad_action.o swad_admin.o \
|
||||
swad_admin_database.o swad_agenda.o swad_agenda_database.o swad_alert.o \
|
||||
swad_announcement.o swad_announcement_database.o swad_API.o \
|
||||
swad_assignment.o swad_assignment_database.o swad_attendance.o \
|
||||
swad_attendance_database.o \
|
||||
swad_banner.o swad_banner_database.o swad_box.o swad_building.o \
|
||||
swad_building_database.o swad_button.o \
|
||||
swad_calendar.o swad_call_for_exam.o swad_call_for_exam_database.o \
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
|
||||
#include "swad_account.h"
|
||||
#include "swad_account_database.h"
|
||||
#include "swad_admin_database.h"
|
||||
#include "swad_agenda_database.h"
|
||||
#include "swad_announcement_database.h"
|
||||
#include "swad_attendance_database.h"
|
||||
|
@ -996,7 +997,7 @@ void Acc_CompletelyEliminateAccount (struct UsrData *UsrDat,
|
|||
UsrDat->FullName);
|
||||
|
||||
/***** Remove user as administrator of any degree/center/institution *****/
|
||||
Enr_DB_RemUsrAsAdmin (UsrDat->UsrCod);
|
||||
Adm_DB_RemUsrAsAdmin (UsrDat->UsrCod);
|
||||
|
||||
if (QuietOrVerbose == Cns_VERBOSE)
|
||||
Ale_ShowAlert (Ale_SUCCESS,Txt_THE_USER_X_has_been_removed_as_administrator,
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
|
||||
#include "swad_account.h"
|
||||
#include "swad_action.h"
|
||||
#include "swad_admin.h"
|
||||
#include "swad_agenda.h"
|
||||
#include "swad_announcement.h"
|
||||
#include "swad_attendance.h"
|
||||
|
@ -1449,14 +1450,14 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
|
|||
[ActRemMe_NET ] = {1641,-1,TabUnk,ActLstTch ,0x3D0, 0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Enr_ReqRemMeFromCrs ,NULL},
|
||||
[ActRemMe_Tch ] = {1461,-1,TabUnk,ActLstTch ,0x3E0, 0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Enr_ReqRemMeFromCrs ,NULL},
|
||||
|
||||
[ActNewAdmIns ] = {1337,-1,TabUnk,ActLstOth ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Enr_AddAdmToIns ,NULL},
|
||||
[ActRemAdmIns ] = {1338,-1,TabUnk,ActLstOth ,0x300,0x300,0x300,0x300,0x300,0x300,0x300,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Enr_RemAdmIns ,NULL},
|
||||
[ActNewAdmIns ] = {1337,-1,TabUnk,ActLstOth ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Adm_AddAdmToIns ,NULL},
|
||||
[ActRemAdmIns ] = {1338,-1,TabUnk,ActLstOth ,0x300,0x300,0x300,0x300,0x300,0x300,0x300,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Adm_RemAdmIns ,NULL},
|
||||
|
||||
[ActNewAdmCtr ] = {1339,-1,TabUnk,ActLstOth ,0x300,0x300,0x300,0x300,0x300,0x300,0x300,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Enr_AddAdmToCtr ,NULL},
|
||||
[ActRemAdmCtr ] = {1340,-1,TabUnk,ActLstOth ,0x380,0x380,0x380,0x380,0x380,0x380,0x380,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Enr_RemAdmCtr ,NULL},
|
||||
[ActNewAdmCtr ] = {1339,-1,TabUnk,ActLstOth ,0x300,0x300,0x300,0x300,0x300,0x300,0x300,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Adm_AddAdmToCtr ,NULL},
|
||||
[ActRemAdmCtr ] = {1340,-1,TabUnk,ActLstOth ,0x380,0x380,0x380,0x380,0x380,0x380,0x380,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Adm_RemAdmCtr ,NULL},
|
||||
|
||||
[ActNewAdmDeg ] = { 586,-1,TabUnk,ActLstOth ,0x380,0x380,0x380,0x380,0x380,0x380,0x380,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Enr_AddAdmToDeg ,NULL},
|
||||
[ActRemAdmDeg ] = { 584,-1,TabUnk,ActLstOth ,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Enr_RemAdmDeg ,NULL},
|
||||
[ActNewAdmDeg ] = { 586,-1,TabUnk,ActLstOth ,0x380,0x380,0x380,0x380,0x380,0x380,0x380,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Adm_AddAdmToDeg ,NULL},
|
||||
[ActRemAdmDeg ] = { 584,-1,TabUnk,ActLstOth ,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Adm_RemAdmDeg ,NULL},
|
||||
|
||||
[ActRcvFrmEnrSevStd ] = {1428,-1,TabUnk,ActLstStd ,0x3E0,0x3C0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Enr_ReceiveFormAdminStds ,NULL},
|
||||
[ActRcvFrmEnrSevNET ] = {1643,-1,TabUnk,ActLstTch ,0x3C0,0x3C0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Enr_ReceiveFormAdminNonEditTchs,NULL},
|
||||
|
|
|
@ -0,0 +1,475 @@
|
|||
// swad_admin.c: administrators
|
||||
|
||||
/*
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/*****************************************************************************/
|
||||
/*********************************** Headers *********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
// #define _GNU_SOURCE // For asprintf
|
||||
// #include <stdio.h> // For asprintf
|
||||
// #include <stdlib.h> // For exit, system, malloc, free, rand, etc.
|
||||
// #include <string.h> // For string functions
|
||||
|
||||
// #include "swad_account.h"
|
||||
// #include "swad_account_database.h"
|
||||
#include "swad_admin.h"
|
||||
#include "swad_admin_database.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_setting.h"
|
||||
// #include "swad_test_print.h"
|
||||
// #include "swad_user.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
/****************************** Public constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
const bool Adm_ICanAdminOtherUsrs[Rol_NUM_ROLES] =
|
||||
{
|
||||
/* Users who can not admin */
|
||||
[Rol_UNK ] = false,
|
||||
[Rol_GST ] = false,
|
||||
[Rol_USR ] = false,
|
||||
[Rol_STD ] = false,
|
||||
[Rol_NET ] = false,
|
||||
/* Users who can admin */
|
||||
[Rol_TCH ] = true,
|
||||
[Rol_DEG_ADM] = true,
|
||||
[Rol_CTR_ADM] = true,
|
||||
[Rol_INS_ADM] = true,
|
||||
[Rol_SYS_ADM] = true,
|
||||
};
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************************** Private constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************************* Private types *******************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
|
||||
/*****************************************************************************/
|
||||
/************** External global variables from others modules ****************/
|
||||
/*****************************************************************************/
|
||||
|
||||
extern struct Globals Gbl;
|
||||
|
||||
/*****************************************************************************/
|
||||
/************************** Private global variables *************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************************** Private prototypes ****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Adm_ReqAddAdm (HieLvl_Level_t Scope,long Cod,
|
||||
const char *InsCtrDegName);
|
||||
static void Enr_AddAdm (HieLvl_Level_t Scope,long Cod,
|
||||
const char *InsCtrDegName);
|
||||
static void Adm_RegisterAdmin (struct UsrData *UsrDat,
|
||||
HieLvl_Level_t Scope,long Cod,
|
||||
const char *InsCtrDegName);
|
||||
|
||||
static void Adm_ReqRemOrRemAdm (Enr_ReqDelOrDelUsr_t ReqDelOrDelUsr,
|
||||
HieLvl_Level_t Scope,long Cod,
|
||||
const char *InsCtrDegName);
|
||||
static void Adm_AskIfRemAdm (bool ItsMe,HieLvl_Level_t Scope,
|
||||
const char *InsCtrDegName);
|
||||
static void Adm_EffectivelyRemAdm (struct UsrData *UsrDat,
|
||||
HieLvl_Level_t Scope,long Cod,
|
||||
const char *InsCtrDegName);
|
||||
|
||||
/*****************************************************************************/
|
||||
/**** Ask if really wanted to add an administrator to current institution ****/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Adm_ReqAddAdmOfIns (void)
|
||||
{
|
||||
Adm_ReqAddAdm (HieLvl_INS,Gbl.Hierarchy.Ins.InsCod,Gbl.Hierarchy.Ins.FullName);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/****** Ask if really wanted to add an administrator to current center *******/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Adm_ReqAddAdmOfCtr (void)
|
||||
{
|
||||
Adm_ReqAddAdm (HieLvl_CTR,Gbl.Hierarchy.Ctr.CtrCod,Gbl.Hierarchy.Ctr.FullName);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/****** Ask if really wanted to add an administrator to current degree *******/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Adm_ReqAddAdmOfDeg (void)
|
||||
{
|
||||
Adm_ReqAddAdm (HieLvl_DEG,Gbl.Hierarchy.Deg.DegCod,Gbl.Hierarchy.Deg.FullName);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/**** Ask if really wanted to add an administrator to current institution ****/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Adm_ReqAddAdm (HieLvl_Level_t Scope,long Cod,
|
||||
const char *InsCtrDegName)
|
||||
{
|
||||
extern const char *Txt_THE_USER_X_is_already_an_administrator_of_Y;
|
||||
extern const char *Txt_Do_you_really_want_to_register_the_following_user_as_an_administrator_of_X;
|
||||
extern const char *Txt_Register_user_IN_A_COURSE_OR_DEGREE;
|
||||
static const Act_Action_t Enr_ActNewAdm[HieLvl_NUM_LEVELS] =
|
||||
{
|
||||
[HieLvl_UNK] = ActUnk,
|
||||
[HieLvl_SYS] = ActUnk,
|
||||
[HieLvl_CTY] = ActUnk,
|
||||
[HieLvl_INS] = ActNewAdmIns,
|
||||
[HieLvl_CTR] = ActNewAdmCtr,
|
||||
[HieLvl_DEG] = ActNewAdmDeg,
|
||||
[HieLvl_CRS] = ActUnk,
|
||||
};
|
||||
bool ICanRegister;
|
||||
|
||||
if (Cod > 0)
|
||||
{
|
||||
/***** Get user's identificator of the user to register as admin *****/
|
||||
if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ())
|
||||
{
|
||||
/* Check if I am allowed to register user as administrator in institution/center/degree */
|
||||
ICanRegister = ((Scope == HieLvl_DEG && Gbl.Usrs.Me.Role.Logged >= Rol_CTR_ADM) ||
|
||||
(Scope == HieLvl_CTR && Gbl.Usrs.Me.Role.Logged >= Rol_INS_ADM) ||
|
||||
(Scope == HieLvl_INS && Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM));
|
||||
if (ICanRegister)
|
||||
{
|
||||
if (Usr_CheckIfUsrIsAdm (Gbl.Usrs.Other.UsrDat.UsrCod,Scope,Cod)) // User is already an administrator of current institution/center/degree
|
||||
{
|
||||
Ale_ShowAlert (Ale_INFO,Txt_THE_USER_X_is_already_an_administrator_of_Y,
|
||||
Gbl.Usrs.Other.UsrDat.FullName,InsCtrDegName);
|
||||
Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat);
|
||||
}
|
||||
else
|
||||
{
|
||||
/***** Show question and button to register user as administrator *****/
|
||||
/* Begin alert */
|
||||
Ale_ShowAlertAndButton1 (Ale_QUESTION,Txt_Do_you_really_want_to_register_the_following_user_as_an_administrator_of_X,
|
||||
InsCtrDegName);
|
||||
|
||||
/* Show user's record */
|
||||
Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat);
|
||||
|
||||
/* End alert */
|
||||
Ale_ShowAlertAndButton2 (Enr_ActNewAdm[Scope],NULL,NULL,
|
||||
Usr_PutParamOtherUsrCodEncrypted,Gbl.Usrs.Other.UsrDat.EnUsrCod,
|
||||
Btn_CREATE_BUTTON,Txt_Register_user_IN_A_COURSE_OR_DEGREE);
|
||||
}
|
||||
}
|
||||
else
|
||||
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
|
||||
}
|
||||
else
|
||||
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/*************** Add an administrator to current institution *****************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Adm_AddAdmToIns (void)
|
||||
{
|
||||
Enr_AddAdm (HieLvl_INS,Gbl.Hierarchy.Ins.InsCod,Gbl.Hierarchy.Ins.FullName);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************* Add an administrator to current center ******************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Adm_AddAdmToCtr (void)
|
||||
{
|
||||
Enr_AddAdm (HieLvl_CTR,Gbl.Hierarchy.Ctr.CtrCod,Gbl.Hierarchy.Ctr.FullName);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************* Add an administrator to current degree ******************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Adm_AddAdmToDeg (void)
|
||||
{
|
||||
Enr_AddAdm (HieLvl_DEG,Gbl.Hierarchy.Deg.DegCod,Gbl.Hierarchy.Deg.FullName);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************* Add an administrator to current degree ******************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Enr_AddAdm (HieLvl_Level_t Scope,long Cod,
|
||||
const char *InsCtrDegName)
|
||||
{
|
||||
bool ICanRegister;
|
||||
|
||||
if (Cod > 0)
|
||||
{
|
||||
/***** Get plain user's ID of the user to add/modify *****/
|
||||
if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ())
|
||||
{
|
||||
/* Check if I am allowed to register user as administrator in institution/center/degree */
|
||||
ICanRegister = ((Scope == HieLvl_DEG && Gbl.Usrs.Me.Role.Logged >= Rol_CTR_ADM) ||
|
||||
(Scope == HieLvl_CTR && Gbl.Usrs.Me.Role.Logged >= Rol_INS_ADM) ||
|
||||
(Scope == HieLvl_INS && Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM));
|
||||
if (ICanRegister)
|
||||
{
|
||||
/***** Register administrator in current institution/center/degree in database *****/
|
||||
Adm_RegisterAdmin (&Gbl.Usrs.Other.UsrDat,Scope,
|
||||
Cod,InsCtrDegName);
|
||||
|
||||
/***** Show user's record *****/
|
||||
Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat);
|
||||
}
|
||||
else
|
||||
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
|
||||
}
|
||||
else
|
||||
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/**************** Register administrator in current institution **************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Adm_RegisterAdmin (struct UsrData *UsrDat,
|
||||
HieLvl_Level_t Scope,long Cod,
|
||||
const char *InsCtrDegName)
|
||||
{
|
||||
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;
|
||||
|
||||
/***** Check if user was and administrator of current institution/center/degree *****/
|
||||
if (Usr_CheckIfUsrIsAdm (UsrDat->UsrCod,Scope,Cod))
|
||||
Ale_ShowAlert (Ale_SUCCESS,Txt_THE_USER_X_is_already_an_administrator_of_Y,
|
||||
UsrDat->FullName,InsCtrDegName);
|
||||
else // User was not administrator of current institution/center/degree
|
||||
{
|
||||
/***** Insert or replace administrator in current institution/center/degree *****/
|
||||
Adm_DB_InsertAdmin (UsrDat->UsrCod,Scope,Cod);
|
||||
|
||||
Ale_ShowAlert (Ale_SUCCESS,Txt_THE_USER_X_has_been_enroled_as_administrator_of_Y,
|
||||
UsrDat->FullName,InsCtrDegName);
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******* Ask for remove of an administrator from current institution *********/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Adm_ReqRemAdmOfIns (void)
|
||||
{
|
||||
Adm_ReqRemOrRemAdm (Enr_REQUEST_REMOVE_USR,HieLvl_INS,
|
||||
Gbl.Hierarchy.Ins.InsCod,Gbl.Hierarchy.Ins.FullName);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/********* Ask for remove of an administrator from current center ************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Adm_ReqRemAdmOfCtr (void)
|
||||
{
|
||||
Adm_ReqRemOrRemAdm (Enr_REQUEST_REMOVE_USR,HieLvl_CTR,
|
||||
Gbl.Hierarchy.Ctr.CtrCod,Gbl.Hierarchy.Ctr.FullName);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/********* Ask for remove of an administrator from current degree ************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Adm_ReqRemAdmOfDeg (void)
|
||||
{
|
||||
Adm_ReqRemOrRemAdm (Enr_REQUEST_REMOVE_USR,HieLvl_DEG,
|
||||
Gbl.Hierarchy.Deg.DegCod,Gbl.Hierarchy.Deg.FullName);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/************ Remove an administrator from current institution ***************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Adm_RemAdmIns (void)
|
||||
{
|
||||
Adm_ReqRemOrRemAdm (Enr_REMOVE_USR,HieLvl_INS,
|
||||
Gbl.Hierarchy.Ins.InsCod,Gbl.Hierarchy.Ins.FullName);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/*************** Remove an administrator from current center *****************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Adm_RemAdmCtr (void)
|
||||
{
|
||||
Adm_ReqRemOrRemAdm (Enr_REMOVE_USR,HieLvl_CTR,
|
||||
Gbl.Hierarchy.Ctr.CtrCod,Gbl.Hierarchy.Ctr.FullName);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/*************** Remove an administrator from current degree *****************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Adm_RemAdmDeg (void)
|
||||
{
|
||||
Adm_ReqRemOrRemAdm (Enr_REMOVE_USR,HieLvl_DEG,
|
||||
Gbl.Hierarchy.Deg.DegCod,Gbl.Hierarchy.Deg.FullName);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************** Remove an admin from current institution ******************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Adm_ReqRemOrRemAdm (Enr_ReqDelOrDelUsr_t ReqDelOrDelUsr,
|
||||
HieLvl_Level_t Scope,long Cod,
|
||||
const char *InsCtrDegName)
|
||||
{
|
||||
extern const char *Txt_THE_USER_X_is_not_an_administrator_of_Y;
|
||||
bool ItsMe;
|
||||
bool ICanRemove;
|
||||
|
||||
if (Cod > 0)
|
||||
{
|
||||
/***** Get user to be removed *****/
|
||||
if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ())
|
||||
{
|
||||
/* Check if it's forbidden to remove an administrator */
|
||||
ItsMe = Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod);
|
||||
ICanRemove = (ItsMe ||
|
||||
(Scope == HieLvl_DEG && Gbl.Usrs.Me.Role.Logged >= Rol_CTR_ADM) ||
|
||||
(Scope == HieLvl_CTR && Gbl.Usrs.Me.Role.Logged >= Rol_INS_ADM) ||
|
||||
(Scope == HieLvl_INS && Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM));
|
||||
if (ICanRemove)
|
||||
{
|
||||
/* Check if the other user is an admin of the current institution/center/degree */
|
||||
if (Usr_CheckIfUsrIsAdm (Gbl.Usrs.Other.UsrDat.UsrCod,Scope,Cod))
|
||||
{ // The other user is an administrator of current institution/center/degree ==> ask for removing or remove her/him
|
||||
switch (ReqDelOrDelUsr)
|
||||
{
|
||||
case Enr_REQUEST_REMOVE_USR: // Ask if remove administrator from current institution
|
||||
Adm_AskIfRemAdm (ItsMe,Scope,InsCtrDegName);
|
||||
break;
|
||||
case Enr_REMOVE_USR: // Remove administrator from current institution
|
||||
Adm_EffectivelyRemAdm (&Gbl.Usrs.Other.UsrDat,Scope,
|
||||
Cod,InsCtrDegName);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else // The other user is not an administrator of current institution
|
||||
Ale_ShowAlert (Ale_WARNING,Txt_THE_USER_X_is_not_an_administrator_of_Y,
|
||||
Gbl.Usrs.Other.UsrDat.FullName,InsCtrDegName);
|
||||
}
|
||||
else
|
||||
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
|
||||
}
|
||||
else
|
||||
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/** Ask if really wanted to remove an administrator from current institution */
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Adm_AskIfRemAdm (bool ItsMe,HieLvl_Level_t Scope,
|
||||
const char *InsCtrDegName)
|
||||
{
|
||||
extern const char *Txt_Do_you_really_want_to_be_removed_as_an_administrator_of_X;
|
||||
extern const char *Txt_Do_you_really_want_to_remove_the_following_user_as_an_administrator_of_X;
|
||||
extern const char *Txt_Remove_me_as_an_administrator;
|
||||
extern const char *Txt_Remove_USER_as_an_administrator;
|
||||
static const Act_Action_t Enr_ActRemAdm[HieLvl_NUM_LEVELS] =
|
||||
{
|
||||
[HieLvl_UNK] = ActUnk,
|
||||
[HieLvl_SYS] = ActUnk,
|
||||
[HieLvl_CTY] = ActUnk,
|
||||
[HieLvl_INS] = ActRemAdmIns,
|
||||
[HieLvl_CTR] = ActRemAdmCtr,
|
||||
[HieLvl_DEG] = ActRemAdmDeg,
|
||||
[HieLvl_CRS] = ActUnk,
|
||||
};
|
||||
|
||||
if (Usr_ChkIfUsrCodExists (Gbl.Usrs.Other.UsrDat.UsrCod))
|
||||
{
|
||||
/***** Show question and button to remove user as administrator *****/
|
||||
/* Begin alert */
|
||||
Ale_ShowAlertAndButton1 (Ale_QUESTION,ItsMe ? Txt_Do_you_really_want_to_be_removed_as_an_administrator_of_X :
|
||||
Txt_Do_you_really_want_to_remove_the_following_user_as_an_administrator_of_X,
|
||||
InsCtrDegName);
|
||||
|
||||
/* Show user's record */
|
||||
Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat);
|
||||
|
||||
/* End alert */
|
||||
Ale_ShowAlertAndButton2 (Enr_ActRemAdm[Scope],NULL,NULL,
|
||||
Usr_PutParamOtherUsrCodEncrypted,Gbl.Usrs.Other.UsrDat.EnUsrCod,
|
||||
Btn_REMOVE_BUTTON,
|
||||
ItsMe ? Txt_Remove_me_as_an_administrator :
|
||||
Txt_Remove_USER_as_an_administrator);
|
||||
}
|
||||
else
|
||||
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/**** Remove an administrator from current institution, center or degree *****/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Adm_EffectivelyRemAdm (struct UsrData *UsrDat,
|
||||
HieLvl_Level_t Scope,long Cod,
|
||||
const char *InsCtrDegName)
|
||||
{
|
||||
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;
|
||||
|
||||
if (Usr_CheckIfUsrIsAdm (UsrDat->UsrCod,Scope,Cod)) // User is administrator of current institution/center/degree
|
||||
{
|
||||
/***** Remove user as administrator of institution, center or degree *****/
|
||||
Adm_DB_RemAdmin (UsrDat->UsrCod,Scope,Cod);
|
||||
|
||||
Ale_ShowAlert (Ale_SUCCESS,Txt_THE_USER_X_has_been_removed_as_administrator_of_Y,
|
||||
UsrDat->FullName,InsCtrDegName);
|
||||
}
|
||||
else // User is not an administrator of the current institution/center/degree
|
||||
Ale_ShowAlert (Ale_ERROR,Txt_THE_USER_X_is_not_an_administrator_of_Y,
|
||||
UsrDat->FullName,InsCtrDegName);
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
// swad_admin.h: administrators
|
||||
|
||||
#ifndef _SWAD_ADM
|
||||
#define _SWAD_ADM
|
||||
/*
|
||||
SWAD (Shared Workspace At a Distance in Spanish),
|
||||
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 Public 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/*****************************************************************************/
|
||||
/********************************** Headers **********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#include "swad_admin.h"
|
||||
// #include "swad_course.h"
|
||||
#include "swad_enrolment.h"
|
||||
#include "swad_hierarchy.h"
|
||||
// #include "swad_notification.h"
|
||||
// #include "swad_user.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
/****************************** Public constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************************** Public types *******************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
/*****************************************************************************/
|
||||
/****************************** Public prototypes ****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Adm_ReqAddAdmOfIns (void);
|
||||
void Adm_ReqAddAdmOfCtr (void);
|
||||
void Adm_ReqAddAdmOfDeg (void);
|
||||
|
||||
void Adm_AddAdmToIns (void);
|
||||
void Adm_AddAdmToCtr (void);
|
||||
void Adm_AddAdmToDeg (void);
|
||||
|
||||
void Adm_ReqRemAdmOfIns (void);
|
||||
void Adm_ReqRemAdmOfCtr (void);
|
||||
void Adm_ReqRemAdmOfDeg (void);
|
||||
|
||||
void Adm_RemAdmIns (void);
|
||||
void Adm_RemAdmCtr (void);
|
||||
void Adm_RemAdmDeg (void);
|
||||
|
||||
#endif
|
|
@ -0,0 +1,116 @@
|
|||
// swad_admin_database.c: administrators 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/*****************************************************************************/
|
||||
/*********************************** Headers *********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#include "swad_database.h"
|
||||
#include "swad_admin.h"
|
||||
#include "swad_admin_database.h"
|
||||
// #include "swad_error.h"
|
||||
// #include "swad_global.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
/****************************** Public constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************************** Private constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************************* Private types *******************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
/*****************************************************************************/
|
||||
/************** External global variables from others modules ****************/
|
||||
/*****************************************************************************/
|
||||
|
||||
extern struct Globals Gbl;
|
||||
|
||||
/*****************************************************************************/
|
||||
/************************** Private global variables *************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************************** Private prototypes ****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
/*****************************************************************************/
|
||||
/** Insert/replace user as administrator of an institution, center or degree */
|
||||
/*****************************************************************************/
|
||||
|
||||
void Adm_DB_InsertAdmin (long UsrCod,HieLvl_Level_t Scope,long Cod)
|
||||
{
|
||||
DB_QueryREPLACE ("can not create administrator",
|
||||
"REPLACE INTO usr_admins"
|
||||
" (UsrCod,Scope,Cod)"
|
||||
" VALUES"
|
||||
" (%ld,'%s',%ld)",
|
||||
UsrCod,
|
||||
Sco_GetDBStrFromScope (Scope),
|
||||
Cod);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/***** Remove user as administrator of an institution, center or degree ******/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Adm_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);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******* Remove user as administrator of any degree/center/institution *******/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Adm_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 Adm_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);
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
// swad_admin_database.h: administrators operations with database
|
||||
|
||||
#ifndef _SWAD_ADM_DB
|
||||
#define _SWAD_ADM_DB
|
||||
/*
|
||||
SWAD (Shared Workspace At a Distance in Spanish),
|
||||
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 Public 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
/*****************************************************************************/
|
||||
/********************************** Headers **********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
#include "swad_hierarchy.h"
|
||||
|
||||
/*****************************************************************************/
|
||||
/****************************** Public constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************************** Public types *******************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
/*****************************************************************************/
|
||||
/****************************** Public prototypes ****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Adm_DB_InsertAdmin (long UsrCod,HieLvl_Level_t Scope,long Cod);
|
||||
void Adm_DB_RemAdmin (long UsrCod,HieLvl_Level_t Scope,long Cod);
|
||||
void Adm_DB_RemUsrAsAdmin (long UsrCod);
|
||||
void Adm_DB_RemAdmins (HieLvl_Level_t Scope,long Cod);
|
||||
|
||||
#endif
|
|
@ -30,6 +30,7 @@
|
|||
#include <stdlib.h> // For free
|
||||
#include <string.h> // For string functions
|
||||
|
||||
#include "swad_admin_database.h"
|
||||
#include "swad_center.h"
|
||||
#include "swad_center_config.h"
|
||||
#include "swad_center_database.h"
|
||||
|
@ -1097,7 +1098,7 @@ void Ctr_RemoveCenter (void)
|
|||
Fil_RemoveTree (PathCtr);
|
||||
|
||||
/***** Remove administrators of this center *****/
|
||||
Enr_DB_RemAdmins (HieLvl_CTR,Ctr_EditingCtr->CtrCod);
|
||||
Adm_DB_RemAdmins (HieLvl_CTR,Ctr_EditingCtr->CtrCod);
|
||||
|
||||
/***** Remove center *****/
|
||||
Ctr_DB_RemoveCenter (Ctr_EditingCtr->CtrCod);
|
||||
|
|
|
@ -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.91.3 (2021-06-11)"
|
||||
#define Log_PLATFORM_VERSION "SWAD 20.92 (2021-06-11)"
|
||||
#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.92: Jun 09, 2021 New modules swad_admin and swad_admin_database for administrators. (313381 lines)
|
||||
Version 20.91.3: Jun 11, 2021 Queries moved to module swad_enrolment_database. (313173 lines)
|
||||
Version 20.91.2: Jun 11, 2021 Queries moved to module swad_enrolment_database. (313143 lines)
|
||||
Version 20.91.1: Jun 10, 2021 Queries moved to module swad_enrolment_database. (313145 lines)
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
#include <stdlib.h> // For free
|
||||
#include <string.h> // For string functions
|
||||
|
||||
#include "swad_admin_database.h"
|
||||
#include "swad_course_database.h"
|
||||
#include "swad_database.h"
|
||||
#include "swad_degree.h"
|
||||
|
@ -1364,7 +1365,7 @@ void Deg_RemoveDegreeCompletely (long DegCod)
|
|||
Fil_RemoveTree (PathDeg);
|
||||
|
||||
/***** Remove administrators of this degree *****/
|
||||
Enr_DB_RemAdmins (HieLvl_DEG,DegCod);
|
||||
Adm_DB_RemAdmins (HieLvl_DEG,DegCod);
|
||||
|
||||
/***** Remove the degree *****/
|
||||
Deg_DB_RemoveDeg (DegCod);
|
||||
|
|
388
swad_enrolment.c
388
swad_enrolment.c
|
@ -32,6 +32,7 @@
|
|||
|
||||
#include "swad_account.h"
|
||||
#include "swad_account_database.h"
|
||||
#include "swad_admin.h"
|
||||
#include "swad_announcement.h"
|
||||
#include "swad_attendance_database.h"
|
||||
#include "swad_box.h"
|
||||
|
@ -64,22 +65,6 @@
|
|||
/***************************** Private constants *****************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static const bool Enr_ICanAdminOtherUsrs[Rol_NUM_ROLES] =
|
||||
{
|
||||
/* Users who can not admin */
|
||||
[Rol_UNK ] = false,
|
||||
[Rol_GST ] = false,
|
||||
[Rol_USR ] = false,
|
||||
[Rol_STD ] = false,
|
||||
[Rol_NET ] = false,
|
||||
/* Users who can admin */
|
||||
[Rol_TCH ] = true,
|
||||
[Rol_DEG_ADM] = true,
|
||||
[Rol_CTR_ADM] = true,
|
||||
[Rol_INS_ADM] = true,
|
||||
[Rol_SYS_ADM] = true,
|
||||
};
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************************* Private types *******************************/
|
||||
/*****************************************************************************/
|
||||
|
@ -95,12 +80,6 @@ typedef enum
|
|||
Enr_ELIMINATE_USRS_FROM_PLATFORM = 5,
|
||||
} Enr_RegRemUsrsAction_t;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
Enr_REQUEST_REMOVE_USR,
|
||||
Enr_REMOVE_USR,
|
||||
} Enr_ReqDelOrDelUsr_t;
|
||||
|
||||
/* Remove important user production (works and match results)? */
|
||||
typedef enum
|
||||
{
|
||||
|
@ -163,28 +142,14 @@ static void Enr_AskIfRegRemUsr (struct ListUsrCods *ListUsrCods,Rol_Role_t Role)
|
|||
|
||||
static void Enr_ShowFormToEditOtherUsr (void);
|
||||
|
||||
static void Enr_AddAdm (HieLvl_Level_t Scope,long Cod,const char *InsCtrDegName);
|
||||
static void Enr_RegisterAdmin (struct UsrData *UsrDat,HieLvl_Level_t Scope,
|
||||
long Cod,const char *InsCtrDegName);
|
||||
|
||||
static bool Enr_CheckIfICanRemUsrFromCrs (void);
|
||||
|
||||
static void Enr_ReqRemAdmOfDeg (void);
|
||||
static void Enr_ReqRemOrRemAdm (Enr_ReqDelOrDelUsr_t ReqDelOrDelUsr,HieLvl_Level_t Scope,
|
||||
long Cod,const char *InsCtrDegName);
|
||||
|
||||
static void Enr_ReqAddAdm (HieLvl_Level_t Scope,long Cod,const char *InsCtrDegName);
|
||||
static void Enr_AskIfRemoveUsrFromCrs (struct UsrData *UsrDat);
|
||||
static void Enr_EffectivelyRemUsrFromCrs (struct UsrData *UsrDat,
|
||||
struct Crs_Course *Crs,
|
||||
Enr_RemoveUsrProduction_t RemoveUsrWorks,
|
||||
Cns_QuietOrVerbose_t QuietOrVerbose);
|
||||
|
||||
static void Enr_AskIfRemAdm (bool ItsMe,HieLvl_Level_t Scope,
|
||||
const char *InsCtrDegName);
|
||||
static void Enr_EffectivelyRemAdm (struct UsrData *UsrDat,HieLvl_Level_t Scope,
|
||||
long Cod,const char *InsCtrDegName);
|
||||
|
||||
/*****************************************************************************/
|
||||
/** Check if current course has students and show warning no students found **/
|
||||
/*****************************************************************************/
|
||||
|
@ -2419,9 +2384,10 @@ static void Enr_RemUsrEnrolmentRequestInCrs (long UsrCod,long CrsCod)
|
|||
|
||||
void Enr_PutLinkToAdminOneUsr (Act_Action_t NextAction)
|
||||
{
|
||||
extern const bool Adm_ICanAdminOtherUsrs[Rol_NUM_ROLES];
|
||||
extern const char *Txt_Administer_me;
|
||||
extern const char *Txt_Administer_one_user;
|
||||
const char *TitleText = Enr_ICanAdminOtherUsrs[Gbl.Usrs.Me.Role.Logged] ? Txt_Administer_one_user :
|
||||
const char *TitleText = Adm_ICanAdminOtherUsrs[Gbl.Usrs.Me.Role.Logged] ? Txt_Administer_one_user :
|
||||
Txt_Administer_me;
|
||||
|
||||
Lay_PutContextualLinkIconText (NextAction,NULL,
|
||||
|
@ -2479,11 +2445,13 @@ void Enr_ReqRegRemOth (void)
|
|||
|
||||
void Enr_ReqRegRemStd (void)
|
||||
{
|
||||
extern const bool Adm_ICanAdminOtherUsrs[Rol_NUM_ROLES];
|
||||
|
||||
/***** Contextual menu *****/
|
||||
if (Enr_ICanAdminOtherUsrs[Gbl.Usrs.Me.Role.Logged])
|
||||
if (Adm_ICanAdminOtherUsrs[Gbl.Usrs.Me.Role.Logged])
|
||||
{
|
||||
Mnu_ContextMenuBegin ();
|
||||
Enr_PutLinkToAdminSeveralUsrs (Rol_STD); // Admin several students
|
||||
Enr_PutLinkToAdminSeveralUsrs (Rol_STD); // Admin several students
|
||||
Mnu_ContextMenuEnd ();
|
||||
}
|
||||
|
||||
|
@ -2499,7 +2467,9 @@ void Enr_ReqRegRemTch (void)
|
|||
|
||||
static void Enr_ReqRegRemUsr (Rol_Role_t Role)
|
||||
{
|
||||
if (Enr_ICanAdminOtherUsrs[Gbl.Usrs.Me.Role.Logged])
|
||||
extern const bool Adm_ICanAdminOtherUsrs[Rol_NUM_ROLES];
|
||||
|
||||
if (Adm_ICanAdminOtherUsrs[Gbl.Usrs.Me.Role.Logged])
|
||||
/***** Form to request the user's ID of another user *****/
|
||||
Enr_ReqAnotherUsrIDToRegisterRemove (Role);
|
||||
else
|
||||
|
@ -2720,90 +2690,6 @@ static void Enr_ShowFormToEditOtherUsr (void)
|
|||
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/*************** Add an administrator to current institution *****************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Enr_AddAdmToIns (void)
|
||||
{
|
||||
Enr_AddAdm (HieLvl_INS,Gbl.Hierarchy.Ins.InsCod,Gbl.Hierarchy.Ins.FullName);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************* Add an administrator to current center ******************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Enr_AddAdmToCtr (void)
|
||||
{
|
||||
Enr_AddAdm (HieLvl_CTR,Gbl.Hierarchy.Ctr.CtrCod,Gbl.Hierarchy.Ctr.FullName);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************* Add an administrator to current degree ******************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Enr_AddAdmToDeg (void)
|
||||
{
|
||||
Enr_AddAdm (HieLvl_DEG,Gbl.Hierarchy.Deg.DegCod,Gbl.Hierarchy.Deg.FullName);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******************* Add an administrator to current degree ******************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Enr_AddAdm (HieLvl_Level_t Scope,long Cod,const char *InsCtrDegName)
|
||||
{
|
||||
bool ICanRegister;
|
||||
|
||||
if (Cod > 0)
|
||||
{
|
||||
/***** Get plain user's ID of the user to add/modify *****/
|
||||
if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ())
|
||||
{
|
||||
/* Check if I am allowed to register user as administrator in institution/center/degree */
|
||||
ICanRegister = ((Scope == HieLvl_DEG && Gbl.Usrs.Me.Role.Logged >= Rol_CTR_ADM) ||
|
||||
(Scope == HieLvl_CTR && Gbl.Usrs.Me.Role.Logged >= Rol_INS_ADM) ||
|
||||
(Scope == HieLvl_INS && Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM));
|
||||
if (ICanRegister)
|
||||
{
|
||||
/***** Register administrator in current institution/center/degree in database *****/
|
||||
Enr_RegisterAdmin (&Gbl.Usrs.Other.UsrDat,Scope,
|
||||
Cod,InsCtrDegName);
|
||||
|
||||
/***** Show user's record *****/
|
||||
Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat);
|
||||
}
|
||||
else
|
||||
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
|
||||
}
|
||||
else
|
||||
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/**************** Register administrator in current institution **************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Enr_RegisterAdmin (struct UsrData *UsrDat,HieLvl_Level_t Scope,long Cod,const char *InsCtrDegName)
|
||||
{
|
||||
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;
|
||||
|
||||
/***** Check if user was and administrator of current institution/center/degree *****/
|
||||
if (Usr_CheckIfUsrIsAdm (UsrDat->UsrCod,Scope,Cod))
|
||||
Ale_ShowAlert (Ale_SUCCESS,Txt_THE_USER_X_is_already_an_administrator_of_Y,
|
||||
UsrDat->FullName,InsCtrDegName);
|
||||
else // User was not administrator of current institution/center/degree
|
||||
{
|
||||
/***** Insert or replace administrator in current institution/center/degree *****/
|
||||
Enr_DB_InsertAdmin (UsrDat->UsrCod,Scope,Cod);
|
||||
|
||||
Ale_ShowAlert (Ale_SUCCESS,Txt_THE_USER_X_has_been_enroled_as_administrator_of_Y,
|
||||
UsrDat->FullName,InsCtrDegName);
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/****************** Ask for remove me from current course ********************/
|
||||
/*****************************************************************************/
|
||||
|
@ -2890,178 +2776,6 @@ static bool Enr_CheckIfICanRemUsrFromCrs (void)
|
|||
return false;
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******* Ask for remove of an administrator from current institution *********/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Enr_ReqRemAdmOfIns (void)
|
||||
{
|
||||
Enr_ReqRemOrRemAdm (Enr_REQUEST_REMOVE_USR,HieLvl_INS,
|
||||
Gbl.Hierarchy.Ins.InsCod,Gbl.Hierarchy.Ins.FullName);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/********* Ask for remove of an administrator from current center ************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Enr_ReqRemAdmOfCtr (void)
|
||||
{
|
||||
Enr_ReqRemOrRemAdm (Enr_REQUEST_REMOVE_USR,HieLvl_CTR,
|
||||
Gbl.Hierarchy.Ctr.CtrCod,Gbl.Hierarchy.Ctr.FullName);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/********* Ask for remove of an administrator from current degree ************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Enr_ReqRemAdmOfDeg (void)
|
||||
{
|
||||
Enr_ReqRemOrRemAdm (Enr_REQUEST_REMOVE_USR,HieLvl_DEG,
|
||||
Gbl.Hierarchy.Deg.DegCod,Gbl.Hierarchy.Deg.FullName);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/************ Remove an administrator from current institution ***************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Enr_RemAdmIns (void)
|
||||
{
|
||||
Enr_ReqRemOrRemAdm (Enr_REMOVE_USR,HieLvl_INS,
|
||||
Gbl.Hierarchy.Ins.InsCod,Gbl.Hierarchy.Ins.FullName);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/*************** Remove an administrator from current center *****************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Enr_RemAdmCtr (void)
|
||||
{
|
||||
Enr_ReqRemOrRemAdm (Enr_REMOVE_USR,HieLvl_CTR,
|
||||
Gbl.Hierarchy.Ctr.CtrCod,Gbl.Hierarchy.Ctr.FullName);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/*************** Remove an administrator from current degree *****************/
|
||||
/*****************************************************************************/
|
||||
|
||||
void Enr_RemAdmDeg (void)
|
||||
{
|
||||
Enr_ReqRemOrRemAdm (Enr_REMOVE_USR,HieLvl_DEG,
|
||||
Gbl.Hierarchy.Deg.DegCod,Gbl.Hierarchy.Deg.FullName);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/***************** Remove an admin from current institution ******************/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Enr_ReqRemOrRemAdm (Enr_ReqDelOrDelUsr_t ReqDelOrDelUsr,HieLvl_Level_t Scope,
|
||||
long Cod,const char *InsCtrDegName)
|
||||
{
|
||||
extern const char *Txt_THE_USER_X_is_not_an_administrator_of_Y;
|
||||
bool ItsMe;
|
||||
bool ICanRemove;
|
||||
|
||||
if (Cod > 0)
|
||||
{
|
||||
/***** Get user to be removed *****/
|
||||
if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ())
|
||||
{
|
||||
/* Check if it's forbidden to remove an administrator */
|
||||
ItsMe = Usr_ItsMe (Gbl.Usrs.Other.UsrDat.UsrCod);
|
||||
ICanRemove = (ItsMe ||
|
||||
(Scope == HieLvl_DEG && Gbl.Usrs.Me.Role.Logged >= Rol_CTR_ADM) ||
|
||||
(Scope == HieLvl_CTR && Gbl.Usrs.Me.Role.Logged >= Rol_INS_ADM) ||
|
||||
(Scope == HieLvl_INS && Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM));
|
||||
if (ICanRemove)
|
||||
{
|
||||
/* Check if the other user is an admin of the current institution/center/degree */
|
||||
if (Usr_CheckIfUsrIsAdm (Gbl.Usrs.Other.UsrDat.UsrCod,Scope,Cod))
|
||||
{ // The other user is an administrator of current institution/center/degree ==> ask for removing or remove her/him
|
||||
switch (ReqDelOrDelUsr)
|
||||
{
|
||||
case Enr_REQUEST_REMOVE_USR: // Ask if remove administrator from current institution
|
||||
Enr_AskIfRemAdm (ItsMe,Scope,InsCtrDegName);
|
||||
break;
|
||||
case Enr_REMOVE_USR: // Remove administrator from current institution
|
||||
Enr_EffectivelyRemAdm (&Gbl.Usrs.Other.UsrDat,Scope,
|
||||
Cod,InsCtrDegName);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else // The other user is not an administrator of current institution
|
||||
Ale_ShowAlert (Ale_WARNING,Txt_THE_USER_X_is_not_an_administrator_of_Y,
|
||||
Gbl.Usrs.Other.UsrDat.FullName,InsCtrDegName);
|
||||
}
|
||||
else
|
||||
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
|
||||
}
|
||||
else
|
||||
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/**** Ask if really wanted to add an administrator to current institution ****/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Enr_ReqAddAdm (HieLvl_Level_t Scope,long Cod,const char *InsCtrDegName)
|
||||
{
|
||||
extern const char *Txt_THE_USER_X_is_already_an_administrator_of_Y;
|
||||
extern const char *Txt_Do_you_really_want_to_register_the_following_user_as_an_administrator_of_X;
|
||||
extern const char *Txt_Register_user_IN_A_COURSE_OR_DEGREE;
|
||||
static const Act_Action_t Enr_ActNewAdm[HieLvl_NUM_LEVELS] =
|
||||
{
|
||||
[HieLvl_UNK] = ActUnk,
|
||||
[HieLvl_SYS] = ActUnk,
|
||||
[HieLvl_CTY] = ActUnk,
|
||||
[HieLvl_INS] = ActNewAdmIns,
|
||||
[HieLvl_CTR] = ActNewAdmCtr,
|
||||
[HieLvl_DEG] = ActNewAdmDeg,
|
||||
[HieLvl_CRS] = ActUnk,
|
||||
};
|
||||
bool ICanRegister;
|
||||
|
||||
if (Cod > 0)
|
||||
{
|
||||
/***** Get user's identificator of the user to register as admin *****/
|
||||
if (Usr_GetParamOtherUsrCodEncryptedAndGetUsrData ())
|
||||
{
|
||||
/* Check if I am allowed to register user as administrator in institution/center/degree */
|
||||
ICanRegister = ((Scope == HieLvl_DEG && Gbl.Usrs.Me.Role.Logged >= Rol_CTR_ADM) ||
|
||||
(Scope == HieLvl_CTR && Gbl.Usrs.Me.Role.Logged >= Rol_INS_ADM) ||
|
||||
(Scope == HieLvl_INS && Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM));
|
||||
if (ICanRegister)
|
||||
{
|
||||
if (Usr_CheckIfUsrIsAdm (Gbl.Usrs.Other.UsrDat.UsrCod,Scope,Cod)) // User is already an administrator of current institution/center/degree
|
||||
{
|
||||
Ale_ShowAlert (Ale_INFO,Txt_THE_USER_X_is_already_an_administrator_of_Y,
|
||||
Gbl.Usrs.Other.UsrDat.FullName,InsCtrDegName);
|
||||
Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat);
|
||||
}
|
||||
else
|
||||
{
|
||||
/***** Show question and button to register user as administrator *****/
|
||||
/* Begin alert */
|
||||
Ale_ShowAlertAndButton1 (Ale_QUESTION,Txt_Do_you_really_want_to_register_the_following_user_as_an_administrator_of_X,
|
||||
InsCtrDegName);
|
||||
|
||||
/* Show user's record */
|
||||
Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat);
|
||||
|
||||
/* End alert */
|
||||
Ale_ShowAlertAndButton2 (Enr_ActNewAdm[Scope],NULL,NULL,
|
||||
Usr_PutParamOtherUsrCodEncrypted,Gbl.Usrs.Other.UsrDat.EnUsrCod,
|
||||
Btn_CREATE_BUTTON,Txt_Register_user_IN_A_COURSE_OR_DEGREE);
|
||||
}
|
||||
}
|
||||
else
|
||||
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
|
||||
}
|
||||
else
|
||||
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/*************** Accept my enrolment in the current course ******************/
|
||||
/*****************************************************************************/
|
||||
|
@ -3376,16 +3090,13 @@ void Enr_ModifyUsr2 (void)
|
|||
Enr_ShowFormToEditOtherUsr ();
|
||||
break;
|
||||
case Enr_REGISTER_ONE_DEGREE_ADMIN:
|
||||
Enr_ReqAddAdm (HieLvl_DEG,Gbl.Hierarchy.Deg.DegCod,
|
||||
Gbl.Hierarchy.Deg.FullName);
|
||||
Adm_ReqAddAdmOfDeg ();
|
||||
break;
|
||||
case Enr_REGISTER_ONE_CENTER_ADMIN:
|
||||
Enr_ReqAddAdm (HieLvl_CTR,Gbl.Hierarchy.Ctr.CtrCod,
|
||||
Gbl.Hierarchy.Ctr.FullName);
|
||||
Adm_ReqAddAdmOfCtr ();
|
||||
break;
|
||||
case Enr_REGISTER_ONE_INSTITUTION_ADMIN:
|
||||
Enr_ReqAddAdm (HieLvl_INS,Gbl.Hierarchy.Ins.InsCod,
|
||||
Gbl.Hierarchy.Ins.FullName);
|
||||
Adm_ReqAddAdmOfIns ();
|
||||
break;
|
||||
case Enr_REPORT_USR_AS_POSSIBLE_DUPLICATE:
|
||||
Dup_ReportUsrAsPossibleDuplicate ();
|
||||
|
@ -3394,13 +3105,13 @@ void Enr_ModifyUsr2 (void)
|
|||
Enr_ReqRemUsrFromCrs ();
|
||||
break;
|
||||
case Enr_REMOVE_ONE_DEGREE_ADMIN:
|
||||
Enr_ReqRemAdmOfDeg ();
|
||||
Adm_ReqRemAdmOfDeg ();
|
||||
break;
|
||||
case Enr_REMOVE_ONE_CENTER_ADMIN:
|
||||
Enr_ReqRemAdmOfCtr ();
|
||||
Adm_ReqRemAdmOfCtr ();
|
||||
break;
|
||||
case Enr_REMOVE_ONE_INSTITUTION_ADMIN:
|
||||
Enr_ReqRemAdmOfIns ();
|
||||
Adm_ReqRemAdmOfIns ();
|
||||
break;
|
||||
case Enr_ELIMINATE_ONE_USR_FROM_PLATFORM:
|
||||
Acc_ReqRemAccountOrRemAccount (Acc_REQUEST_REMOVE_USR);
|
||||
|
@ -3560,70 +3271,3 @@ static void Enr_EffectivelyRemUsrFromCrs (struct UsrData *UsrDat,
|
|||
if (QuietOrVerbose == Cns_VERBOSE)
|
||||
Ale_CreateAlertUserNotFoundOrYouDoNotHavePermission ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/** Ask if really wanted to remove an administrator from current institution */
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Enr_AskIfRemAdm (bool ItsMe,HieLvl_Level_t Scope,
|
||||
const char *InsCtrDegName)
|
||||
{
|
||||
extern const char *Txt_Do_you_really_want_to_be_removed_as_an_administrator_of_X;
|
||||
extern const char *Txt_Do_you_really_want_to_remove_the_following_user_as_an_administrator_of_X;
|
||||
extern const char *Txt_Remove_me_as_an_administrator;
|
||||
extern const char *Txt_Remove_USER_as_an_administrator;
|
||||
static const Act_Action_t Enr_ActRemAdm[HieLvl_NUM_LEVELS] =
|
||||
{
|
||||
[HieLvl_UNK] = ActUnk,
|
||||
[HieLvl_SYS] = ActUnk,
|
||||
[HieLvl_CTY] = ActUnk,
|
||||
[HieLvl_INS] = ActRemAdmIns,
|
||||
[HieLvl_CTR] = ActRemAdmCtr,
|
||||
[HieLvl_DEG] = ActRemAdmDeg,
|
||||
[HieLvl_CRS] = ActUnk,
|
||||
};
|
||||
|
||||
if (Usr_ChkIfUsrCodExists (Gbl.Usrs.Other.UsrDat.UsrCod))
|
||||
{
|
||||
/***** Show question and button to remove user as administrator *****/
|
||||
/* Begin alert */
|
||||
Ale_ShowAlertAndButton1 (Ale_QUESTION,ItsMe ? Txt_Do_you_really_want_to_be_removed_as_an_administrator_of_X :
|
||||
Txt_Do_you_really_want_to_remove_the_following_user_as_an_administrator_of_X,
|
||||
InsCtrDegName);
|
||||
|
||||
/* Show user's record */
|
||||
Rec_ShowSharedRecordUnmodifiable (&Gbl.Usrs.Other.UsrDat);
|
||||
|
||||
/* End alert */
|
||||
Ale_ShowAlertAndButton2 (Enr_ActRemAdm[Scope],NULL,NULL,
|
||||
Usr_PutParamOtherUsrCodEncrypted,Gbl.Usrs.Other.UsrDat.EnUsrCod,
|
||||
Btn_REMOVE_BUTTON,
|
||||
ItsMe ? Txt_Remove_me_as_an_administrator :
|
||||
Txt_Remove_USER_as_an_administrator);
|
||||
}
|
||||
else
|
||||
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/**** Remove an administrator from current institution, center or degree *****/
|
||||
/*****************************************************************************/
|
||||
|
||||
static void Enr_EffectivelyRemAdm (struct UsrData *UsrDat,HieLvl_Level_t Scope,
|
||||
long Cod,const char *InsCtrDegName)
|
||||
{
|
||||
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;
|
||||
|
||||
if (Usr_CheckIfUsrIsAdm (UsrDat->UsrCod,Scope,Cod)) // User is administrator of current institution/center/degree
|
||||
{
|
||||
/***** Remove user as administrator of institution, center or degree *****/
|
||||
Enr_DB_RemAdmin (UsrDat->UsrCod,Scope,Cod);
|
||||
|
||||
Ale_ShowAlert (Ale_SUCCESS,Txt_THE_USER_X_has_been_removed_as_administrator_of_Y,
|
||||
UsrDat->FullName,InsCtrDegName);
|
||||
}
|
||||
else // User is not an administrator of the current institution/center/degree
|
||||
Ale_ShowAlert (Ale_ERROR,Txt_THE_USER_X_is_not_an_administrator_of_Y,
|
||||
UsrDat->FullName,InsCtrDegName);
|
||||
}
|
||||
|
|
|
@ -67,6 +67,12 @@ typedef enum
|
|||
Enr_ELIMINATE_ONE_USR_FROM_PLATFORM = 10,
|
||||
} Enr_RegRemOneUsrAction_t;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
Enr_REQUEST_REMOVE_USR,
|
||||
Enr_REMOVE_USR,
|
||||
} Enr_ReqDelOrDelUsr_t;
|
||||
|
||||
/*****************************************************************************/
|
||||
/****************************** Public prototypes ****************************/
|
||||
/*****************************************************************************/
|
||||
|
@ -123,17 +129,11 @@ void Enr_ReqRegRemTch (void);
|
|||
void Enr_AskIfRegRemAnotherOth (void);
|
||||
void Enr_AskIfRegRemAnotherStd (void);
|
||||
void Enr_AskIfRegRemAnotherTch (void);
|
||||
void Enr_AddAdmToIns (void);
|
||||
void Enr_AddAdmToCtr (void);
|
||||
void Enr_AddAdmToDeg (void);
|
||||
|
||||
void Enr_ReqRemMeFromCrs (void);
|
||||
void Enr_ReqRemUsrFromCrs (void);
|
||||
void Enr_RemUsrFromCrs1 (void);
|
||||
void Enr_RemUsrFromCrs2 (void);
|
||||
void Enr_RemAdmIns (void);
|
||||
void Enr_RemAdmCtr (void);
|
||||
void Enr_RemAdmDeg (void);
|
||||
|
||||
void Enr_AcceptRegisterMeInCrs (void);
|
||||
void Enr_CreateNewUsr1 (void);
|
||||
|
|
|
@ -25,34 +25,11 @@
|
|||
/*********************************** Headers *********************************/
|
||||
/*****************************************************************************/
|
||||
|
||||
// #define _GNU_SOURCE // For asprintf
|
||||
// #include <stdio.h> // For asprintf
|
||||
// #include <stdlib.h> // For exit, system, malloc, free, rand, etc.
|
||||
// #include <string.h> // 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 *****************************/
|
||||
|
@ -815,61 +792,3 @@ void Enr_DB_RemoveExpiredEnrolmentRequests (void)
|
|||
" WHERE RequestTime<FROM_UNIXTIME(UNIX_TIMESTAMP()-%lu)",
|
||||
Cfg_TIME_TO_DELETE_ENROLMENT_REQUESTS);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/** Insert/replace user as administrator of an institution, center or degree */
|
||||
/*****************************************************************************/
|
||||
|
||||
void Enr_DB_InsertAdmin (long UsrCod,HieLvl_Level_t Scope,long Cod)
|
||||
{
|
||||
DB_QueryREPLACE ("can not create administrator",
|
||||
"REPLACE INTO usr_admins"
|
||||
" (UsrCod,Scope,Cod)"
|
||||
" VALUES"
|
||||
" (%ld,'%s',%ld)",
|
||||
UsrCod,
|
||||
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);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
/******* 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"
|
||||