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.h"
#include "swad_program_resource.h" #include "swad_program_resource.h"
#include "swad_project.h" #include "swad_project.h"
#include "swad_project_config.h"
#include "swad_project_resource.h" #include "swad_project_resource.h"
#include "swad_question_import.h" #include "swad_question_import.h"
#include "swad_QR.h" #include "swad_QR.h"

View File

@ -8293,9 +8293,10 @@ void Brw_ChgFileMetadata (void)
{ {
/***** Check if I can change file metadata *****/ /***** Check if I can change file metadata *****/
IAmTheOwner = Brw_CheckIfIAmOwnerOfFile (FileMetadata.PublisherUsrCod); IAmTheOwner = Brw_CheckIfIAmOwnerOfFile (FileMetadata.PublisherUsrCod);
if (Brw_CheckIfICanEditFileMetadata (IAmTheOwner)) if (!Brw_CheckIfICanEditFileMetadata (IAmTheOwner))
{ Err_NoPermissionExit ();
/* Check if the file was public before the edition */
/***** Check if the file was public before the edition *****/
PublicFileBeforeEdition = FileMetadata.IsPublic; PublicFileBeforeEdition = FileMetadata.IsPublic;
/***** Get the new file privacy and license from form *****/ /***** 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, Ale_ShowAlert (Ale_SUCCESS,Txt_The_properties_of_file_X_have_been_saved,
FileMetadata.FilFolLnk.Name); FileMetadata.FilFolLnk.Name);
} }
else
/***** Write error message and exit *****/
Err_NoPermissionExit ();
}
/***** Show again the file browser *****/ /***** Show again the file browser *****/
Brw_ShowAgainFileBrowserOrWorks (); 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. 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 CSS_FILE "swad22.88.css"
#define JS_FILE "swad22.49.js" #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.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.2: Apr 06, 2023 Code refactoring in resources. (338500 lines)
Version 22.92.1: Apr 06, 2023 Removed unused code in resources. (338514 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 *****/ /***** Get data of the course from database *****/
Crs_GetCourseDataByCod (Crs_EditingCrs); Crs_GetCourseDataByCod (Crs_EditingCrs);
if (!Crs_CheckIfICanEdit (Crs_EditingCrs))
Err_NoPermissionExit ();
if (Crs_CheckIfICanEdit (Crs_EditingCrs))
{
/***** Check if this course has users *****/ /***** Check if this course has users *****/
if (Enr_GetNumUsrsInCrss (HieLvl_CRS,Crs_EditingCrs->CrsCod, if (Enr_GetNumUsrsInCrss (HieLvl_CRS,Crs_EditingCrs->CrsCod,
1 << Rol_STD | 1 << Rol_STD |
@ -1602,9 +1602,6 @@ void Crs_RemoveCourse (void)
Crs_EditingCrs->CrsCod = -1L; // To not showing button to go to course Crs_EditingCrs->CrsCod = -1L; // To not showing button to go to course
} }
} }
else
Err_NoPermissionExit ();
}
/*****************************************************************************/ /*****************************************************************************/
/********************* Get data of a course from its code ********************/ /********************* Get data of a course from its code ********************/
@ -1822,9 +1819,9 @@ void Crs_ChangeInsCrsCod (void)
/* Get data of the course */ /* Get data of the course */
Crs_GetCourseDataByCod (Crs_EditingCrs); Crs_GetCourseDataByCod (Crs_EditingCrs);
if (!Crs_CheckIfICanEdit (Crs_EditingCrs))
Err_NoPermissionExit ();
if (Crs_CheckIfICanEdit (Crs_EditingCrs))
{
/***** Change the institutional course code *****/ /***** Change the institutional course code *****/
if (strcmp (NewInstitutionalCrsCod,Crs_EditingCrs->InstitutionalCrsCod)) 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, Txt_The_institutional_code_of_the_course_X_has_not_changed,
Crs_EditingCrs->ShrtName); Crs_EditingCrs->ShrtName);
} }
else
Err_NoPermissionExit ();
}
/*****************************************************************************/ /*****************************************************************************/
/************************ Change the year of a course ************************/ /************************ Change the year of a course ************************/
@ -1867,10 +1861,11 @@ void Crs_ChangeCrsYear (void)
Par_GetParText ("OthCrsYear",YearStr,2); Par_GetParText ("OthCrsYear",YearStr,2);
NewYear = Deg_ConvStrToYear (YearStr); NewYear = Deg_ConvStrToYear (YearStr);
/* Get data of the course */
Crs_GetCourseDataByCod (Crs_EditingCrs); 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 (NewYear <= Deg_MAX_YEARS_PER_DEGREE) // If year is valid
{ {
/***** If name of course was in database in the new year... *****/ /***** 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, Txt_The_year_X_is_not_allowed,
NewYear); NewYear);
} }
else
Err_NoPermissionExit ();
}
/*****************************************************************************/ /*****************************************************************************/
/************* Change the institutional course code of a course **************/ /************* 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 *****/ /***** Get from the database the data of the degree *****/
Crs_GetCourseDataByCod (Crs); Crs_GetCourseDataByCod (Crs);
if (!Crs_CheckIfICanEdit (Crs))
Err_NoPermissionExit ();
if (Crs_CheckIfICanEdit (Crs))
{
/***** Check if new name is empty *****/ /***** Check if new name is empty *****/
if (NewCrsName[0]) if (NewCrsName[0])
{ {
@ -2032,9 +2024,6 @@ void Crs_RenameCourse (struct Crs_Course *Crs,Cns_ShrtOrFullName_t ShrtOrFullNam
else else
Ale_CreateAlertYouCanNotLeaveFieldEmpty (); Ale_CreateAlertYouCanNotLeaveFieldEmpty ();
} }
else
Err_NoPermissionExit ();
}
/*****************************************************************************/ /*****************************************************************************/
/*********************** Change the status of a course ***********************/ /*********************** Change the status of a course ***********************/

View File

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

View File

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

View File

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

View File

@ -47,12 +47,29 @@ extern struct Globals Gbl;
/***************************** Private prototypes ****************************/ /***************************** 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, static void PrjCfg_GetConfigDataFromRow (MYSQL_RES *mysql_res,
struct Prj_Projects *Projects); 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? **********************/ /************************ Can I configure all projects? **********************/
@ -81,10 +98,7 @@ void PrjCfg_ShowFormConfig (void)
struct Prj_Projects Projects; struct Prj_Projects Projects;
/***** Reset projects *****/ /***** Reset projects *****/
Prj_ResetProjects (&Projects); Prj_ResetPrjsAndReadConfig (&Projects);
/***** Read projects configuration from database *****/
PrjCfg_GetCrsPrjsConfig (&Projects);
/***** Begin box *****/ /***** Begin box *****/
Box_BoxBegin (NULL,Txt_Configure_projects, Box_BoxBegin (NULL,Txt_Configure_projects,
@ -97,7 +111,7 @@ void PrjCfg_ShowFormConfig (void)
HTM_TABLE_BeginCenterPadding (2); HTM_TABLE_BeginCenterPadding (2);
/***** Projects are editable by non-editing teachers? *****/ /***** Projects are editable by non-editing teachers? *****/
PrjCfg_ShowFormConfigEditableByNET (&Projects); PrjCfg_ShowFormNETCanCreate (&Projects);
HTM_TABLE_End (); 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_Create_project;
extern const char *Txt_Editable_by_non_editing_teachers; extern const char *Txt_Non_editing_teachers_can_create_new_projects;
HTM_TR_Begin (NULL); HTM_TR_Begin (NULL);
/***** Label *****/ /***** 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 *****/ /***** Data *****/
HTM_TD_Begin ("class=\"LT\""); HTM_TD_Begin ("class=\"LT\"");
HTM_INPUT_CHECKBOX ("Editable",HTM_DONT_SUBMIT_ON_CHANGE, HTM_LABEL_Begin ("class=\"DAT_%s\"",
"id=\"Editable\" value=\"Y\"%s", The_GetSuffix ());
Projects->Config.Editable ? " checked=\"checked\"" : 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_TD_End ();
HTM_TR_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 *************/ /************ Get configuration values from a database table row *************/
/*****************************************************************************/ /*****************************************************************************/
@ -167,8 +169,8 @@ static void PrjCfg_GetConfigDataFromRow (MYSQL_RES *mysql_res,
/***** Get row *****/ /***** Get row *****/
row = mysql_fetch_row (mysql_res); row = mysql_fetch_row (mysql_res);
/***** Get whether project are visible via plugins or not *****/ /***** Get whether non-editing teachers can create new projects or not *****/
Projects->Config.Editable = (row[0][0] == 'Y'); Projects->Config.NETCanCreate = (row[0][0] == 'Y');
} }
/*****************************************************************************/ /*****************************************************************************/
@ -181,13 +183,13 @@ void PrjCfg_ReceiveConfig (void)
struct Prj_Projects Projects; struct Prj_Projects Projects;
/***** Reset projects *****/ /***** Reset projects *****/
Prj_ResetProjects (&Projects); Prj_ResetPrjsAndReadConfig (&Projects);
/***** Get whether projects are editable by non-editing teachers or not *****/ /***** Get non-editing teachers can create new projects or not *****/
Projects.Config.Editable = PrjCfg_GetEditableFromForm (); Projects.Config.NETCanCreate = PrjCfg_GetIfNETCanCreateFromForm ();
/***** Update database *****/ /***** Update database *****/
Prj_DB_UpdateCrsPrjsConfig (Projects.Config.Editable); Prj_DB_UpdateCrsPrjsConfig (Projects.Config.NETCanCreate);
/***** Show confirmation message *****/ /***** Show confirmation message *****/
Ale_ShowAlert (Ale_SUCCESS,Txt_The_configuration_of_the_projects_has_been_updated); 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 *****/ /***** Configuration *****/
#define PrjCfg_EDITABLE_DEFAULT true #define PrjCfg_NET_CAN_CREATE_DEFAULT true
/*****************************************************************************/ /*****************************************************************************/
/***************************** Public prototypes *****************************/ /***************************** Public prototypes *****************************/
/*****************************************************************************/ /*****************************************************************************/
bool PrjCfg_CheckIfICanConfig (void); void PrjCfg_GetConfig (struct Prj_Projects *Projects);
bool PrjCfg_CheckIfICanConfig (void);
void PrjCfg_ShowFormConfig (void); void PrjCfg_ShowFormConfig (void);
void PrjCfg_ReceiveConfig (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 *************/ /************** 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) 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] "SELECT Editable" // row[0]
" FROM prj_config" " FROM prj_config"
" WHERE CrsCod=%ld", " 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, unsigned Prj_DB_GetListProjects (MYSQL_RES **mysql_res,
const struct Prj_Projects *Projects, const struct Prj_Projects *Projects,
const char *UsrsSubQuery); // NULL if no users 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); unsigned Prj_DB_GetProjectDataByCod (MYSQL_RES **mysql_res,long PrjCod);
void Prj_DB_GetProjectTitle (long PrjCod,char *Title,size_t TitleSize); void Prj_DB_GetProjectTitle (long PrjCod,char *Title,size_t TitleSize);
unsigned Prj_DB_GetPrjDataToCheckFaults (MYSQL_RES **mysql_res,long PrjCod); 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]; char Title[Prj_MAX_BYTES_TITLE + 1];
/***** Reset projects *****/ /***** Reset projects *****/
Prj_ResetProjects (&Projects); Prj_ResetPrjsAndReadConfig (&Projects);
/***** Get parameters *****/ /***** Get parameters *****/
Prj_GetPars (&Projects); Prj_GetPars (&Projects);

View File

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

View File

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

View File

@ -2212,13 +2212,13 @@ void TstPrn_ShowOnePrint (void)
/***** Get test data *****/ /***** Get test data *****/
TstPrn_GetPrintDataByPrnCod (&Print); 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) if (Gbl.Usrs.Me.Role.Logged == Rol_STD)
TstCfg_GetConfig (); // To get visibility TstCfg_GetConfig (); // To get visibility
TstRes_CheckIfICanSeePrintResult (&Print,Gbl.Usrs.Other.UsrDat.UsrCod,&ICanView); 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 *****/ /***** Get questions and user's answers of the test from database *****/
if (!TstPrn_GetPrintQuestionsFromDB (&Print)) if (!TstPrn_GetPrintQuestionsFromDB (&Print))
Err_WrongExamExit (); Err_WrongExamExit ();
@ -2397,9 +2397,6 @@ void TstPrn_ShowOnePrint (void)
/***** End box *****/ /***** End box *****/
Box_BoxEnd (); Box_BoxEnd ();
} }
else // I am not allowed to view this test
Err_NoPermissionExit ();
}
/*****************************************************************************/ /*****************************************************************************/
/****************** Get if I can see print result and score ******************/ /****************** 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! "Edit rich text"; // Çeviri lazim!
#endif #endif
const char *Txt_Editable = const char *Txt_Non_editing_teachers_can_create_new_projects =
#if L==1 // ca #if L==1 // ca
"Editables"; "Els professors no editors poden crear nous projectes";
#elif L==2 // de #elif L==2 // de
"Bearbeitbare"; "Nicht bearbeitende Lehrern k&ouml;nnen neue Projekte erstellen";
#elif L==3 // en #elif L==3 // en
"Editable"; "Non-editing teachers can create new projects";
#elif L==4 // es #elif L==4 // es
"Editables"; "Los profesores no editores pueden crear nuevos proyectos";
#elif L==5 // fr #elif L==5 // fr
"&Eacute;ditables"; "Les enseignants non &eacute;diteurs peuvent cr&eacute;er de nouveaux projets";
#elif L==6 // gn #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 #elif L==7 // it
"Modificabili"; "Gli insegnanti non editori possono creare nuovi progetti";
#elif L==8 // pl #elif L==8 // pl
"Edytowalne"; "Nauczyciele nieedytuj&aogon;cy mog&aogon; tworzy&cacute; nowe projekty";
#elif L==9 // pt #elif L==9 // pt
"Edit&aacute;veis"; "Professores n&atilde;o editores podem criar novos projetos";
#elif L==10 // tr #elif L==10 // tr
"D&uuml;zenlenebilir"; "Edit&ouml;r olmayan &ouml;&gbreve;retmenler yeni projeler olu&scedil;turabilir";
#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";
#endif #endif
const char *Txt_eg_A_B = 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 #elif L==5 // fr
"Plugins" "Plugins"
#elif L==6 // gn #elif L==6 // gn
"Complementos" // Okoteve traducción "Complementos"
#elif L==7 // it #elif L==7 // it
"Plugin" "Plugin"
#elif L==8 // pl #elif L==8 // pl
@ -32144,7 +32121,7 @@ const char *Txt_Plugins =
#elif L==5 // fr #elif L==5 // fr
"Plugins"; "Plugins";
#elif L==6 // gn #elif L==6 // gn
"Complementos"; // Okoteve traducción "Complementos";
#elif L==7 // it #elif L==7 // it
"Plugin"; "Plugin";
#elif L==8 // pl #elif L==8 // pl
@ -32152,7 +32129,7 @@ const char *Txt_Plugins =
#elif L==9 // pt #elif L==9 // pt
"Plugins"; "Plugins";
#elif L==10 // tr #elif L==10 // tr
"Plugins"; // Çeviri lazim! "Eklentiler";
#endif #endif
const char *Txt_Possibly_duplicate_users = const char *Txt_Possibly_duplicate_users =