diff --git a/swad_changelog.h b/swad_changelog.h index d1a14fc0e..30c867eea 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -497,7 +497,7 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - * En OpenSWAD: ps2pdf source.ps destination.pdf */ -#define Log_PLATFORM_VERSION "SWAD 19.169.4 (2020-04-08)" +#define Log_PLATFORM_VERSION "SWAD 19.169.5 (2020-04-08)" #define CSS_FILE "swad19.146.css" #define JS_FILE "swad19.153.js" /* @@ -548,6 +548,7 @@ Funci // TODO: Oresti Baños: cambiar ojos por candados en descriptores para prohibir/permitir y dejar los ojos para poder elegir descriptores // TODO: Integrar pull requests con traducciones del alemán del usuario eruedin en GitHub + Version 19.169.5: Apr 08, 2020 Mark some parameters as unused (functions from O to R). (284854 lines) Version 19.169.4: Apr 08, 2020 Mark some parameters as unused (functions from I to N). (284903 lines) Version 19.169.3: Apr 08, 2020 Mark some parameters as unused (functions from D to I). (284929 lines) Version 19.169.2: Apr 08, 2020 Mark some parameters as unused (functions from A to C). (284969 lines) diff --git a/swad_file_browser.c b/swad_file_browser.c index 4a7c20fff..f0e40993f 100644 --- a/swad_file_browser.c +++ b/swad_file_browser.c @@ -3143,7 +3143,7 @@ static void Brw_ShowFileBrowserNormal (void) static void Brw_ShowFileBrowserProject (void) { extern const char *Hlp_ASSESSMENT_Projects; - struct Project Prj; + struct Prj_Project Prj; unsigned MyRolesInProject; /***** Allocate memory for the project *****/ @@ -6839,7 +6839,7 @@ static void Brw_WriteCurrentClipboard (void) struct Degree Deg; struct Course Crs; struct GroupData GrpDat; - struct Project Prj; + struct Prj_Project Prj; struct UsrData UsrDat; char TxtClipboardZone[1024 + Hie_MAX_BYTES_SHRT_NAME + diff --git a/swad_global.h b/swad_global.h index e00c0a466..6ddb58498 100644 --- a/swad_global.h +++ b/swad_global.h @@ -519,20 +519,7 @@ struct Globals char TmpDir[NAME_MAX + 1]; } ZIP; } FileBrowser; // Struct used for a file browser - struct - { - struct - { - bool Editable; - } Config; - struct Prj_Filter Filter; - bool LstIsRead; // Is the list already read from database, or it needs to be read? - unsigned Num; // Number of projects - long *LstPrjCods; // List of project codes - Prj_Order_t SelectedOrder; - unsigned CurrentPage; - long PrjCod; // Current project - } Prjs; + struct Prj_Projects Prjs; struct { Usr_Who_t Who; diff --git a/swad_password.c b/swad_password.c index 066e12c20..67d16ffe6 100644 --- a/swad_password.c +++ b/swad_password.c @@ -74,7 +74,7 @@ const char *Pwd_PASSWORD_SECTION_ID = "password_section"; static void Pwd_CheckAndUpdateNewPwd (struct UsrData *UsrDat); -static void Pwd_PutLinkToSendNewPasswdParams (void *Args); +static void Pwd_PutLinkToSendNewPasswdParams (void *UsrIdLogin); static void Pwd_CreateANewPassword (char PlainPassword[Pwd_MAX_BYTES_PLAIN_PASSWORD + 1]); @@ -248,15 +248,15 @@ void Pwd_PutLinkToSendNewPasswd (void) extern const char *Txt_Forgotten_password; Lay_PutContextualLinkIconText (ActReqSndNewPwd,NULL, - Pwd_PutLinkToSendNewPasswdParams,&Gbl, + Pwd_PutLinkToSendNewPasswdParams,Gbl.Usrs.Me.UsrIdLogin, "key.svg", Txt_Forgotten_password); } -static void Pwd_PutLinkToSendNewPasswdParams (void *Args) +static void Pwd_PutLinkToSendNewPasswdParams (void *UsrIdLogin) { - if (Args) - Par_PutHiddenParamString (NULL,"UsrId",Gbl.Usrs.Me.UsrIdLogin); + if (UsrIdLogin) + Par_PutHiddenParamString (NULL,"UsrId",(char *) Gbl.Usrs.Me.UsrIdLogin); } /*****************************************************************************/ diff --git a/swad_photo.c b/swad_photo.c index cc6138563..a9c838d05 100644 --- a/swad_photo.c +++ b/swad_photo.c @@ -91,8 +91,8 @@ static const char *Pho_StrAvgPhotoPrograms[Pho_NUM_AVERAGE_PHOTO_TYPES] = /***************************** Private prototypes ****************************/ /*****************************************************************************/ -static void Pho_PutIconToRequestRemoveMyPhoto (void *Args); -static void Pho_PutIconToRequestRemoveOtherUsrPhoto (void *Args); +static void Pho_PutIconToRequestRemoveMyPhoto (__attribute__((unused)) void *Args); +static void Pho_PutIconToRequestRemoveOtherUsrPhoto (__attribute__((unused)) void *Args); static void Pho_ReqOtherUsrPhoto (void); static void Pho_ReqPhoto (const struct UsrData *UsrDat); @@ -116,8 +116,8 @@ static Pho_HowComputePhotoSize_t Pho_GetHowComputePhotoSizeFromForm (void); static void Pho_PutSelectorForHowOrderDegrees (void); static Pho_HowOrderDegrees_t Pho_GetHowOrderDegreesFromForm (void); -static void Pho_PutIconToPrintDegreeStats (void *Args); -static void Pho_PutLinkToPrintViewOfDegreeStatsParams (void *Args); +static void Pho_PutIconToPrintDegreeStats (__attribute__((unused)) void *Args); +static void Pho_PutLinkToPrintViewOfDegreeStatsParams (__attribute__((unused)) void *Args); static void Pho_PutLinkToCalculateDegreeStats (void); static void Pho_GetMaxStdsPerDegree (void); @@ -218,54 +218,50 @@ void Pho_PutIconToChangeUsrPhoto (void) /************** Put a link to request the removal of my photo ****************/ /*****************************************************************************/ -static void Pho_PutIconToRequestRemoveMyPhoto (void *Args) +static void Pho_PutIconToRequestRemoveMyPhoto (__attribute__((unused)) void *Args) { extern const char *Txt_Remove_photo; - if (Args) - /***** Link to request the removal of my photo *****/ - if (Gbl.Usrs.Me.MyPhotoExists) - Lay_PutContextualLinkOnlyIcon (ActReqRemMyPho,NULL, - NULL,NULL, - "trash.svg", - Txt_Remove_photo); + /***** Link to request the removal of my photo *****/ + if (Gbl.Usrs.Me.MyPhotoExists) + Lay_PutContextualLinkOnlyIcon (ActReqRemMyPho,NULL, + NULL,NULL, + "trash.svg", + Txt_Remove_photo); } /*****************************************************************************/ /********** Put a link to request the removal of a user's photo **************/ /*****************************************************************************/ -static void Pho_PutIconToRequestRemoveOtherUsrPhoto (void *Args) +static void Pho_PutIconToRequestRemoveOtherUsrPhoto (__attribute__((unused)) void *Args) { extern const char *Txt_Remove_photo; char PhotoURL[PATH_MAX + 1]; bool PhotoExists; Act_Action_t NextAction; - if (Args) + /***** Link to request the removal of another user's photo *****/ + PhotoExists = Pho_BuildLinkToPhoto (&Gbl.Usrs.Other.UsrDat,PhotoURL); + if (PhotoExists) { - /***** Link to request the removal of another user's photo *****/ - PhotoExists = Pho_BuildLinkToPhoto (&Gbl.Usrs.Other.UsrDat,PhotoURL); - if (PhotoExists) + switch (Gbl.Usrs.Other.UsrDat.Roles.InCurrentCrs.Role) { - switch (Gbl.Usrs.Other.UsrDat.Roles.InCurrentCrs.Role) - { - case Rol_STD: - NextAction = ActReqRemStdPho; - break; - case Rol_NET: - case Rol_TCH: - NextAction = ActReqRemTchPho; - break; - default: // Guest, user or admin - NextAction = ActReqRemOthPho; - break; - } - Lay_PutContextualLinkOnlyIcon (NextAction,NULL, - Usr_PutParamOtherUsrCodEncrypted,Gbl.Usrs.Other.UsrDat.EncryptedUsrCod, - "trash.svg", - Txt_Remove_photo); + case Rol_STD: + NextAction = ActReqRemStdPho; + break; + case Rol_NET: + case Rol_TCH: + NextAction = ActReqRemTchPho; + break; + default: // Guest, user or admin + NextAction = ActReqRemOthPho; + break; } + Lay_PutContextualLinkOnlyIcon (NextAction,NULL, + Usr_PutParamOtherUsrCodEncrypted,Gbl.Usrs.Other.UsrDat.EncryptedUsrCod, + "trash.svg", + Txt_Remove_photo); } } @@ -313,7 +309,7 @@ static void Pho_ReqPhoto (const struct UsrData *UsrDat) /***** Begin box *****/ Box_BoxBegin (NULL,Txt_Photo, ItsMe ? Pho_PutIconToRequestRemoveMyPhoto : - Pho_PutIconToRequestRemoveOtherUsrPhoto,&Gbl, + Pho_PutIconToRequestRemoveOtherUsrPhoto,NULL, Hlp_PROFILE_Photo,Box_NOT_CLOSABLE); /***** Begin form *****/ @@ -1731,7 +1727,7 @@ void Pho_ShowOrPrintPhotoDegree (Pho_AvgPhotoSeeOrPrint_t SeeOrPrint) case Pho_DEGREES_SEE: /***** Begin box *****/ Box_BoxBegin (NULL,Txt_Degrees, - Pho_PutIconToPrintDegreeStats,&Gbl, + Pho_PutIconToPrintDegreeStats,NULL, Hlp_ANALYTICS_Degrees,Box_NOT_CLOSABLE); HTM_TABLE_BeginCenterPadding (2); @@ -1784,14 +1780,11 @@ void Pho_ShowOrPrintPhotoDegree (Pho_AvgPhotoSeeOrPrint_t SeeOrPrint) /**************** Put parameter for degree average photos ********************/ /*****************************************************************************/ -void Pho_PutParamsDegPhoto (void *Args) +void Pho_PutParamsDegPhoto (__attribute__((unused)) void *Args) { - if (Args) - { - Pho_PutHiddenParamTypeOfAvg (); - Pho_PutHiddenParamPhotoSize (); - Pho_PutHiddenParamOrderDegrees (); - } + Pho_PutHiddenParamTypeOfAvg (); + Pho_PutHiddenParamPhotoSize (); + Pho_PutHiddenParamOrderDegrees (); } /*****************************************************************************/ @@ -1990,22 +1983,18 @@ static Pho_HowOrderDegrees_t Pho_GetHowOrderDegreesFromForm (void) /*************** Put icon to print view the stats of degrees ***************/ /*****************************************************************************/ -static void Pho_PutIconToPrintDegreeStats (void *Args) +static void Pho_PutIconToPrintDegreeStats (__attribute__((unused)) void *Args) { - if (Args) - Ico_PutContextualIconToPrint (ActPrnPhoDeg, - Pho_PutLinkToPrintViewOfDegreeStatsParams,&Gbl); + Ico_PutContextualIconToPrint (ActPrnPhoDeg, + Pho_PutLinkToPrintViewOfDegreeStatsParams,NULL); } -static void Pho_PutLinkToPrintViewOfDegreeStatsParams (void *Args) +static void Pho_PutLinkToPrintViewOfDegreeStatsParams (__attribute__((unused)) void *Args) { - if (Args) - { - Pho_PutHiddenParamTypeOfAvg (); - Pho_PutHiddenParamPhotoSize (); - Pho_PutHiddenParamOrderDegrees (); - Usr_PutParamsPrefsAboutUsrList (); - } + Pho_PutHiddenParamTypeOfAvg (); + Pho_PutHiddenParamPhotoSize (); + Pho_PutHiddenParamOrderDegrees (); + Usr_PutParamsPrefsAboutUsrList (); } /*****************************************************************************/ @@ -2159,7 +2148,7 @@ static void Pho_ShowOrPrintClassPhotoDegrees (Pho_AvgPhotoSeeOrPrint_t SeeOrPrin { /***** Form to select type of list used to display degree photos *****/ if (SeeOrPrint == Pho_DEGREES_SEE) - Usr_ShowFormsToSelectUsrListType (Pho_PutParamsDegPhoto,&Gbl); + Usr_ShowFormsToSelectUsrListType (Pho_PutParamsDegPhoto,NULL); HTM_TABLE_BeginCenter (); /***** Get and print degrees *****/ @@ -2240,7 +2229,7 @@ static void Pho_ShowOrPrintListDegrees (Pho_AvgPhotoSeeOrPrint_t SeeOrPrint) /***** Class photo start *****/ if (SeeOrPrint == Pho_DEGREES_SEE) /***** Form to select type of list used to display degree photos *****/ - Usr_ShowFormsToSelectUsrListType (Pho_PutParamsDegPhoto,&Gbl); + Usr_ShowFormsToSelectUsrListType (Pho_PutParamsDegPhoto,NULL); /***** Write heading *****/ HTM_TABLE_BeginCenterPadding (2); diff --git a/swad_photo.h b/swad_photo.h index 38e656429..74fd8acdb 100644 --- a/swad_photo.h +++ b/swad_photo.h @@ -121,7 +121,7 @@ void Pho_ShowPhotoDegree (void); void Pho_PrintPhotoDegree (void); void Pho_ShowOrPrintPhotoDegree (Pho_AvgPhotoSeeOrPrint_t SeeOrPrint); -void Pho_PutParamsDegPhoto (void *Args); +void Pho_PutParamsDegPhoto (__attribute__((unused)) void *Args); void Pho_PutHiddenParamTypeOfAvg (void); void Pho_PutHiddenParamPhotoSize (void); void Pho_PutHiddenParamOrderDegrees (void); diff --git a/swad_place.c b/swad_place.c index 6d078912d..4878c9adc 100644 --- a/swad_place.c +++ b/swad_place.c @@ -65,10 +65,10 @@ static struct Place *Plc_EditingPlc = NULL; // Static variable to keep the place static void Plc_GetParamPlcOrder (void); static bool Plc_CheckIfICanCreatePlaces (void); -static void Plc_PutIconsListingPlaces (void *Args); +static void Plc_PutIconsListingPlaces (__attribute__((unused)) void *Args); static void Plc_PutIconToEditPlaces (void); static void Plc_EditPlacesInternal (void); -static void Plc_PutIconsEditingPlaces (void *Args); +static void Plc_PutIconsEditingPlaces (__attribute__((unused)) void *Args); static void Plc_ListPlacesForEdition (void); static void Plc_PutParamPlcCod (long PlcCod); @@ -112,7 +112,7 @@ void Plc_SeePlaces (void) /***** Table head *****/ Box_BoxBegin (NULL,Txt_Places, - Plc_PutIconsListingPlaces,&Gbl, + Plc_PutIconsListingPlaces,NULL, Hlp_INSTITUTION_Places,Box_NOT_CLOSABLE); HTM_TABLE_BeginWideMarginPadding (2); HTM_TR_Begin (NULL); @@ -238,17 +238,14 @@ static bool Plc_CheckIfICanCreatePlaces (void) /****************** Put contextual icons in list of places *******************/ /*****************************************************************************/ -static void Plc_PutIconsListingPlaces (void *Args) +static void Plc_PutIconsListingPlaces (__attribute__((unused)) void *Args) { - if (Args) - { - /***** Put icon to edit places *****/ - if (Plc_CheckIfICanCreatePlaces ()) - Plc_PutIconToEditPlaces (); + /***** Put icon to edit places *****/ + if (Plc_CheckIfICanCreatePlaces ()) + Plc_PutIconToEditPlaces (); - /***** Put icon to view centres *****/ - Ctr_PutIconToViewCentres (); - } + /***** Put icon to view centres *****/ + Ctr_PutIconToViewCentres (); } /*****************************************************************************/ @@ -287,7 +284,7 @@ static void Plc_EditPlacesInternal (void) /***** Begin box *****/ Box_BoxBegin (NULL,Txt_Places, - Plc_PutIconsEditingPlaces,&Gbl, + Plc_PutIconsEditingPlaces,NULL, Hlp_INSTITUTION_Places_edit,Box_NOT_CLOSABLE); /***** Put a form to create a new place *****/ @@ -309,16 +306,13 @@ static void Plc_EditPlacesInternal (void) /**************** Put contextual icons in edition of places *****************/ /*****************************************************************************/ -static void Plc_PutIconsEditingPlaces (void *Args) +static void Plc_PutIconsEditingPlaces (__attribute__((unused)) void *Args) { - if (Args) - { - /***** Put icon to view places *****/ - Plc_PutIconToViewPlaces (); + /***** Put icon to view places *****/ + Plc_PutIconToViewPlaces (); - /***** Put icon to view centres *****/ - Ctr_PutIconToViewCentres (); - } + /***** Put icon to view centres *****/ + Ctr_PutIconToViewCentres (); } /*****************************************************************************/ diff --git a/swad_plugin.c b/swad_plugin.c index 2717da7a4..c80381a25 100644 --- a/swad_plugin.c +++ b/swad_plugin.c @@ -71,7 +71,7 @@ static struct Plugin *Plg_EditingPlg = NULL; // Static variable to keep the plug /***************************** Private prototypes ****************************/ /*****************************************************************************/ -static void Plg_PutIconToEditPlugins (void *Args); +static void Plg_PutIconToEditPlugins (__attribute__((unused)) void *Args); static void Plg_EditPluginsInternal (void); static void Plg_ListPluginsForEdition (void); static void Plg_PutParamPlgCod (long PlgCod); @@ -109,7 +109,7 @@ void Plg_ListPlugins (void) /***** Begin box and table *****/ if (Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM) Box_BoxTableBegin (NULL,Txt_Plugins, - Plg_PutIconToEditPlugins,&Gbl, + Plg_PutIconToEditPlugins,NULL, NULL,Box_NOT_CLOSABLE,2); else Box_BoxTableBegin (NULL,Txt_Plugins, @@ -171,11 +171,10 @@ void Plg_ListPlugins (void) /*************************** Put icon to edit plugins ************************/ /*****************************************************************************/ -static void Plg_PutIconToEditPlugins (void *Args) +static void Plg_PutIconToEditPlugins (__attribute__((unused)) void *Args) { - if (Args) - Ico_PutContextualIconToEdit (ActEdiPlg,NULL, - NULL,NULL); + Ico_PutContextualIconToEdit (ActEdiPlg,NULL, + NULL,NULL); } /*****************************************************************************/ diff --git a/swad_program.c b/swad_program.c index e82e1f110..23da9d5db 100644 --- a/swad_program.c +++ b/swad_program.c @@ -130,7 +130,6 @@ static struct } List; unsigned MaxLevel; // Maximum level of items struct Level *Levels; // Numbers and hidden for each level from 1 to maximum level - long CurrentItmCod; // Used as parameter in contextual links } Prg_Gbl = { .List = @@ -140,8 +139,7 @@ static struct .Items = NULL, }, .MaxLevel = 0, - .Levels = NULL, - .CurrentItmCod = -1L + .Levels = NULL }; /*****************************************************************************/ @@ -153,11 +151,11 @@ static void Prg_ShowAllItems (Prg_CreateOrChangeItem_t CreateOrChangeItem, const struct ItemRange *ToHighlight, long ParentItmCod,long ItmCodBeforeForm,unsigned FormLevel); static bool Prg_CheckIfICanCreateItems (void); -static void Prg_PutIconsListItems (void *Args); +static void Prg_PutIconsListItems (__attribute__((unused)) void *Args); static void Prg_PutIconToCreateNewItem (void); static void Prg_PutButtonToCreateNewItem (void); -static void Prg_WriteRowItem (unsigned NumItem,const struct ProgramItem *Item, +static void Prg_WriteRowItem (unsigned NumItem,struct ProgramItem *Item, bool PrintView); static void Prg_WriteRowWithItemForm (Prg_CreateOrChangeItem_t CreateOrChangeItem, long ItmCod,unsigned FormLevel); @@ -179,15 +177,13 @@ static bool Prg_GetHiddenLevel (unsigned Level); static bool Prg_CheckIfAnyHigherLevelIsHidden (unsigned CurrentLevel); static void Prg_PutFormsToRemEditOneItem (unsigned NumItem, - const struct ProgramItem *Item); + struct ProgramItem *Item); static bool Prg_CheckIfMoveUpIsAllowed (unsigned NumItem); static bool Prg_CheckIfMoveDownIsAllowed (unsigned NumItem); static bool Prg_CheckIfMoveLeftIsAllowed (unsigned NumItem); static bool Prg_CheckIfMoveRightIsAllowed (unsigned NumItem); -static void Prg_SetCurrentItmCod (long ItmCod); -static long Prg_GetCurrentItmCod (void); -static void Prg_PutParams (void *Args); +static void Prg_PutParams (void *ItmCod); static void Prg_GetListItems (void); static void Prg_GetDataOfItemByCod (struct ProgramItem *Item); @@ -271,7 +267,7 @@ static void Prg_ShowAllItems (Prg_CreateOrChangeItem_t CreateOrChangeItem, /***** Begin box *****/ Box_BoxBegin ("100%",Txt_Course_program, - Prg_PutIconsListItems,&Gbl, + Prg_PutIconsListItems,NULL, Hlp_COURSE_Program,Box_NOT_CLOSABLE); /***** Table *****/ @@ -367,17 +363,14 @@ static bool Prg_CheckIfICanCreateItems (void) /************** Put contextual icons in list of program items ****************/ /*****************************************************************************/ -static void Prg_PutIconsListItems (void *Args) +static void Prg_PutIconsListItems (__attribute__((unused)) void *Args) { - if (Args) - { - /***** Put icon to create a new program item *****/ - if (Prg_CheckIfICanCreateItems ()) - Prg_PutIconToCreateNewItem (); + /***** Put icon to create a new program item *****/ + if (Prg_CheckIfICanCreateItems ()) + Prg_PutIconToCreateNewItem (); - /***** Put icon to show a figure *****/ - Fig_PutIconToShowFigure (Fig_COURSE_PROGRAMS); - } + /***** Put icon to show a figure *****/ + Fig_PutIconToShowFigure (Fig_COURSE_PROGRAMS); } /*****************************************************************************/ @@ -387,11 +380,11 @@ static void Prg_PutIconsListItems (void *Args) static void Prg_PutIconToCreateNewItem (void) { extern const char *Txt_New_item; + long ItmCod = -1L; /***** Put form to create a new program item *****/ - Prg_SetCurrentItmCod (-1L); Ico_PutContextualIconToAdd (ActFrmNewPrgItm,"item_form", - Prg_PutParams,&Gbl, + Prg_PutParams,&ItmCod, Txt_New_item); } @@ -402,10 +395,10 @@ static void Prg_PutIconToCreateNewItem (void) static void Prg_PutButtonToCreateNewItem (void) { extern const char *Txt_New_item; + long ItmCod = -1L; - Prg_SetCurrentItmCod (-1L); Frm_StartFormAnchor (ActFrmNewPrgItm,"item_form"); - Prg_PutParams (&Gbl); + Prg_PutParams (&ItmCod); Btn_PutConfirmButton (Txt_New_item); Frm_EndForm (); } @@ -414,7 +407,7 @@ static void Prg_PutButtonToCreateNewItem (void) /************************** Show one program item ****************************/ /*****************************************************************************/ -static void Prg_WriteRowItem (unsigned NumItem,const struct ProgramItem *Item, +static void Prg_WriteRowItem (unsigned NumItem,struct ProgramItem *Item, bool PrintView) { static unsigned UniqueId = 0; @@ -774,7 +767,7 @@ static bool Prg_CheckIfAnyHigherLevelIsHidden (unsigned CurrentLevel) /*****************************************************************************/ static void Prg_PutFormsToRemEditOneItem (unsigned NumItem, - const struct ProgramItem *Item) + struct ProgramItem *Item) { extern const char *Txt_New_item; extern const char *Txt_Move_up_X; @@ -784,8 +777,6 @@ static void Prg_PutFormsToRemEditOneItem (unsigned NumItem, extern const char *Txt_Movement_not_allowed; char StrItemIndex[Cns_MAX_DECIMAL_DIGITS_UINT + 1]; - Prg_SetCurrentItmCod (Item->Hierarchy.ItmCod); // Used as parameter in contextual links - /***** Initialize item index string *****/ snprintf (StrItemIndex,sizeof (StrItemIndex), "%u", @@ -797,23 +788,23 @@ static void Prg_PutFormsToRemEditOneItem (unsigned NumItem, case Rol_SYS_ADM: /***** Put form to remove program item *****/ Ico_PutContextualIconToRemove (ActReqRemPrgItm, - Prg_PutParams,&Gbl); + Prg_PutParams,&Item->Hierarchy.ItmCod); /***** Put form to hide/show program item *****/ if (Item->Hierarchy.Hidden) Ico_PutContextualIconToUnhide (ActShoPrgItm,"prg_highlighted", - Prg_PutParams,&Gbl); + Prg_PutParams,&Item->Hierarchy.ItmCod); else Ico_PutContextualIconToHide (ActHidPrgItm,"prg_highlighted", - Prg_PutParams,&Gbl); + Prg_PutParams,&Item->Hierarchy.ItmCod); /***** Put form to edit program item *****/ Ico_PutContextualIconToEdit (ActFrmChgPrgItm,"item_form", - Prg_PutParams,&Gbl); + Prg_PutParams,&Item->Hierarchy.ItmCod); /***** Put form to add a new child item inside this item *****/ Ico_PutContextualIconToAdd (ActFrmNewPrgItm,"item_form", - Prg_PutParams,&Gbl, + Prg_PutParams,&Item->Hierarchy.ItmCod, Txt_New_item); HTM_BR (); @@ -822,7 +813,7 @@ static void Prg_PutFormsToRemEditOneItem (unsigned NumItem, if (Prg_CheckIfMoveUpIsAllowed (NumItem)) { Lay_PutContextualLinkOnlyIcon (ActUp_PrgItm,"prg_highlighted", - Prg_PutParams,&Gbl, + Prg_PutParams,&Item->Hierarchy.ItmCod, "arrow-up.svg", Str_BuildStringStr (Txt_Move_up_X, StrItemIndex)); @@ -835,7 +826,7 @@ static void Prg_PutFormsToRemEditOneItem (unsigned NumItem, if (Prg_CheckIfMoveDownIsAllowed (NumItem)) { Lay_PutContextualLinkOnlyIcon (ActDwnPrgItm,"prg_highlighted", - Prg_PutParams,&Gbl, + Prg_PutParams,&Item->Hierarchy.ItmCod, "arrow-down.svg", Str_BuildStringStr (Txt_Move_down_X, StrItemIndex)); @@ -848,7 +839,7 @@ static void Prg_PutFormsToRemEditOneItem (unsigned NumItem, if (Prg_CheckIfMoveLeftIsAllowed (NumItem)) { Lay_PutContextualLinkOnlyIcon (ActLftPrgItm,"prg_highlighted", - Prg_PutParams,&Gbl, + Prg_PutParams,&Item->Hierarchy.ItmCod, "arrow-left.svg", Str_BuildStringStr (Txt_Increase_level_of_X, StrItemIndex)); @@ -861,7 +852,7 @@ static void Prg_PutFormsToRemEditOneItem (unsigned NumItem, if (Prg_CheckIfMoveRightIsAllowed (NumItem)) { Lay_PutContextualLinkOnlyIcon (ActRgtPrgItm,"prg_highlighted", - Prg_PutParams,&Gbl, + Prg_PutParams,&Item->Hierarchy.ItmCod, "arrow-right.svg", Str_BuildStringStr (Txt_Decrease_level_of_X, StrItemIndex)); @@ -948,34 +939,15 @@ static bool Prg_CheckIfMoveRightIsAllowed (unsigned NumItem) Prg_Gbl.List.Items[NumItem ].Level; } -/*****************************************************************************/ -/**************** Access to variables used to pass parameter *****************/ -/*****************************************************************************/ - -static void Prg_SetCurrentItmCod (long ItmCod) - { - Prg_Gbl.CurrentItmCod = ItmCod; - } - -static long Prg_GetCurrentItmCod (void) - { - return Prg_Gbl.CurrentItmCod; - } - /*****************************************************************************/ /******************** Params used to edit a program item *********************/ /*****************************************************************************/ -static void Prg_PutParams (void *Args) +static void Prg_PutParams (void *ItmCod) { - long CurrentItmCod; - - if (Args) - { - CurrentItmCod = Prg_GetCurrentItmCod (); - if (CurrentItmCod > 0) - Prg_PutParamItmCod (CurrentItmCod); - } + if (ItmCod) + if (*((long *) ItmCod) > 0) + Prg_PutParamItmCod (*((long *) ItmCod)); } /*****************************************************************************/ @@ -1284,9 +1256,8 @@ void Prg_ReqRemItem (void) Lay_ShowErrorAndExit ("Wrong item code."); /***** Show question and button to remove the program item *****/ - Prg_SetCurrentItmCod (Item.Hierarchy.ItmCod); Ale_ShowAlertAndButton (ActRemPrgItm,NULL,NULL, - Prg_PutParams,&Gbl, + Prg_PutParams,&Item.Hierarchy.ItmCod, Btn_REMOVE_BUTTON,Txt_Remove_item, Ale_QUESTION,Txt_Do_you_really_want_to_remove_the_item_X, Item.Title); diff --git a/swad_project.c b/swad_project.c index 90d2d2992..c22bfc5f8 100644 --- a/swad_project.c +++ b/swad_project.c @@ -146,10 +146,10 @@ struct Prj_Faults /***************************** Private prototypes ****************************/ /*****************************************************************************/ -static void Prj_ReqUsrsToSelect (void *Args); +static void Prj_ReqUsrsToSelect (void *Projects); static void Prj_GetSelectedUsrsAndShowTheirPrjs (void); static void Prj_ShowProjects (void); -static void Prj_ShowPrjsInCurrentPage (void *Args); +static void Prj_ShowPrjsInCurrentPage (void *Projects); static void Prj_ShowFormToFilterByMy_All (void); static void Prj_ShowFormToFilterByAssign (void); @@ -157,7 +157,7 @@ static void Prj_ShowFormToFilterByHidden (void); static void Prj_ShowFormToFilterByWarning (void); static void Prj_ShowFormToFilterByDpt (void); -static void Prj_PutCurrentParams (void *Args); +static void Prj_PutCurrentParams (void *Projects); static void Prj_PutHiddenParamAssign (unsigned Assign); static void Prj_PutHiddenParamHidden (unsigned Hidden); static void Prj_PutHiddenParamFaulti (unsigned Faulti); @@ -172,38 +172,38 @@ static void Prj_GetParamWho (void); static void Prj_ShowProjectsHead (Prj_ProjectView_t ProjectView); static void Prj_ShowTableAllProjectsHead (void); static bool Prj_CheckIfICanCreateProjects (void); -static void Prj_PutIconsListProjects (void *Args); +static void Prj_PutIconsListProjects (void *Projects); static void Prj_PutIconToCreateNewPrj (void); static void Prj_PutButtonToCreateNewPrj (void); static void Prj_PutIconToShowAllData (void); -static void Prj_ShowOneProject (unsigned NumIndex,struct Project *Prj, +static void Prj_ShowOneProject (unsigned NumIndex,struct Prj_Project *Prj, Prj_ProjectView_t ProjectView); static bool Prj_CheckIfPrjIsFaulty (long PrjCod,struct Prj_Faults *Faults); static void Prj_PutWarningIcon (void); static void Prj_PutIconToToggleProject (unsigned UniqueId, const char *Icon,const char *Text); -static void Prj_ShowTableAllProjectsOneRow (struct Project *Prj); -static void Prj_ShowOneProjectDepartment (const struct Project *Prj, +static void Prj_ShowTableAllProjectsOneRow (struct Prj_Project *Prj); +static void Prj_ShowOneProjectDepartment (const struct Prj_Project *Prj, Prj_ProjectView_t ProjectView); -static void Prj_ShowTableAllProjectsDepartment (const struct Project *Prj); -static void Prj_ShowOneProjectTxtField (struct Project *Prj, +static void Prj_ShowTableAllProjectsDepartment (const struct Prj_Project *Prj); +static void Prj_ShowOneProjectTxtField (struct Prj_Project *Prj, Prj_ProjectView_t ProjectView, const char *id,unsigned UniqueId, const char *Label,char *TxtField, bool Warning); -static void Prj_ShowTableAllProjectsTxtField (struct Project *Prj, +static void Prj_ShowTableAllProjectsTxtField (struct Prj_Project *Prj, char *TxtField); -static void Prj_ShowOneProjectURL (const struct Project *Prj, +static void Prj_ShowOneProjectURL (const struct Prj_Project *Prj, Prj_ProjectView_t ProjectView, const char *id,unsigned UniqueId); -static void Prj_ShowTableAllProjectsURL (const struct Project *Prj); -static void Prj_ShowOneProjectMembers (struct Project *Prj, +static void Prj_ShowTableAllProjectsURL (const struct Prj_Project *Prj); +static void Prj_ShowOneProjectMembers (struct Prj_Project *Prj, Prj_ProjectView_t ProjectView); -static void Prj_ShowOneProjectMembersWithARole (const struct Project *Prj, +static void Prj_ShowOneProjectMembersWithARole (const struct Prj_Project *Prj, Prj_ProjectView_t ProjectView, Prj_RoleInProject_t RoleInProject); -static void Prj_ShowTableAllProjectsMembersWithARole (const struct Project *Prj, +static void Prj_ShowTableAllProjectsMembersWithARole (const struct Prj_Project *Prj, Prj_RoleInProject_t RoleInProject); static unsigned Prj_GetNumUsrsInPrj (long PrjCod,Prj_RoleInProject_t RoleInProject); @@ -212,34 +212,37 @@ static unsigned Prj_GetUsrsInPrj (long PrjCod,Prj_RoleInProject_t RoleInProject, static Prj_RoleInProject_t Prj_ConvertUnsignedStrToRoleInProject (const char *UnsignedStr); -static void Prj_ReqAddUsrs (Prj_RoleInProject_t RoleInProject); -static void Prj_AddStds (void *Args); -static void Prj_AddTuts (void *Args); -static void Prj_AddEvls (void *Args); +static void Prj_FormToSelectStds (__attribute__((unused)) void *Args); +static void Prj_FormToSelectTuts (__attribute__((unused)) void *Args); +static void Prj_FormToSelectEvls (__attribute__((unused)) void *Args); +static void Prj_FormToSelectUsrs (Prj_RoleInProject_t RoleInProject); +static void Prj_AddStds (__attribute__((unused)) void *Args); +static void Prj_AddTuts (__attribute__((unused)) void *Args); +static void Prj_AddEvls (__attribute__((unused)) void *Args); static void Prj_AddUsrsToProject (Prj_RoleInProject_t RoleInProject); static void Prj_ReqRemUsrFromPrj (Prj_RoleInProject_t RoleInProject); static void Prj_RemUsrFromPrj (Prj_RoleInProject_t RoleInProject); static void Prj_GetParamPrjOrder (void); -static void Prj_PutFormsToRemEditOnePrj (const struct Project *Prj, +static void Prj_PutFormsToRemEditOnePrj (const struct Prj_Project *Prj, const char *Anchor, bool ICanViewProjectFiles); -static bool Prj_CheckIfICanEditProject (const struct Project *Prj); +static bool Prj_CheckIfICanEditProject (const struct Prj_Project *Prj); static void Prj_GetListProjects (void); -static void Prj_ResetProject (struct Project *Prj); +static void Prj_ResetProject (struct Prj_Project *Prj); static void Prj_RequestCreatOrEditPrj (long PrjCod); -static void Prj_PutFormProject (struct Project *Prj,bool ItsANewProject); +static void Prj_PutFormProject (struct Prj_Project *Prj,bool ItsANewProject); static void Prj_EditOneProjectTxtArea (const char *Id, const char *Label,char *TxtField, unsigned NumRows,bool Required); -static void Prj_CreateProject (struct Project *Prj); -static void Prj_UpdateProject (struct Project *Prj); +static void Prj_CreateProject (struct Prj_Project *Prj); +static void Prj_UpdateProject (struct Prj_Project *Prj); static bool Prj_CheckIfICanConfigAllProjects (void); static void Prj_GetConfigPrjFromDB (void); @@ -247,8 +250,8 @@ static void Prj_GetConfigFromRow (MYSQL_ROW row); static bool Prj_GetEditableFromForm (void); static void Prj_PutIconsToLockUnlockAllProjects (void); -static void Prj_FormLockUnlock (const struct Project *Prj); -static void Prj_PutIconOffLockedUnlocked (const struct Project *Prj); +static void Prj_FormLockUnlock (const struct Prj_Project *Prj); +static void Prj_PutIconOffLockedUnlocked (const struct Prj_Project *Prj); static void Prj_LockProjectEditionInDB (long PrjCod); static void Prj_UnlockProjectEditionInDB (long PrjCod); @@ -263,24 +266,23 @@ void Prj_ListUsrsToSelect (void) Prj_GetParams (); /***** Show list of users to select some of them *****/ - Prj_ReqUsrsToSelect (&Gbl); + Prj_ReqUsrsToSelect (&Gbl.Prjs); } -static void Prj_ReqUsrsToSelect (void *Args) +static void Prj_ReqUsrsToSelect (void *Projects) { extern const char *Hlp_ASSESSMENT_Projects; extern const char *Txt_Projects; extern const char *Txt_View_projects; - if (Args) - /***** List users to select some of them *****/ - Usr_PutFormToSelectUsrsToGoToAct (&Gbl.Usrs.Selected, - ActSeePrj, - Prj_PutCurrentParams,&Gbl, - Txt_Projects, - Hlp_ASSESSMENT_Projects, - Txt_View_projects, - false); // Do not put form with date range + /***** List users to select some of them *****/ + Usr_PutFormToSelectUsrsToGoToAct (&Gbl.Usrs.Selected, + ActSeePrj, + Prj_PutCurrentParams,Projects, + Txt_Projects, + Hlp_ASSESSMENT_Projects, + Txt_View_projects, + false); // Do not put form with date range } /*****************************************************************************/ @@ -307,7 +309,7 @@ static void Prj_ShowProjects (void) case Usr_WHO_ME: case Usr_WHO_ALL: /* Show my projects / all projects */ - Prj_ShowPrjsInCurrentPage (&Gbl); + Prj_ShowPrjsInCurrentPage (&Gbl.Prjs); break; case Usr_WHO_SELECTED: /* Get selected users and show their projects */ @@ -325,8 +327,8 @@ static void Prj_ShowProjects (void) static void Prj_GetSelectedUsrsAndShowTheirPrjs (void) { Usr_GetSelectedUsrsAndGoToAct (&Gbl.Usrs.Selected, - Prj_ShowPrjsInCurrentPage,&Gbl, // when user(s) selected - Prj_ReqUsrsToSelect,&Gbl); // when no user selected + Prj_ShowPrjsInCurrentPage,&Gbl.Prjs, // when user(s) selected + Prj_ReqUsrsToSelect,&Gbl.Prjs); // when no user selected } /*****************************************************************************/ @@ -337,7 +339,7 @@ void Prj_ShowTableSelectedPrjs (void) { extern const char *Txt_No_projects; unsigned NumPrj; - struct Project Prj; + struct Prj_Project Prj; /***** Get parameters *****/ Prj_GetParams (); @@ -380,7 +382,7 @@ void Prj_ShowTableSelectedPrjs (void) /****************** Show the projects in current page ************************/ /*****************************************************************************/ -static void Prj_ShowPrjsInCurrentPage (void *Args) +static void Prj_ShowPrjsInCurrentPage (void *Projects) { extern const char *Hlp_ASSESSMENT_Projects; extern const char *Txt_Projects; @@ -388,112 +390,112 @@ static void Prj_ShowPrjsInCurrentPage (void *Args) struct Pagination Pagination; unsigned NumPrj; unsigned NumIndex; - struct Project Prj; + struct Prj_Project Prj; - if (!Args) - return; - - /***** Get list of projects *****/ - Prj_GetListProjects (); - - /***** Compute variables related to pagination *****/ - Pagination.NumItems = Gbl.Prjs.Num; - Pagination.CurrentPage = (int) Gbl.Prjs.CurrentPage; - Pag_CalculatePagination (&Pagination); - Gbl.Prjs.CurrentPage = (unsigned) Pagination.CurrentPage; - - /***** Begin box *****/ - Box_BoxBegin ("100%",Txt_Projects, - Prj_PutIconsListProjects,&Gbl, - Hlp_ASSESSMENT_Projects,Box_NOT_CLOSABLE); - - /***** Put forms to choice which projects to show *****/ - /* 1st. row */ - Set_StartSettingsHead (); - Prj_ShowFormToFilterByMy_All (); - Prj_ShowFormToFilterByAssign (); - switch (Gbl.Usrs.Me.Role.Logged) + if (Projects) { - case Rol_NET: - case Rol_TCH: - case Rol_SYS_ADM: - Prj_ShowFormToFilterByHidden (); - break; - default: // Students will see only visible projects - break; - } - Prj_ShowFormToFilterByWarning (); - Set_EndSettingsHead (); + /***** Get list of projects *****/ + Prj_GetListProjects (); - /* 2nd. row */ - Prj_ShowFormToFilterByDpt (); + /***** Compute variables related to pagination *****/ + Pagination.NumItems = ((struct Prj_Projects *) Projects)->Num; + Pagination.CurrentPage = (int) ((struct Prj_Projects *) Projects)->CurrentPage; + Pag_CalculatePagination (&Pagination); + ((struct Prj_Projects *) Projects)->CurrentPage = (unsigned) Pagination.CurrentPage; - if (Gbl.Prjs.Num) - { - /***** Write links to pages *****/ - Pag_WriteLinksToPagesCentered (Pag_PROJECTS, - &Pagination, - (unsigned) Gbl.Prjs.SelectedOrder, - NULL,0); + /***** Begin box *****/ + Box_BoxBegin ("100%",Txt_Projects, + Prj_PutIconsListProjects,Projects, + Hlp_ASSESSMENT_Projects,Box_NOT_CLOSABLE); - /***** Allocate memory for the project *****/ - Prj_AllocMemProject (&Prj); - - /***** Table head *****/ - HTM_TABLE_BeginWideMarginPadding (2); - Prj_ShowProjectsHead (Prj_LIST_PROJECTS); - - /***** Write all the projects *****/ - for (NumPrj = Pagination.FirstItemVisible; - NumPrj <= Pagination.LastItemVisible; - NumPrj++) + /***** Put forms to choice which projects to show *****/ + /* 1st. row */ + Set_StartSettingsHead (); + Prj_ShowFormToFilterByMy_All (); + Prj_ShowFormToFilterByAssign (); + switch (Gbl.Usrs.Me.Role.Logged) { - /* Get project data */ - Prj.PrjCod = Gbl.Prjs.LstPrjCods[NumPrj - 1]; - Prj_GetDataOfProjectByCod (&Prj); + case Rol_NET: + case Rol_TCH: + case Rol_SYS_ADM: + Prj_ShowFormToFilterByHidden (); + break; + default: // Students will see only visible projects + break; + } + Prj_ShowFormToFilterByWarning (); + Set_EndSettingsHead (); - /* Number of index */ - switch (Gbl.Prjs.SelectedOrder) + /* 2nd. row */ + Prj_ShowFormToFilterByDpt (); + + if (Gbl.Prjs.Num) + { + /***** Write links to pages *****/ + Pag_WriteLinksToPagesCentered (Pag_PROJECTS, + &Pagination, + (unsigned) Gbl.Prjs.SelectedOrder, + NULL,0); + + /***** Allocate memory for the project *****/ + Prj_AllocMemProject (&Prj); + + /***** Table head *****/ + HTM_TABLE_BeginWideMarginPadding (2); + Prj_ShowProjectsHead (Prj_LIST_PROJECTS); + + /***** Write all the projects *****/ + for (NumPrj = Pagination.FirstItemVisible; + NumPrj <= Pagination.LastItemVisible; + NumPrj++) { - case Prj_ORDER_START_TIME: - case Prj_ORDER_END_TIME: - // NumPrj: 1, 2, 3 ==> NumIndex = 3, 2, 1 - NumIndex = Gbl.Prjs.Num + 1 - NumPrj; - break; - default: - // NumPrj: 1, 2, 3 ==> NumIndex = 1, 2, 3 - NumIndex = NumPrj; - break; + /* Get project data */ + Prj.PrjCod = Gbl.Prjs.LstPrjCods[NumPrj - 1]; + Prj_GetDataOfProjectByCod (&Prj); + + /* Number of index */ + switch (Gbl.Prjs.SelectedOrder) + { + case Prj_ORDER_START_TIME: + case Prj_ORDER_END_TIME: + // NumPrj: 1, 2, 3 ==> NumIndex = 3, 2, 1 + NumIndex = ((struct Prj_Projects *) Projects)->Num + 1 - NumPrj; + break; + default: + // NumPrj: 1, 2, 3 ==> NumIndex = 1, 2, 3 + NumIndex = NumPrj; + break; + } + + /* Show project */ + Prj_ShowOneProject (NumIndex,&Prj,Prj_LIST_PROJECTS); } - /* Show project */ - Prj_ShowOneProject (NumIndex,&Prj,Prj_LIST_PROJECTS); + /***** End table *****/ + HTM_TABLE_End (); + + /***** Free memory of the project *****/ + Prj_FreeMemProject (&Prj); + + /***** Write again links to pages *****/ + Pag_WriteLinksToPagesCentered (Pag_PROJECTS, + &Pagination, + (unsigned) ((struct Prj_Projects *) Projects)->SelectedOrder, + NULL,0); } + else // No projects created + Ale_ShowAlert (Ale_INFO,Txt_No_projects); - /***** End table *****/ - HTM_TABLE_End (); + /***** Button to create a new project *****/ + if (Prj_CheckIfICanCreateProjects ()) + Prj_PutButtonToCreateNewPrj (); - /***** Free memory of the project *****/ - Prj_FreeMemProject (&Prj); + /***** End box *****/ + Box_BoxEnd (); - /***** Write again links to pages *****/ - Pag_WriteLinksToPagesCentered (Pag_PROJECTS, - &Pagination, - (unsigned) Gbl.Prjs.SelectedOrder, - NULL,0); + /***** Free list of projects *****/ + Prj_FreeListProjects (); } - else // No projects created - Ale_ShowAlert (Ale_INFO,Txt_No_projects); - - /***** Button to create a new project *****/ - if (Prj_CheckIfICanCreateProjects ()) - Prj_PutButtonToCreateNewPrj (); - - /***** End box *****/ - Box_BoxEnd (); - - /***** Free list of projects *****/ - Prj_FreeListProjects (); } /*****************************************************************************/ @@ -692,13 +694,13 @@ static void Prj_ShowFormToFilterByDpt (void) /********************** Put parameters used in projects **********************/ /*****************************************************************************/ -static void Prj_PutCurrentParams (void *Args) +static void Prj_PutCurrentParams (void *Projects) { - if (Args) - Prj_PutParams (&Gbl.Prjs.Filter, - Gbl.Prjs.SelectedOrder, - Gbl.Prjs.CurrentPage, - Gbl.Prjs.PrjCod); + if (Projects) + Prj_PutParams (&((struct Prj_Projects *) Projects)->Filter, + ((struct Prj_Projects *) Projects)->SelectedOrder, + ((struct Prj_Projects *) Projects)->CurrentPage, + ((struct Prj_Projects *) Projects)->PrjCod); } /* The following function is called @@ -992,11 +994,11 @@ static bool Prj_CheckIfICanCreateProjects (void) /***************** Put contextual icons in list of projects ******************/ /*****************************************************************************/ -static void Prj_PutIconsListProjects (void *Args) +static void Prj_PutIconsListProjects (void *Projects) { bool ICanConfigAllProjects; - if (Args) + if (Projects) { ICanConfigAllProjects = Prj_CheckIfICanConfigAllProjects (); @@ -1004,7 +1006,7 @@ static void Prj_PutIconsListProjects (void *Args) if (Prj_CheckIfICanCreateProjects ()) Prj_PutIconToCreateNewPrj (); - if (Gbl.Prjs.Num) + if (((struct Prj_Projects *) Projects)->Num) { /***** Put icon to show all data in a table *****/ Prj_PutIconToShowAllData (); @@ -1036,7 +1038,7 @@ static void Prj_PutIconToCreateNewPrj (void) /***** Put form to create a new project *****/ Gbl.Prjs.PrjCod = -1L; Ico_PutContextualIconToAdd (ActFrmNewPrj,NULL, - Prj_PutCurrentParams,&Gbl, + Prj_PutCurrentParams,&Gbl.Prjs, Txt_New_project); } @@ -1050,7 +1052,7 @@ static void Prj_PutButtonToCreateNewPrj (void) Gbl.Prjs.PrjCod = -1L; Frm_StartForm (ActFrmNewPrj); - Prj_PutCurrentParams (&Gbl); + Prj_PutCurrentParams (&Gbl.Prjs); Btn_PutConfirmButton (Txt_New_project); Frm_EndForm (); } @@ -1064,7 +1066,7 @@ static void Prj_PutIconToShowAllData (void) extern const char *Txt_Show_all_data_in_a_table; Lay_PutContextualLinkOnlyIcon (ActSeeTblAllPrj,NULL, - Prj_PutCurrentParams,&Gbl, + Prj_PutCurrentParams,&Gbl.Prjs, "table.svg", Txt_Show_all_data_in_a_table); } @@ -1073,7 +1075,7 @@ static void Prj_PutIconToShowAllData (void) /***************** View / edit file browser of one project *******************/ /*****************************************************************************/ -void Prj_ShowOneUniqueProject (struct Project *Prj) +void Prj_ShowOneUniqueProject (struct Prj_Project *Prj) { /***** Begin table *****/ HTM_TABLE_BeginWidePadding (2); @@ -1094,7 +1096,7 @@ void Prj_ShowOneUniqueProject (struct Project *Prj) void Prj_PrintOneProject (void) { - struct Project Prj; + struct Prj_Project Prj; /***** Allocate memory for the project *****/ Prj_AllocMemProject (&Prj); @@ -1127,7 +1129,7 @@ void Prj_PrintOneProject (void) /***************************** Show one project ******************************/ /*****************************************************************************/ -static void Prj_ShowOneProject (unsigned NumIndex,struct Project *Prj, +static void Prj_ShowOneProject (unsigned NumIndex,struct Prj_Project *Prj, Prj_ProjectView_t ProjectView) { extern const char *Txt_Project_files; @@ -1271,7 +1273,7 @@ static void Prj_ShowOneProject (unsigned NumIndex,struct Project *Prj, if (ICanViewProjectFiles) { Frm_StartForm (ActAdmDocPrj); - Prj_PutCurrentParams (&Gbl); + Prj_PutCurrentParams (&Gbl.Prjs); HTM_BUTTON_SUBMIT_Begin (Txt_Project_files,ClassLink,NULL); HTM_Txt (Prj->Title); HTM_BUTTON_End (); @@ -1578,7 +1580,7 @@ static void Prj_PutIconToToggleProject (unsigned UniqueId, /***************** Show one row of table with all projects *******************/ /*****************************************************************************/ -static void Prj_ShowTableAllProjectsOneRow (struct Project *Prj) +static void Prj_ShowTableAllProjectsOneRow (struct Prj_Project *Prj) { extern const char *Txt_Yes; extern const char *Txt_No; @@ -1680,7 +1682,7 @@ static void Prj_ShowTableAllProjectsOneRow (struct Project *Prj) /****************** Show department associated to project ********************/ /*****************************************************************************/ -static void Prj_ShowOneProjectDepartment (const struct Project *Prj, +static void Prj_ShowOneProjectDepartment (const struct Prj_Project *Prj, Prj_ProjectView_t ProjectView) { struct Department Dpt; @@ -1719,7 +1721,7 @@ static void Prj_ShowOneProjectDepartment (const struct Project *Prj, HTM_TR_End (); } -static void Prj_ShowTableAllProjectsDepartment (const struct Project *Prj) +static void Prj_ShowTableAllProjectsDepartment (const struct Prj_Project *Prj) { struct Department Dpt; const char *ClassData; @@ -1742,7 +1744,7 @@ static void Prj_ShowTableAllProjectsDepartment (const struct Project *Prj) /********************** Show text field about a project **********************/ /*****************************************************************************/ -static void Prj_ShowOneProjectTxtField (struct Project *Prj, +static void Prj_ShowOneProjectTxtField (struct Prj_Project *Prj, Prj_ProjectView_t ProjectView, const char *id,unsigned UniqueId, const char *Label,char *TxtField, @@ -1812,7 +1814,7 @@ static void Prj_ShowOneProjectTxtField (struct Project *Prj, HTM_TR_End (); } -static void Prj_ShowTableAllProjectsTxtField (struct Project *Prj, +static void Prj_ShowTableAllProjectsTxtField (struct Prj_Project *Prj, char *TxtField) { const char *ClassData; @@ -1835,7 +1837,7 @@ static void Prj_ShowTableAllProjectsTxtField (struct Project *Prj, /********************** Show URL associated to project ***********************/ /*****************************************************************************/ -static void Prj_ShowOneProjectURL (const struct Project *Prj, +static void Prj_ShowOneProjectURL (const struct Prj_Project *Prj, Prj_ProjectView_t ProjectView, const char *id,unsigned UniqueId) { @@ -1895,7 +1897,7 @@ static void Prj_ShowOneProjectURL (const struct Project *Prj, HTM_TR_End (); } -static void Prj_ShowTableAllProjectsURL (const struct Project *Prj) +static void Prj_ShowTableAllProjectsURL (const struct Prj_Project *Prj) { const char *ClassData; @@ -1913,7 +1915,7 @@ static void Prj_ShowTableAllProjectsURL (const struct Project *Prj) /************** Show projects members when showing one project ***************/ /*****************************************************************************/ -static void Prj_ShowOneProjectMembers (struct Project *Prj, +static void Prj_ShowOneProjectMembers (struct Prj_Project *Prj, Prj_ProjectView_t ProjectView) { unsigned NumRoleToShow; @@ -1929,7 +1931,7 @@ static void Prj_ShowOneProjectMembers (struct Project *Prj, /************************* Show users row in a project ***********************/ /*****************************************************************************/ -static void Prj_ShowOneProjectMembersWithARole (const struct Project *Prj, +static void Prj_ShowOneProjectMembersWithARole (const struct Prj_Project *Prj, Prj_ProjectView_t ProjectView, Prj_RoleInProject_t RoleInProject) { @@ -2044,7 +2046,7 @@ static void Prj_ShowOneProjectMembersWithARole (const struct Project *Prj, { HTM_TD_Begin ("class=\"PRJ_MEMBER_ICO\""); Lay_PutContextualLinkOnlyIcon (ActionReqRemUsr[RoleInProject],NULL, - Prj_PutCurrentParams,&Gbl, + Prj_PutCurrentParams,&Gbl.Prjs, "trash.svg", Txt_Remove); HTM_TD_End (); @@ -2076,7 +2078,7 @@ static void Prj_ShowOneProjectMembersWithARole (const struct Project *Prj, HTM_TD_Begin ("class=\"PRJ_MEMBER_ICO\""); Gbl.Prjs.PrjCod = Prj->PrjCod; // Used to pass project code as a parameter Ico_PutContextualIconToAdd (ActionReqAddUsr[RoleInProject],NULL, - Prj_PutCurrentParams,&Gbl, + Prj_PutCurrentParams,&Gbl.Prjs, Str_BuildStringStr (Txt_Add_USERS, Txt_PROJECT_ROLES_PLURAL_abc[RoleInProject])); Str_FreeString (); @@ -2106,7 +2108,7 @@ static void Prj_ShowOneProjectMembersWithARole (const struct Project *Prj, DB_FreeMySQLResult (&mysql_res); } -static void Prj_ShowTableAllProjectsMembersWithARole (const struct Project *Prj, +static void Prj_ShowTableAllProjectsMembersWithARole (const struct Prj_Project *Prj, Prj_RoleInProject_t RoleInProject) { MYSQL_RES *mysql_res; @@ -2264,25 +2266,37 @@ static Prj_RoleInProject_t Prj_ConvertUnsignedStrToRoleInProject (const char *Un /******************* Request users to be added to project ********************/ /*****************************************************************************/ -void Prj_ReqAddStds (void *Args) +void Prj_ReqAddStds (void) { - if (Args) - Prj_ReqAddUsrs (Prj_ROLE_STD); + Prj_FormToSelectStds (NULL); } -void Prj_ReqAddTuts (void *Args) +void Prj_ReqAddTuts (void) { - if (Args) - Prj_ReqAddUsrs (Prj_ROLE_TUT); + Prj_FormToSelectTuts (NULL); } -void Prj_ReqAddEvls (void *Args) +void Prj_ReqAddEvls (void) { - if (Args) - Prj_ReqAddUsrs (Prj_ROLE_EVL); + Prj_FormToSelectEvls (NULL); } -static void Prj_ReqAddUsrs (Prj_RoleInProject_t RoleInProject) +static void Prj_FormToSelectStds (__attribute__((unused)) void *Args) + { + Prj_FormToSelectUsrs (Prj_ROLE_STD); + } + +static void Prj_FormToSelectTuts (__attribute__((unused)) void *Args) + { + Prj_FormToSelectUsrs (Prj_ROLE_TUT); + } + +static void Prj_FormToSelectEvls (__attribute__((unused)) void *Args) + { + Prj_FormToSelectUsrs (Prj_ROLE_EVL); + } + +static void Prj_FormToSelectUsrs (Prj_RoleInProject_t RoleInProject) { extern const char *Hlp_ASSESSMENT_Projects_add_user; extern const char *Txt_Add_USERS; @@ -2307,7 +2321,7 @@ static void Prj_ReqAddUsrs (Prj_RoleInProject_t RoleInProject) Lay_NotEnoughMemoryExit (); Usr_PutFormToSelectUsrsToGoToAct (&Prj_MembersToAdd, ActionAddUsr[RoleInProject], - Prj_PutCurrentParams,&Gbl, + Prj_PutCurrentParams,&Gbl.Prjs, TxtButton, Hlp_ASSESSMENT_Projects_add_user, TxtButton, @@ -2325,44 +2339,41 @@ static void Prj_ReqAddUsrs (Prj_RoleInProject_t RoleInProject) void Prj_GetSelectedUsrsAndAddStds (void) { Usr_GetSelectedUsrsAndGoToAct (&Prj_MembersToAdd, - Prj_AddStds,&Gbl, // when user(s) selected - Prj_ReqAddStds,&Gbl); // when no user selected + Prj_AddStds,NULL, // when user(s) selected + Prj_FormToSelectStds,NULL); // when no user selected } void Prj_GetSelectedUsrsAndAddTuts (void) { Usr_GetSelectedUsrsAndGoToAct (&Prj_MembersToAdd, - Prj_AddTuts,&Gbl, // when user(s) selected - Prj_ReqAddTuts,&Gbl); // when no user selected + Prj_AddTuts,NULL, // when user(s) selected + Prj_FormToSelectTuts,NULL); // when no user selected } void Prj_GetSelectedUsrsAndAddEvls (void) { Usr_GetSelectedUsrsAndGoToAct (&Prj_MembersToAdd, - Prj_AddEvls,&Gbl, // when user(s) selected - Prj_ReqAddEvls,&Gbl); // when no user selected + Prj_AddEvls,NULL, // when user(s) selected + Prj_FormToSelectEvls,NULL); // when no user selected } /*****************************************************************************/ /**************************** Add users to project ***************************/ /*****************************************************************************/ -static void Prj_AddStds (void *Args) +static void Prj_AddStds (__attribute__((unused)) void *Args) { - if (Args) - Prj_AddUsrsToProject (Prj_ROLE_STD); + Prj_AddUsrsToProject (Prj_ROLE_STD); } -static void Prj_AddTuts (void *Args) +static void Prj_AddTuts (__attribute__((unused)) void *Args) { - if (Args) - Prj_AddUsrsToProject (Prj_ROLE_TUT); + Prj_AddUsrsToProject (Prj_ROLE_TUT); } -static void Prj_AddEvls (void *Args) +static void Prj_AddEvls (__attribute__((unused)) void *Args) { - if (Args) - Prj_AddUsrsToProject (Prj_ROLE_EVL); + Prj_AddUsrsToProject (Prj_ROLE_EVL); } static void Prj_AddUsrsToProject (Prj_RoleInProject_t RoleInProject) @@ -2449,7 +2460,7 @@ static void Prj_ReqRemUsrFromPrj (Prj_RoleInProject_t RoleInProject) [Prj_ROLE_TUT] = ActRemTutPrj, // Tutor [Prj_ROLE_EVL] = ActRemEvlPrj, // Evaluator }; - struct Project Prj; + struct Prj_Project Prj; bool ItsMe; /***** Allocate memory for the project *****/ @@ -2483,7 +2494,7 @@ static void Prj_ReqRemUsrFromPrj (Prj_RoleInProject_t RoleInProject) /* Show form to request confirmation */ Frm_StartForm (ActionRemUsr[RoleInProject]); Gbl.Prjs.PrjCod = Prj.PrjCod; - Prj_PutCurrentParams (&Gbl); + Prj_PutCurrentParams (&Gbl.Prjs); Btn_PutRemoveButton (Str_BuildStringStr (Txt_Remove_USER_from_this_project, Txt_PROJECT_ROLES_SINGUL_abc[RoleInProject][Gbl.Usrs.Other.UsrDat.Sex])); Str_FreeString (); @@ -2530,7 +2541,7 @@ static void Prj_RemUsrFromPrj (Prj_RoleInProject_t RoleInProject) { extern const char *Txt_THE_USER_X_has_been_removed_as_a_Y_from_the_project_Z; extern const char *Txt_PROJECT_ROLES_SINGUL_abc[Prj_NUM_ROLES_IN_PROJECT][Usr_NUM_SEXS]; - struct Project Prj; + struct Prj_Project Prj; bool ItsMe; /***** Allocate memory for the project *****/ @@ -2608,7 +2619,7 @@ void Prj_PutHiddenParamPrjOrder (void) /****************** Put a link (form) to edit one project ********************/ /*****************************************************************************/ -static void Prj_PutFormsToRemEditOnePrj (const struct Project *Prj, +static void Prj_PutFormsToRemEditOnePrj (const struct Prj_Project *Prj, const char *Anchor, bool ICanViewProjectFiles) { @@ -2618,34 +2629,34 @@ static void Prj_PutFormsToRemEditOnePrj (const struct Project *Prj, { /***** Put form to remove project *****/ Ico_PutContextualIconToRemove (ActReqRemPrj, - Prj_PutCurrentParams,&Gbl); + Prj_PutCurrentParams,&Gbl.Prjs); /***** Put form to hide/show project *****/ switch (Prj->Hidden) { case Prj_HIDDEN: Ico_PutContextualIconToUnhide (ActShoPrj,Anchor, - Prj_PutCurrentParams,&Gbl); + Prj_PutCurrentParams,&Gbl.Prjs); break; case Prj_VISIBL: Ico_PutContextualIconToHide (ActHidPrj,Anchor, - Prj_PutCurrentParams,&Gbl); + Prj_PutCurrentParams,&Gbl.Prjs); break; } /***** Put form to edit project *****/ Ico_PutContextualIconToEdit (ActEdiOnePrj,NULL, - Prj_PutCurrentParams,&Gbl); + Prj_PutCurrentParams,&Gbl.Prjs); } /***** Put form to admin project documents *****/ if (ICanViewProjectFiles) Ico_PutContextualIconToViewFiles (ActAdmDocPrj, - Prj_PutCurrentParams,&Gbl); + Prj_PutCurrentParams,&Gbl.Prjs); /***** Put form to print project *****/ Ico_PutContextualIconToPrint (ActPrnOnePrj, - Prj_PutCurrentParams,&Gbl); + Prj_PutCurrentParams,&Gbl.Prjs); /***** Locked/unlocked project edition *****/ if (Prj_CheckIfICanConfigAllProjects ()) @@ -2683,7 +2694,7 @@ bool Prj_CheckIfICanViewProjectFiles (unsigned MyRolesInProject) /************************ Can I edit a given project? ************************/ /*****************************************************************************/ -static bool Prj_CheckIfICanEditProject (const struct Project *Prj) +static bool Prj_CheckIfICanEditProject (const struct Prj_Project *Prj) { switch (Gbl.Usrs.Me.Role.Logged) { @@ -3029,7 +3040,7 @@ long Prj_GetCourseOfProject (long PrjCod) /********************* Get project data using its code ***********************/ /*****************************************************************************/ -void Prj_GetDataOfProjectByCod (struct Project *Prj) +void Prj_GetDataOfProjectByCod (struct Prj_Project *Prj) { MYSQL_RES *mysql_res; MYSQL_ROW row; @@ -3145,7 +3156,7 @@ void Prj_GetDataOfProjectByCod (struct Project *Prj) /************************** Clear all project data ***************************/ /*****************************************************************************/ -static void Prj_ResetProject (struct Project *Prj) +static void Prj_ResetProject (struct Prj_Project *Prj) { if (Prj->PrjCod <= 0) // If > 0 ==> keep value Prj->PrjCod = -1L; @@ -3208,7 +3219,7 @@ void Prj_ReqRemProject (void) { extern const char *Txt_Do_you_really_want_to_remove_the_project_X; extern const char *Txt_Remove_project; - struct Project Prj; + struct Prj_Project Prj; /***** Allocate memory for the project *****/ Prj_AllocMemProject (&Prj); @@ -3226,7 +3237,7 @@ void Prj_ReqRemProject (void) /***** Show question and button to remove the project *****/ Gbl.Prjs.PrjCod = Prj.PrjCod; Ale_ShowAlertAndButton (ActRemPrj,NULL,NULL, - Prj_PutCurrentParams,&Gbl, + Prj_PutCurrentParams,&Gbl.Prjs, Btn_REMOVE_BUTTON,Txt_Remove_project, Ale_QUESTION,Txt_Do_you_really_want_to_remove_the_project_X, Prj.Title); @@ -3248,7 +3259,7 @@ void Prj_ReqRemProject (void) void Prj_RemoveProject (void) { extern const char *Txt_Project_X_removed; - struct Project Prj; + struct Prj_Project Prj; char PathRelPrj[PATH_MAX + 1]; /***** Allocate memory for the project *****/ @@ -3310,7 +3321,7 @@ void Prj_RemoveProject (void) void Prj_HideProject (void) { - struct Project Prj; + struct Prj_Project Prj; /***** Allocate memory for the project *****/ Prj_AllocMemProject (&Prj); @@ -3345,7 +3356,7 @@ void Prj_HideProject (void) void Prj_UnhideProject (void) { - struct Project Prj; + struct Prj_Project Prj; /***** Allocate memory for the project *****/ Prj_AllocMemProject (&Prj); @@ -3398,7 +3409,7 @@ void Prj_RequestEditPrj (void) static void Prj_RequestCreatOrEditPrj (long PrjCod) { - struct Project Prj; + struct Prj_Project Prj; bool ItsANewProject; /***** Allocate memory for the project *****/ @@ -3431,7 +3442,7 @@ static void Prj_RequestCreatOrEditPrj (long PrjCod) Prj_ShowProjects (); } -static void Prj_PutFormProject (struct Project *Prj,bool ItsANewProject) +static void Prj_PutFormProject (struct Prj_Project *Prj,bool ItsANewProject) { extern const char *Hlp_ASSESSMENT_Projects_new_project; extern const char *Hlp_ASSESSMENT_Projects_edit_project; @@ -3494,7 +3505,7 @@ static void Prj_PutFormProject (struct Project *Prj,bool ItsANewProject) /* Start data form */ Frm_StartForm (ItsANewProject ? ActNewPrj : ActChgPrj); - Prj_PutCurrentParams (&Gbl); + Prj_PutCurrentParams (&Gbl.Prjs); /* Begin box and table */ Box_BoxTableBegin (NULL,Txt_Data, @@ -3666,7 +3677,7 @@ static void Prj_EditOneProjectTxtArea (const char *Id, /*** Allocate memory for those parameters of a project with a lot of text ****/ /*****************************************************************************/ -void Prj_AllocMemProject (struct Project *Prj) +void Prj_AllocMemProject (struct Prj_Project *Prj) { if ((Prj->Description = (char *) malloc (Cns_MAX_BYTES_TEXT + 1)) == NULL) Lay_NotEnoughMemoryExit (); @@ -3682,7 +3693,7 @@ void Prj_AllocMemProject (struct Project *Prj) /****** Free memory of those parameters of a project with a lot of text ******/ /*****************************************************************************/ -void Prj_FreeMemProject (struct Project *Prj) +void Prj_FreeMemProject (struct Prj_Project *Prj) { if (Prj->Description) { @@ -3710,7 +3721,7 @@ void Prj_RecFormProject (void) extern const char *Txt_You_must_specify_the_title_of_the_project; extern const char *Txt_Created_new_project_X; extern const char *Txt_The_project_has_been_modified; - struct Project Prj; // Project data received from form + struct Prj_Project Prj; // Project data received from form bool ItsANewProject; bool ICanEditProject; bool NewProjectIsCorrect = true; @@ -3816,7 +3827,7 @@ void Prj_RecFormProject (void) /************************** Create a new project *****************************/ /*****************************************************************************/ -static void Prj_CreateProject (struct Project *Prj) +static void Prj_CreateProject (struct Prj_Project *Prj) { /***** Set dates to now *****/ Prj->CreatTime = @@ -3867,7 +3878,7 @@ static void Prj_CreateProject (struct Project *Prj) /*********************** Update an existing project **************************/ /*****************************************************************************/ -static void Prj_UpdateProject (struct Project *Prj) +static void Prj_UpdateProject (struct Prj_Project *Prj) { /***** Adjust date of last edition to now *****/ Prj->ModifTime = Gbl.StartExecutionTimeUTC; @@ -3937,7 +3948,7 @@ void Prj_ShowFormConfig (void) /***** Begin box *****/ Box_BoxBegin (NULL,Txt_Configure_projects, - Prj_PutIconsListProjects,&Gbl, + Prj_PutIconsListProjects,&Gbl.Prjs, Hlp_ASSESSMENT_Projects,Box_NOT_CLOSABLE); /***** Begin form *****/ @@ -4060,13 +4071,13 @@ static void Prj_PutIconsToLockUnlockAllProjects (void) /***** Put icon to lock all projects *****/ Lay_PutContextualLinkOnlyIcon (ActReqLckAllPrj,NULL, - Prj_PutCurrentParams,&Gbl, + Prj_PutCurrentParams,&Gbl.Prjs, "lock.svg", Txt_Lock_editing); /***** Put icon to unlock all projects *****/ Lay_PutContextualLinkOnlyIcon (ActReqUnlAllPrj,NULL, - Prj_PutCurrentParams,&Gbl, + Prj_PutCurrentParams,&Gbl.Prjs, "unlock.svg", Txt_Unlock_editing); } @@ -4093,7 +4104,7 @@ void Prj_ReqLockSelectedPrjsEdition (void) /* Show question and button */ if (Gbl.Prjs.Num) Ale_ShowAlertAndButton (ActLckAllPrj,NULL,NULL, - Prj_PutCurrentParams,&Gbl, + Prj_PutCurrentParams,&Gbl.Prjs, Btn_REMOVE_BUTTON,Txt_Lock_editing, Ale_QUESTION,Txt_Do_you_want_to_lock_the_editing_of_the_X_selected_projects, Gbl.Prjs.Num); @@ -4128,7 +4139,7 @@ void Prj_ReqUnloSelectedPrjsEdition (void) /* Show question and button */ if (Gbl.Prjs.Num) Ale_ShowAlertAndButton (ActUnlAllPrj,NULL,NULL, - Prj_PutCurrentParams,&Gbl, + Prj_PutCurrentParams,&Gbl.Prjs, Btn_CREATE_BUTTON,Txt_Unlock_editing, Ale_QUESTION,Txt_Do_you_want_to_unlock_the_editing_of_the_X_selected_projects, Gbl.Prjs.Num); @@ -4219,7 +4230,7 @@ void Prj_UnloSelectedPrjsEdition (void) /******************** Form to lock/unlock project edition ********************/ /*****************************************************************************/ -static void Prj_FormLockUnlock (const struct Project *Prj) +static void Prj_FormLockUnlock (const struct Prj_Project *Prj) { extern const char *Txt_LOCKED_UNLOCKED[Prj_NUM_LOCKED_UNLOCKED]; char *OnSubmit; @@ -4256,7 +4267,7 @@ static void Prj_FormLockUnlock (const struct Project *Prj) /********* Put icon to inform about locked/unlocked project edition **********/ /*****************************************************************************/ -static void Prj_PutIconOffLockedUnlocked (const struct Project *Prj) +static void Prj_PutIconOffLockedUnlocked (const struct Prj_Project *Prj) { extern const char *Txt_LOCKED_UNLOCKED[Prj_NUM_LOCKED_UNLOCKED]; @@ -4270,7 +4281,7 @@ static void Prj_PutIconOffLockedUnlocked (const struct Project *Prj) void Prj_LockProjectEdition (void) { - struct Project Prj; + struct Prj_Project Prj; /***** Allocate memory for the project *****/ Prj_AllocMemProject (&Prj); @@ -4313,7 +4324,7 @@ static void Prj_LockProjectEditionInDB (long PrjCod) void Prj_UnloProjectEdition (void) { - struct Project Prj; + struct Prj_Project Prj; /***** Allocate memory for the project *****/ Prj_AllocMemProject (&Prj); diff --git a/swad_project.h b/swad_project.h index 5da986621..ce8197f92 100644 --- a/swad_project.h +++ b/swad_project.h @@ -132,8 +132,24 @@ typedef enum Prj_ROLE_EVL = 3, // Evaluator } Prj_RoleInProject_t; +/***** Struct to store context/status of projects *****/ +struct Prj_Projects + { + struct + { + bool Editable; + } Config; + struct Prj_Filter Filter; + bool LstIsRead; // Is the list already read from database, or it needs to be read? + unsigned Num; // Number of projects + long *LstPrjCods; // List of project codes + Prj_Order_t SelectedOrder; + unsigned CurrentPage; + long PrjCod; // Current project + }; + /***** Struct to store a project *****/ -struct Project +struct Prj_Project { long PrjCod; long CrsCod; @@ -165,16 +181,16 @@ void Prj_PutParams (struct Prj_Filter *Filter, unsigned NumPage, long PrjCod); -void Prj_ShowOneUniqueProject (struct Project *Prj); +void Prj_ShowOneUniqueProject (struct Prj_Project *Prj); void Prj_PrintOneProject (void); void Prj_FlushCacheMyRolesInProject (void); Prj_RoleInProject_t Prj_GetMyRolesInProject (long PrjCod); -void Prj_ReqAddStds (void *Args); -void Prj_ReqAddTuts (void *Args); -void Prj_ReqAddEvls (void *Args); +void Prj_ReqAddStds (void); +void Prj_ReqAddTuts (void); +void Prj_ReqAddEvls (void); void Prj_GetSelectedUsrsAndAddStds (void); void Prj_GetSelectedUsrsAndAddTuts (void); @@ -195,10 +211,10 @@ bool Prj_CheckIfICanViewProjectFiles (unsigned MyRolesInProject); void Prj_RequestCreatePrj (void); void Prj_RequestEditPrj (void); -void Prj_AllocMemProject (struct Project *Prj); -void Prj_FreeMemProject (struct Project *Prj); +void Prj_AllocMemProject (struct Prj_Project *Prj); +void Prj_FreeMemProject (struct Prj_Project *Prj); -void Prj_GetDataOfProjectByCod (struct Project *Prj); +void Prj_GetDataOfProjectByCod (struct Prj_Project *Prj); long Prj_GetCourseOfProject (long PrjCod); void Prj_FreeListProjects (void); diff --git a/swad_record.c b/swad_record.c index 600b53f73..8cd316b3a 100644 --- a/swad_record.c +++ b/swad_record.c @@ -78,7 +78,7 @@ extern struct Globals Gbl; static void Rec_WriteHeadingRecordFields (void); -static void Rec_PutParamFielCod (void *Args); +static void Rec_PutParamFieldCod (void *FieldCod); static void Rec_GetFieldByCod (long FieldCod,char Name[Rec_MAX_BYTES_NAME_FIELD + 1], unsigned *NumLines,Rec_VisibilityRecordFields_t *Visibility); @@ -103,12 +103,12 @@ static void Rec_ShowCrsRecord (Rec_CourseRecordViewType_t TypeOfView, static void Rec_ShowMyCrsRecordUpdated (void); static bool Rec_CheckIfICanEditField (Rec_VisibilityRecordFields_t Visibility); -static void Rec_PutIconsCommands (void *Args); -static void Rec_PutParamsMyTsts (void *Args); -static void Rec_PutParamsStdTsts (void *Args); -static void Rec_PutParamsWorks (void *Args); -static void Rec_PutParamsStudent (void *Args); -static void Rec_PutParamsMsgUsr (void *Args); +static void Rec_PutIconsCommands (__attribute__((unused)) void *Args); +static void Rec_PutParamsMyTsts (__attribute__((unused)) void *Args); +static void Rec_PutParamsStdTsts (__attribute__((unused)) void *Args); +static void Rec_PutParamsWorks (__attribute__((unused)) void *Args); +static void Rec_PutParamsStudent (__attribute__((unused)) void *Args); +static void Rec_PutParamsMsgUsr (__attribute__((unused)) void *Args); static void Rec_ShowInstitutionInHead (struct Instit *Ins,bool PutFormLinks); static void Rec_ShowPhoto (struct UsrData *UsrDat); static void Rec_ShowFullName (struct UsrData *UsrDat); @@ -608,7 +608,7 @@ void Rec_AskConfirmRemFieldWithRecords (unsigned NumRecords) /***** Show question and button to remove my photo *****/ Ale_ShowAlertAndButton (ActRemFie,NULL,NULL, - Rec_PutParamFielCod,&Gbl, + Rec_PutParamFieldCod,&Gbl.Crs.Records.Field.FieldCod, Btn_REMOVE_BUTTON,Txt_Remove_record_field, Ale_QUESTION,Txt_Do_you_really_want_to_remove_the_field_X_from_the_records_of_Y_Z_, Gbl.Crs.Records.Field.Name,Gbl.Hierarchy.Crs.FullName, @@ -654,10 +654,10 @@ void Rec_RemoveFieldFromDB (void) /********************** Put parameter with field code ************************/ /*****************************************************************************/ -static void Rec_PutParamFielCod (void *Args) +static void Rec_PutParamFieldCod (void *FieldCod) { - if (Args) - Par_PutHiddenParamLong (NULL,"FieldCod",Gbl.Crs.Records.Field.FieldCod); + if (FieldCod) + Par_PutHiddenParamLong (NULL,"FieldCod",*((long *) FieldCod)); } /*****************************************************************************/ @@ -2219,7 +2219,7 @@ void Rec_ShowSharedUsrRecord (Rec_SharedRecordViewType_t TypeOfView, Rec_RecordHelp[TypeOfView],Box_NOT_CLOSABLE,2); else Box_BoxTableBegin (StrRecordWidth,NULL, - Rec_PutIconsCommands,&Gbl, + Rec_PutIconsCommands,NULL, Rec_RecordHelp[TypeOfView],Box_NOT_CLOSABLE,2); /***** Institution and user's photo *****/ @@ -2418,7 +2418,7 @@ void Rec_ShowSharedUsrRecord (Rec_SharedRecordViewType_t TypeOfView, /*********** Show commands (icon to make actions) in record card *************/ /*****************************************************************************/ -static void Rec_PutIconsCommands (void *Args) +static void Rec_PutIconsCommands (__attribute__((unused)) void *Args) { extern const char *Txt_Edit_my_personal_data; extern const char *Txt_My_public_profile; @@ -2438,232 +2438,213 @@ static void Rec_PutIconsCommands (void *Args) bool RecipientHasBannedMe; Act_Action_t NextAction; - if (Args) + if (!Gbl.Form.Inside && // Only if not inside another form + Act_GetBrowserTab (Gbl.Action.Act) == Act_BRW_1ST_TAB && // Only in main browser tab + Gbl.Usrs.Me.Logged) // Only if I am logged { - if (!Gbl.Form.Inside && // Only if not inside another form - Act_GetBrowserTab (Gbl.Action.Act) == Act_BRW_1ST_TAB && // Only in main browser tab - Gbl.Usrs.Me.Logged) // Only if I am logged + ICanViewUsrProfile = Pri_ShowingIsAllowed (Gbl.Record.UsrDat->BaPrfVisibility, + Gbl.Record.UsrDat); + + /***** Start container *****/ + HTM_DIV_Begin ("class=\"FRAME_ICO\""); + + if (ItsMe) + /***** Button to edit my record card *****/ + Lay_PutContextualLinkOnlyIcon (ActReqEdiRecSha,NULL, + NULL,NULL, + "pen.svg", + Txt_Edit_my_personal_data); + if (ICanViewUsrProfile) + /***** Button to view user's profile *****/ + Lay_PutContextualLinkOnlyIcon (ActSeeOthPubPrf,NULL, + Rec_PutParamUsrCodEncrypted,NULL, + "user.svg", + ItsMe ? Txt_My_public_profile : + Txt_Another_user_s_profile); + + /***** Button to view user's record card *****/ + if (Usr_CheckIfICanViewRecordStd (Gbl.Record.UsrDat)) + /* View student's records: common record card and course record card */ + Lay_PutContextualLinkOnlyIcon (ActSeeRecOneStd,NULL, + Rec_PutParamUsrCodEncrypted,NULL, + "card.svg", + Txt_View_record_for_this_course); + else if (Usr_CheckIfICanViewRecordTch (Gbl.Record.UsrDat)) + Lay_PutContextualLinkOnlyIcon (ActSeeRecOneTch,NULL, + Rec_PutParamUsrCodEncrypted,NULL, + "card.svg", + Txt_View_record_and_office_hours); + + /***** Button to view user's agenda *****/ + if (ItsMe) + Lay_PutContextualLinkOnlyIcon (ActSeeMyAgd,NULL, + NULL,NULL, + "calendar.svg", + Txt_Show_agenda); + else if (Usr_CheckIfICanViewUsrAgenda (Gbl.Record.UsrDat)) + Lay_PutContextualLinkOnlyIcon (ActSeeUsrAgd,NULL, + Rec_PutParamUsrCodEncrypted,NULL, + "calendar.svg", + Txt_Show_agenda); + + /***** Button to admin user *****/ + if (ItsMe || + Gbl.Usrs.Me.Role.Logged == Rol_TCH || + Gbl.Usrs.Me.Role.Logged == Rol_DEG_ADM || + Gbl.Usrs.Me.Role.Logged == Rol_CTR_ADM || + Gbl.Usrs.Me.Role.Logged == Rol_INS_ADM || + Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM) { - ICanViewUsrProfile = Pri_ShowingIsAllowed (Gbl.Record.UsrDat->BaPrfVisibility, - Gbl.Record.UsrDat); - - /***** Start container *****/ - HTM_DIV_Begin ("class=\"FRAME_ICO\""); - - if (ItsMe) - /***** Button to edit my record card *****/ - Lay_PutContextualLinkOnlyIcon (ActReqEdiRecSha,NULL, - NULL,NULL, - "pen.svg", - Txt_Edit_my_personal_data); - if (ICanViewUsrProfile) - /***** Button to view user's profile *****/ - Lay_PutContextualLinkOnlyIcon (ActSeeOthPubPrf,NULL, - Rec_PutParamUsrCodEncrypted,NULL, - "user.svg", - ItsMe ? Txt_My_public_profile : - Txt_Another_user_s_profile); - - /***** Button to view user's record card *****/ - if (Usr_CheckIfICanViewRecordStd (Gbl.Record.UsrDat)) - /* View student's records: common record card and course record card */ - Lay_PutContextualLinkOnlyIcon (ActSeeRecOneStd,NULL, - Rec_PutParamUsrCodEncrypted,NULL, - "card.svg", - Txt_View_record_for_this_course); - else if (Usr_CheckIfICanViewRecordTch (Gbl.Record.UsrDat)) - Lay_PutContextualLinkOnlyIcon (ActSeeRecOneTch,NULL, - Rec_PutParamUsrCodEncrypted,NULL, - "card.svg", - Txt_View_record_and_office_hours); - - /***** Button to view user's agenda *****/ - if (ItsMe) - Lay_PutContextualLinkOnlyIcon (ActSeeMyAgd,NULL, - NULL,NULL, - "calendar.svg", - Txt_Show_agenda); - else if (Usr_CheckIfICanViewUsrAgenda (Gbl.Record.UsrDat)) - Lay_PutContextualLinkOnlyIcon (ActSeeUsrAgd,NULL, - Rec_PutParamUsrCodEncrypted,NULL, - "calendar.svg", - Txt_Show_agenda); - - /***** Button to admin user *****/ - if (ItsMe || - Gbl.Usrs.Me.Role.Logged == Rol_TCH || - Gbl.Usrs.Me.Role.Logged == Rol_DEG_ADM || - Gbl.Usrs.Me.Role.Logged == Rol_CTR_ADM || - Gbl.Usrs.Me.Role.Logged == Rol_INS_ADM || - Gbl.Usrs.Me.Role.Logged == Rol_SYS_ADM) + switch (Gbl.Record.UsrDat->Roles.InCurrentCrs.Role) { - switch (Gbl.Record.UsrDat->Roles.InCurrentCrs.Role) - { - case Rol_STD: - NextAction = ActReqMdfStd; - break; - case Rol_NET: - NextAction = ActReqMdfNET; - break; - case Rol_TCH: - NextAction = ActReqMdfTch; - break; - default: // Guest, user or admin - NextAction = ActReqMdfOth; - break; - } - Lay_PutContextualLinkOnlyIcon (NextAction,NULL, - Rec_PutParamUsrCodEncrypted,NULL, - "user-cog.svg", - Txt_Administer_user); + case Rol_STD: + NextAction = ActReqMdfStd; + break; + case Rol_NET: + NextAction = ActReqMdfNET; + break; + case Rol_TCH: + NextAction = ActReqMdfTch; + break; + default: // Guest, user or admin + NextAction = ActReqMdfOth; + break; } - - if (Gbl.Hierarchy.Level == Hie_CRS) // Course selected - { - if (Gbl.Record.UsrDat->Roles.InCurrentCrs.Role == Rol_STD) // He/she is a student in current course - { - /***** Button to view student's test exams *****/ - if (Usr_CheckIfICanViewTst (Gbl.Record.UsrDat)) - { - if (ItsMe) - Lay_PutContextualLinkOnlyIcon (ActSeeMyTstRes,NULL, - Rec_PutParamsMyTsts,&Gbl, - "check.svg", - Txt_View_test_results); - else // Not me - Lay_PutContextualLinkOnlyIcon (ActSeeUsrTstRes,NULL, - Rec_PutParamsStdTsts,&Gbl, - "check.svg", - Txt_View_test_results); - } - - /***** Button to view student's assignments and works *****/ - if (Usr_CheckIfICanViewAsgWrk (Gbl.Record.UsrDat)) - { - if (ItsMe) - Lay_PutContextualLinkOnlyIcon (ActAdmAsgWrkUsr,NULL, - NULL,NULL, - "folder-open.svg", - Txt_View_homework); - else // Not me, I am not a student in current course - Lay_PutContextualLinkOnlyIcon (ActAdmAsgWrkCrs,NULL, - Rec_PutParamsWorks,&Gbl, - "folder-open.svg", - Txt_View_homework); - } - - /***** Button to view student's attendance *****/ - if (Usr_CheckIfICanViewAtt (Gbl.Record.UsrDat)) - { - if (ItsMe) - Lay_PutContextualLinkOnlyIcon (ActSeeLstMyAtt,NULL, - NULL,NULL, - "calendar-check.svg", - Txt_View_attendance); - else // Not me - Lay_PutContextualLinkOnlyIcon (ActSeeLstUsrAtt,NULL, - Rec_PutParamsStudent,&Gbl, - "calendar-check.svg", - Txt_View_attendance); - } - } - } - - /***** Button to print QR code *****/ - QR_PutLinkToPrintQRCode (ActPrnUsrQR, - Rec_PutParamUsrCodEncrypted,NULL); - - /***** Button to send a message *****/ - RecipientHasBannedMe = Msg_CheckIfUsrIsBanned (Gbl.Usrs.Me.UsrDat.UsrCod, // From: - Gbl.Record.UsrDat->UsrCod); // To: - if (!RecipientHasBannedMe) - Lay_PutContextualLinkOnlyIcon (ActReqMsgUsr,NULL, - Rec_PutParamsMsgUsr,&Gbl, - "envelope.svg", - Txt_Write_a_message); - - /***** Button to follow / unfollow *****/ - if (!ItsMe) // Not me - { - if (Fol_CheckUsrIsFollowerOf (Gbl.Usrs.Me.UsrDat.UsrCod, - Gbl.Record.UsrDat->UsrCod)) - // I follow user - Lay_PutContextualLinkOnlyIcon (ActUnfUsr,NULL, - Rec_PutParamUsrCodEncrypted,NULL, - "user-check.svg", - Txt_Following_unfollow); // Put button to unfollow, even if I can not view user's profile - else if (ICanViewUsrProfile) - Lay_PutContextualLinkOnlyIcon (ActFolUsr,NULL, - Rec_PutParamUsrCodEncrypted,NULL, - "user-plus.svg", - Txt_Follow); // Put button to follow - } - - /***** Button to change user's photo *****/ - Pho_PutIconToChangeUsrPhoto (); - - /***** Button to change user's account *****/ - Acc_PutIconToChangeUsrAccount (); - - /***** End container *****/ - HTM_DIV_End (); + Lay_PutContextualLinkOnlyIcon (NextAction,NULL, + Rec_PutParamUsrCodEncrypted,NULL, + "user-cog.svg", + Txt_Administer_user); } + + if (Gbl.Hierarchy.Level == Hie_CRS) // Course selected + { + if (Gbl.Record.UsrDat->Roles.InCurrentCrs.Role == Rol_STD) // He/she is a student in current course + { + /***** Button to view student's test exams *****/ + if (Usr_CheckIfICanViewTst (Gbl.Record.UsrDat)) + { + if (ItsMe) + Lay_PutContextualLinkOnlyIcon (ActSeeMyTstRes,NULL, + Rec_PutParamsMyTsts,NULL, + "check.svg", + Txt_View_test_results); + else // Not me + Lay_PutContextualLinkOnlyIcon (ActSeeUsrTstRes,NULL, + Rec_PutParamsStdTsts,NULL, + "check.svg", + Txt_View_test_results); + } + + /***** Button to view student's assignments and works *****/ + if (Usr_CheckIfICanViewAsgWrk (Gbl.Record.UsrDat)) + { + if (ItsMe) + Lay_PutContextualLinkOnlyIcon (ActAdmAsgWrkUsr,NULL, + NULL,NULL, + "folder-open.svg", + Txt_View_homework); + else // Not me, I am not a student in current course + Lay_PutContextualLinkOnlyIcon (ActAdmAsgWrkCrs,NULL, + Rec_PutParamsWorks,NULL, + "folder-open.svg", + Txt_View_homework); + } + + /***** Button to view student's attendance *****/ + if (Usr_CheckIfICanViewAtt (Gbl.Record.UsrDat)) + { + if (ItsMe) + Lay_PutContextualLinkOnlyIcon (ActSeeLstMyAtt,NULL, + NULL,NULL, + "calendar-check.svg", + Txt_View_attendance); + else // Not me + Lay_PutContextualLinkOnlyIcon (ActSeeLstUsrAtt,NULL, + Rec_PutParamsStudent,NULL, + "calendar-check.svg", + Txt_View_attendance); + } + } + } + + /***** Button to print QR code *****/ + QR_PutLinkToPrintQRCode (ActPrnUsrQR, + Rec_PutParamUsrCodEncrypted,NULL); + + /***** Button to send a message *****/ + RecipientHasBannedMe = Msg_CheckIfUsrIsBanned (Gbl.Usrs.Me.UsrDat.UsrCod, // From: + Gbl.Record.UsrDat->UsrCod); // To: + if (!RecipientHasBannedMe) + Lay_PutContextualLinkOnlyIcon (ActReqMsgUsr,NULL, + Rec_PutParamsMsgUsr,NULL, + "envelope.svg", + Txt_Write_a_message); + + /***** Button to follow / unfollow *****/ + if (!ItsMe) // Not me + { + if (Fol_CheckUsrIsFollowerOf (Gbl.Usrs.Me.UsrDat.UsrCod, + Gbl.Record.UsrDat->UsrCod)) + // I follow user + Lay_PutContextualLinkOnlyIcon (ActUnfUsr,NULL, + Rec_PutParamUsrCodEncrypted,NULL, + "user-check.svg", + Txt_Following_unfollow); // Put button to unfollow, even if I can not view user's profile + else if (ICanViewUsrProfile) + Lay_PutContextualLinkOnlyIcon (ActFolUsr,NULL, + Rec_PutParamUsrCodEncrypted,NULL, + "user-plus.svg", + Txt_Follow); // Put button to follow + } + + /***** Button to change user's photo *****/ + Pho_PutIconToChangeUsrPhoto (); + + /***** Button to change user's account *****/ + Acc_PutIconToChangeUsrAccount (); + + /***** End container *****/ + HTM_DIV_End (); } } -void Rec_PutParamUsrCodEncrypted (void *Args) +void Rec_PutParamUsrCodEncrypted (__attribute__((unused)) void *Args) { - if (Args) - Usr_PutParamUsrCodEncrypted (Gbl.Record.UsrDat->EncryptedUsrCod); + Usr_PutParamUsrCodEncrypted (Gbl.Record.UsrDat->EncryptedUsrCod); } -static void Rec_PutParamsMyTsts (void *Args) +static void Rec_PutParamsMyTsts (__attribute__((unused)) void *Args) { - if (Args) - { - Dat_SetIniEndDates (); - Dat_WriteParamsIniEndDates (); - } + Dat_SetIniEndDates (); + Dat_WriteParamsIniEndDates (); } -static void Rec_PutParamsStdTsts (void *Args) +static void Rec_PutParamsStdTsts (__attribute__((unused)) void *Args) { - if (Args) - { - Rec_PutParamsStudent (&Gbl); - Dat_SetIniEndDates (); - Dat_WriteParamsIniEndDates (); - } + Rec_PutParamsStudent (NULL); + Dat_SetIniEndDates (); + Dat_WriteParamsIniEndDates (); } -static void Rec_PutParamsWorks (void *Args) +static void Rec_PutParamsWorks (__attribute__((unused)) void *Args) { - if (Args) - { - Rec_PutParamsStudent (&Gbl); - Par_PutHiddenParamChar ("FullTree",'Y'); // By default, show all files - Gbl.FileBrowser.FullTree = true; - Brw_PutHiddenParamFullTreeIfSelected (&Gbl.FileBrowser.FullTree); - } + Rec_PutParamsStudent (NULL); + Par_PutHiddenParamChar ("FullTree",'Y'); // By default, show all files + Gbl.FileBrowser.FullTree = true; + Brw_PutHiddenParamFullTreeIfSelected (&Gbl.FileBrowser.FullTree); } -static void Rec_PutParamsStudent (void *Args) +static void Rec_PutParamsStudent (__attribute__((unused)) void *Args) { - if (Args) - { - Par_PutHiddenParamString (NULL,"UsrCodStd",Gbl.Record.UsrDat->EncryptedUsrCod); - Grp_PutParamAllGroups (); - } + Par_PutHiddenParamString (NULL,"UsrCodStd",Gbl.Record.UsrDat->EncryptedUsrCod); + Grp_PutParamAllGroups (); } -static void Rec_PutParamsMsgUsr (void *Args) +static void Rec_PutParamsMsgUsr (__attribute__((unused)) void *Args) { - if (Args) - { - Rec_PutParamUsrCodEncrypted (Args); - Grp_PutParamAllGroups (); - Par_PutHiddenParamChar ("ShowOnlyOneRecipient",'Y'); - } + Rec_PutParamUsrCodEncrypted (NULL); + Grp_PutParamAllGroups (); + Par_PutHiddenParamChar ("ShowOnlyOneRecipient",'Y'); } /*****************************************************************************/ diff --git a/swad_record.h b/swad_record.h index 522912706..3d63ea44a 100644 --- a/swad_record.h +++ b/swad_record.h @@ -167,7 +167,7 @@ void Rec_ShowSharedRecordUnmodifiable (struct UsrData *UsrDat); void Rec_ShowPublicSharedRecordOtherUsr (void); void Rec_ShowSharedUsrRecord (Rec_SharedRecordViewType_t TypeOfView, struct UsrData *UsrDat,const char *Anchor); -void Rec_PutParamUsrCodEncrypted (void *Args); +void Rec_PutParamUsrCodEncrypted (__attribute__((unused)) void *Args); void Rec_UpdateMyRecord (void); Rol_Role_t Rec_GetRoleFromRecordForm (void);