From 9eac8bf86df3c48fe178e808121132fbba055d89 Mon Sep 17 00:00:00 2001 From: acanas Date: Sat, 1 Apr 2023 01:01:12 +0200 Subject: [PATCH] Version 22.89: Apr 01, 2023 New module swad_project_config for projects configuration. --- Makefile | 3 +- swad_action_list.c | 4 +- swad_action_list.h | 8 +- swad_changelog.h | 3 +- swad_project.c | 162 ++------------------------------- swad_project.h | 8 +- swad_project_config.c | 192 ++++++++++++++++++++++++++++++++++++++++ swad_project_config.h | 46 ++++++++++ swad_project_database.h | 1 + swad_text_action.c | 108 +++++++++++----------- 10 files changed, 317 insertions(+), 218 deletions(-) create mode 100644 swad_project_config.c create mode 100644 swad_project_config.h diff --git a/Makefile b/Makefile index 7a24ddce..9ab35b7e 100644 --- a/Makefile +++ b/Makefile @@ -79,7 +79,8 @@ OBJS = swad_account.o swad_account_database.o swad_action.o swad_action_list.o \ swad_place_database.o swad_plugin.o swad_plugin_database.o \ swad_privacy.o swad_process.o swad_profile.o swad_profile_database.o \ swad_program.o swad_program_database.o swad_program_resource.o \ - swad_project.o swad_project_database.o swad_project_resource.o \ + swad_project.o swad_project_config.o swad_project_database.o \ + swad_project_resource.o \ swad_question.o swad_question_database.o swad_question_import.o \ swad_QR.o \ swad_record.o swad_record_database.o swad_report.o \ diff --git a/swad_action_list.c b/swad_action_list.c index 7bccfc79..76679189 100644 --- a/swad_action_list.c +++ b/swad_action_list.c @@ -613,10 +613,10 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] = [ActUnhAsg ] = { 965,-1,TabUnk,ActSeeAsg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Asg_UnhideAssignment ,NULL}, [ActReqLnkAsg ] = {1943,-1,TabUnk,ActSeeAsg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,AsgRsc_GetLinkToAssignment ,NULL}, + [ActCfgPrj ] = {1803,-1,TabUnk,ActSeePrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,PrjCfg_ShowFormConfig ,NULL}, + [ActRcvCfgPrj ] = {1804,-1,TabUnk,ActSeePrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,PrjCfg_ReceiveConfig ,NULL}, [ActReqUsrPrj ] = {1805,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ListUsrsToSelect ,NULL}, [ActSeeTblAllPrj ] = {1696,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,NULL ,Prj_ShowTableSelectedPrjs ,NULL}, - [ActCfgPrj ] = {1803,-1,TabUnk,ActSeePrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ShowFormConfig ,NULL}, - [ActRcvCfgPrj ] = {1804,-1,TabUnk,ActSeePrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReceiveConfigPrj ,NULL}, [ActReqLckAllPrj ] = {1775,-1,TabUnk,ActSeePrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReqLockSelectedPrjsEdition ,NULL}, [ActReqUnlAllPrj ] = {1776,-1,TabUnk,ActSeePrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReqUnloSelectedPrjsEdition ,NULL}, [ActLckAllPrj ] = {1777,-1,TabUnk,ActSeePrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_LockSelectedPrjsEdition ,NULL}, diff --git a/swad_action_list.h b/swad_action_list.h index 34c1dd13..50aeae7f 100644 --- a/swad_action_list.h +++ b/swad_action_list.h @@ -540,10 +540,10 @@ #define ActUnhAsg (ActChgCrsTT1stDay + 18) #define ActReqLnkAsg (ActChgCrsTT1stDay + 19) -#define ActReqUsrPrj (ActChgCrsTT1stDay + 20) -#define ActSeeTblAllPrj (ActChgCrsTT1stDay + 21) -#define ActCfgPrj (ActChgCrsTT1stDay + 22) -#define ActRcvCfgPrj (ActChgCrsTT1stDay + 23) +#define ActCfgPrj (ActChgCrsTT1stDay + 20) +#define ActRcvCfgPrj (ActChgCrsTT1stDay + 21) +#define ActReqUsrPrj (ActChgCrsTT1stDay + 22) +#define ActSeeTblAllPrj (ActChgCrsTT1stDay + 23) #define ActReqLckAllPrj (ActChgCrsTT1stDay + 24) #define ActReqUnlAllPrj (ActChgCrsTT1stDay + 25) #define ActLckAllPrj (ActChgCrsTT1stDay + 26) diff --git a/swad_changelog.h b/swad_changelog.h index 29d5e222..dc98ddad 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -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.88 (2023-03-31)" +#define Log_PLATFORM_VERSION "SWAD 22.89 (2023-04-01)" #define CSS_FILE "swad22.88.css" #define JS_FILE "swad22.49.js" /* + Version 22.89: Apr 01, 2023 New module swad_project_config for projects configuration. (338613 lines) Version 22.88: Mar 31, 2023 Code refactoring in resources. (338538 lines) Version 22.87.1: Mar 31, 2023 Some messages translated. (338610 lines) Version 22.87: Mar 30, 2023 Code refactoring in select forms. (338607 lines) diff --git a/swad_project.c b/swad_project.c index db0c0df9..1b0a1c32 100644 --- a/swad_project.c +++ b/swad_project.c @@ -52,6 +52,7 @@ #include "swad_photo.h" #include "swad_program_resource.h" #include "swad_project.h" +#include "swad_project_config.h" #include "swad_project_database.h" #include "swad_role.h" #include "swad_setting.h" @@ -196,7 +197,6 @@ 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 void Prj_PutIconsListProjects (void *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); @@ -295,11 +295,6 @@ static void Prj_EditOneProjectTxtArea (const char *Id, static void Prj_CreateProject (struct Prj_Project *Prj); static void Prj_UpdateProject (struct Prj_Project *Prj); -static bool Prj_CheckIfICanConfigAllProjects (void); -static void Prj_GetCrsPrjsConfig (struct Prj_Projects *Projects); -static void Prj_GetConfigDataFromRow (MYSQL_RES *mysql_res, - struct Prj_Projects *Projects); -static bool Prj_GetEditableFromForm (void); static void Prj_PutIconsToLockUnlockAllProjects (struct Prj_Projects *Projects); static void Prj_FormLockUnlock (const struct Prj_Project *Prj); @@ -328,7 +323,7 @@ long Prj_GetPrjCod (void) void Prj_ResetProjects (struct Prj_Projects *Projects) { - Projects->Config.Editable = Prj_EDITABLE_DEFAULT; + Projects->Config.Editable = PrjCfg_EDITABLE_DEFAULT; Projects->Filter.Who = Prj_FILTER_WHO_DEFAULT; Projects->Filter.Assign = Prj_FILTER_ASSIGNED_DEFAULT | Prj_FILTER_NONASSIG_DEFAULT; @@ -1239,13 +1234,13 @@ static bool Prj_CheckIfICanCreateProjects (void) /***************** Put contextual icons in list of projects ******************/ /*****************************************************************************/ -static void Prj_PutIconsListProjects (void *Projects) +void Prj_PutIconsListProjects (void *Projects) { bool ICanConfigAllProjects; if (Projects) { - ICanConfigAllProjects = Prj_CheckIfICanConfigAllProjects (); + ICanConfigAllProjects = PrjCfg_CheckIfICanConfig (); /***** Put icon to create a new project *****/ if (Prj_CheckIfICanCreateProjects ()) @@ -3206,7 +3201,7 @@ static void Prj_PutIconsToRemEditOnePrj (struct Prj_Projects *Projects, Prj_PutCurrentPars,Projects); /***** Locked/unlocked project edition *****/ - if (Prj_CheckIfICanConfigAllProjects ()) + if (PrjCfg_CheckIfICanConfig ()) { /* Icon to lock/unlock project edition */ HTM_DIV_Begin ("id=\"prj_lck_%ld\" class=\"PRJ_LOCK\"", @@ -4150,145 +4145,6 @@ static void Prj_UpdateProject (struct Prj_Project *Prj) Prj_DB_UpdateProject (Prj); } -/*****************************************************************************/ -/************************ Can I configure all projects? **********************/ -/*****************************************************************************/ - -static bool Prj_CheckIfICanConfigAllProjects (void) - { - static const bool ICanConfigAllProjects[Rol_NUM_ROLES] = - { - [Rol_TCH ] = true, - [Rol_SYS_ADM] = true, - }; - - return ICanConfigAllProjects[Gbl.Usrs.Me.Role.Logged]; - } - -/*****************************************************************************/ -/********************** Configuration of all projects ************************/ -/*****************************************************************************/ - -void Prj_ShowFormConfig (void) - { - extern const char *Hlp_ASSESSMENT_Projects; - extern const char *Txt_Configure_projects; - extern const char *Txt_Editable; - extern const char *Txt_Editable_by_non_editing_teachers; - extern const char *Txt_Save_changes; - struct Prj_Projects Projects; - - /***** Reset projects *****/ - Prj_ResetProjects (&Projects); - - /***** Read projects configuration from database *****/ - Prj_GetCrsPrjsConfig (&Projects); - - /***** Begin box *****/ - Box_BoxBegin (NULL,Txt_Configure_projects, - Prj_PutIconsListProjects,&Projects, - Hlp_ASSESSMENT_Projects,Box_NOT_CLOSABLE); - - /***** Begin form *****/ - Frm_BeginForm (ActRcvCfgPrj); - - /***** Projects are editable by non-editing teachers? *****/ - HTM_TABLE_BeginCenterPadding (2); - HTM_TR_Begin (NULL); - - /* Label */ - Frm_LabelColumn ("RT","Editable",Txt_Editable); - - /* 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_Txt (Txt_Editable_by_non_editing_teachers); - HTM_TD_End (); - - HTM_TR_End (); - HTM_TABLE_End (); - - /***** Send button *****/ - Btn_PutConfirmButton (Txt_Save_changes); - - /***** End form *****/ - Frm_EndForm (); - - /***** End box *****/ - Box_BoxEnd (); - } - -/*****************************************************************************/ -/************** Get configuration of projects for current course *************/ -/*****************************************************************************/ - -static void Prj_GetCrsPrjsConfig (struct Prj_Projects *Projects) - { - MYSQL_RES *mysql_res; - - /***** Get configuration of projects for current course from database *****/ - if (Prj_DB_GetCrsPrjsConfig (&mysql_res)) - Prj_GetConfigDataFromRow (mysql_res,Projects); - else - Projects->Config.Editable = Prj_EDITABLE_DEFAULT; - - /***** Free structure that stores the query result *****/ - DB_FreeMySQLResult (&mysql_res); - } - -/*****************************************************************************/ -/************ Get configuration values from a database table row *************/ -/*****************************************************************************/ - -static void Prj_GetConfigDataFromRow (MYSQL_RES *mysql_res, - struct Prj_Projects *Projects) - { - MYSQL_ROW row; - - /***** Get row *****/ - row = mysql_fetch_row (mysql_res); - - /***** Get whether project are visible via plugins or not *****/ - Projects->Config.Editable = (row[0][0] == 'Y'); - } - -/*****************************************************************************/ -/************ Receive configuration of projects for current course ***********/ -/*****************************************************************************/ - -void Prj_ReceiveConfigPrj (void) - { - extern const char *Txt_The_configuration_of_the_projects_has_been_updated; - struct Prj_Projects Projects; - - /***** Reset projects *****/ - Prj_ResetProjects (&Projects); - - /***** Get whether projects are editable by non-editing teachers or not *****/ - Projects.Config.Editable = Prj_GetEditableFromForm (); - - /***** Update database *****/ - Prj_DB_UpdateCrsPrjsConfig (Projects.Config.Editable); - - /***** Show confirmation message *****/ - Ale_ShowAlert (Ale_SUCCESS,Txt_The_configuration_of_the_projects_has_been_updated); - - /***** Show again the form to configure projects *****/ - Prj_ShowFormConfig (); - } - -/*****************************************************************************/ -/****** Get if projects are editable by non-editing teachers from form *******/ -/*****************************************************************************/ - -static bool Prj_GetEditableFromForm (void) - { - return Par_GetParBool ("Editable"); - } - /*****************************************************************************/ /****** Put icons to request locking/unlocking edition of all projects *******/ /*****************************************************************************/ @@ -4324,7 +4180,7 @@ void Prj_ReqLockSelectedPrjsEdition (void) Prj_GetPars (&Projects); /***** Show question and button to lock all selected projects *****/ - if (Prj_CheckIfICanConfigAllProjects ()) + if (PrjCfg_CheckIfICanConfig ()) { /* Get list of projects */ Prj_GetListProjects (&Projects); @@ -4363,7 +4219,7 @@ void Prj_ReqUnloSelectedPrjsEdition (void) Prj_GetPars (&Projects); /***** Show question and button to unlock all selected projects *****/ - if (Prj_CheckIfICanConfigAllProjects ()) + if (PrjCfg_CheckIfICanConfig ()) { /* Get list of projects */ Prj_GetListProjects (&Projects); @@ -4405,7 +4261,7 @@ void Prj_LockSelectedPrjsEdition (void) Prj_GetPars (&Projects); /***** Lock all selected projects *****/ - if (Prj_CheckIfICanConfigAllProjects ()) + if (PrjCfg_CheckIfICanConfig ()) { /* Get list of projects */ Prj_GetListProjects (&Projects); @@ -4442,7 +4298,7 @@ void Prj_UnloSelectedPrjsEdition (void) Prj_GetPars (&Projects); /***** Unlock all selected projects *****/ - if (Prj_CheckIfICanConfigAllProjects ()) + if (PrjCfg_CheckIfICanConfig ()) { /* Get list of projects */ Prj_GetListProjects (&Projects); diff --git a/swad_project.h b/swad_project.h index 040cf617..3155d04b 100644 --- a/swad_project.h +++ b/swad_project.h @@ -37,7 +37,7 @@ /*****************************************************************************/ /***** Configuration *****/ -#define Prj_EDITABLE_DEFAULT true +#define PrjCfg_EDITABLE_DEFAULT true /***** Filters to list projects *****/ /* Whose projects */ @@ -222,6 +222,8 @@ void Prj_PutPars (struct Prj_Filter *Filter, long PrjCod); void Prj_GetPars (struct Prj_Projects *Projects); +void Prj_PutIconsListProjects (void *Projects); + void Prj_ShowOneProject (void); void Prj_ShowOneProjectWithFileBrowser (struct Prj_Projects *Projects); @@ -262,8 +264,8 @@ void Prj_UnhideProject (void); void Prj_ReceiveFormProject (void); -void Prj_ShowFormConfig (void); -void Prj_ReceiveConfigPrj (void); +void PrjCfg_ShowFormConfig (void); +void PrjCfg_ReceiveConfig (void); void Prj_ReqLockSelectedPrjsEdition (void); void Prj_ReqUnloSelectedPrjsEdition (void); void Prj_LockSelectedPrjsEdition (void); diff --git a/swad_project_config.c b/swad_project_config.c new file mode 100644 index 00000000..7a2328ae --- /dev/null +++ b/swad_project_config.c @@ -0,0 +1,192 @@ +// swad_project_config.c: projects configuration +/* + SWAD (Shared Workspace At a Distance), + is a web platform developed at the University of Granada (Spain), + and used to support university teaching. + + This file is part of SWAD core. + Copyright (C) 1999-2023 Antonio Cañas Vargas + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +/*****************************************************************************/ +/********************************* Headers ***********************************/ +/*****************************************************************************/ + +#include // For boolean type + +#include "swad_action_list.h" +#include "swad_alert.h" +#include "swad_box.h" +#include "swad_database.h" +#include "swad_form.h" +#include "swad_global.h" +#include "swad_parameter.h" +#include "swad_project.h" +#include "swad_project_config.h" +#include "swad_project_database.h" + +/*****************************************************************************/ +/************** External global variables from others modules ****************/ +/*****************************************************************************/ + +extern struct Globals Gbl; + +/*****************************************************************************/ +/***************************** Private prototypes ****************************/ +/*****************************************************************************/ + +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); + +/*****************************************************************************/ +/************************ Can I configure all projects? **********************/ +/*****************************************************************************/ + +bool PrjCfg_CheckIfICanConfig (void) + { + static const bool ICanConfigAllProjects[Rol_NUM_ROLES] = + { + [Rol_TCH ] = true, + [Rol_SYS_ADM] = true, + }; + + return ICanConfigAllProjects[Gbl.Usrs.Me.Role.Logged]; + } + +/*****************************************************************************/ +/********************** Configuration of all projects ************************/ +/*****************************************************************************/ + +void PrjCfg_ShowFormConfig (void) + { + extern const char *Hlp_ASSESSMENT_Projects; + extern const char *Txt_Configure_projects; + extern const char *Txt_Editable; + extern const char *Txt_Editable_by_non_editing_teachers; + extern const char *Txt_Save_changes; + struct Prj_Projects Projects; + + /***** Reset projects *****/ + Prj_ResetProjects (&Projects); + + /***** Read projects configuration from database *****/ + PrjCfg_GetCrsPrjsConfig (&Projects); + + /***** Begin box *****/ + Box_BoxBegin (NULL,Txt_Configure_projects, + Prj_PutIconsListProjects,&Projects, + Hlp_ASSESSMENT_Projects,Box_NOT_CLOSABLE); + + /***** Begin form *****/ + Frm_BeginForm (ActRcvCfgPrj); + + /***** Projects are editable by non-editing teachers? *****/ + HTM_TABLE_BeginCenterPadding (2); + HTM_TR_Begin (NULL); + + /* Label */ + Frm_LabelColumn ("RT","Editable",Txt_Editable); + + /* 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_Txt (Txt_Editable_by_non_editing_teachers); + HTM_TD_End (); + + HTM_TR_End (); + HTM_TABLE_End (); + + /***** Send button *****/ + Btn_PutConfirmButton (Txt_Save_changes); + + /***** End form *****/ + Frm_EndForm (); + + /***** End box *****/ + Box_BoxEnd (); + } + +/*****************************************************************************/ +/************** 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 *************/ +/*****************************************************************************/ + +static void PrjCfg_GetConfigDataFromRow (MYSQL_RES *mysql_res, + struct Prj_Projects *Projects) + { + MYSQL_ROW row; + + /***** Get row *****/ + row = mysql_fetch_row (mysql_res); + + /***** Get whether project are visible via plugins or not *****/ + Projects->Config.Editable = (row[0][0] == 'Y'); + } + +/*****************************************************************************/ +/************ Receive configuration of projects for current course ***********/ +/*****************************************************************************/ + +void PrjCfg_ReceiveConfig (void) + { + extern const char *Txt_The_configuration_of_the_projects_has_been_updated; + struct Prj_Projects Projects; + + /***** Reset projects *****/ + Prj_ResetProjects (&Projects); + + /***** Get whether projects are editable by non-editing teachers or not *****/ + Projects.Config.Editable = PrjCfg_GetEditableFromForm (); + + /***** Update database *****/ + Prj_DB_UpdateCrsPrjsConfig (Projects.Config.Editable); + + /***** Show confirmation message *****/ + Ale_ShowAlert (Ale_SUCCESS,Txt_The_configuration_of_the_projects_has_been_updated); + + /***** Show again the form to configure projects *****/ + PrjCfg_ShowFormConfig (); + } + +/*****************************************************************************/ +/****** Get if projects are editable by non-editing teachers from form *******/ +/*****************************************************************************/ + +static bool PrjCfg_GetEditableFromForm (void) + { + return Par_GetParBool ("Editable"); + } diff --git a/swad_project_config.h b/swad_project_config.h new file mode 100644 index 00000000..e7945dd3 --- /dev/null +++ b/swad_project_config.h @@ -0,0 +1,46 @@ +// swad_project_config.h: projects configuration + +#ifndef _SWAD_PRJ_CFG +#define _SWAD_PRJ_CFG +/* + SWAD (Shared Workspace At a Distance), + is a web platform developed at the University of Granada (Spain), + and used to support university teaching. + + This file is part of SWAD core. + Copyright (C) 1999-2023 Antonio Cañas Vargas + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +/*****************************************************************************/ +/********************************* Headers ***********************************/ +/*****************************************************************************/ + +/*****************************************************************************/ +/************************** Public types and constants ***********************/ +/*****************************************************************************/ + +/***** Configuration *****/ +#define PrjCfg_EDITABLE_DEFAULT true + +/*****************************************************************************/ +/***************************** Public prototypes *****************************/ +/*****************************************************************************/ + +bool PrjCfg_CheckIfICanConfig (void); + +void PrjCfg_ShowFormConfig (void); +void PrjCfg_ReceiveConfig (void); + +#endif diff --git a/swad_project_database.h b/swad_project_database.h index 3626b8d1..a11589d4 100644 --- a/swad_project_database.h +++ b/swad_project_database.h @@ -34,6 +34,7 @@ /*****************************************************************************/ void Prj_DB_UpdateCrsPrjsConfig (bool Editable); + void Prj_DB_LockProjectEdition (long PrjCod); void Prj_DB_UnlockProjectEdition (long PrjCod); long Prj_DB_CreateProject (const struct Prj_Project *Prj); diff --git a/swad_text_action.c b/swad_text_action.c index b68ae6c0..449adc06 100644 --- a/swad_text_action.c +++ b/swad_text_action.c @@ -9375,29 +9375,75 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] = "Copy link to assignment" // Precisa de tradução #elif L==10 // tr "Copy link to assignment" // Çeviri lazim! +#endif + , + [ActCfgPrj] = +#if L==1 // ca + "Configurar tots els projectes" +#elif L==2 // de + "Konfigurieren Sie alle Projekte" +#elif L==3 // en + "Configure all projects" +#elif L==4 // es + "Configurar todos los proyectos" +#elif L==5 // fr + "Configurer tous les projets" +#elif L==6 // gn + "Emohenda opaite tembiaporã" +#elif L==7 // it + "Configurare tutti i progetti" +#elif L==8 // pl + "Skonfigurować wszystkie projekty" +#elif L==9 // pt + "Configurar todos os projetos" +#elif L==10 // tr + "Tüm projeleri yapılandırın" +#endif + , + [ActRcvCfgPrj] = +#if L==1 // ca + "Canviar configuració de tots els projectes" +#elif L==2 // de + "Ändern Sie die Einstellungen für alle Projekte" +#elif L==3 // en + "Change configuration of all projects" +#elif L==4 // es + "Cambiar configuración de todos los proyectos" +#elif L==5 // fr + "Modifier la configuration de tous les projets" +#elif L==6 // gn + "Emoambue ñemboheko opaite tembiaporãme >ilde;uarã" +#elif L==7 // it + "Modificare la configurazione di tutti i progetti" +#elif L==8 // pl + "Zmień konfigurację wszystkich projektów" +#elif L==9 // pt + "Alterar a configuração de todos os projetos" +#elif L==10 // tr + "Tüm projelerin konfigürasyonunu değiştir" #endif , [ActReqUsrPrj] = #if L==1 // ca - "Select users to list their projects" // Necessita traducció + "Seleccionar usuaris per llistar els projectes" #elif L==2 // de - "Select users to list their projects" // Need Übersetzung + "Wählen Sie Benutzer aus, um ihre Projekte aufzulisten" #elif L==3 // en "Select users to list their projects" #elif L==4 // es "Seleccionar usuarios para listar sus proyectos" #elif L==5 // fr - "Select users to list their projects" // Besoin de traduction + "Sélectionner les utilisateurs pour lister leurs projets" #elif L==6 // gn - "Seleccionar usuarios para listar sus proyectos" // Okoteve traducción + "Eiporavo puruhára emoĩ ha>ilde;ua iproyectokuéra" #elif L==7 // it - "Select users to list their projects" // Bisogno di traduzione + "Seleziona gli utenti per elencare i loro progetti" #elif L==8 // pl - "Select users to list their projects" // Potrzebujesz tlumaczenie + "Wybierz użytkowników, aby wyświetlić listę ich projektów" #elif L==9 // pt - "Select users to list their projects" // Precisa de tradução + "Selecionar usuários para listar seus projetos" #elif L==10 // tr - "Select users to list their projects" // Çeviri lazim! + "Projelerini listelemek için kullanıcıları seçin" #endif , [ActSeeTblAllPrj] = @@ -9421,52 +9467,6 @@ const char *Txt_Actions[ActLst_NUM_ACTIONS] = "Show all projects in a table" // Precisa de tradução #elif L==10 // tr "Show all projects in a table" // Çeviri lazim! -#endif - , - [ActCfgPrj] = -#if L==1 // ca - "Configure all projects" // Necessita traducció -#elif L==2 // de - "Configure all projects" // Need Übersetzung -#elif L==3 // en - "Configure all projects" -#elif L==4 // es - "Configurar todos los proyectos" -#elif L==5 // fr - "Configure all projects" // Besoin de traduction -#elif L==6 // gn - "Configurar todos los proyectos" // Okoteve traducción -#elif L==7 // it - "Configure all projects" // Bisogno di traduzione -#elif L==8 // pl - "Configure all projects" // Potrzebujesz tlumaczenie -#elif L==9 // pt - "Configure all projects" // Precisa de tradução -#elif L==10 // tr - "Configure all projects" // Çeviri lazim! -#endif - , - [ActRcvCfgPrj] = -#if L==1 // ca - "Change configuration of all projects" // Necessita traducció -#elif L==2 // de - "Change configuration of all projects" // Need Übersetzung -#elif L==3 // en - "Change configuration of all projects" -#elif L==4 // es - "Cambiar configuración de todos los proyectos" -#elif L==5 // fr - "Change configuration of all projects" // Besoin de traduction -#elif L==6 // gn - "Cambiar configuración de todos los proyectos" // Okoteve traducción -#elif L==7 // it - "Change configuration of all projects" // Bisogno di traduzione -#elif L==8 // pl - "Change configuration of all projects" // Potrzebujesz tlumaczenie -#elif L==9 // pt - "Change configuration of all projects" // Precisa de tradução -#elif L==10 // tr - "Change configuration of all projects" // Çeviri lazim! #endif , [ActReqLckAllPrj] =