diff --git a/swad_action.c b/swad_action.c index 35df6c07..43a90cf6 100644 --- a/swad_action.c +++ b/swad_action.c @@ -99,7 +99,6 @@ System: 11. ActSeeCty List countries 12. ActSeePen List pending institutions, centres, degrees and courses 13. ActReqRemOldCrs Request the total removal of old courses - 14. ActSeeDegTyp List types of degrees 15. ActSeeBan See banners 16. ActSeeLnk See institutional links 17. ActLstPlg List plugins @@ -107,13 +106,15 @@ System: 19. ActSeeCalSys Show the academic calendar 21. ActSysSch Search for courses, teachers, documents... - 22. ActEdiDegTyp Request edition of types of degrees + 23. ActEdiCty Edit countries 24. ActNewCty Request the creation of a country 25. ActRemCty Remove a country 26. ActRenCty Change the name of a country 27. ActChgCtyWWW Change web of country + 14. ActSeeDegTyp List types of degrees + 22. ActEdiDegTyp Request edition of types of degrees 28. ActNewDegTyp Request the creation of a type of degree 29. ActRemDegTyp Request the removal of a type of degree 30. ActRenDegTyp Request renaming of a type of degree @@ -1519,16 +1520,14 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = /* ActSeeCty */{ 862, 1,TabSys,ActSeeCty , 0, 0, 0, 0, 0, 0,0x1FF,Act_CONT_NORM,Act_THIS_WINDOW,Cty_ListCountries1 ,Cty_ListCountries2 ,"earth64x64.gif" }, /* ActSeePen */{1060, 2,TabSys,ActSeePen , 0, 0, 0, 0, 0, 0,0x1E0,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Deg_SeePending ,"hierarchy64x64.png" }, /* ActReqRemOldCrs */{1109, 3,TabSys,ActReqRemOldCrs , 0, 0, 0, 0, 0, 0,0x100,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Crs_AskRemoveOldCrss ,"removeusers64x64.gif" }, - /* ActSeeDegTyp */{1013, 4,TabSys,ActSeeDegTyp , 0, 0, 0, 0, 0, 0,0x100,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,DT_SeeDegreeTypesInSysTab ,"grouptypes64x64.gif" }, - /* ActSeeBan */{1137, 5,TabSys,ActSeeBan , 0, 0, 0, 0, 0, 0,0x100,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Ban_SeeBanners ,"picture64x64.gif" }, - /* ActSeeLnk */{ 748, 6,TabSys,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x1FF,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Lnk_SeeLinks ,"link64x64.gif" }, - /* ActLstPlg */{ 777, 7,TabSys,ActLstPlg , 0, 0, 0, 0, 0, 0,0x100,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Plg_ListPlugins ,"blocks64x64.gif" }, - /* ActSetUp */{ 840, 8,TabSys,ActSetUp , 0, 0, 0, 0, 0, 0,0x100,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Set_Setup ,"lightning64x64.gif" }, - /* ActSeeCalSys */{1622, 9,TabSys,ActSeeCalSys , 0, 0, 0, 0, 0, 0,0x1FF,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Cal_DrawCalendarSys ,"calendar64x64.png" }, + /* ActSeeBan */{1137, 4,TabSys,ActSeeBan , 0, 0, 0, 0, 0, 0,0x100,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Ban_SeeBanners ,"picture64x64.gif" }, + /* ActSeeLnk */{ 748, 5,TabSys,ActSeeLnk , 0, 0, 0, 0, 0, 0,0x1FF,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Lnk_SeeLinks ,"link64x64.gif" }, + /* ActLstPlg */{ 777, 6,TabSys,ActLstPlg , 0, 0, 0, 0, 0, 0,0x100,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Plg_ListPlugins ,"blocks64x64.gif" }, + /* ActSetUp */{ 840, 7,TabSys,ActSetUp , 0, 0, 0, 0, 0, 0,0x100,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Set_Setup ,"lightning64x64.gif" }, + /* ActSeeCalSys */{1622, 8,TabSys,ActSeeCalSys , 0, 0, 0, 0, 0, 0,0x1FF,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Cal_DrawCalendarSys ,"calendar64x64.png" }, // Actions not in menu: /* ActSysSch */{ 628,-1,TabUnk,ActSysReqSch , 0, 0, 0, 0, 0, 0,0x1FF,Act_CONT_NORM,Act_THIS_WINDOW,Sch_GetParamsSearch ,Sch_SysSearch ,NULL}, - /* ActEdiDegTyp */{ 573,-1,TabUnk,ActSeeDegTyp , 0, 0, 0, 0, 0, 0,0x100,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,DT_ReqEditDegreeTypes ,NULL}, /* ActEdiCty */{ 863,-1,TabUnk,ActSeeCty , 0, 0, 0, 0, 0, 0,0x100,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Cty_EditCountries ,NULL}, /* ActNewCty */{ 864,-1,TabUnk,ActSeeCty , 0, 0, 0, 0, 0, 0,0x100,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Cty_RecFormNewCountry ,NULL}, @@ -1536,10 +1535,6 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = /* ActRenCty */{ 866,-1,TabUnk,ActSeeCty , 0, 0, 0, 0, 0, 0,0x100,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Cty_RenameCountry ,NULL}, /* ActChgCtyWWW */{1157,-1,TabUnk,ActSeeCty , 0, 0, 0, 0, 0, 0,0x100,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Cty_ChangeCtyWWW ,NULL}, - /* ActNewDegTyp */{ 537,-1,TabUnk,ActSeeDegTyp , 0, 0, 0, 0, 0, 0,0x100,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,DT_RecFormNewDegreeType ,NULL}, - /* ActRemDegTyp */{ 545,-1,TabUnk,ActSeeDegTyp , 0, 0, 0, 0, 0, 0,0x100,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,DT_RemoveDegreeType ,NULL}, - /* ActRenDegTyp */{ 538,-1,TabUnk,ActSeeDegTyp , 0, 0, 0, 0, 0, 0,0x100,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,DT_RenameDegreeType ,NULL}, - /* ActRemOldCrs */{1110,-1,TabUnk,ActReqRemOldCrs , 0, 0, 0, 0, 0, 0,0x100,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Crs_RemoveOldCrss ,NULL}, /* ActEdiBan */{1138,-1,TabUnk,ActSeeBan , 0, 0, 0, 0, 0, 0,0x100,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Ban_EditBanners ,NULL}, @@ -1678,6 +1673,12 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = /* ActRecCtrPho */{1161,-1,TabUnk,ActSeeCtrInf , 0, 0, 0,0x1C0, 0, 0, 0,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,Ctr_ReceivePhoto ,NULL}, /* ActChgCtrPhoAtt */{1159,-1,TabUnk,ActSeeCtrInf , 0, 0, 0,0x1C0, 0, 0, 0,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Ctr_ChangeCtrPhotoAttribution ,NULL}, + /* ActSeeDegTyp */{1013,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x1FF, 0, 0, 0,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,DT_SeeDegreeTypesInDegTab ,NULL}, + /* ActEdiDegTyp */{ 573,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x100, 0, 0, 0,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,DT_ReqEditDegreeTypes ,NULL}, + /* ActNewDegTyp */{ 537,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x100, 0, 0, 0,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,DT_RecFormNewDegreeType ,NULL}, + /* ActRemDegTyp */{ 545,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x100, 0, 0, 0,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,DT_RemoveDegreeType ,NULL}, + /* ActRenDegTyp */{ 538,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x100, 0, 0, 0,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,DT_RenameDegreeType ,NULL}, + /* ActEdiDeg */{ 536,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x1FE, 0, 0, 0,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Deg_EditDegrees ,NULL}, /* ActReqDeg */{1206,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x1FE, 0, 0, 0,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Deg_RecFormReqDeg ,NULL}, /* ActNewDeg */{ 540,-1,TabUnk,ActSeeDeg , 0, 0, 0,0x1C0, 0, 0, 0,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Deg_RecFormNewDeg ,NULL}, diff --git a/swad_action.h b/swad_action.h index e4121d0b..a56c4eb5 100644 --- a/swad_action.h +++ b/swad_action.h @@ -57,7 +57,7 @@ typedef enum typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action -#define Act_NUM_ACTIONS (1 + 9 + 48 + 17 + 47 + 27 + 24 + 115 + 54 + 416 + 159 + 172 + 42 + 31 + 96) +#define Act_NUM_ACTIONS (1 + 9 + 43 + 17 + 47 + 32 + 24 + 115 + 54 + 416 + 159 + 172 + 42 + 31 + 96) #define Act_MAX_ACTION_COD 1636 @@ -91,58 +91,52 @@ typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to #define ActSeeCty (ActWebSvc + 2) #define ActSeePen (ActWebSvc + 3) #define ActReqRemOldCrs (ActWebSvc + 4) -#define ActSeeDegTyp (ActWebSvc + 5) -#define ActSeeBan (ActWebSvc + 6) -#define ActSeeLnk (ActWebSvc + 7) -#define ActLstPlg (ActWebSvc + 8) -#define ActSetUp (ActWebSvc + 9) -#define ActSeeCalSys (ActWebSvc + 10) +#define ActSeeBan (ActWebSvc + 5) +#define ActSeeLnk (ActWebSvc + 6) +#define ActLstPlg (ActWebSvc + 7) +#define ActSetUp (ActWebSvc + 8) +#define ActSeeCalSys (ActWebSvc + 9) // Secondary actions -#define ActSysSch (ActWebSvc + 11) -#define ActEdiDegTyp (ActWebSvc + 12) -#define ActEdiCty (ActWebSvc + 13) -#define ActNewCty (ActWebSvc + 14) -#define ActRemCty (ActWebSvc + 15) -#define ActRenCty (ActWebSvc + 16) -#define ActChgCtyWWW (ActWebSvc + 17) +#define ActSysSch (ActWebSvc + 10) +#define ActEdiCty (ActWebSvc + 11) +#define ActNewCty (ActWebSvc + 12) +#define ActRemCty (ActWebSvc + 13) +#define ActRenCty (ActWebSvc + 14) +#define ActChgCtyWWW (ActWebSvc + 15) -#define ActNewDegTyp (ActWebSvc + 18) -#define ActRemDegTyp (ActWebSvc + 19) -#define ActRenDegTyp (ActWebSvc + 20) +#define ActRemOldCrs (ActWebSvc + 16) -#define ActRemOldCrs (ActWebSvc + 21) +#define ActEdiBan (ActWebSvc + 17) +#define ActNewBan (ActWebSvc + 18) +#define ActRemBan (ActWebSvc + 19) +#define ActShoBan (ActWebSvc + 20) +#define ActHidBan (ActWebSvc + 21) +#define ActRenBanSho (ActWebSvc + 22) +#define ActRenBanFul (ActWebSvc + 23) +#define ActChgBanImg (ActWebSvc + 24) +#define ActChgBanWWW (ActWebSvc + 25) +#define ActClkBan (ActWebSvc + 26) -#define ActEdiBan (ActWebSvc + 22) -#define ActNewBan (ActWebSvc + 23) -#define ActRemBan (ActWebSvc + 24) -#define ActShoBan (ActWebSvc + 25) -#define ActHidBan (ActWebSvc + 26) -#define ActRenBanSho (ActWebSvc + 27) -#define ActRenBanFul (ActWebSvc + 28) -#define ActChgBanImg (ActWebSvc + 29) -#define ActChgBanWWW (ActWebSvc + 30) -#define ActClkBan (ActWebSvc + 31) +#define ActEdiLnk (ActWebSvc + 27) +#define ActNewLnk (ActWebSvc + 28) +#define ActRemLnk (ActWebSvc + 29) +#define ActRenLnkSho (ActWebSvc + 30) +#define ActRenLnkFul (ActWebSvc + 31) +#define ActChgLnkWWW (ActWebSvc + 32) -#define ActEdiLnk (ActWebSvc + 32) -#define ActNewLnk (ActWebSvc + 33) -#define ActRemLnk (ActWebSvc + 34) -#define ActRenLnkSho (ActWebSvc + 35) -#define ActRenLnkFul (ActWebSvc + 36) -#define ActChgLnkWWW (ActWebSvc + 37) +#define ActEdiPlg (ActWebSvc + 33) +#define ActNewPlg (ActWebSvc + 34) +#define ActRemPlg (ActWebSvc + 35) +#define ActRenPlg (ActWebSvc + 36) +#define ActChgPlgDes (ActWebSvc + 37) +#define ActChgPlgLog (ActWebSvc + 38) +#define ActChgPlgAppKey (ActWebSvc + 39) +#define ActChgPlgURL (ActWebSvc + 40) +#define ActChgPlgIP (ActWebSvc + 41) -#define ActEdiPlg (ActWebSvc + 38) -#define ActNewPlg (ActWebSvc + 39) -#define ActRemPlg (ActWebSvc + 40) -#define ActRenPlg (ActWebSvc + 41) -#define ActChgPlgDes (ActWebSvc + 42) -#define ActChgPlgLog (ActWebSvc + 43) -#define ActChgPlgAppKey (ActWebSvc + 44) -#define ActChgPlgURL (ActWebSvc + 45) -#define ActChgPlgIP (ActWebSvc + 46) - -#define ActPrnCalSys (ActWebSvc + 47) -#define ActChgCalSys1stDay (ActWebSvc + 48) +#define ActPrnCalSys (ActWebSvc + 42) +#define ActChgCalSys1stDay (ActWebSvc + 43) /*****************************************************************************/ /******************************** Country tab ********************************/ @@ -252,18 +246,24 @@ typedef signed int Act_Action_t; // Must be a signed type, because -1 is used to #define ActRecCtrPho (ActChgCalIns1stDay + 15) #define ActChgCtrPhoAtt (ActChgCalIns1stDay + 16) -#define ActEdiDeg (ActChgCalIns1stDay + 17) -#define ActReqDeg (ActChgCalIns1stDay + 18) -#define ActNewDeg (ActChgCalIns1stDay + 19) -#define ActRemDeg (ActChgCalIns1stDay + 20) -#define ActRenDegSho (ActChgCalIns1stDay + 21) -#define ActRenDegFul (ActChgCalIns1stDay + 22) -#define ActChgDegTyp (ActChgCalIns1stDay + 23) -#define ActChgDegWWW (ActChgCalIns1stDay + 24) -#define ActChgDegSta (ActChgCalIns1stDay + 25) +#define ActSeeDegTyp (ActChgCalIns1stDay + 17) +#define ActEdiDegTyp (ActChgCalIns1stDay + 18) +#define ActNewDegTyp (ActChgCalIns1stDay + 19) +#define ActRemDegTyp (ActChgCalIns1stDay + 20) +#define ActRenDegTyp (ActChgCalIns1stDay + 21) -#define ActPrnCalCtr (ActChgCalIns1stDay + 26) -#define ActChgCalCtr1stDay (ActChgCalIns1stDay + 27) +#define ActEdiDeg (ActChgCalIns1stDay + 22) +#define ActReqDeg (ActChgCalIns1stDay + 23) +#define ActNewDeg (ActChgCalIns1stDay + 24) +#define ActRemDeg (ActChgCalIns1stDay + 25) +#define ActRenDegSho (ActChgCalIns1stDay + 26) +#define ActRenDegFul (ActChgCalIns1stDay + 27) +#define ActChgDegTyp (ActChgCalIns1stDay + 28) +#define ActChgDegWWW (ActChgCalIns1stDay + 29) +#define ActChgDegSta (ActChgCalIns1stDay + 30) + +#define ActPrnCalCtr (ActChgCalIns1stDay + 31) +#define ActChgCalCtr1stDay (ActChgCalIns1stDay + 32) /*****************************************************************************/ /********************************* Degree tab ********************************/ diff --git a/swad_changelog.h b/swad_changelog.h index 88bddd4f..0a3f9c9d 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -211,13 +211,14 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 16.168.1 (2017-03-26)" +#define Log_PLATFORM_VERSION "SWAD 16.169 (2017-03-26)" #define CSS_FILE "swad16.166.css" #define JS_FILE "swad16.144.js" // Number of lines (includes comments but not blank lines) has been got with the following command: // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*?.h sql/swad*.sql | tail -1 /* + Version 16.169: Mar 26, 2017 Action to view degree types removed from main menu. (217660 lines) Version 16.168.1: Mar 26, 2017 Link to view degree types in degrees. (217694 lines) Version 16.168: Mar 26, 2017 Action to view places removed from main menu. (217679 lines) Version 16.167.16:Mar 26, 2017 Link to view places in centres. (217718 lines) diff --git a/swad_degree.c b/swad_degree.c index e0a0bd83..68fd28f8 100644 --- a/swad_degree.c +++ b/swad_degree.c @@ -699,7 +699,8 @@ static void Deg_ListDegreesForEdition (void) /***** Write heading *****/ sprintf (Gbl.Title,Txt_Degrees_of_CENTRE_X, Gbl.CurrentCtr.Ctr.ShrtName); - Lay_StartRoundFrameTable (NULL,Gbl.Title,NULL,Hlp_CENTRE_Degrees,2); + Lay_StartRoundFrameTable (NULL,Gbl.Title,DT_PutIconToViewDegreeTypes, + Hlp_CENTRE_Degrees,2); Deg_PutHeadDegreesForEdition (); /***** List the degrees *****/ @@ -949,6 +950,15 @@ static void Deg_PutFormToCreateDegree (void) struct DegreeType *DegTyp; unsigned NumDegTyp; + /***** Degree data *****/ + Deg = &Gbl.Degs.EditingDeg; + + /***** Start of frame *****/ + sprintf (Gbl.Title,Txt_New_degree_of_CENTRE_X, + Gbl.CurrentCtr.Ctr.ShrtName); + Lay_StartRoundFrame (NULL,Gbl.Title,DT_PutIconToViewDegreeTypes, + Hlp_CENTRE_Degrees); + /***** Start form *****/ if (Gbl.Usrs.Me.LoggedRole >= Rol_CTR_ADM) Act_FormStart (ActNewDeg); @@ -957,15 +967,10 @@ static void Deg_PutFormToCreateDegree (void) else Lay_ShowErrorAndExit ("You can not edit degrees."); - /***** Degree data *****/ - Deg = &Gbl.Degs.EditingDeg; + /***** Start table *****/ + fprintf (Gbl.F.Out,""); - /***** Start of frame *****/ - sprintf (Gbl.Title,Txt_New_degree_of_CENTRE_X, - Gbl.CurrentCtr.Ctr.ShrtName); - Lay_StartRoundFrameTable (NULL,Gbl.Title,NULL,Hlp_CENTRE_Degrees,2); - - /***** Write heading *****/ + /***** Table head *****/ Deg_PutHeadDegreesForEdition (); /***** Put disabled icon to remove degree *****/ @@ -1045,11 +1050,17 @@ static void Deg_PutFormToCreateDegree (void) "" ""); - /***** Send button and end frame *****/ - Lay_EndRoundFrameTableWithButton (Lay_CREATE_BUTTON,Txt_Create_degree); + /***** End table *****/ + fprintf (Gbl.F.Out,"
"); + + /***** Button to send form *****/ + Lay_PutCreateButton (Txt_Create_degree); /***** End form *****/ Act_FormEnd (); + + /***** End frame *****/ + Lay_EndRoundFrame (); } /*****************************************************************************/ @@ -1365,7 +1376,7 @@ static void Deg_ListOneDegreeForSeeing (struct Degree *Deg,unsigned NumDeg) void Deg_EditDegrees (void) { - extern const char *Txt_There_is_no_list_of_types_of_degree; + extern const char *Txt_There_are_no_types_of_degree; extern const char *Txt_You_must_create_at_least_one_type_of_degree_before_creating_degrees; /***** Get list of degrees in the current centre *****/ @@ -1385,8 +1396,12 @@ void Deg_EditDegrees (void) } else // No degree types { - Lay_ShowAlert (Lay_WARNING,Txt_There_is_no_list_of_types_of_degree); - Lay_ShowAlert (Lay_INFO,Txt_You_must_create_at_least_one_type_of_degree_before_creating_degrees); + /***** Warning message *****/ + Lay_ShowAlert (Lay_WARNING,Txt_There_are_no_types_of_degree); + + /***** Form to create the first degree type *****/ + if (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM) + DT_PutFormToCreateDegreeType (); } /***** Free list of degree types *****/ diff --git a/swad_degree_type.c b/swad_degree_type.c index dcc715d2..2c88c6cd 100644 --- a/swad_degree_type.c +++ b/swad_degree_type.c @@ -73,7 +73,6 @@ static void DT_PutIconsListDegTypes (void); static void DT_PutIconToEditDegTypes (void); static void DT_ListDegreeTypesForEdition (void); -static void DT_PutFormToCreateDegreeType (void); static void DT_PutHeadDegreeTypesForSeeing (Act_Action_t NextAction,DT_Order_t SelectedOrder); static void DT_PutHeadDegreeTypesForEdition (void); static void DT_CreateDegreeType (struct DegreeType *DegTyp); @@ -84,20 +83,6 @@ static unsigned DT_CountNumDegsOfType (long DegTypCod); static void DT_RemoveDegreeTypeCompletely (long DegTypCod); static bool DT_CheckIfDegreeTypeNameExists (const char *DegTypName,long DegTypCod); -/*****************************************************************************/ -/******************* Put link (form) to view degree types ********************/ -/*****************************************************************************/ - -void DT_PutIconToViewDegreeTypes (void) - { - extern const char *Txt_Types_of_degree; - - Lay_PutContextualLink (ActSeeDegTyp,NULL, - "hierarchy64x64.png", - Txt_Types_of_degree,NULL, - NULL); - } - /*****************************************************************************/ /************** Show selector of degree types for statistics *****************/ /*****************************************************************************/ @@ -137,11 +122,25 @@ void DT_WriteSelectorDegreeTypes (void) DT_FreeListDegreeTypes (); } +/*****************************************************************************/ +/******************* Put link (form) to view degree types ********************/ +/*****************************************************************************/ + +void DT_PutIconToViewDegreeTypes (void) + { + extern const char *Txt_Types_of_degree; + + Lay_PutContextualLink (ActSeeDegTyp,NULL, + "hierarchy64x64.png", + Txt_Types_of_degree,NULL, + NULL); + } + /*****************************************************************************/ /***************************** Show degree types *****************************/ /*****************************************************************************/ -void DT_SeeDegreeTypesInSysTab (void) +void DT_SeeDegreeTypesInDegTab (void) { DT_SeeDegreeTypes (ActSeeDegTyp,Sco_SCOPE_SYS, DT_ORDER_BY_DEGREE_TYPE); // Default order if not specified @@ -203,8 +202,8 @@ void DT_ReqEditDegreeTypes (void) /***************************** List degree types *****************************/ /*****************************************************************************/ // This function can be called from: -// - system tab ==> NextAction = ActSeeDegTyp -// - statistic tab ==> NextAction = ActSeeUseGbl +// - centre tab => NextAction = ActSeeDegTyp +// - statistic tab => NextAction = ActSeeUseGbl static void DT_ListDegreeTypes (Act_Action_t NextAction,DT_Order_t SelectedOrder) { @@ -328,8 +327,11 @@ static void DT_PutIconsListDegTypes (void) static void DT_PutIconToEditDegTypes (void) { extern const char *Txt_Edit; + bool IsCentreTab = Gbl.CurrentCtr.Ctr.CtrCod > 0 && + Gbl.CurrentDeg.Deg.DegCod <= 0; - if (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM) + if (IsCentreTab && // Only editable in centre tab + Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM) // Only editable by system admins Lay_PutContextualLink (ActEdiDegTyp,NULL, "edit64x64.png", Txt_Edit,NULL, @@ -359,7 +361,7 @@ static void DT_ListDegreeTypesForEdition (void) /* Put icon to remove degree type */ fprintf (Gbl.F.Out,"" ""); - if (Gbl.Degs.DegTypes.Lst[NumDegTyp].NumDegs) // Degree type has degrees ==> deletion forbidden + if (Gbl.Degs.DegTypes.Lst[NumDegTyp].NumDegs) // Degree type has degrees => deletion forbidden Lay_PutIconRemovalNotAllowed (); else { @@ -404,7 +406,7 @@ static void DT_ListDegreeTypesForEdition (void) /******************** Put a form to create a new degree type *****************/ /*****************************************************************************/ -static void DT_PutFormToCreateDegreeType (void) +void DT_PutFormToCreateDegreeType (void) { extern const char *Hlp_SYSTEM_Studies_edit; extern const char *Txt_New_type_of_degree; @@ -731,9 +733,9 @@ void DT_RemoveDegreeType (void) Lay_ShowErrorAndExit ("Code of type of degree not found."); /***** Check if this degree type has degrees *****/ - if (DegTyp.NumDegs) // Degree type has degrees ==> don't remove + if (DegTyp.NumDegs) // Degree type has degrees => don't remove Lay_ShowAlert (Lay_WARNING,Txt_To_remove_a_type_of_degree_you_must_first_remove_all_degrees_of_that_type); - else // Degree type has no degrees ==> remove it + else // Degree type has no degrees => remove it { /***** Remove degree type *****/ DT_RemoveDegreeTypeCompletely (DegTyp.DegTypCod); diff --git a/swad_degree_type.h b/swad_degree_type.h index 2b153948..ee40b95c 100644 --- a/swad_degree_type.h +++ b/swad_degree_type.h @@ -58,12 +58,13 @@ typedef enum /***************************** Public prototypes *****************************/ /*****************************************************************************/ -void DT_PutIconToViewDegreeTypes (void); void DT_WriteSelectorDegreeTypes (void); -void DT_SeeDegreeTypesInSysTab (void); +void DT_PutIconToViewDegreeTypes (void); +void DT_SeeDegreeTypesInDegTab (void); void DT_SeeDegreeTypesInStaTab (void); void DT_ReqEditDegreeTypes (void); +void DT_PutFormToCreateDegreeType (void); void DT_GetListDegreeTypes (Sco_Scope_t Scope,DT_Order_t Order); void DT_FreeListDegreeTypes (void); diff --git a/swad_text.c b/swad_text.c index 9296c439..2af8d156 100644 --- a/swad_text.c +++ b/swad_text.c @@ -47260,27 +47260,6 @@ const char *Txt_There_is_no_knowing_how_many_users_not_logged_have_accessed = "There is no knowing how many users not logged have accessed."; // Necessita de tradução #endif -const char *Txt_There_is_no_list_of_types_of_degree = -#if L==1 - "No hay lista de tipos de titulación."; // Necessita traduccio -#elif L==2 - "There is no list of types of degree."; // Übersetzung notwendig -#elif L==3 - "There is no list of types of degree."; -#elif L==4 - "No hay lista de tipos de titulación."; -#elif L==5 - "There is no list of types of degree."; // Besoin de traduction -#elif L==6 - "No hay lista de tipos de titulación."; // Okoteve traducción -#elif L==7 - "Non c'è la lista de tipi di laurea."; -#elif L==8 - "There is no list of types of degree."; // Potrzebujesz tlumaczenie -#elif L==9 - "There is no list of types of degree."; // Necessita de tradução -#endif - const char *Txt_There_is_no_user_with_email_X = // Warning: it is very important to include %s in the following sentences #if L==1 "No existe ningún usuario" @@ -53916,36 +53895,6 @@ const char *Txt_You_have_written_X_posts_in_this_thread = // Warning: it is ver "Você escreveu %u posts neste thread"; #endif -const char *Txt_You_must_create_at_least_one_type_of_degree_before_creating_degrees = -#if L==1 - "Debe crear al menos un tipo de titulación" - " antes de crear titulaciones."; // Necessita traduccio -#elif L==2 - "You must create at least one type of degree" - " before creating degrees."; // Übersetzung notwendig -#elif L==3 - "You must create at least one type of degree" - " before creating degrees."; -#elif L==4 - "Debe crear al menos un tipo de titulación" - " antes de crear titulaciones."; -#elif L==5 - "You must create at least one type of degree" - " before creating degrees."; // Besoin de traduction -#elif L==6 - "Debe crear al menos un tipo de titulación" - " antes de crear titulaciones."; // Okoteve traducción -#elif L==7 - "Devi creare almeno un tipo di laurea" - " prima di creare lauree."; -#elif L==8 - "You must create at least one type of degree" - " before creating degrees."; // Potrzebujesz tlumaczenie -#elif L==9 - "You must create at least one type of degree" - " before creating degrees."; // Necessita de tradução -#endif - const char *Txt_You_must_enter_an_integer_value_as_the_correct_answer = #if L==1 "Debe escribir un valor entero como respuesta correcta."; // Necessita traduccio