Version 22.93: Apr 10, 2023 Changes in configuration of projects.

This commit is contained in:
acanas 2023-04-10 14:41:20 +02:00
parent 479179e82c
commit cfddb5c174
19 changed files with 948 additions and 1011 deletions

View File

@ -94,6 +94,7 @@
#include "swad_program.h"
#include "swad_program_resource.h"
#include "swad_project.h"
#include "swad_project_config.h"
#include "swad_project_resource.h"
#include "swad_question_import.h"
#include "swad_QR.h"

View File

@ -8293,9 +8293,10 @@ void Brw_ChgFileMetadata (void)
{
/***** Check if I can change file metadata *****/
IAmTheOwner = Brw_CheckIfIAmOwnerOfFile (FileMetadata.PublisherUsrCod);
if (Brw_CheckIfICanEditFileMetadata (IAmTheOwner))
{
/* Check if the file was public before the edition */
if (!Brw_CheckIfICanEditFileMetadata (IAmTheOwner))
Err_NoPermissionExit ();
/***** Check if the file was public before the edition *****/
PublicFileBeforeEdition = FileMetadata.IsPublic;
/***** Get the new file privacy and license from form *****/
@ -8377,10 +8378,6 @@ void Brw_ChgFileMetadata (void)
Ale_ShowAlert (Ale_SUCCESS,Txt_The_properties_of_file_X_have_been_saved,
FileMetadata.FilFolLnk.Name);
}
else
/***** Write error message and exit *****/
Err_NoPermissionExit ();
}
/***** Show again the file browser *****/
Brw_ShowAgainFileBrowserOrWorks ();

View File

@ -629,10 +629,11 @@ TODO: Emilce Barrera Mesa: Podr
TODO: Emilce Barrera Mesa: Mis estudiantes presentan muchas dificultades a la hora de poner la foto porque la plataforma es muy exigente respecto al fondo de la imagen.
*/
#define Log_PLATFORM_VERSION "SWAD 22.92.3 (2023-04-06)"
#define Log_PLATFORM_VERSION "SWAD 22.93 (2023-04-10)"
#define CSS_FILE "swad22.88.css"
#define JS_FILE "swad22.49.js"
/*
Version 22.93: Apr 10, 2023 Changes in configuration of projects. (338417 lines)
Version 22.92.3: Apr 06, 2023 Code refactoring in resources. (338493 lines)
Version 22.92.2: Apr 06, 2023 Code refactoring in resources. (338500 lines)
Version 22.92.1: Apr 06, 2023 Removed unused code in resources. (338514 lines)

View File

@ -1580,9 +1580,9 @@ void Crs_RemoveCourse (void)
/***** Get data of the course from database *****/
Crs_GetCourseDataByCod (Crs_EditingCrs);
if (!Crs_CheckIfICanEdit (Crs_EditingCrs))
Err_NoPermissionExit ();
if (Crs_CheckIfICanEdit (Crs_EditingCrs))
{
/***** Check if this course has users *****/
if (Enr_GetNumUsrsInCrss (HieLvl_CRS,Crs_EditingCrs->CrsCod,
1 << Rol_STD |
@ -1602,9 +1602,6 @@ void Crs_RemoveCourse (void)
Crs_EditingCrs->CrsCod = -1L; // To not showing button to go to course
}
}
else
Err_NoPermissionExit ();
}
/*****************************************************************************/
/********************* Get data of a course from its code ********************/
@ -1822,9 +1819,9 @@ void Crs_ChangeInsCrsCod (void)
/* Get data of the course */
Crs_GetCourseDataByCod (Crs_EditingCrs);
if (!Crs_CheckIfICanEdit (Crs_EditingCrs))
Err_NoPermissionExit ();
if (Crs_CheckIfICanEdit (Crs_EditingCrs))
{
/***** Change the institutional course code *****/
if (strcmp (NewInstitutionalCrsCod,Crs_EditingCrs->InstitutionalCrsCod))
{
@ -1839,9 +1836,6 @@ void Crs_ChangeInsCrsCod (void)
Txt_The_institutional_code_of_the_course_X_has_not_changed,
Crs_EditingCrs->ShrtName);
}
else
Err_NoPermissionExit ();
}
/*****************************************************************************/
/************************ Change the year of a course ************************/
@ -1867,10 +1861,11 @@ void Crs_ChangeCrsYear (void)
Par_GetParText ("OthCrsYear",YearStr,2);
NewYear = Deg_ConvStrToYear (YearStr);
/* Get data of the course */
Crs_GetCourseDataByCod (Crs_EditingCrs);
if (!Crs_CheckIfICanEdit (Crs_EditingCrs))
Err_NoPermissionExit ();
if (Crs_CheckIfICanEdit (Crs_EditingCrs))
{
if (NewYear <= Deg_MAX_YEARS_PER_DEGREE) // If year is valid
{
/***** If name of course was in database in the new year... *****/
@ -1902,9 +1897,6 @@ void Crs_ChangeCrsYear (void)
Txt_The_year_X_is_not_allowed,
NewYear);
}
else
Err_NoPermissionExit ();
}
/*****************************************************************************/
/************* Change the institutional course code of a course **************/
@ -1995,9 +1987,9 @@ void Crs_RenameCourse (struct Crs_Course *Crs,Cns_ShrtOrFullName_t ShrtOrFullNam
/***** Get from the database the data of the degree *****/
Crs_GetCourseDataByCod (Crs);
if (!Crs_CheckIfICanEdit (Crs))
Err_NoPermissionExit ();
if (Crs_CheckIfICanEdit (Crs))
{
/***** Check if new name is empty *****/
if (NewCrsName[0])
{
@ -2032,9 +2024,6 @@ void Crs_RenameCourse (struct Crs_Course *Crs,Cns_ShrtOrFullName_t ShrtOrFullNam
else
Ale_CreateAlertYouCanNotLeaveFieldEmpty ();
}
else
Err_NoPermissionExit ();
}
/*****************************************************************************/
/*********************** Change the status of a course ***********************/

View File

@ -3085,9 +3085,11 @@ void For_RemoveThread (void)
/***** Get parameters related to forum *****/
For_GetParsForums (&Forums);
if (PermissionThreadDeletion[Forums.Forum.Type] &
(1 << Gbl.Usrs.Me.Role.Logged)) // If I have permission to remove thread in this forum...
{
/***** Check if I have permission to remove thread in this forum *****/
if (!(PermissionThreadDeletion[Forums.Forum.Type] &
(1 << Gbl.Usrs.Me.Role.Logged)))
Err_NoPermissionExit ();
/***** Get subject of thread to delete *****/
For_DB_GetThrSubject (Forums.Thread.Current,Subject);
@ -3107,9 +3109,6 @@ void For_RemoveThread (void)
else
For_ShowForumThreadsHighlightingOneThread (&Forums,Ale_SUCCESS,Txt_Thread_removed);
}
else
Err_NoPermissionExit ();
}
/*****************************************************************************/
/*************** Cut a thread to move it to another forum ********************/

View File

@ -1410,9 +1410,7 @@ void Gam_ReceiveFormGame (void)
/***** Get parameters *****/
ItsANewGame = ((Games.Game.GamCod = Gam_GetPars (&Games)) <= 0);
/***** If I can edit games ==> receive game from form *****/
if (Gam_CheckIfICanEditGames ())
{
/***** Receive game from form *****/
Gam_ReceiveGameFieldsFromForm (&Games.Game,Txt);
if (Gam_CheckGameFieldsReceivedFromForm (&Games.Game))
{
@ -1442,9 +1440,7 @@ void Gam_ReceiveFormGame (void)
/* Show questions of the game ready to be edited */
Gam_ListGameQuestions (&Games);
}
}
else
Err_NoPermissionExit ();
}
static void Gam_ReceiveGameFieldsFromForm (struct Gam_Game *Game,

View File

@ -2044,12 +2044,10 @@ static void Mch_ShowMatchStatusForTch (struct Mch_Match *Match)
static void Mch_ShowMatchStatusForStd (struct Mch_Match *Match,Mch_Update_t Update)
{
bool ICanPlayThisMatchBasedOnGrps;
struct Mch_UsrAnswer UsrAnswer;
/***** Can I play this match? *****/
ICanPlayThisMatchBasedOnGrps = Mch_CheckIfICanPlayThisMatchBasedOnGrps (Match);
if (!ICanPlayThisMatchBasedOnGrps)
if (!Mch_CheckIfICanPlayThisMatchBasedOnGrps (Match))
Err_NoPermissionExit ();
/***** Get student's answer to this question

View File

@ -1104,9 +1104,9 @@ void MchRes_ShowOneMchResult (void)
/***** Check if I can view this match result and score *****/
MchRes_CheckIfICanSeeMatchResult (&Games.Game,&Match,UsrDat->UsrCod,&ICanView);
if (!ICanView.Result)
Err_NoPermissionExit ();
if (ICanView.Result) // I am allowed to view this match result
{
/***** Get questions and user's answers of the match result from database *****/
Mch_GetMatchQuestionsFromDB (&Print);
@ -1286,9 +1286,6 @@ void MchRes_ShowOneMchResult (void)
/***** End box *****/
Box_BoxEnd ();
}
else // I am not allowed to view this match result
Err_NoPermissionExit ();
}
/*****************************************************************************/
/********************** Get if I can see match result ************************/

View File

@ -196,7 +196,7 @@ static Usr_Who_t Prj_GetParWho (void);
static void Prj_ShowProjectsHead (struct Prj_Projects *Projects);
static void Prj_ShowTableAllProjectsHead (void);
static bool Prj_CheckIfICanCreateProjects (void);
static bool Prj_CheckIfICanCreateProjects (const struct Prj_Projects *Projects);
static void Prj_PutIconToCreateNewPrj (struct Prj_Projects *Projects);
static void Prj_PutButtonToCreateNewPrj (struct Prj_Projects *Projects);
static void Prj_PutIconToShowAllData (struct Prj_Projects *Projects);
@ -318,12 +318,12 @@ long Prj_GetPrjCod (void)
}
/*****************************************************************************/
/******************************* Reset projects ******************************/
/*********** Reset projects and read configuration from database *************/
/*****************************************************************************/
void Prj_ResetProjects (struct Prj_Projects *Projects)
void Prj_ResetPrjsAndReadConfig (struct Prj_Projects *Projects)
{
Projects->Config.Editable = PrjCfg_EDITABLE_DEFAULT;
/***** Filters *****/
Projects->Filter.Who = Prj_FILTER_WHO_DEFAULT;
Projects->Filter.Assign = Prj_FILTER_ASSIGNED_DEFAULT |
Prj_FILTER_NONASSIG_DEFAULT;
@ -335,12 +335,17 @@ void Prj_ResetProjects (struct Prj_Projects *Projects)
Prj_FILTER_UNAPPROVED_DEFAULT |
Prj_FILTER_APPROVED_DEFAULT;
Projects->Filter.DptCod = Prj_FILTER_DPT_DEFAULT;
/***** Project list *****/
Projects->LstIsRead = false; // List is not read
Projects->Num = 0;
Projects->LstPrjCods = NULL;
Projects->SelectedOrder = Prj_ORDER_DEFAULT;
Projects->CurrentPage = 0;
Projects->Prj.PrjCod = -1L;
/***** Read project configuration from database *****/
PrjCfg_GetConfig (Projects);
}
/*****************************************************************************/
@ -352,7 +357,7 @@ void Prj_ListUsrsToSelect (void)
struct Prj_Projects Projects;
/***** Reset projects *****/
Prj_ResetProjects (&Projects);
Prj_ResetPrjsAndReadConfig (&Projects);
/***** Get parameters *****/
Prj_GetPars (&Projects);
@ -386,7 +391,7 @@ void Prj_SeeProjects (void)
struct Prj_Projects Projects;
/***** Reset projects *****/
Prj_ResetProjects (&Projects);
Prj_ResetPrjsAndReadConfig (&Projects);
/***** Get parameters *****/
Prj_GetPars (&Projects);
@ -440,7 +445,7 @@ void Prj_ShowTableSelectedPrjs (void)
unsigned NumPrj;
/***** Reset projects *****/
Prj_ResetProjects (&Projects);
Prj_ResetPrjsAndReadConfig (&Projects);
/***** Get parameters *****/
Prj_GetPars (&Projects);
@ -591,7 +596,7 @@ static void Prj_ShowPrjsInCurrentPage (void *Projects)
Ale_ShowAlert (Ale_INFO,Txt_No_projects);
/***** Button to create a new project *****/
if (Prj_CheckIfICanCreateProjects ())
if (Prj_CheckIfICanCreateProjects ((struct Prj_Projects *) Projects))
Prj_PutButtonToCreateNewPrj ((struct Prj_Projects *) Projects);
/***** End box *****/
@ -1211,23 +1216,18 @@ static void Prj_ShowTableAllProjectsHead (void)
/********************** Check if I can create projects ***********************/
/*****************************************************************************/
static bool Prj_CheckIfICanCreateProjects (void)
static bool Prj_CheckIfICanCreateProjects (const struct Prj_Projects *Projects)
{
static const bool ICanCreateProjects[Rol_NUM_ROLES] =
switch (Gbl.Usrs.Me.Role.Logged)
{
[Rol_UNK ] = false,
[Rol_GST ] = false,
[Rol_USR ] = false,
[Rol_STD ] = false,
[Rol_NET ] = true,
[Rol_TCH ] = true,
[Rol_DEG_ADM] = true,
[Rol_CTR_ADM] = true,
[Rol_INS_ADM] = true,
[Rol_SYS_ADM] = true,
};
return ICanCreateProjects[Gbl.Usrs.Me.Role.Logged];
case Rol_NET:
return Projects->Config.NETCanCreate;
case Rol_TCH:
case Rol_SYS_ADM:
return true;
default:
return false;
}
}
/*****************************************************************************/
@ -1243,7 +1243,7 @@ void Prj_PutIconsListProjects (void *Projects)
ICanConfigAllProjects = PrjCfg_CheckIfICanConfig ();
/***** Put icon to create a new project *****/
if (Prj_CheckIfICanCreateProjects ())
if (Prj_CheckIfICanCreateProjects ((struct Prj_Projects *) Projects))
Prj_PutIconToCreateNewPrj ((struct Prj_Projects *) Projects);
if (((struct Prj_Projects *) Projects)->Num)
@ -1317,7 +1317,7 @@ void Prj_ShowOneProject (void)
struct Prj_Projects Projects;
/***** Reset projects *****/
Prj_ResetProjects (&Projects);
Prj_ResetPrjsAndReadConfig (&Projects);
/***** Get parameters *****/
Prj_GetPars (&Projects);
@ -1406,7 +1406,7 @@ void Prj_PrintOneProject (void)
struct Prj_Projects Projects;
/***** Reset projects *****/
Prj_ResetProjects (&Projects);
Prj_ResetPrjsAndReadConfig (&Projects);
/***** Allocate memory for the project *****/
Prj_AllocMemProject (&Projects.Prj);
@ -2807,7 +2807,7 @@ void Prj_ReqAddStds (void)
struct Prj_Projects Projects;
/***** Reset projects *****/
Prj_ResetProjects (&Projects);
Prj_ResetPrjsAndReadConfig (&Projects);
Prj_FormToSelectStds (&Projects);
}
@ -2817,7 +2817,7 @@ void Prj_ReqAddTuts (void)
struct Prj_Projects Projects;
/***** Reset projects *****/
Prj_ResetProjects (&Projects);
Prj_ResetPrjsAndReadConfig (&Projects);
Prj_FormToSelectTuts (&Projects);
}
@ -2827,7 +2827,7 @@ void Prj_ReqAddEvls (void)
struct Prj_Projects Projects;
/***** Reset projects *****/
Prj_ResetProjects (&Projects);
Prj_ResetPrjsAndReadConfig (&Projects);
Prj_FormToSelectEvls (&Projects);
}
@ -2938,7 +2938,7 @@ static void Prj_AddUsrsToProject (Prj_RoleInProject_t RoleInPrj)
const char *Ptr;
/***** Reset projects *****/
Prj_ResetProjects (&Projects);
Prj_ResetPrjsAndReadConfig (&Projects);
/***** Get parameters *****/
Prj_GetPars (&Projects);
@ -2988,7 +2988,7 @@ void Prj_ReqRemStd (void)
struct Prj_Projects Projects;
/***** Reset projects *****/
Prj_ResetProjects (&Projects);
Prj_ResetPrjsAndReadConfig (&Projects);
Prj_ReqRemUsrFromPrj (&Projects,Prj_ROLE_STD);
}
@ -2998,7 +2998,7 @@ void Prj_ReqRemTut (void)
struct Prj_Projects Projects;
/***** Reset projects *****/
Prj_ResetProjects (&Projects);
Prj_ResetPrjsAndReadConfig (&Projects);
Prj_ReqRemUsrFromPrj (&Projects,Prj_ROLE_TUT);
}
@ -3008,7 +3008,7 @@ void Prj_ReqRemEvl (void)
struct Prj_Projects Projects;
/***** Reset projects *****/
Prj_ResetProjects (&Projects);
Prj_ResetPrjsAndReadConfig (&Projects);
Prj_ReqRemUsrFromPrj (&Projects,Prj_ROLE_EVL);
}
@ -3110,7 +3110,7 @@ static void Prj_RemUsrFromPrj (Prj_RoleInProject_t RoleInPrj)
struct Prj_Projects Projects;
/***** Reset projects *****/
Prj_ResetProjects (&Projects);
Prj_ResetPrjsAndReadConfig (&Projects);
/***** Allocate memory for the project *****/
Prj_AllocMemProject (&Projects.Prj);
@ -3494,7 +3494,7 @@ void Prj_ReqRemProject (void)
struct Prj_Projects Projects;
/***** Reset projects *****/
Prj_ResetProjects (&Projects);
Prj_ResetPrjsAndReadConfig (&Projects);
/***** Allocate memory for the project *****/
Prj_AllocMemProject (&Projects.Prj);
@ -3506,15 +3506,16 @@ void Prj_ReqRemProject (void)
/***** Get data of the project from database *****/
Prj_GetProjectDataByCod (&Projects.Prj);
if (Prj_CheckIfICanEditProject (&Projects.Prj))
/***** Check if I can edit this project *****/
if (!Prj_CheckIfICanEditProject (&Projects.Prj))
Err_NoPermissionExit ();
/***** Show question and button to remove the project *****/
Ale_ShowAlertAndButton (ActRemPrj,NULL,NULL,
Prj_PutCurrentPars,&Projects,
Btn_REMOVE_BUTTON,Txt_Remove_project,
Ale_QUESTION,Txt_Do_you_really_want_to_remove_the_project_X,
Projects.Prj.Title);
else
Err_NoPermissionExit ();
/***** Free memory of the project *****/
Prj_FreeMemProject (&Projects.Prj);
@ -3534,7 +3535,7 @@ void Prj_RemoveProject (void)
char PathRelPrj[PATH_MAX + 1];
/***** Reset projects *****/
Prj_ResetProjects (&Projects);
Prj_ResetPrjsAndReadConfig (&Projects);
/***** Allocate memory for the project *****/
Prj_AllocMemProject (&Projects.Prj);
@ -3546,8 +3547,10 @@ void Prj_RemoveProject (void)
/***** Get data of the project from database *****/
Prj_GetProjectDataByCod (&Projects.Prj); // Inside this function, the course is checked to be the current one
if (Prj_CheckIfICanEditProject (&Projects.Prj))
{
/***** Check if I can edit this project *****/
if (!Prj_CheckIfICanEditProject (&Projects.Prj))
Err_NoPermissionExit ();
/***** Remove users in project *****/
Prj_DB_RemoveUsrsFromPrj (Projects.Prj.PrjCod);
@ -3569,9 +3572,6 @@ void Prj_RemoveProject (void)
/***** Write message to show the change made *****/
Ale_ShowAlert (Ale_SUCCESS,Txt_Project_X_removed,
Projects.Prj.Title);
}
else
Err_NoPermissionExit ();
/***** Free memory of the project *****/
Prj_FreeMemProject (&Projects.Prj);
@ -3589,7 +3589,7 @@ void Prj_HideProject (void)
struct Prj_Projects Projects;
/***** Reset projects *****/
Prj_ResetProjects (&Projects);
Prj_ResetPrjsAndReadConfig (&Projects);
/***** Allocate memory for the project *****/
Prj_AllocMemProject (&Projects.Prj);
@ -3601,12 +3601,13 @@ void Prj_HideProject (void)
/***** Get data of the project from database *****/
Prj_GetProjectDataByCod (&Projects.Prj);
/***** Hide project *****/
if (Prj_CheckIfICanEditProject (&Projects.Prj))
Prj_DB_HideOrUnhideProject (Projects.Prj.PrjCod,true);
else
/***** Check if I can edit this project *****/
if (!Prj_CheckIfICanEditProject (&Projects.Prj))
Err_NoPermissionExit ();
/***** Hide project *****/
Prj_DB_HideOrUnhideProject (Projects.Prj.PrjCod,true);
/***** Free memory of the project *****/
Prj_FreeMemProject (&Projects.Prj);
@ -3623,7 +3624,7 @@ void Prj_UnhideProject (void)
struct Prj_Projects Projects;
/***** Reset projects *****/
Prj_ResetProjects (&Projects);
Prj_ResetPrjsAndReadConfig (&Projects);
/***** Allocate memory for the project *****/
Prj_AllocMemProject (&Projects.Prj);
@ -3635,12 +3636,13 @@ void Prj_UnhideProject (void)
/***** Get data of the project from database *****/
Prj_GetProjectDataByCod (&Projects.Prj);
/***** Unhide project *****/
if (Prj_CheckIfICanEditProject (&Projects.Prj))
Prj_DB_HideOrUnhideProject (Projects.Prj.PrjCod,false);
else
/***** Check if I can edit this project *****/
if (!Prj_CheckIfICanEditProject (&Projects.Prj))
Err_NoPermissionExit ();
/***** Unhide project *****/
Prj_DB_HideOrUnhideProject (Projects.Prj.PrjCod,false);
/***** Free memory of the project *****/
Prj_FreeMemProject (&Projects.Prj);
@ -3657,7 +3659,11 @@ void Prj_ReqCreatePrj (void)
struct Prj_Projects Projects;
/***** Reset projects *****/
Prj_ResetProjects (&Projects);
Prj_ResetPrjsAndReadConfig (&Projects);
/***** Check if I can create new projects *****/
if (!Prj_CheckIfICanCreateProjects (&Projects))
Err_NoPermissionExit ();
/***** Get parameters *****/
Prj_GetPars (&Projects);
@ -3672,7 +3678,7 @@ void Prj_ReqEditPrj (void)
struct Prj_Projects Projects;
/***** Reset projects *****/
Prj_ResetProjects (&Projects);
Prj_ResetPrjsAndReadConfig (&Projects);
/***** Get parameters *****/
Prj_GetPars (&Projects);
@ -4017,7 +4023,7 @@ void Prj_ReceiveFormProject (void)
bool NewProjectIsCorrect = true;
/***** Reset projects *****/
Prj_ResetProjects (&Projects);
Prj_ResetPrjsAndReadConfig (&Projects);
/***** Allocate memory for the project *****/
Prj_AllocMemProject (&Projects.Prj);
@ -4031,7 +4037,7 @@ void Prj_ReceiveFormProject (void)
/* Reset project data */
Prj_ResetProject (&Projects.Prj);
ICanEditProject = true;
ICanEditProject = Prj_CheckIfICanCreateProjects (&Projects);
}
else
{
@ -4041,8 +4047,10 @@ void Prj_ReceiveFormProject (void)
ICanEditProject = Prj_CheckIfICanEditProject (&Projects.Prj);
}
if (ICanEditProject)
{
/* Check if I can create/edit project */
if (!ICanEditProject)
Err_NoPermissionExit ();
/* Get project title */
Par_GetParText ("Title",Projects.Prj.Title,Prj_MAX_BYTES_TITLE);
@ -4106,14 +4114,11 @@ void Prj_ReceiveFormProject (void)
else
Prj_PutFormProject (&Projects,ItsANewProject);
/***** Show again form to edit project *****/
Prj_ReqCreatOrEditPrj (&Projects);
}
else
Err_NoPermissionExit ();
/***** Free memory of the project *****/
Prj_FreeMemProject (&Projects.Prj);
/***** Show again form to edit project *****/
Prj_ReqCreatOrEditPrj (&Projects);
}
/*****************************************************************************/
@ -4178,14 +4183,16 @@ void Prj_ReqLockSelectedPrjsEdition (void)
struct Prj_Projects Projects;
/***** Reset projects *****/
Prj_ResetProjects (&Projects);
Prj_ResetPrjsAndReadConfig (&Projects);
/***** Check if I can configure projects *****/
if (!PrjCfg_CheckIfICanConfig ())
Err_NoPermissionExit ();
/***** Get parameters *****/
Prj_GetPars (&Projects);
/***** Show question and button to lock all selected projects *****/
if (PrjCfg_CheckIfICanConfig ())
{
/* Get list of projects */
Prj_GetListProjects (&Projects);
@ -4201,9 +4208,6 @@ void Prj_ReqLockSelectedPrjsEdition (void)
/* Free list of projects */
Prj_FreeListProjects (&Projects);
}
else
Err_NoPermissionExit ();
/***** Show projects again *****/
Prj_ShowProjects (&Projects);
@ -4217,14 +4221,16 @@ void Prj_ReqUnloSelectedPrjsEdition (void)
struct Prj_Projects Projects;
/***** Reset projects *****/
Prj_ResetProjects (&Projects);
Prj_ResetPrjsAndReadConfig (&Projects);
/***** Check if I can configure projects *****/
if (!PrjCfg_CheckIfICanConfig ())
Err_NoPermissionExit ();
/***** Get parameters *****/
Prj_GetPars (&Projects);
/***** Show question and button to unlock all selected projects *****/
if (PrjCfg_CheckIfICanConfig ())
{
/* Get list of projects */
Prj_GetListProjects (&Projects);
@ -4240,9 +4246,6 @@ void Prj_ReqUnloSelectedPrjsEdition (void)
/* Free list of projects */
Prj_FreeListProjects (&Projects);
}
else
Err_NoPermissionExit ();
/***** Show projects again *****/
Prj_ShowProjects (&Projects);
@ -4259,14 +4262,16 @@ void Prj_LockSelectedPrjsEdition (void)
unsigned NumPrj;
/***** Reset projects *****/
Prj_ResetProjects (&Projects);
Prj_ResetPrjsAndReadConfig (&Projects);
/***** Check if I can configure projects *****/
if (!PrjCfg_CheckIfICanConfig ())
Err_NoPermissionExit ();
/***** Get parameters *****/
Prj_GetPars (&Projects);
/***** Lock all selected projects *****/
if (PrjCfg_CheckIfICanConfig ())
{
/* Get list of projects */
Prj_GetListProjects (&Projects);
@ -4281,9 +4286,6 @@ void Prj_LockSelectedPrjsEdition (void)
/* Free list of projects */
Prj_FreeListProjects (&Projects);
}
else
Err_NoPermissionExit ();
/***** Show projects again *****/
Prj_ShowProjects (&Projects);
@ -4296,14 +4298,16 @@ void Prj_UnloSelectedPrjsEdition (void)
unsigned NumPrj;
/***** Reset projects *****/
Prj_ResetProjects (&Projects);
Prj_ResetPrjsAndReadConfig (&Projects);
/***** Check if I can configure projects *****/
if (!PrjCfg_CheckIfICanConfig ())
Err_NoPermissionExit ();
/***** Get parameters *****/
Prj_GetPars (&Projects);
/***** Unlock all selected projects *****/
if (PrjCfg_CheckIfICanConfig ())
{
/* Get list of projects */
Prj_GetListProjects (&Projects);
@ -4318,9 +4322,6 @@ void Prj_UnloSelectedPrjsEdition (void)
/* Free list of projects */
Prj_FreeListProjects (&Projects);
}
else
Err_NoPermissionExit ();
/***** Show projects again *****/
Prj_ShowProjects (&Projects);
@ -4387,7 +4388,11 @@ void Prj_LockProjectEdition (void)
struct Prj_Projects Projects;
/***** Reset projects *****/
Prj_ResetProjects (&Projects);
Prj_ResetPrjsAndReadConfig (&Projects);
/***** Check if I can configure projects *****/
if (!PrjCfg_CheckIfICanConfig ())
Err_NoPermissionExit ();
/***** Allocate memory for the project *****/
Prj_AllocMemProject (&Projects.Prj);
@ -4399,17 +4404,12 @@ void Prj_LockProjectEdition (void)
/***** Get data of the project from database *****/
Prj_GetProjectDataByCod (&Projects.Prj);
if (Prj_CheckIfICanEditProject (&Projects.Prj))
{
/***** Lock project edition *****/
Prj_DB_LockProjectEdition (Projects.Prj.PrjCod);
Projects.Prj.Locked = Prj_LOCKED;
/***** Show updated form and icon *****/
Prj_FormLockUnlock (&Projects.Prj);
}
else
Err_NoPermissionExit ();
/***** Free memory of the project *****/
Prj_FreeMemProject (&Projects.Prj);
@ -4424,7 +4424,11 @@ void Prj_UnloProjectEdition (void)
struct Prj_Projects Projects;
/***** Reset projects *****/
Prj_ResetProjects (&Projects);
Prj_ResetPrjsAndReadConfig (&Projects);
/***** Check if I can configure projects *****/
if (!PrjCfg_CheckIfICanConfig ())
Err_NoPermissionExit ();
/***** Allocate memory for the project *****/
Prj_AllocMemProject (&Projects.Prj);
@ -4436,17 +4440,12 @@ void Prj_UnloProjectEdition (void)
/***** Get data of the project from database *****/
Prj_GetProjectDataByCod (&Projects.Prj);
if (Prj_CheckIfICanEditProject (&Projects.Prj))
{
/***** Unlock project edition *****/
Prj_DB_UnlockProjectEdition (Projects.Prj.PrjCod);
Projects.Prj.Locked = Prj_UNLOCKED;
/***** Show updated form and icon *****/
Prj_FormLockUnlock (&Projects.Prj);
}
else
Err_NoPermissionExit ();
/***** Free memory of the project *****/
Prj_FreeMemProject (&Projects.Prj);
@ -4461,7 +4460,11 @@ void Prj_ChangeReviewStatus (void)
struct Prj_Projects Projects;
/***** Reset projects *****/
Prj_ResetProjects (&Projects);
Prj_ResetPrjsAndReadConfig (&Projects);
/***** Check if I can review projects *****/
if (!Prj_CheckIfICanReviewProjects ())
Err_NoPermissionExit ();
/***** Allocate memory for the project *****/
Prj_AllocMemProject (&Projects.Prj);
@ -4473,15 +4476,10 @@ void Prj_ChangeReviewStatus (void)
/***** Get data of the project from database *****/
Prj_GetProjectDataByCod (&Projects.Prj);
/***** Hide project *****/
if (Prj_CheckIfICanReviewProjects ())
{
/***** Update review *****/
Projects.Prj.Review.Status = Prj_GetParReviewStatus ();
Par_GetParHTML ("ReviewTxt",Projects.Prj.Review.Txt,Cns_MAX_BYTES_TEXT); // Store in HTML format (not rigorous)
Prj_DB_UpdateReview (&Projects.Prj);
}
else
Err_NoPermissionExit ();
/***** Free memory of the project *****/
Prj_FreeMemProject (&Projects.Prj);

View File

@ -37,7 +37,7 @@
/*****************************************************************************/
/***** Configuration *****/
#define PrjCfg_EDITABLE_DEFAULT true
#define PrjCfg_NET_CAN_CREATE_DEFAULT true
/***** Filters to list projects *****/
/* Whose projects */
@ -187,7 +187,7 @@ struct Prj_Projects
Prj_ProjectView_t View;
struct
{
bool Editable;
bool NETCanCreate;
} Config;
struct Prj_Filter Filter;
bool LstIsRead; // Is the list already read from database, or it needs to be read?
@ -206,7 +206,7 @@ struct Prj_Projects
void Prj_SetPrjCod (long PrjCod);
long Prj_GetPrjCod (void);
void Prj_ResetProjects (struct Prj_Projects *Projects);
void Prj_ResetPrjsAndReadConfig (struct Prj_Projects *Projects);
void Prj_ListUsrsToSelect (void);
void Prj_SeeProjects (void);
@ -264,8 +264,6 @@ void Prj_UnhideProject (void);
void Prj_ReceiveFormProject (void);
void PrjCfg_ShowFormConfig (void);
void PrjCfg_ReceiveConfig (void);
void Prj_ReqLockSelectedPrjsEdition (void);
void Prj_ReqUnloSelectedPrjsEdition (void);
void Prj_LockSelectedPrjsEdition (void);

View File

@ -47,12 +47,29 @@ extern struct Globals Gbl;
/***************************** Private prototypes ****************************/
/*****************************************************************************/
static void PrjCfg_ShowFormConfigEditableByNET (const struct Prj_Projects *Projects);
static void PrjCfg_ShowFormNETCanCreate (const struct Prj_Projects *Projects);
static void PrjCfg_GetCrsPrjsConfig (struct Prj_Projects *Projects);
static void PrjCfg_GetConfigDataFromRow (MYSQL_RES *mysql_res,
struct Prj_Projects *Projects);
static bool PrjCfg_GetEditableFromForm (void);
static bool PrjCfg_GetIfNETCanCreateFromForm (void);
/*****************************************************************************/
/************** Get configuration of projects for current course *************/
/*****************************************************************************/
void PrjCfg_GetConfig (struct Prj_Projects *Projects)
{
MYSQL_RES *mysql_res;
/***** Get configuration of projects for current course from database *****/
if (Prj_DB_GetConfig (&mysql_res))
PrjCfg_GetConfigDataFromRow (mysql_res,Projects);
else
Projects->Config.NETCanCreate = PrjCfg_NET_CAN_CREATE_DEFAULT;
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
}
/*****************************************************************************/
/************************ Can I configure all projects? **********************/
@ -81,10 +98,7 @@ void PrjCfg_ShowFormConfig (void)
struct Prj_Projects Projects;
/***** Reset projects *****/
Prj_ResetProjects (&Projects);
/***** Read projects configuration from database *****/
PrjCfg_GetCrsPrjsConfig (&Projects);
Prj_ResetPrjsAndReadConfig (&Projects);
/***** Begin box *****/
Box_BoxBegin (NULL,Txt_Configure_projects,
@ -97,7 +111,7 @@ void PrjCfg_ShowFormConfig (void)
HTM_TABLE_BeginCenterPadding (2);
/***** Projects are editable by non-editing teachers? *****/
PrjCfg_ShowFormConfigEditableByNET (&Projects);
PrjCfg_ShowFormNETCanCreate (&Projects);
HTM_TABLE_End ();
@ -112,49 +126,37 @@ void PrjCfg_ShowFormConfig (void)
}
/*****************************************************************************/
/************** Projects are editable by non-editing teachers? ***************/
/*************** Cam non-editing teachers create new projects? ***************/
/*****************************************************************************/
static void PrjCfg_ShowFormConfigEditableByNET (const struct Prj_Projects *Projects)
static void PrjCfg_ShowFormNETCanCreate (const struct Prj_Projects *Projects)
{
extern const char *Txt_Editable;
extern const char *Txt_Editable_by_non_editing_teachers;
extern const char *Txt_Create_project;
extern const char *Txt_Non_editing_teachers_can_create_new_projects;
HTM_TR_Begin (NULL);
/***** Label *****/
Frm_LabelColumn ("RT","Editable",Txt_Editable);
HTM_TD_Begin ("class=\"RT FORM_IN_%s\"",
The_GetSuffix ());
HTM_TxtColon (Txt_Create_project);
HTM_TD_End ();
/***** Data *****/
HTM_TD_Begin ("class=\"LT\"");
HTM_INPUT_CHECKBOX ("Editable",HTM_DONT_SUBMIT_ON_CHANGE,
"id=\"Editable\" value=\"Y\"%s",
Projects->Config.Editable ? " checked=\"checked\"" :
HTM_LABEL_Begin ("class=\"DAT_%s\"",
The_GetSuffix ());
HTM_INPUT_CHECKBOX ("NETCanCreate",HTM_DONT_SUBMIT_ON_CHANGE,
"id=\"NETCanCreate\" value=\"Y\"%s",
Projects->Config.NETCanCreate ? " checked=\"checked\"" :
"");
HTM_Txt (Txt_Editable_by_non_editing_teachers);
HTM_Txt (Txt_Non_editing_teachers_can_create_new_projects);
HTM_LABEL_End ();
HTM_TD_End ();
HTM_TR_End ();
}
/*****************************************************************************/
/************** Get configuration of projects for current course *************/
/*****************************************************************************/
static void PrjCfg_GetCrsPrjsConfig (struct Prj_Projects *Projects)
{
MYSQL_RES *mysql_res;
/***** Get configuration of projects for current course from database *****/
if (Prj_DB_GetCrsPrjsConfig (&mysql_res))
PrjCfg_GetConfigDataFromRow (mysql_res,Projects);
else
Projects->Config.Editable = PrjCfg_EDITABLE_DEFAULT;
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
}
/*****************************************************************************/
/************ Get configuration values from a database table row *************/
/*****************************************************************************/
@ -167,8 +169,8 @@ static void PrjCfg_GetConfigDataFromRow (MYSQL_RES *mysql_res,
/***** Get row *****/
row = mysql_fetch_row (mysql_res);
/***** Get whether project are visible via plugins or not *****/
Projects->Config.Editable = (row[0][0] == 'Y');
/***** Get whether non-editing teachers can create new projects or not *****/
Projects->Config.NETCanCreate = (row[0][0] == 'Y');
}
/*****************************************************************************/
@ -181,13 +183,13 @@ void PrjCfg_ReceiveConfig (void)
struct Prj_Projects Projects;
/***** Reset projects *****/
Prj_ResetProjects (&Projects);
Prj_ResetPrjsAndReadConfig (&Projects);
/***** Get whether projects are editable by non-editing teachers or not *****/
Projects.Config.Editable = PrjCfg_GetEditableFromForm ();
/***** Get non-editing teachers can create new projects or not *****/
Projects.Config.NETCanCreate = PrjCfg_GetIfNETCanCreateFromForm ();
/***** Update database *****/
Prj_DB_UpdateCrsPrjsConfig (Projects.Config.Editable);
Prj_DB_UpdateCrsPrjsConfig (Projects.Config.NETCanCreate);
/***** Show confirmation message *****/
Ale_ShowAlert (Ale_SUCCESS,Txt_The_configuration_of_the_projects_has_been_updated);
@ -197,10 +199,10 @@ void PrjCfg_ReceiveConfig (void)
}
/*****************************************************************************/
/****** Get if projects are editable by non-editing teachers from form *******/
/****** Get if projects are creatable by non-editing teachers from form *******/
/*****************************************************************************/
static bool PrjCfg_GetEditableFromForm (void)
static bool PrjCfg_GetIfNETCanCreateFromForm (void)
{
return Par_GetParBool ("Editable");
return Par_GetParBool ("NETCanCreate");
}

View File

@ -32,14 +32,15 @@
/*****************************************************************************/
/***** Configuration *****/
#define PrjCfg_EDITABLE_DEFAULT true
#define PrjCfg_NET_CAN_CREATE_DEFAULT true
/*****************************************************************************/
/***************************** Public prototypes *****************************/
/*****************************************************************************/
bool PrjCfg_CheckIfICanConfig (void);
void PrjCfg_GetConfig (struct Prj_Projects *Projects);
bool PrjCfg_CheckIfICanConfig (void);
void PrjCfg_ShowFormConfig (void);
void PrjCfg_ReceiveConfig (void);

View File

@ -551,10 +551,10 @@ unsigned Prj_DB_GetListProjects (MYSQL_RES **mysql_res,
/************** Get configuration of projects for current course *************/
/*****************************************************************************/
unsigned Prj_DB_GetCrsPrjsConfig (MYSQL_RES **mysql_res)
unsigned Prj_DB_GetConfig (MYSQL_RES **mysql_res)
{
return (unsigned)
DB_QuerySELECT (mysql_res,"can not get configuration of test",
DB_QuerySELECT (mysql_res,"can not get project configuration",
"SELECT Editable" // row[0]
" FROM prj_config"
" WHERE CrsCod=%ld",

View File

@ -46,7 +46,7 @@ void Prj_DB_UpdateReview (const struct Prj_Project *Prj);
unsigned Prj_DB_GetListProjects (MYSQL_RES **mysql_res,
const struct Prj_Projects *Projects,
const char *UsrsSubQuery); // NULL if no users
unsigned Prj_DB_GetCrsPrjsConfig (MYSQL_RES **mysql_res);
unsigned Prj_DB_GetConfig (MYSQL_RES **mysql_res);
unsigned Prj_DB_GetProjectDataByCod (MYSQL_RES **mysql_res,long PrjCod);
void Prj_DB_GetProjectTitle (long PrjCod,char *Title,size_t TitleSize);
unsigned Prj_DB_GetPrjDataToCheckFaults (MYSQL_RES **mysql_res,long PrjCod);

View File

@ -46,7 +46,7 @@ void PrjRsc_GetLinkToProject (void)
char Title[Prj_MAX_BYTES_TITLE + 1];
/***** Reset projects *****/
Prj_ResetProjects (&Projects);
Prj_ResetPrjsAndReadConfig (&Projects);
/***** Get parameters *****/
Prj_GetPars (&Projects);

View File

@ -1590,8 +1590,9 @@ static void Rec_ShowCrsRecord (Rec_CourseRecordViewType_t TypeOfView,
switch (Gbl.Usrs.Me.Role.Logged)
{
case Rol_STD: // I am a student
if (Usr_ItsMe (UsrDat->UsrCod) == Usr_ME)
{
if (Usr_ItsMe (UsrDat->UsrCod) == Usr_OTHER) // Not me ==> I am a student trying to do something forbidden
Err_NoPermissionExit ();
switch (TypeOfView)
{
case Rec_CRS_LIST_ONE_RECORD:
@ -1620,9 +1621,6 @@ static void Rec_ShowCrsRecord (Rec_CourseRecordViewType_t TypeOfView,
Frm_BeginForm (ActRcvRecCrs);
break;
}
}
else // Not me ==> I am a student trying to do something forbidden
Err_NoPermissionExit ();
break;
case Rol_NET:
break;

View File

@ -331,10 +331,6 @@ void RubCri_ChangeTitle (void)
struct RubCri_Criterion Criterion;
char NewTitle[RubCri_MAX_BYTES_TITLE + 1];
/***** Check if I can edit rubrics *****/
if (!Rub_CheckIfICanEditRubrics ())
Err_NoPermissionExit ();
/***** Reset rubrics context *****/
Rub_ResetRubrics (&Rubrics);
Rub_ResetRubric (&Rubrics.Rubric);
@ -383,10 +379,6 @@ static void RubCri_ChangeValueCriterion (RubCri_ValueRange_t ValueRange)
struct RubCri_Criterion Criterion;
char ValueStr[64];
/***** Check if I can edit rubrics *****/
if (!Rub_CheckIfICanEditRubrics ())
Err_NoPermissionExit ();
/***** Reset rubrics context *****/
Rub_ResetRubrics (&Rubrics);
Rub_ResetRubric (&Rubrics.Rubric);
@ -427,10 +419,6 @@ void RubCri_ChangeWeight (void)
struct RubCri_Criterion Criterion;
char WeightStr[64];
/***** Check if I can edit rubrics *****/
if (!Rub_CheckIfICanEditRubrics ())
Err_NoPermissionExit ();
/***** Reset rubrics context *****/
Rub_ResetRubrics (&Rubrics);
Rub_ResetRubric (&Rubrics.Rubric);

View File

@ -2212,13 +2212,13 @@ void TstPrn_ShowOnePrint (void)
/***** Get test data *****/
TstPrn_GetPrintDataByPrnCod (&Print);
/***** Get if I can see print result and score *****/
/***** Check if I can see print result and score *****/
if (Gbl.Usrs.Me.Role.Logged == Rol_STD)
TstCfg_GetConfig (); // To get visibility
TstRes_CheckIfICanSeePrintResult (&Print,Gbl.Usrs.Other.UsrDat.UsrCod,&ICanView);
if (!ICanView.Result) // I am not allowed to view this test
Err_NoPermissionExit ();
if (ICanView.Result) // I am allowed to view this test print result
{
/***** Get questions and user's answers of the test from database *****/
if (!TstPrn_GetPrintQuestionsFromDB (&Print))
Err_WrongExamExit ();
@ -2397,9 +2397,6 @@ void TstPrn_ShowOnePrint (void)
/***** End box *****/
Box_BoxEnd ();
}
else // I am not allowed to view this test
Err_NoPermissionExit ();
}
/*****************************************************************************/
/****************** Get if I can see print result and score ******************/

View File

@ -12031,50 +12031,27 @@ const char *Txt_Edit_rich_text =
"Edit rich text"; // Çeviri lazim!
#endif
const char *Txt_Editable =
const char *Txt_Non_editing_teachers_can_create_new_projects =
#if L==1 // ca
"Editables";
"Els professors no editors poden crear nous projectes";
#elif L==2 // de
"Bearbeitbare";
"Nicht bearbeitende Lehrern k&ouml;nnen neue Projekte erstellen";
#elif L==3 // en
"Editable";
"Non-editing teachers can create new projects";
#elif L==4 // es
"Editables";
"Los profesores no editores pueden crear nuevos proyectos";
#elif L==5 // fr
"&Eacute;ditables";
"Les enseignants non &eacute;diteurs peuvent cr&eacute;er de nouveaux projets";
#elif L==6 // gn
"Ojeedit&aacute;kuaa";
"Mbo'eh&aacute;a ndaha'&eacute;iva editor ikatu omohe&ntilde;&oacute;i proyecto pyahu";
#elif L==7 // it
"Modificabili";
"Gli insegnanti non editori possono creare nuovi progetti";
#elif L==8 // pl
"Edytowalne";
"Nauczyciele nieedytuj&aogon;cy mog&aogon; tworzy&cacute; nowe projekty";
#elif L==9 // pt
"Edit&aacute;veis";
"Professores n&atilde;o editores podem criar novos projetos";
#elif L==10 // tr
"D&uuml;zenlenebilir";
#endif
const char *Txt_Editable_by_non_editing_teachers =
#if L==1 // ca
"Editables per professors no editors";
#elif L==2 // de
"Bearbeitbare von nicht bearbeitenden Lehrern";
#elif L==3 // en
"Editable by non-editing teachers";
#elif L==4 // es
"Editables por profesores no editores";
#elif L==5 // fr
"&Eacute;ditables par des enseignants non-&eacute;diteurs";
#elif L==6 // gn
"Omohendakuaa mbo'eh&aacute;ra ndaha'&eacute;iva edici&oacute;n";
#elif L==7 // it
"Modificabili da professori non-editing";
#elif L==8 // pl
"Edytowalne przez nauczycieli, kt&oacute;rzy nie dokonali edycji";
#elif L==9 // pt
"Edit&aacute;veis por professores n&atilde;o editores";
#elif L==10 // tr
"D&uuml;zenleme yapmayan &ouml;&gbreve;retmenler taraf&inodot;ndan d&uuml;zenlenebilir";
"Edit&ouml;r olmayan &ouml;&gbreve;retmenler yeni projeler olu&scedil;turabilir";
#endif
const char *Txt_eg_A_B =
@ -21415,7 +21392,7 @@ const char *Txt_MENU_TITLE[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
#elif L==5 // fr
"Plugins"
#elif L==6 // gn
"Complementos" // Okoteve traducción
"Complementos"
#elif L==7 // it
"Plugin"
#elif L==8 // pl
@ -32144,7 +32121,7 @@ const char *Txt_Plugins =
#elif L==5 // fr
"Plugins";
#elif L==6 // gn
"Complementos"; // Okoteve traducción
"Complementos";
#elif L==7 // it
"Plugin";
#elif L==8 // pl
@ -32152,7 +32129,7 @@ const char *Txt_Plugins =
#elif L==9 // pt
"Plugins";
#elif L==10 // tr
"Plugins"; // Çeviri lazim!
"Eklentiler";
#endif
const char *Txt_Possibly_duplicate_users =