diff --git a/swad_action_list.c b/swad_action_list.c
index 3e09c76c..e3edbcff 100644
--- a/swad_action_list.c
+++ b/swad_action_list.c
@@ -163,12 +163,12 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActUnfNotGblTL ] = {1513,-1,TabUnk,ActSeeGblTL ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_AJAX_NORMAL,NULL ,TmlFav_UnfNoteGbl ,NULL},
[ActFavComGblTL ] = {1516,-1,TabUnk,ActSeeGblTL ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_AJAX_NORMAL,NULL ,TmlFav_FavCommGbl ,NULL},
[ActUnfComGblTL ] = {1517,-1,TabUnk,ActSeeGblTL ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_AJAX_NORMAL,NULL ,TmlFav_UnfCommGbl ,NULL},
- [ActReqRemPubGblTL ] = {1494,-1,TabUnk,ActSeeGblTL ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,TmlWho_GetParWho ,TmlNot_RequestRemNoteGbl ,NULL},
+ [ActReqRemPubGblTL ] = {1494,-1,TabUnk,ActSeeGblTL ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,TmlWho_GetParWho ,TmlNot_ReqRemNoteGbl ,NULL},
[ActRemPubGblTL ] = {1493,-1,TabUnk,ActSeeGblTL ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,TmlWho_GetParWho ,TmlNot_RemoveNoteGbl ,NULL},
- [ActReqRemComGblTL ] = {1505,-1,TabUnk,ActSeeGblTL ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,TmlWho_GetParWho ,TmlCom_RequestRemComGbl ,NULL},
+ [ActReqRemComGblTL ] = {1505,-1,TabUnk,ActSeeGblTL ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,TmlWho_GetParWho ,TmlCom_ReqRemComGbl ,NULL},
[ActRemComGblTL ] = {1507,-1,TabUnk,ActSeeGblTL ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,TmlWho_GetParWho ,TmlCom_RemoveComGbl ,NULL},
- [ActReqOthPubPrf ] = {1401,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prf_RequestUserProfile ,NULL},
+ [ActReqOthPubPrf ] = {1401,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prf_ReqUserProfile ,NULL},
[ActRefOldPubUsrTL ] = {1511,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_AJAX_NORMAL,NULL ,Tml_RefreshOldTimelineUsr ,NULL},
[ActRcvPstUsrTL ] = {1498,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_DATA,Act_BRW_1ST_TAB,NULL ,TmlPst_ReceivePostUsr ,NULL},
@@ -183,9 +183,9 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActUnfNotUsrTL ] = {1515,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_AJAX_NORMAL,NULL ,TmlFav_UnfNoteUsr ,NULL},
[ActFavComUsrTL ] = {1518,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_AJAX_NORMAL,NULL ,TmlFav_FavCommUsr ,NULL},
[ActUnfComUsrTL ] = {1519,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_AJAX_NORMAL,NULL ,TmlFav_UnfCommUsr ,NULL},
- [ActReqRemPubUsrTL ] = {1501,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TmlNot_RequestRemNoteUsr ,NULL},
+ [ActReqRemPubUsrTL ] = {1501,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TmlNot_ReqRemNoteUsr ,NULL},
[ActRemPubUsrTL ] = {1502,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TmlNot_RemoveNoteUsr ,NULL},
- [ActReqRemComUsrTL ] = {1506,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TmlCom_RequestRemComUsr ,NULL},
+ [ActReqRemComUsrTL ] = {1506,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TmlCom_ReqRemComUsr ,NULL},
[ActRemComUsrTL ] = {1508,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,TmlCom_RemoveComUsr ,NULL},
[ActSeeOthPubPrf ] = {1402,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prf_GetUsrDatAndShowUserProfile,NULL},
@@ -292,7 +292,7 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActRenInsShoCfg ] = {1592,-1,TabUnk,ActSeeInsInf , 0, 0, 0, 0,0x200, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,InsCfg_RenameInsShort ,InsCfg_ContEditAfterChgIns ,NULL},
[ActRenInsFulCfg ] = {1591,-1,TabUnk,ActSeeInsInf , 0, 0, 0, 0,0x200, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,InsCfg_RenameInsFull ,InsCfg_ContEditAfterChgIns ,NULL},
[ActChgInsWWWCfg ] = {1593,-1,TabUnk,ActSeeInsInf , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,InsCfg_ChangeInsWWW ,NULL},
- [ActReqInsLog ] = {1245,-1,TabUnk,ActSeeInsInf , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,InsCfg_RequestLogo ,NULL},
+ [ActReqInsLog ] = {1245,-1,TabUnk,ActSeeInsInf , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,InsCfg_ReqLogo ,NULL},
[ActRecInsLog ] = { 699,-1,TabUnk,ActSeeInsInf , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_DATA,Act_BRW_1ST_TAB,InsCfg_ReceiveLogo ,InsCfg_ShowConfiguration ,NULL},
[ActRemInsLog ] = {1341,-1,TabUnk,ActSeeInsInf , 0, 0, 0, 0,0x300, 0, 0,Act_CONT_DATA,Act_BRW_1ST_TAB,InsCfg_RemoveLogo ,InsCfg_ShowConfiguration ,NULL},
@@ -346,10 +346,10 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActChgCtrLgtCfg ] = {1816,-1,TabUnk,ActSeeCtrInf , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,CtrCfg_ChangeCtrLongitude ,NULL},
[ActChgCtrAltCfg ] = {1817,-1,TabUnk,ActSeeCtrInf , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,CtrCfg_ChangeCtrAltitude ,NULL},
[ActChgCtrWWWCfg ] = {1596,-1,TabUnk,ActSeeCtrInf , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,CtrCfg_ChangeCtrWWW ,NULL},
- [ActReqCtrLog ] = {1244,-1,TabUnk,ActSeeCtrInf , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,CtrCfg_RequestLogo ,NULL},
+ [ActReqCtrLog ] = {1244,-1,TabUnk,ActSeeCtrInf , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,CtrCfg_ReqLogo ,NULL},
[ActRecCtrLog ] = {1051,-1,TabUnk,ActSeeCtrInf , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_DATA,Act_BRW_1ST_TAB,CtrCfg_ReceiveLogo ,CtrCfg_ShowConfiguration ,NULL},
[ActRemCtrLog ] = {1342,-1,TabUnk,ActSeeCtrInf , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_DATA,Act_BRW_1ST_TAB,CtrCfg_RemoveLogo ,CtrCfg_ShowConfiguration ,NULL},
- [ActReqCtrPho ] = {1160,-1,TabUnk,ActSeeCtrInf , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,CtrCfg_RequestPhoto ,NULL},
+ [ActReqCtrPho ] = {1160,-1,TabUnk,ActSeeCtrInf , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,CtrCfg_ReqPhoto ,NULL},
[ActRecCtrPho ] = {1161,-1,TabUnk,ActSeeCtrInf , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_DATA,Act_BRW_1ST_TAB,NULL ,CtrCfg_ReceivePhoto ,NULL},
[ActChgCtrPhoAtt ] = {1159,-1,TabUnk,ActSeeCtrInf , 0, 0, 0,0x380, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,CtrCfg_ChangeCtrPhotoAttr ,NULL},
@@ -398,9 +398,9 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActRenDegShoCfg ] = {1598,-1,TabUnk,ActSeeDegInf , 0, 0,0x380, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,DegCfg_RenameDegreeShort ,DegCfg_ContEditAfterChgDeg ,NULL},
[ActRenDegFulCfg ] = {1597,-1,TabUnk,ActSeeDegInf , 0, 0,0x380, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,DegCfg_RenameDegreeFull ,DegCfg_ContEditAfterChgDeg ,NULL},
[ActChgDegWWWCfg ] = {1599,-1,TabUnk,ActSeeDegInf , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,DegCfg_ChangeDegWWW ,NULL},
- [ActReqDegLog ] = {1246,-1,TabUnk,ActSeeDegInf , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Deg_RequestLogo ,NULL},
- [ActRecDegLog ] = { 553,-1,TabUnk,ActSeeDegInf , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_DATA,Act_BRW_1ST_TAB,Deg_ReceiveLogo ,DegCfg_ShowConfiguration ,NULL},
- [ActRemDegLog ] = {1343,-1,TabUnk,ActSeeDegInf , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_DATA,Act_BRW_1ST_TAB,Deg_RemoveLogo ,DegCfg_ShowConfiguration ,NULL},
+ [ActReqDegLog ] = {1246,-1,TabUnk,ActSeeDegInf , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,DegCfg_ReqLogo ,NULL},
+ [ActRecDegLog ] = { 553,-1,TabUnk,ActSeeDegInf , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_DATA,Act_BRW_1ST_TAB,DegCfg_ReceiveLogo ,DegCfg_ShowConfiguration ,NULL},
+ [ActRemDegLog ] = {1343,-1,TabUnk,ActSeeDegInf , 0, 0,0x3C0, 0, 0, 0, 0,Act_CONT_DATA,Act_BRW_1ST_TAB,DegCfg_RemoveLogo ,DegCfg_ShowConfiguration ,NULL},
[ActEdiCrs ] = { 555,-1,TabUnk,ActSeeCrs , 0, 0,0x3C6, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Crs_EditCourses ,NULL},
[ActReqCrs ] = {1053,-1,TabUnk,ActSeeCrs , 0, 0,0x3C6, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Crs_ReceiveFormReqCrs ,Crs_ContEditAfterChgCrs ,NULL},
@@ -435,8 +435,8 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActEdiPrg ] = {1926, 1,TabCrs,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_EditCourseProgram ,NULL},
[ActSeePrgItm ] = {1927,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_ViewItemAfterEdit ,NULL},
- [ActFrmChgPrgItm ] = {1823,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_RequestChangeItem ,NULL},
- [ActFrmNewPrgItm ] = {1822,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_RequestCreateItem ,NULL},
+ [ActFrmChgPrgItm ] = {1823,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_ReqChangeItem ,NULL},
+ [ActFrmNewPrgItm ] = {1822,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_ReqCreateItem ,NULL},
[ActChgPrgItm ] = {1826,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_ReceiveFormChgItem ,NULL},
[ActNewPrgItm ] = {1825,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_ReceiveFormNewItem ,NULL},
[ActReqRemPrgItm ] = {1827,-1,TabUnk,ActSeePrg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prg_ReqRemItem ,NULL},
@@ -591,15 +591,15 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActSeeAsg ] = { 801, 0,TabAss,ActSeeAsg ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Asg_SeeAssignments ,"edit" },
[ActSeePrj ] = {1674, 1,TabAss,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_SeeProjects ,"file-invoice" },
[ActSeeAllCfe ] = { 85, 2,TabAss,ActSeeAllCfe ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Cfe_ListCallsForExamsSee ,"bullhorn" },
- [ActEdiTstQst ] = { 104, 3,TabAss,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Dat_SetIniEndDatesToPastAndNow ,Qst_RequestEditQsts ,"clipboard-question" },
- [ActReqTst ] = { 103, 4,TabAss,ActReqTst ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_RequestTest ,"check" },
+ [ActEdiTstQst ] = { 104, 3,TabAss,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Dat_SetIniEndDatesToPastAndNow ,Qst_ReqEditQsts ,"clipboard-question" },
+ [ActReqTst ] = { 103, 4,TabAss,ActReqTst ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Tst_ReqTest ,"check" },
[ActSeeAllExa ] = {1848, 5,TabAss,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Exa_SeeAllExams ,"file-signature" },
[ActSeeAllGam ] = {1649, 6,TabAss,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_SeeAllGames ,"gamepad" },
[ActSeeAllRub ] = {1951, 7,TabAss,ActSeeAllRub ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Rub_SeeAllRubrics ,"tasks" },
// Actions not in menu:
- [ActFrmNewAsg ] = { 812,-1,TabUnk,ActSeeAsg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Asg_RequestCreatOrEditAsg ,NULL},
- [ActEdiOneAsg ] = { 814,-1,TabUnk,ActSeeAsg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Asg_RequestCreatOrEditAsg ,NULL},
+ [ActFrmNewAsg ] = { 812,-1,TabUnk,ActSeeAsg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Asg_ReqCreatOrEditAsg ,NULL},
+ [ActEdiOneAsg ] = { 814,-1,TabUnk,ActSeeAsg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Asg_ReqCreatOrEditAsg ,NULL},
[ActSeeOneAsg ] = {1942,-1,TabUnk,ActSeeAsg ,0x3F8,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Asg_SeeOneAssignment ,NULL},
[ActPrnOneAsg ] = {1637,-1,TabUnk,ActSeeAsg ,0x3F8,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,NULL ,Asg_PrintOneAssignment ,NULL},
[ActNewAsg ] = { 803,-1,TabUnk,ActSeeAsg ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Asg_ReceiveFormAssignment ,NULL},
@@ -618,8 +618,8 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActReqUnlAllPrj ] = {1776,-1,TabUnk,ActSeePrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReqUnloSelectedPrjsEdition ,NULL},
[ActLckAllPrj ] = {1777,-1,TabUnk,ActSeePrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_LockSelectedPrjsEdition ,NULL},
[ActUnlAllPrj ] = {1778,-1,TabUnk,ActSeePrj ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_UnloSelectedPrjsEdition ,NULL},
- [ActFrmNewPrj ] = {1675,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_RequestCreatePrj ,NULL},
- [ActEdiOnePrj ] = {1676,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_RequestEditPrj ,NULL},
+ [ActFrmNewPrj ] = {1675,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReqCreatePrj ,NULL},
+ [ActEdiOnePrj ] = {1676,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReqEditPrj ,NULL},
[ActSeeOnePrj ] = {1949,-1,TabUnk,ActSeePrj ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Brw_ShowFileBrowserOrWorks ,NULL},
[ActPrnOnePrj ] = {1677,-1,TabUnk,ActSeePrj ,0x3F8,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,NULL ,Prj_PrintOneProject ,NULL},
[ActNewPrj ] = {1678,-1,TabUnk,ActSeePrj ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prj_ReceiveFormProject ,NULL},
@@ -690,7 +690,7 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActEdiCfe ] = { 91,-1,TabUnk,ActSeeAllCfe ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Cfe_PutFrmEditACallForExam ,NULL},
[ActRcvCfe ] = { 110,-1,TabUnk,ActSeeAllCfe ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Cfe_ReceiveCallForExam1 ,Cfe_ReceiveCallForExam2 ,NULL},
[ActPrnCfe ] = { 179,-1,TabUnk,ActSeeAllCfe ,0x3F8,0x3C7, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,NULL ,Cfe_PrintCallForExam ,NULL},
- [ActReqRemCfe ] = {1619,-1,TabUnk,ActSeeAllCfe ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Cfe_ReqRemoveCallForExam ,NULL},
+ [ActReqRemCfe ] = {1619,-1,TabUnk,ActSeeAllCfe ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Cfe_ReqRemCallForExam ,NULL},
[ActRemCfe ] = { 187,-1,TabUnk,ActSeeAllCfe ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Cfe_RemoveCallForExam1 ,Cfe_RemoveCallForExam2 ,NULL},
[ActHidCfe ] = {1620,-1,TabUnk,ActSeeAllCfe ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Cfe_HideCallForExam ,Cfe_ListCallsForExamsEdit ,NULL},
[ActUnhCfe ] = {1621,-1,TabUnk,ActSeeAllCfe ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Cfe_UnhideCallForExam ,Cfe_ListCallsForExamsEdit ,NULL},
@@ -701,9 +701,9 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActImpTstQst ] = {1008,-1,TabUnk,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_DATA,Act_BRW_1ST_TAB,NULL ,QstImp_ImpQstsFromXML ,NULL},
[ActLstTstQst ] = { 132,-1,TabUnk,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Qst_ListQuestionsToEdit ,NULL},
[ActRcvTstQst ] = { 126,-1,TabUnk,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_DATA,Act_BRW_1ST_TAB,NULL ,Qst_ReceiveQst ,NULL},
- [ActReqRemSevTstQst ] = {1835,-1,TabUnk,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Qst_RequestRemoveSelectedQsts ,NULL},
+ [ActReqRemSevTstQst ] = {1835,-1,TabUnk,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Qst_ReqRemSelectedQsts ,NULL},
[ActRemSevTstQst ] = {1836,-1,TabUnk,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Qst_RemoveSelectedQsts ,NULL},
- [ActReqRemOneTstQst ] = {1523,-1,TabUnk,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Qst_RequestRemoveOneQst ,NULL},
+ [ActReqRemOneTstQst ] = {1523,-1,TabUnk,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Qst_ReqRemOneQst ,NULL},
[ActRemOneTstQst ] = { 133,-1,TabUnk,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Qst_RemoveOneQst ,NULL},
[ActChgShfTstQst ] = { 455,-1,TabUnk,ActEdiTstQst ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Qst_ChangeShuffleQst ,NULL},
@@ -728,8 +728,8 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActSeeExa ] = {1849,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Exa_SeeOneExam ,NULL},
- [ActFrmNewExa ] = {1877,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Exa_RequestCreatOrEditExam ,NULL},
- [ActEdiOneExa ] = {1878,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Exa_RequestCreatOrEditExam ,NULL},
+ [ActFrmNewExa ] = {1877,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Exa_ReqCreatOrEditExam ,NULL},
+ [ActEdiOneExa ] = {1878,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Exa_ReqCreatOrEditExam ,NULL},
[ActNewExa ] = {1879,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Exa_ReceiveFormExam ,NULL},
[ActChgExa ] = {1880,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Exa_ReceiveFormExam ,NULL},
[ActReqRemExa ] = {1881,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Exa_AskRemExam ,NULL},
@@ -738,9 +738,9 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActUnhExa ] = {1884,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Exa_UnhideExam ,NULL},
[ActReqLnkExa ] = {1936,-1,TabUnk,ActSeeAllExa ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaRsc_GetLinkToExam ,NULL},
- [ActFrmNewExaSet ] = {1892,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Dat_SetIniEndDatesToPastAndNow ,ExaSet_RequestCreatOrEditSet ,NULL},
+ [ActFrmNewExaSet ] = {1892,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Dat_SetIniEndDatesToPastAndNow ,ExaSet_ReqCreatOrEditSet ,NULL},
[ActNewExaSet ] = {1898,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSet_ReceiveFormSet ,NULL},
- [ActReqRemExaSet ] = {1893,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSet_RequestRemoveSet ,NULL},
+ [ActReqRemExaSet ] = {1893,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSet_ReqRemSet ,NULL},
[ActRemExaSet ] = {1894,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSet_RemoveSet ,NULL},
[ActUp_ExaSet ] = {1895,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSet_MoveUpSet ,NULL},
[ActDwnExaSet ] = {1896,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSet_MoveDownSet ,NULL},
@@ -750,16 +750,16 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActReqAddQstExaSet ] = {1885,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Dat_SetIniEndDatesToPastAndNow ,ExaSet_ReqSelectQstsToAddToSet ,NULL},
[ActLstTstQstForSet ] = {1886,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSet_ListQstsToAddToSet ,NULL},
[ActAddQstToExa ] = {1887,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSet_AddQstsToSet ,NULL},
- [ActReqRemSetQst ] = {1888,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSet_RequestRemoveQstFromSet ,NULL},
+ [ActReqRemSetQst ] = {1888,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSet_ReqRemQstFromSet ,NULL},
[ActRemExaQst ] = {1889,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSet_RemoveQstFromSet ,NULL},
[ActValSetQst ] = {1909,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSet_ValidateQst ,NULL},
[ActInvSetQst ] = {1910,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSet_InvalidateQst ,NULL},
- [ActReqNewExaSes ] = {1852,-1,TabUnk,ActSeeAllExa ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSes_RequestCreatOrEditSes ,NULL},
- [ActEdiOneExaSes ] = {1902,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSes_RequestCreatOrEditSes ,NULL},
+ [ActReqNewExaSes ] = {1852,-1,TabUnk,ActSeeAllExa ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSes_ReqCreatOrEditSes ,NULL},
+ [ActEdiOneExaSes ] = {1902,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSes_ReqCreatOrEditSes ,NULL},
[ActNewExaSes ] = {1853,-1,TabUnk,ActSeeAllExa ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSes_ReceiveFormSession ,NULL},
[ActChgExaSes ] = {1903,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSes_ReceiveFormSession ,NULL},
- [ActReqRemExaSes ] = {1850,-1,TabUnk,ActSeeAllExa ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSes_RequestRemoveSession ,NULL},
+ [ActReqRemExaSes ] = {1850,-1,TabUnk,ActSeeAllExa ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSes_ReqRemSession ,NULL},
[ActRemExaSes ] = {1851,-1,TabUnk,ActSeeAllExa ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSes_RemoveSession ,NULL},
[ActHidExaSes ] = {1900,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSes_HideSession ,NULL},
[ActUnhExaSes ] = {1901,-1,TabUnk,ActSeeAllExa ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,ExaSes_UnhideSession ,NULL},
@@ -783,11 +783,11 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActSeeGam ] = {1650,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_SeeOneGame ,NULL},
- [ActReqRemMch ] = {1783,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Mch_RequestRemoveMatch ,NULL},
+ [ActReqRemMch ] = {1783,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Mch_ReqRemMatch ,NULL},
[ActRemMch ] = {1784,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Mch_RemoveMatch ,NULL},
[ActEdiMch ] = {1913,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Mch_EditMatch ,NULL},
[ActChgMch ] = {1914,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Mch_ChangeMatch ,NULL},
- [ActReqNewMch ] = {1670,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_RequestNewMatch ,NULL},
+ [ActReqNewMch ] = {1670,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_ReqNewMatch ,NULL},
[ActNewMch ] = {1671,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,Mch_CreateNewMatch ,Mch_ResumeMatch ,NULL},
[ActResMch ] = {1785,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,Mch_GetMatchBeingPlayed ,Mch_ResumeMatch ,NULL},
[ActBckMch ] = {1790,-1,TabUnk,ActSeeAllGam ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_2ND_TAB,Mch_GetMatchBeingPlayed ,Mch_BackMatch ,NULL},
@@ -819,8 +819,8 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActLstOneGam ] = {1912,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_ListGame ,NULL},
- [ActFrmNewGam ] = {1652,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_RequestCreatOrEditGame ,NULL},
- [ActEdiOneGam ] = {1653,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_RequestCreatOrEditGame ,NULL},
+ [ActFrmNewGam ] = {1652,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_ReqCreatOrEditGame ,NULL},
+ [ActEdiOneGam ] = {1653,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_ReqCreatOrEditGame ,NULL},
[ActNewGam ] = {1654,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_ReceiveFormGame ,NULL},
[ActChgGam ] = {1655,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_ReceiveFormGame ,NULL},
[ActReqRemGam ] = {1656,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_AskRemGame ,NULL},
@@ -830,20 +830,29 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActAddOneGamQst ] = {1662,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Dat_SetIniEndDatesToPastAndNow ,Gam_ReqSelectQstsToAddToGame ,NULL},
[ActGamLstTstQst ] = {1666,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_ListQstsToAddToGame ,NULL},
[ActAddTstQstToGam ] = {1667,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_AddQstsToGame ,NULL},
- [ActReqRemGamQst ] = {1664,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_RequestRemoveQstFromGame ,NULL},
+ [ActReqRemGamQst ] = {1664,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_ReqRemQstFromGame ,NULL},
[ActRemGamQst ] = {1665,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_RemoveQstFromGame ,NULL},
[ActUp_GamQst ] = {1668,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_MoveUpQst ,NULL},
[ActDwnGamQst ] = {1669,-1,TabUnk,ActSeeAllGam ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Gam_MoveDownQst ,NULL},
[ActReqLnkGam ] = {1935,-1,TabUnk,ActSeeAllGam ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,GamRsc_GetLinkToGame ,NULL},
[ActSeeRub ] = {1952,-1,TabUnk,ActSeeAllRub ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Rub_SeeOneRubric ,NULL},
- [ActFrmNewRub ] = {1953,-1,TabUnk,ActSeeAllRub ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Rub_RequestCreatOrEditRubric ,NULL},
- [ActEdiOneRub ] = {1954,-1,TabUnk,ActSeeAllRub ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Rub_RequestCreatOrEditRubric ,NULL},
+ [ActFrmNewRub ] = {1953,-1,TabUnk,ActSeeAllRub ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Rub_ReqCreatOrEditRubric ,NULL},
+ [ActEdiOneRub ] = {1954,-1,TabUnk,ActSeeAllRub ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Rub_ReqCreatOrEditRubric ,NULL},
[ActNewRub ] = {1955,-1,TabUnk,ActSeeAllRub ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Rub_ReceiveFormRubric ,NULL},
[ActChgRub ] = {1956,-1,TabUnk,ActSeeAllRub ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Rub_ReceiveFormRubric ,NULL},
[ActReqRemRub ] = {1957,-1,TabUnk,ActSeeAllRub ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Rub_AskRemRubric ,NULL},
[ActRemRub ] = {1958,-1,TabUnk,ActSeeAllRub ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Rub_RemoveRubric ,NULL},
- [ActFrmNewRubCri ] = {1959,-1,TabUnk,ActSeeAllRub ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,RubCri_RequestCreatOrEditCri ,NULL},
+
+ [ActFrmNewRubCri ] = {1959,-1,TabUnk,ActSeeAllRub ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,RubCri_ReqCreatOrEditCriterion ,NULL},
+ [ActNewRubCri ] = {1960,-1,TabUnk,ActSeeAllRub ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,RubCri_ReceiveFormCriterion ,NULL},
+ [ActReqRemRubCri ] = {1961,-1,TabUnk,ActSeeAllRub ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,RubCri_ReqRemCriterion ,NULL},
+ [ActRemRubCri ] = {1962,-1,TabUnk,ActSeeAllRub ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,RubCri_RemoveCriterion ,NULL},
+ [ActUp_RubCri ] = {1963,-1,TabUnk,ActSeeAllRub ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,RubCri_MoveUpCriterion ,NULL},
+ [ActDwnRubCri ] = {1964,-1,TabUnk,ActSeeAllRub ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,RubCri_MoveDownCriterion ,NULL},
+ [ActChgTitRubCri ] = {1965,-1,TabUnk,ActSeeAllRub ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,RubCri_ChangeCriterionTitle ,NULL},
+ [ActChgMinRubCri ] = {1966,-1,TabUnk,ActSeeAllRub ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,RubCri_ChangeMinValueCriterion ,NULL},
+ [ActChgMaxRubCri ] = {1967,-1,TabUnk,ActSeeAllRub ,0x238,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,RubCri_ChangeMaxValueCriterion ,NULL},
// TabFil ******************************************************************
// Actions in menu:
@@ -1412,8 +1421,8 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActPrnLstMyAtt ] = {1474,-1,TabUnk,ActSeeAtt ,0x008, 0, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,NULL ,Att_PrintMyAttendanceCrs ,NULL},
[ActSeeLstUsrAtt ] = {1074,-1,TabUnk,ActSeeAtt ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Att_ListUsrsAttendanceCrs ,NULL},
[ActPrnLstUsrAtt ] = {1075,-1,TabUnk,ActSeeAtt ,0x230,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_NEW_TAB,NULL ,Att_PrintUsrsAttendanceCrs ,NULL},
- [ActFrmNewAtt ] = {1063,-1,TabUnk,ActSeeAtt ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Att_RequestCreatOrEditAttEvent ,NULL},
- [ActEdiOneAtt ] = {1064,-1,TabUnk,ActSeeAtt ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Att_RequestCreatOrEditAttEvent ,NULL},
+ [ActFrmNewAtt ] = {1063,-1,TabUnk,ActSeeAtt ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Att_ReqCreatOrEditAttEvent ,NULL},
+ [ActEdiOneAtt ] = {1064,-1,TabUnk,ActSeeAtt ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Att_ReqCreatOrEditAttEvent ,NULL},
[ActNewAtt ] = {1065,-1,TabUnk,ActSeeAtt ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Att_ReceiveFormAttEvent ,NULL},
[ActChgAtt ] = {1066,-1,TabUnk,ActSeeAtt ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Att_ReceiveFormAttEvent ,NULL},
[ActReqRemAtt ] = {1067,-1,TabUnk,ActSeeAtt ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Att_AskRemAttEvent ,NULL},
@@ -1451,9 +1460,9 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActUpdStdPho ] = {1439,-1,TabUnk,ActLstStd ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_BRW_1ST_TAB,Pho_UpdateUsrPhoto1 ,Pho_UpdateUsrPhoto2 ,NULL},
[ActUpdTchPho ] = {1440,-1,TabUnk,ActLstTch ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_BRW_1ST_TAB,Pho_UpdateUsrPhoto1 ,Pho_UpdateUsrPhoto2 ,NULL},
- [ActReqRemOthPho ] = {1574,-1,TabUnk,ActLstOth ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Pho_ReqRemoveUsrPhoto ,NULL},
- [ActReqRemStdPho ] = {1575,-1,TabUnk,ActLstStd ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Pho_ReqRemoveUsrPhoto ,NULL},
- [ActReqRemTchPho ] = {1576,-1,TabUnk,ActLstTch ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Pho_ReqRemoveUsrPhoto ,NULL},
+ [ActReqRemOthPho ] = {1574,-1,TabUnk,ActLstOth ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Pho_ReqRemUsrPhoto ,NULL},
+ [ActReqRemStdPho ] = {1575,-1,TabUnk,ActLstStd ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Pho_ReqRemUsrPhoto ,NULL},
+ [ActReqRemTchPho ] = {1576,-1,TabUnk,ActLstTch ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Pho_ReqRemUsrPhoto ,NULL},
[ActRemOthPho ] = {1441,-1,TabUnk,ActLstOth ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Pho_RemoveUsrPhoto ,NULL},
[ActRemStdPho ] = {1442,-1,TabUnk,ActLstStd ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Pho_RemoveUsrPhoto ,NULL},
[ActRemTchPho ] = {1443,-1,TabUnk,ActLstTch ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Pho_RemoveUsrPhoto ,NULL},
@@ -1540,10 +1549,10 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActLstSimUsr ] = {1579,-1,TabUnk,ActLstOth ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Dup_GetUsrCodAndListSimilarUsrs,NULL},
[ActRemDupUsr ] = {1580,-1,TabUnk,ActLstOth ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Dup_RemoveUsrFromListDupUsrs ,NULL},
- [ActReqFolSevStd ] = {1756,-1,TabUnk,ActLstStd ,0x3F8,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Fol_RequestFollowStds ,NULL},
- [ActReqFolSevTch ] = {1757,-1,TabUnk,ActLstTch ,0x3F8,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Fol_RequestFollowTchs ,NULL},
- [ActReqUnfSevStd ] = {1758,-1,TabUnk,ActLstStd ,0x3F8,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Fol_RequestUnfollowStds ,NULL},
- [ActReqUnfSevTch ] = {1759,-1,TabUnk,ActLstTch ,0x3F8,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Fol_RequestUnfollowTchs ,NULL},
+ [ActReqFolSevStd ] = {1756,-1,TabUnk,ActLstStd ,0x3F8,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Fol_ReqFollowStds ,NULL},
+ [ActReqFolSevTch ] = {1757,-1,TabUnk,ActLstTch ,0x3F8,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Fol_ReqFollowTchs ,NULL},
+ [ActReqUnfSevStd ] = {1758,-1,TabUnk,ActLstStd ,0x3F8,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Fol_ReqUnfollowStds ,NULL},
+ [ActReqUnfSevTch ] = {1759,-1,TabUnk,ActLstTch ,0x3F8,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Fol_ReqUnfollowTchs ,NULL},
[ActFolSevStd ] = {1760,-1,TabUnk,ActLstStd ,0x3F8,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Fol_FollowUsrs ,NULL},
[ActFolSevTch ] = {1761,-1,TabUnk,ActLstTch ,0x3F8,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Fol_FollowUsrs ,NULL},
[ActUnfSevStd ] = {1762,-1,TabUnk,ActLstStd ,0x3F8,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Fol_UnfollowUsrs ,NULL},
@@ -1571,7 +1580,7 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActRcvNot ] = { 60,-1,TabUnk,ActSeeAllNot ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Not_ReceiveNotice ,Not_ListFullNotices ,NULL},
[ActHidNot ] = { 763,-1,TabUnk,ActSeeAllNot ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Not_HideActiveNotice ,Not_ListFullNotices ,NULL},
[ActUnhNot ] = { 764,-1,TabUnk,ActSeeAllNot ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Not_RevealHiddenNotice ,Not_ListFullNotices ,NULL},
- [ActReqRemNot ] = {1472,-1,TabUnk,ActSeeAllNot ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Not_RequestRemNotice ,NULL},
+ [ActReqRemNot ] = {1472,-1,TabUnk,ActSeeAllNot ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Not_ReqRemNotice ,NULL},
[ActRemNot ] = { 73,-1,TabUnk,ActSeeAllNot ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,Not_RemoveNotice ,Not_ListNoticesAfterRemoval ,NULL},
[ActSeeForCrsUsr ] = { 345,-1,TabUnk,ActSeeFor ,0x3F8,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,For_ShowForumTheads ,NULL},
@@ -1626,18 +1635,18 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActRcvRepForSWAUsr ] = { 603,-1,TabUnk,ActSeeFor ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_DATA,Act_BRW_1ST_TAB,NULL ,For_ReceiveForumPost ,NULL},
[ActRcvRepForSWATch ] = { 622,-1,TabUnk,ActSeeFor ,0x3F0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_DATA,Act_BRW_1ST_TAB,NULL ,For_ReceiveForumPost ,NULL},
- [ActReqDelThrCrsUsr ] = { 867,-1,TabUnk,ActSeeFor ,0x220,0x204,0x204,0x204,0x204,0x204,0x204,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,For_RequestRemoveThread ,NULL},
- [ActReqDelThrCrsTch ] = { 869,-1,TabUnk,ActSeeFor ,0x220,0x204,0x204,0x204,0x204,0x204,0x204,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,For_RequestRemoveThread ,NULL},
- [ActReqDelThrDegUsr ] = { 907,-1,TabUnk,ActSeeFor ,0x3C0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,For_RequestRemoveThread ,NULL},
- [ActReqDelThrDegTch ] = { 908,-1,TabUnk,ActSeeFor ,0x3C0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,For_RequestRemoveThread ,NULL},
- [ActReqDelThrCtrUsr ] = { 909,-1,TabUnk,ActSeeFor ,0x3C0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,For_RequestRemoveThread ,NULL},
- [ActReqDelThrCtrTch ] = { 910,-1,TabUnk,ActSeeFor ,0x3C0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,For_RequestRemoveThread ,NULL},
- [ActReqDelThrInsUsr ] = { 911,-1,TabUnk,ActSeeFor ,0x200,0x204,0x204,0x204,0x204,0x204,0x204,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,For_RequestRemoveThread ,NULL},
- [ActReqDelThrInsTch ] = { 912,-1,TabUnk,ActSeeFor ,0x200,0x204,0x204,0x204,0x204,0x204,0x204,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,For_RequestRemoveThread ,NULL},
- [ActReqDelThrGenUsr ] = { 913,-1,TabUnk,ActSeeFor ,0x200,0x204,0x204,0x204,0x204,0x204,0x204,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,For_RequestRemoveThread ,NULL},
- [ActReqDelThrGenTch ] = { 914,-1,TabUnk,ActSeeFor ,0x200,0x204,0x204,0x204,0x204,0x204,0x204,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,For_RequestRemoveThread ,NULL},
- [ActReqDelThrSWAUsr ] = { 881,-1,TabUnk,ActSeeFor ,0x200,0x204,0x204,0x204,0x204,0x204,0x204,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,For_RequestRemoveThread ,NULL},
- [ActReqDelThrSWATch ] = { 915,-1,TabUnk,ActSeeFor ,0x200,0x204,0x204,0x204,0x204,0x204,0x204,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,For_RequestRemoveThread ,NULL},
+ [ActReqDelThrCrsUsr ] = { 867,-1,TabUnk,ActSeeFor ,0x220,0x204,0x204,0x204,0x204,0x204,0x204,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,For_ReqRemThread ,NULL},
+ [ActReqDelThrCrsTch ] = { 869,-1,TabUnk,ActSeeFor ,0x220,0x204,0x204,0x204,0x204,0x204,0x204,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,For_ReqRemThread ,NULL},
+ [ActReqDelThrDegUsr ] = { 907,-1,TabUnk,ActSeeFor ,0x3C0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,For_ReqRemThread ,NULL},
+ [ActReqDelThrDegTch ] = { 908,-1,TabUnk,ActSeeFor ,0x3C0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,For_ReqRemThread ,NULL},
+ [ActReqDelThrCtrUsr ] = { 909,-1,TabUnk,ActSeeFor ,0x3C0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,For_ReqRemThread ,NULL},
+ [ActReqDelThrCtrTch ] = { 910,-1,TabUnk,ActSeeFor ,0x3C0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,For_ReqRemThread ,NULL},
+ [ActReqDelThrInsUsr ] = { 911,-1,TabUnk,ActSeeFor ,0x200,0x204,0x204,0x204,0x204,0x204,0x204,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,For_ReqRemThread ,NULL},
+ [ActReqDelThrInsTch ] = { 912,-1,TabUnk,ActSeeFor ,0x200,0x204,0x204,0x204,0x204,0x204,0x204,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,For_ReqRemThread ,NULL},
+ [ActReqDelThrGenUsr ] = { 913,-1,TabUnk,ActSeeFor ,0x200,0x204,0x204,0x204,0x204,0x204,0x204,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,For_ReqRemThread ,NULL},
+ [ActReqDelThrGenTch ] = { 914,-1,TabUnk,ActSeeFor ,0x200,0x204,0x204,0x204,0x204,0x204,0x204,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,For_ReqRemThread ,NULL},
+ [ActReqDelThrSWAUsr ] = { 881,-1,TabUnk,ActSeeFor ,0x200,0x204,0x204,0x204,0x204,0x204,0x204,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,For_ReqRemThread ,NULL},
+ [ActReqDelThrSWATch ] = { 915,-1,TabUnk,ActSeeFor ,0x200,0x204,0x204,0x204,0x204,0x204,0x204,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,For_ReqRemThread ,NULL},
[ActDelThrForCrsUsr ] = { 868,-1,TabUnk,ActSeeFor ,0x220,0x204,0x204,0x204,0x204,0x204,0x204,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,For_RemoveThread ,NULL},
[ActDelThrForCrsTch ] = { 876,-1,TabUnk,ActSeeFor ,0x220,0x204,0x204,0x204,0x204,0x204,0x204,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,For_RemoveThread ,NULL},
@@ -1763,8 +1772,8 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActSeeSvy ] = { 982,-1,TabUnk,ActSeeAllSvy ,0x3F8,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Svy_SeeOneSurvey ,NULL},
[ActAnsSvy ] = { 983,-1,TabUnk,ActSeeAllSvy ,0x3F8,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Svy_ReceiveSurveyAnswers ,NULL},
- [ActFrmNewSvy ] = { 973,-1,TabUnk,ActSeeAllSvy ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Svy_RequestCreatOrEditSvy ,NULL},
- [ActEdiOneSvy ] = { 974,-1,TabUnk,ActSeeAllSvy ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Svy_RequestCreatOrEditSvy ,NULL},
+ [ActFrmNewSvy ] = { 973,-1,TabUnk,ActSeeAllSvy ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Svy_ReqCreatOrEditSvy ,NULL},
+ [ActEdiOneSvy ] = { 974,-1,TabUnk,ActSeeAllSvy ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Svy_ReqCreatOrEditSvy ,NULL},
[ActNewSvy ] = { 968,-1,TabUnk,ActSeeAllSvy ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Svy_ReceiveFormSurvey ,NULL},
[ActChgSvy ] = { 975,-1,TabUnk,ActSeeAllSvy ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Svy_ReceiveFormSurvey ,NULL},
[ActReqRemSvy ] = { 976,-1,TabUnk,ActSeeAllSvy ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Svy_AskRemSurvey ,NULL},
@@ -1774,9 +1783,9 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActHidSvy ] = { 977,-1,TabUnk,ActSeeAllSvy ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Svy_HideSurvey ,NULL},
[ActUnhSvy ] = { 978,-1,TabUnk,ActSeeAllSvy ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Svy_UnhideSurvey ,NULL},
[ActReqLnkSvy ] = {1937,-1,TabUnk,ActSeeAllSvy ,0x220,0x200, 0, 0, 0, 0, 0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,SvyRsc_GetLinkToSurvey ,NULL},
- [ActEdiOneSvyQst ] = { 979,-1,TabUnk,ActSeeAllSvy ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Svy_RequestEditQuestion ,NULL},
+ [ActEdiOneSvyQst ] = { 979,-1,TabUnk,ActSeeAllSvy ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Svy_ReqEditQuestion ,NULL},
[ActRcvSvyQst ] = { 980,-1,TabUnk,ActSeeAllSvy ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Svy_ReceiveQst ,NULL},
- [ActReqRemSvyQst ] = {1524,-1,TabUnk,ActSeeAllSvy ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Svy_RequestRemoveQst ,NULL},
+ [ActReqRemSvyQst ] = {1524,-1,TabUnk,ActSeeAllSvy ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Svy_ReqRemQst ,NULL},
[ActRemSvyQst ] = { 981,-1,TabUnk,ActSeeAllSvy ,0x3E0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,0x3C0,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Svy_RemoveQst ,NULL},
[ActSeeAccGbl ] = { 79,-1,TabUnk,ActReqAccGbl ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Sta_SeeGblAccesses ,NULL},
@@ -1801,8 +1810,8 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
// Actions not in menu:
[ActChgMyRol ] = { 589,-1,TabUnk,ActFrmRolSes ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,Rol_ChangeMyRole ,Usr_ShowFormsLogoutAndRole ,NULL},
- [ActFrmNewEvtMyAgd ] = {1603,-1,TabUnk,ActSeeMyAgd ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Agd_RequestCreatOrEditEvent ,NULL},
- [ActEdiOneEvtMyAgd ] = {1604,-1,TabUnk,ActSeeMyAgd ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Agd_RequestCreatOrEditEvent ,NULL},
+ [ActFrmNewEvtMyAgd ] = {1603,-1,TabUnk,ActSeeMyAgd ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Agd_ReqCreatOrEditEvent ,NULL},
+ [ActEdiOneEvtMyAgd ] = {1604,-1,TabUnk,ActSeeMyAgd ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Agd_ReqCreatOrEditEvent ,NULL},
[ActNewEvtMyAgd ] = {1605,-1,TabUnk,ActSeeMyAgd ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Agd_ReceiveFormEvent ,NULL},
[ActChgEvtMyAgd ] = {1606,-1,TabUnk,ActSeeMyAgd ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Agd_ReceiveFormEvent ,NULL},
[ActReqRemEvtMyAgd ] = {1607,-1,TabUnk,ActSeeMyAgd ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Agd_AskRemEvent ,NULL},
@@ -1837,7 +1846,7 @@ const struct Act_Actions ActLst_Actions[ActLst_NUM_ACTIONS] =
[ActReqMyPho ] = { 30,-1,TabUnk,ActReqEdiRecSha ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Pho_ReqMyPhoto ,NULL},
[ActDetMyPho ] = { 693,-1,TabUnk,ActReqEdiRecSha ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_DATA,Act_BRW_1ST_TAB,NULL ,Pho_RecMyPhotoDetFaces ,NULL},
[ActUpdMyPho ] = { 694,-1,TabUnk,ActReqEdiRecSha ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,Pho_UpdateMyPhoto1 ,Pho_UpdateMyPhoto2 ,NULL},
- [ActReqRemMyPho ] = {1577,-1,TabUnk,ActReqEdiRecSha ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Pho_ReqRemoveMyPhoto ,NULL},
+ [ActReqRemMyPho ] = {1577,-1,TabUnk,ActReqEdiRecSha ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Pho_ReqRemMyPhoto ,NULL},
[ActRemMyPho ] = { 428,-1,TabUnk,ActReqEdiRecSha ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,Pho_RemoveMyPhoto1 ,Pho_RemoveMyPhoto2 ,NULL},
[ActChgCtyMyIns ] = {1166,-1,TabUnk,ActReqEdiRecSha ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Rec_ChgCountryOfMyInstitution ,NULL},
@@ -3835,4 +3844,12 @@ Act_Action_t ActLst_FromActCodToAction[1 + ActLst_MAX_ACTION_COD] = // Do not re
ActReqRemRub, // #1957
ActRemRub, // #1958
ActFrmNewRubCri, // #1959
+ ActNewRubCri, // #1960
+ ActReqRemRubCri, // #1961
+ ActRemRubCri, // #1962
+ ActUp_RubCri, // #1963
+ ActDwnRubCri, // #1964
+ ActChgTitRubCri, // #1965
+ ActChgMinRubCri, // #1966
+ ActChgMaxRubCri, // #1967
};
diff --git a/swad_action_list.h b/swad_action_list.h
index 45ed9afc..c1989f40 100644
--- a/swad_action_list.h
+++ b/swad_action_list.h
@@ -768,480 +768,488 @@
#define ActRemRub (ActChgCrsTT1stDay + 226)
#define ActFrmNewRubCri (ActChgCrsTT1stDay + 227)
+#define ActNewRubCri (ActChgCrsTT1stDay + 228)
+#define ActReqRemRubCri (ActChgCrsTT1stDay + 229)
+#define ActRemRubCri (ActChgCrsTT1stDay + 230)
+#define ActUp_RubCri (ActChgCrsTT1stDay + 231)
+#define ActDwnRubCri (ActChgCrsTT1stDay + 232)
+#define ActChgTitRubCri (ActChgCrsTT1stDay + 233)
+#define ActChgMinRubCri (ActChgCrsTT1stDay + 234)
+#define ActChgMaxRubCri (ActChgCrsTT1stDay + 235)
/*****************************************************************************/
/******************************** Files tab **********************************/
/*****************************************************************************/
// Actions in menu
-#define ActSeeAdmDocIns (ActFrmNewRubCri + 1)
-#define ActAdmShaIns (ActFrmNewRubCri + 2)
-#define ActSeeAdmDocCtr (ActFrmNewRubCri + 3)
-#define ActAdmShaCtr (ActFrmNewRubCri + 4)
-#define ActSeeAdmDocDeg (ActFrmNewRubCri + 5)
-#define ActAdmShaDeg (ActFrmNewRubCri + 6)
-#define ActSeeAdmDocCrsGrp (ActFrmNewRubCri + 7)
-#define ActAdmTchCrsGrp (ActFrmNewRubCri + 8)
-#define ActAdmShaCrsGrp (ActFrmNewRubCri + 9)
-#define ActAdmAsgWrkUsr (ActFrmNewRubCri + 10)
-#define ActReqAsgWrkCrs (ActFrmNewRubCri + 11)
-#define ActSeeAdmMrk (ActFrmNewRubCri + 12)
-#define ActAdmBrf (ActFrmNewRubCri + 13)
+#define ActSeeAdmDocIns (ActChgMaxRubCri + 1)
+#define ActAdmShaIns (ActChgMaxRubCri + 2)
+#define ActSeeAdmDocCtr (ActChgMaxRubCri + 3)
+#define ActAdmShaCtr (ActChgMaxRubCri + 4)
+#define ActSeeAdmDocDeg (ActChgMaxRubCri + 5)
+#define ActAdmShaDeg (ActChgMaxRubCri + 6)
+#define ActSeeAdmDocCrsGrp (ActChgMaxRubCri + 7)
+#define ActAdmTchCrsGrp (ActChgMaxRubCri + 8)
+#define ActAdmShaCrsGrp (ActChgMaxRubCri + 9)
+#define ActAdmAsgWrkUsr (ActChgMaxRubCri + 10)
+#define ActReqAsgWrkCrs (ActChgMaxRubCri + 11)
+#define ActSeeAdmMrk (ActChgMaxRubCri + 12)
+#define ActAdmBrf (ActChgMaxRubCri + 13)
// Secondary actions
-#define ActChgToSeeDocIns (ActFrmNewRubCri + 14)
-#define ActSeeDocIns (ActFrmNewRubCri + 15)
-#define ActExpSeeDocIns (ActFrmNewRubCri + 16)
-#define ActConSeeDocIns (ActFrmNewRubCri + 17)
-#define ActZIPSeeDocIns (ActFrmNewRubCri + 18)
-#define ActReqDatSeeDocIns (ActFrmNewRubCri + 19)
-#define ActDowSeeDocIns (ActFrmNewRubCri + 20)
-#define ActChgToAdmDocIns (ActFrmNewRubCri + 21)
-#define ActAdmDocIns (ActFrmNewRubCri + 22)
-#define ActReqRemFilDocIns (ActFrmNewRubCri + 23)
-#define ActRemFilDocIns (ActFrmNewRubCri + 24)
-#define ActRemFolDocIns (ActFrmNewRubCri + 25)
-#define ActCopDocIns (ActFrmNewRubCri + 26)
-#define ActPasDocIns (ActFrmNewRubCri + 27)
-#define ActRemTreDocIns (ActFrmNewRubCri + 28)
-#define ActFrmCreDocIns (ActFrmNewRubCri + 29)
-#define ActCreFolDocIns (ActFrmNewRubCri + 30)
-#define ActCreLnkDocIns (ActFrmNewRubCri + 31)
-#define ActRenFolDocIns (ActFrmNewRubCri + 32)
-#define ActRcvFilDocInsDZ (ActFrmNewRubCri + 33)
-#define ActRcvFilDocInsCla (ActFrmNewRubCri + 34)
-#define ActExpAdmDocIns (ActFrmNewRubCri + 35)
-#define ActConAdmDocIns (ActFrmNewRubCri + 36)
-#define ActZIPAdmDocIns (ActFrmNewRubCri + 37)
-#define ActUnhDocIns (ActFrmNewRubCri + 38)
-#define ActHidDocIns (ActFrmNewRubCri + 39)
-#define ActReqDatAdmDocIns (ActFrmNewRubCri + 40)
-#define ActChgDatAdmDocIns (ActFrmNewRubCri + 41)
-#define ActDowAdmDocIns (ActFrmNewRubCri + 42)
+#define ActChgToSeeDocIns (ActChgMaxRubCri + 14)
+#define ActSeeDocIns (ActChgMaxRubCri + 15)
+#define ActExpSeeDocIns (ActChgMaxRubCri + 16)
+#define ActConSeeDocIns (ActChgMaxRubCri + 17)
+#define ActZIPSeeDocIns (ActChgMaxRubCri + 18)
+#define ActReqDatSeeDocIns (ActChgMaxRubCri + 19)
+#define ActDowSeeDocIns (ActChgMaxRubCri + 20)
+#define ActChgToAdmDocIns (ActChgMaxRubCri + 21)
+#define ActAdmDocIns (ActChgMaxRubCri + 22)
+#define ActReqRemFilDocIns (ActChgMaxRubCri + 23)
+#define ActRemFilDocIns (ActChgMaxRubCri + 24)
+#define ActRemFolDocIns (ActChgMaxRubCri + 25)
+#define ActCopDocIns (ActChgMaxRubCri + 26)
+#define ActPasDocIns (ActChgMaxRubCri + 27)
+#define ActRemTreDocIns (ActChgMaxRubCri + 28)
+#define ActFrmCreDocIns (ActChgMaxRubCri + 29)
+#define ActCreFolDocIns (ActChgMaxRubCri + 30)
+#define ActCreLnkDocIns (ActChgMaxRubCri + 31)
+#define ActRenFolDocIns (ActChgMaxRubCri + 32)
+#define ActRcvFilDocInsDZ (ActChgMaxRubCri + 33)
+#define ActRcvFilDocInsCla (ActChgMaxRubCri + 34)
+#define ActExpAdmDocIns (ActChgMaxRubCri + 35)
+#define ActConAdmDocIns (ActChgMaxRubCri + 36)
+#define ActZIPAdmDocIns (ActChgMaxRubCri + 37)
+#define ActUnhDocIns (ActChgMaxRubCri + 38)
+#define ActHidDocIns (ActChgMaxRubCri + 39)
+#define ActReqDatAdmDocIns (ActChgMaxRubCri + 40)
+#define ActChgDatAdmDocIns (ActChgMaxRubCri + 41)
+#define ActDowAdmDocIns (ActChgMaxRubCri + 42)
-#define ActReqRemFilShaIns (ActFrmNewRubCri + 43)
-#define ActRemFilShaIns (ActFrmNewRubCri + 44)
-#define ActRemFolShaIns (ActFrmNewRubCri + 45)
-#define ActCopShaIns (ActFrmNewRubCri + 46)
-#define ActPasShaIns (ActFrmNewRubCri + 47)
-#define ActRemTreShaIns (ActFrmNewRubCri + 48)
-#define ActFrmCreShaIns (ActFrmNewRubCri + 49)
-#define ActCreFolShaIns (ActFrmNewRubCri + 50)
-#define ActCreLnkShaIns (ActFrmNewRubCri + 51)
-#define ActRenFolShaIns (ActFrmNewRubCri + 52)
-#define ActRcvFilShaInsDZ (ActFrmNewRubCri + 53)
-#define ActRcvFilShaInsCla (ActFrmNewRubCri + 54)
-#define ActExpShaIns (ActFrmNewRubCri + 55)
-#define ActConShaIns (ActFrmNewRubCri + 56)
-#define ActZIPShaIns (ActFrmNewRubCri + 57)
-#define ActReqDatShaIns (ActFrmNewRubCri + 58)
-#define ActChgDatShaIns (ActFrmNewRubCri + 59)
-#define ActDowShaIns (ActFrmNewRubCri + 60)
+#define ActReqRemFilShaIns (ActChgMaxRubCri + 43)
+#define ActRemFilShaIns (ActChgMaxRubCri + 44)
+#define ActRemFolShaIns (ActChgMaxRubCri + 45)
+#define ActCopShaIns (ActChgMaxRubCri + 46)
+#define ActPasShaIns (ActChgMaxRubCri + 47)
+#define ActRemTreShaIns (ActChgMaxRubCri + 48)
+#define ActFrmCreShaIns (ActChgMaxRubCri + 49)
+#define ActCreFolShaIns (ActChgMaxRubCri + 50)
+#define ActCreLnkShaIns (ActChgMaxRubCri + 51)
+#define ActRenFolShaIns (ActChgMaxRubCri + 52)
+#define ActRcvFilShaInsDZ (ActChgMaxRubCri + 53)
+#define ActRcvFilShaInsCla (ActChgMaxRubCri + 54)
+#define ActExpShaIns (ActChgMaxRubCri + 55)
+#define ActConShaIns (ActChgMaxRubCri + 56)
+#define ActZIPShaIns (ActChgMaxRubCri + 57)
+#define ActReqDatShaIns (ActChgMaxRubCri + 58)
+#define ActChgDatShaIns (ActChgMaxRubCri + 59)
+#define ActDowShaIns (ActChgMaxRubCri + 60)
-#define ActChgToSeeDocCtr (ActFrmNewRubCri + 61)
-#define ActSeeDocCtr (ActFrmNewRubCri + 62)
-#define ActExpSeeDocCtr (ActFrmNewRubCri + 63)
-#define ActConSeeDocCtr (ActFrmNewRubCri + 64)
-#define ActZIPSeeDocCtr (ActFrmNewRubCri + 65)
-#define ActReqDatSeeDocCtr (ActFrmNewRubCri + 66)
-#define ActDowSeeDocCtr (ActFrmNewRubCri + 67)
-#define ActChgToAdmDocCtr (ActFrmNewRubCri + 68)
-#define ActAdmDocCtr (ActFrmNewRubCri + 69)
-#define ActReqRemFilDocCtr (ActFrmNewRubCri + 70)
-#define ActRemFilDocCtr (ActFrmNewRubCri + 71)
-#define ActRemFolDocCtr (ActFrmNewRubCri + 72)
-#define ActCopDocCtr (ActFrmNewRubCri + 73)
-#define ActPasDocCtr (ActFrmNewRubCri + 74)
-#define ActRemTreDocCtr (ActFrmNewRubCri + 75)
-#define ActFrmCreDocCtr (ActFrmNewRubCri + 76)
-#define ActCreFolDocCtr (ActFrmNewRubCri + 77)
-#define ActCreLnkDocCtr (ActFrmNewRubCri + 78)
-#define ActRenFolDocCtr (ActFrmNewRubCri + 79)
-#define ActRcvFilDocCtrDZ (ActFrmNewRubCri + 80)
-#define ActRcvFilDocCtrCla (ActFrmNewRubCri + 81)
-#define ActExpAdmDocCtr (ActFrmNewRubCri + 82)
-#define ActConAdmDocCtr (ActFrmNewRubCri + 83)
-#define ActZIPAdmDocCtr (ActFrmNewRubCri + 84)
-#define ActUnhDocCtr (ActFrmNewRubCri + 85)
-#define ActHidDocCtr (ActFrmNewRubCri + 86)
-#define ActReqDatAdmDocCtr (ActFrmNewRubCri + 87)
-#define ActChgDatAdmDocCtr (ActFrmNewRubCri + 88)
-#define ActDowAdmDocCtr (ActFrmNewRubCri + 89)
+#define ActChgToSeeDocCtr (ActChgMaxRubCri + 61)
+#define ActSeeDocCtr (ActChgMaxRubCri + 62)
+#define ActExpSeeDocCtr (ActChgMaxRubCri + 63)
+#define ActConSeeDocCtr (ActChgMaxRubCri + 64)
+#define ActZIPSeeDocCtr (ActChgMaxRubCri + 65)
+#define ActReqDatSeeDocCtr (ActChgMaxRubCri + 66)
+#define ActDowSeeDocCtr (ActChgMaxRubCri + 67)
+#define ActChgToAdmDocCtr (ActChgMaxRubCri + 68)
+#define ActAdmDocCtr (ActChgMaxRubCri + 69)
+#define ActReqRemFilDocCtr (ActChgMaxRubCri + 70)
+#define ActRemFilDocCtr (ActChgMaxRubCri + 71)
+#define ActRemFolDocCtr (ActChgMaxRubCri + 72)
+#define ActCopDocCtr (ActChgMaxRubCri + 73)
+#define ActPasDocCtr (ActChgMaxRubCri + 74)
+#define ActRemTreDocCtr (ActChgMaxRubCri + 75)
+#define ActFrmCreDocCtr (ActChgMaxRubCri + 76)
+#define ActCreFolDocCtr (ActChgMaxRubCri + 77)
+#define ActCreLnkDocCtr (ActChgMaxRubCri + 78)
+#define ActRenFolDocCtr (ActChgMaxRubCri + 79)
+#define ActRcvFilDocCtrDZ (ActChgMaxRubCri + 80)
+#define ActRcvFilDocCtrCla (ActChgMaxRubCri + 81)
+#define ActExpAdmDocCtr (ActChgMaxRubCri + 82)
+#define ActConAdmDocCtr (ActChgMaxRubCri + 83)
+#define ActZIPAdmDocCtr (ActChgMaxRubCri + 84)
+#define ActUnhDocCtr (ActChgMaxRubCri + 85)
+#define ActHidDocCtr (ActChgMaxRubCri + 86)
+#define ActReqDatAdmDocCtr (ActChgMaxRubCri + 87)
+#define ActChgDatAdmDocCtr (ActChgMaxRubCri + 88)
+#define ActDowAdmDocCtr (ActChgMaxRubCri + 89)
-#define ActReqRemFilShaCtr (ActFrmNewRubCri + 90)
-#define ActRemFilShaCtr (ActFrmNewRubCri + 91)
-#define ActRemFolShaCtr (ActFrmNewRubCri + 92)
-#define ActCopShaCtr (ActFrmNewRubCri + 93)
-#define ActPasShaCtr (ActFrmNewRubCri + 94)
-#define ActRemTreShaCtr (ActFrmNewRubCri + 95)
-#define ActFrmCreShaCtr (ActFrmNewRubCri + 96)
-#define ActCreFolShaCtr (ActFrmNewRubCri + 97)
-#define ActCreLnkShaCtr (ActFrmNewRubCri + 98)
-#define ActRenFolShaCtr (ActFrmNewRubCri + 99)
-#define ActRcvFilShaCtrDZ (ActFrmNewRubCri + 100)
-#define ActRcvFilShaCtrCla (ActFrmNewRubCri + 101)
-#define ActExpShaCtr (ActFrmNewRubCri + 102)
-#define ActConShaCtr (ActFrmNewRubCri + 103)
-#define ActZIPShaCtr (ActFrmNewRubCri + 104)
-#define ActReqDatShaCtr (ActFrmNewRubCri + 105)
-#define ActChgDatShaCtr (ActFrmNewRubCri + 106)
-#define ActDowShaCtr (ActFrmNewRubCri + 107)
+#define ActReqRemFilShaCtr (ActChgMaxRubCri + 90)
+#define ActRemFilShaCtr (ActChgMaxRubCri + 91)
+#define ActRemFolShaCtr (ActChgMaxRubCri + 92)
+#define ActCopShaCtr (ActChgMaxRubCri + 93)
+#define ActPasShaCtr (ActChgMaxRubCri + 94)
+#define ActRemTreShaCtr (ActChgMaxRubCri + 95)
+#define ActFrmCreShaCtr (ActChgMaxRubCri + 96)
+#define ActCreFolShaCtr (ActChgMaxRubCri + 97)
+#define ActCreLnkShaCtr (ActChgMaxRubCri + 98)
+#define ActRenFolShaCtr (ActChgMaxRubCri + 99)
+#define ActRcvFilShaCtrDZ (ActChgMaxRubCri + 100)
+#define ActRcvFilShaCtrCla (ActChgMaxRubCri + 101)
+#define ActExpShaCtr (ActChgMaxRubCri + 102)
+#define ActConShaCtr (ActChgMaxRubCri + 103)
+#define ActZIPShaCtr (ActChgMaxRubCri + 104)
+#define ActReqDatShaCtr (ActChgMaxRubCri + 105)
+#define ActChgDatShaCtr (ActChgMaxRubCri + 106)
+#define ActDowShaCtr (ActChgMaxRubCri + 107)
-#define ActChgToSeeDocDeg (ActFrmNewRubCri + 108)
-#define ActSeeDocDeg (ActFrmNewRubCri + 109)
-#define ActExpSeeDocDeg (ActFrmNewRubCri + 110)
-#define ActConSeeDocDeg (ActFrmNewRubCri + 111)
-#define ActZIPSeeDocDeg (ActFrmNewRubCri + 112)
-#define ActReqDatSeeDocDeg (ActFrmNewRubCri + 113)
-#define ActDowSeeDocDeg (ActFrmNewRubCri + 114)
-#define ActChgToAdmDocDeg (ActFrmNewRubCri + 115)
-#define ActAdmDocDeg (ActFrmNewRubCri + 116)
-#define ActReqRemFilDocDeg (ActFrmNewRubCri + 117)
-#define ActRemFilDocDeg (ActFrmNewRubCri + 118)
-#define ActRemFolDocDeg (ActFrmNewRubCri + 119)
-#define ActCopDocDeg (ActFrmNewRubCri + 120)
-#define ActPasDocDeg (ActFrmNewRubCri + 121)
-#define ActRemTreDocDeg (ActFrmNewRubCri + 122)
-#define ActFrmCreDocDeg (ActFrmNewRubCri + 123)
-#define ActCreFolDocDeg (ActFrmNewRubCri + 124)
-#define ActCreLnkDocDeg (ActFrmNewRubCri + 125)
-#define ActRenFolDocDeg (ActFrmNewRubCri + 126)
-#define ActRcvFilDocDegDZ (ActFrmNewRubCri + 127)
-#define ActRcvFilDocDegCla (ActFrmNewRubCri + 128)
-#define ActExpAdmDocDeg (ActFrmNewRubCri + 129)
-#define ActConAdmDocDeg (ActFrmNewRubCri + 130)
-#define ActZIPAdmDocDeg (ActFrmNewRubCri + 131)
-#define ActUnhDocDeg (ActFrmNewRubCri + 132)
-#define ActHidDocDeg (ActFrmNewRubCri + 133)
-#define ActReqDatAdmDocDeg (ActFrmNewRubCri + 134)
-#define ActChgDatAdmDocDeg (ActFrmNewRubCri + 135)
-#define ActDowAdmDocDeg (ActFrmNewRubCri + 136)
+#define ActChgToSeeDocDeg (ActChgMaxRubCri + 108)
+#define ActSeeDocDeg (ActChgMaxRubCri + 109)
+#define ActExpSeeDocDeg (ActChgMaxRubCri + 110)
+#define ActConSeeDocDeg (ActChgMaxRubCri + 111)
+#define ActZIPSeeDocDeg (ActChgMaxRubCri + 112)
+#define ActReqDatSeeDocDeg (ActChgMaxRubCri + 113)
+#define ActDowSeeDocDeg (ActChgMaxRubCri + 114)
+#define ActChgToAdmDocDeg (ActChgMaxRubCri + 115)
+#define ActAdmDocDeg (ActChgMaxRubCri + 116)
+#define ActReqRemFilDocDeg (ActChgMaxRubCri + 117)
+#define ActRemFilDocDeg (ActChgMaxRubCri + 118)
+#define ActRemFolDocDeg (ActChgMaxRubCri + 119)
+#define ActCopDocDeg (ActChgMaxRubCri + 120)
+#define ActPasDocDeg (ActChgMaxRubCri + 121)
+#define ActRemTreDocDeg (ActChgMaxRubCri + 122)
+#define ActFrmCreDocDeg (ActChgMaxRubCri + 123)
+#define ActCreFolDocDeg (ActChgMaxRubCri + 124)
+#define ActCreLnkDocDeg (ActChgMaxRubCri + 125)
+#define ActRenFolDocDeg (ActChgMaxRubCri + 126)
+#define ActRcvFilDocDegDZ (ActChgMaxRubCri + 127)
+#define ActRcvFilDocDegCla (ActChgMaxRubCri + 128)
+#define ActExpAdmDocDeg (ActChgMaxRubCri + 129)
+#define ActConAdmDocDeg (ActChgMaxRubCri + 130)
+#define ActZIPAdmDocDeg (ActChgMaxRubCri + 131)
+#define ActUnhDocDeg (ActChgMaxRubCri + 132)
+#define ActHidDocDeg (ActChgMaxRubCri + 133)
+#define ActReqDatAdmDocDeg (ActChgMaxRubCri + 134)
+#define ActChgDatAdmDocDeg (ActChgMaxRubCri + 135)
+#define ActDowAdmDocDeg (ActChgMaxRubCri + 136)
-#define ActReqRemFilShaDeg (ActFrmNewRubCri + 137)
-#define ActRemFilShaDeg (ActFrmNewRubCri + 138)
-#define ActRemFolShaDeg (ActFrmNewRubCri + 139)
-#define ActCopShaDeg (ActFrmNewRubCri + 140)
-#define ActPasShaDeg (ActFrmNewRubCri + 141)
-#define ActRemTreShaDeg (ActFrmNewRubCri + 142)
-#define ActFrmCreShaDeg (ActFrmNewRubCri + 143)
-#define ActCreFolShaDeg (ActFrmNewRubCri + 144)
-#define ActCreLnkShaDeg (ActFrmNewRubCri + 145)
-#define ActRenFolShaDeg (ActFrmNewRubCri + 146)
-#define ActRcvFilShaDegDZ (ActFrmNewRubCri + 147)
-#define ActRcvFilShaDegCla (ActFrmNewRubCri + 148)
-#define ActExpShaDeg (ActFrmNewRubCri + 149)
-#define ActConShaDeg (ActFrmNewRubCri + 150)
-#define ActZIPShaDeg (ActFrmNewRubCri + 151)
-#define ActReqDatShaDeg (ActFrmNewRubCri + 152)
-#define ActChgDatShaDeg (ActFrmNewRubCri + 153)
-#define ActDowShaDeg (ActFrmNewRubCri + 154)
+#define ActReqRemFilShaDeg (ActChgMaxRubCri + 137)
+#define ActRemFilShaDeg (ActChgMaxRubCri + 138)
+#define ActRemFolShaDeg (ActChgMaxRubCri + 139)
+#define ActCopShaDeg (ActChgMaxRubCri + 140)
+#define ActPasShaDeg (ActChgMaxRubCri + 141)
+#define ActRemTreShaDeg (ActChgMaxRubCri + 142)
+#define ActFrmCreShaDeg (ActChgMaxRubCri + 143)
+#define ActCreFolShaDeg (ActChgMaxRubCri + 144)
+#define ActCreLnkShaDeg (ActChgMaxRubCri + 145)
+#define ActRenFolShaDeg (ActChgMaxRubCri + 146)
+#define ActRcvFilShaDegDZ (ActChgMaxRubCri + 147)
+#define ActRcvFilShaDegCla (ActChgMaxRubCri + 148)
+#define ActExpShaDeg (ActChgMaxRubCri + 149)
+#define ActConShaDeg (ActChgMaxRubCri + 150)
+#define ActZIPShaDeg (ActChgMaxRubCri + 151)
+#define ActReqDatShaDeg (ActChgMaxRubCri + 152)
+#define ActChgDatShaDeg (ActChgMaxRubCri + 153)
+#define ActDowShaDeg (ActChgMaxRubCri + 154)
-#define ActChgToSeeDocCrs (ActFrmNewRubCri + 155)
-#define ActSeeDocCrs (ActFrmNewRubCri + 156)
-#define ActExpSeeDocCrs (ActFrmNewRubCri + 157)
-#define ActConSeeDocCrs (ActFrmNewRubCri + 158)
-#define ActZIPSeeDocCrs (ActFrmNewRubCri + 159)
-#define ActReqDatSeeDocCrs (ActFrmNewRubCri + 160)
-#define ActReqLnkSeeDocCrs (ActFrmNewRubCri + 161)
-#define ActDowSeeDocCrs (ActFrmNewRubCri + 162)
+#define ActChgToSeeDocCrs (ActChgMaxRubCri + 155)
+#define ActSeeDocCrs (ActChgMaxRubCri + 156)
+#define ActExpSeeDocCrs (ActChgMaxRubCri + 157)
+#define ActConSeeDocCrs (ActChgMaxRubCri + 158)
+#define ActZIPSeeDocCrs (ActChgMaxRubCri + 159)
+#define ActReqDatSeeDocCrs (ActChgMaxRubCri + 160)
+#define ActReqLnkSeeDocCrs (ActChgMaxRubCri + 161)
+#define ActDowSeeDocCrs (ActChgMaxRubCri + 162)
-#define ActSeeDocGrp (ActFrmNewRubCri + 163)
-#define ActExpSeeDocGrp (ActFrmNewRubCri + 164)
-#define ActConSeeDocGrp (ActFrmNewRubCri + 165)
-#define ActZIPSeeDocGrp (ActFrmNewRubCri + 166)
-#define ActReqDatSeeDocGrp (ActFrmNewRubCri + 167)
-#define ActDowSeeDocGrp (ActFrmNewRubCri + 168)
+#define ActSeeDocGrp (ActChgMaxRubCri + 163)
+#define ActExpSeeDocGrp (ActChgMaxRubCri + 164)
+#define ActConSeeDocGrp (ActChgMaxRubCri + 165)
+#define ActZIPSeeDocGrp (ActChgMaxRubCri + 166)
+#define ActReqDatSeeDocGrp (ActChgMaxRubCri + 167)
+#define ActDowSeeDocGrp (ActChgMaxRubCri + 168)
-#define ActChgToAdmDocCrs (ActFrmNewRubCri + 169)
-#define ActAdmDocCrs (ActFrmNewRubCri + 170)
-#define ActReqRemFilDocCrs (ActFrmNewRubCri + 171)
-#define ActRemFilDocCrs (ActFrmNewRubCri + 172)
-#define ActRemFolDocCrs (ActFrmNewRubCri + 173)
-#define ActCopDocCrs (ActFrmNewRubCri + 174)
-#define ActPasDocCrs (ActFrmNewRubCri + 175)
-#define ActRemTreDocCrs (ActFrmNewRubCri + 176)
-#define ActFrmCreDocCrs (ActFrmNewRubCri + 177)
-#define ActCreFolDocCrs (ActFrmNewRubCri + 178)
-#define ActCreLnkDocCrs (ActFrmNewRubCri + 179)
-#define ActRenFolDocCrs (ActFrmNewRubCri + 180)
-#define ActRcvFilDocCrsDZ (ActFrmNewRubCri + 181)
-#define ActRcvFilDocCrsCla (ActFrmNewRubCri + 182)
-#define ActExpAdmDocCrs (ActFrmNewRubCri + 183)
-#define ActConAdmDocCrs (ActFrmNewRubCri + 184)
-#define ActZIPAdmDocCrs (ActFrmNewRubCri + 185)
-#define ActUnhDocCrs (ActFrmNewRubCri + 186)
-#define ActHidDocCrs (ActFrmNewRubCri + 187)
-#define ActReqDatAdmDocCrs (ActFrmNewRubCri + 188)
-#define ActChgDatAdmDocCrs (ActFrmNewRubCri + 189)
-#define ActReqLnkAdmDocCrs (ActFrmNewRubCri + 190)
-#define ActDowAdmDocCrs (ActFrmNewRubCri + 191)
+#define ActChgToAdmDocCrs (ActChgMaxRubCri + 169)
+#define ActAdmDocCrs (ActChgMaxRubCri + 170)
+#define ActReqRemFilDocCrs (ActChgMaxRubCri + 171)
+#define ActRemFilDocCrs (ActChgMaxRubCri + 172)
+#define ActRemFolDocCrs (ActChgMaxRubCri + 173)
+#define ActCopDocCrs (ActChgMaxRubCri + 174)
+#define ActPasDocCrs (ActChgMaxRubCri + 175)
+#define ActRemTreDocCrs (ActChgMaxRubCri + 176)
+#define ActFrmCreDocCrs (ActChgMaxRubCri + 177)
+#define ActCreFolDocCrs (ActChgMaxRubCri + 178)
+#define ActCreLnkDocCrs (ActChgMaxRubCri + 179)
+#define ActRenFolDocCrs (ActChgMaxRubCri + 180)
+#define ActRcvFilDocCrsDZ (ActChgMaxRubCri + 181)
+#define ActRcvFilDocCrsCla (ActChgMaxRubCri + 182)
+#define ActExpAdmDocCrs (ActChgMaxRubCri + 183)
+#define ActConAdmDocCrs (ActChgMaxRubCri + 184)
+#define ActZIPAdmDocCrs (ActChgMaxRubCri + 185)
+#define ActUnhDocCrs (ActChgMaxRubCri + 186)
+#define ActHidDocCrs (ActChgMaxRubCri + 187)
+#define ActReqDatAdmDocCrs (ActChgMaxRubCri + 188)
+#define ActChgDatAdmDocCrs (ActChgMaxRubCri + 189)
+#define ActReqLnkAdmDocCrs (ActChgMaxRubCri + 190)
+#define ActDowAdmDocCrs (ActChgMaxRubCri + 191)
-#define ActAdmDocGrp (ActFrmNewRubCri + 192)
-#define ActReqRemFilDocGrp (ActFrmNewRubCri + 193)
-#define ActRemFilDocGrp (ActFrmNewRubCri + 194)
-#define ActRemFolDocGrp (ActFrmNewRubCri + 195)
-#define ActCopDocGrp (ActFrmNewRubCri + 196)
-#define ActPasDocGrp (ActFrmNewRubCri + 197)
-#define ActRemTreDocGrp (ActFrmNewRubCri + 198)
-#define ActFrmCreDocGrp (ActFrmNewRubCri + 199)
-#define ActCreFolDocGrp (ActFrmNewRubCri + 200)
-#define ActCreLnkDocGrp (ActFrmNewRubCri + 201)
-#define ActRenFolDocGrp (ActFrmNewRubCri + 202)
-#define ActRcvFilDocGrpDZ (ActFrmNewRubCri + 203)
-#define ActRcvFilDocGrpCla (ActFrmNewRubCri + 204)
-#define ActExpAdmDocGrp (ActFrmNewRubCri + 205)
-#define ActConAdmDocGrp (ActFrmNewRubCri + 206)
-#define ActZIPAdmDocGrp (ActFrmNewRubCri + 207)
-#define ActUnhDocGrp (ActFrmNewRubCri + 208)
-#define ActHidDocGrp (ActFrmNewRubCri + 209)
-#define ActReqDatAdmDocGrp (ActFrmNewRubCri + 210)
-#define ActChgDatAdmDocGrp (ActFrmNewRubCri + 211)
-#define ActDowAdmDocGrp (ActFrmNewRubCri + 212)
+#define ActAdmDocGrp (ActChgMaxRubCri + 192)
+#define ActReqRemFilDocGrp (ActChgMaxRubCri + 193)
+#define ActRemFilDocGrp (ActChgMaxRubCri + 194)
+#define ActRemFolDocGrp (ActChgMaxRubCri + 195)
+#define ActCopDocGrp (ActChgMaxRubCri + 196)
+#define ActPasDocGrp (ActChgMaxRubCri + 197)
+#define ActRemTreDocGrp (ActChgMaxRubCri + 198)
+#define ActFrmCreDocGrp (ActChgMaxRubCri + 199)
+#define ActCreFolDocGrp (ActChgMaxRubCri + 200)
+#define ActCreLnkDocGrp (ActChgMaxRubCri + 201)
+#define ActRenFolDocGrp (ActChgMaxRubCri + 202)
+#define ActRcvFilDocGrpDZ (ActChgMaxRubCri + 203)
+#define ActRcvFilDocGrpCla (ActChgMaxRubCri + 204)
+#define ActExpAdmDocGrp (ActChgMaxRubCri + 205)
+#define ActConAdmDocGrp (ActChgMaxRubCri + 206)
+#define ActZIPAdmDocGrp (ActChgMaxRubCri + 207)
+#define ActUnhDocGrp (ActChgMaxRubCri + 208)
+#define ActHidDocGrp (ActChgMaxRubCri + 209)
+#define ActReqDatAdmDocGrp (ActChgMaxRubCri + 210)
+#define ActChgDatAdmDocGrp (ActChgMaxRubCri + 211)
+#define ActDowAdmDocGrp (ActChgMaxRubCri + 212)
-#define ActChgToAdmTch (ActFrmNewRubCri + 213)
+#define ActChgToAdmTch (ActChgMaxRubCri + 213)
-#define ActAdmTchCrs (ActFrmNewRubCri + 214)
-#define ActReqRemFilTchCrs (ActFrmNewRubCri + 215)
-#define ActRemFilTchCrs (ActFrmNewRubCri + 216)
-#define ActRemFolTchCrs (ActFrmNewRubCri + 217)
-#define ActCopTchCrs (ActFrmNewRubCri + 218)
-#define ActPasTchCrs (ActFrmNewRubCri + 219)
-#define ActRemTreTchCrs (ActFrmNewRubCri + 220)
-#define ActFrmCreTchCrs (ActFrmNewRubCri + 221)
-#define ActCreFolTchCrs (ActFrmNewRubCri + 222)
-#define ActCreLnkTchCrs (ActFrmNewRubCri + 223)
-#define ActRenFolTchCrs (ActFrmNewRubCri + 224)
-#define ActRcvFilTchCrsDZ (ActFrmNewRubCri + 225)
-#define ActRcvFilTchCrsCla (ActFrmNewRubCri + 226)
-#define ActExpTchCrs (ActFrmNewRubCri + 227)
-#define ActConTchCrs (ActFrmNewRubCri + 228)
-#define ActZIPTchCrs (ActFrmNewRubCri + 229)
-#define ActReqDatTchCrs (ActFrmNewRubCri + 230)
-#define ActChgDatTchCrs (ActFrmNewRubCri + 231)
-#define ActDowTchCrs (ActFrmNewRubCri + 232)
+#define ActAdmTchCrs (ActChgMaxRubCri + 214)
+#define ActReqRemFilTchCrs (ActChgMaxRubCri + 215)
+#define ActRemFilTchCrs (ActChgMaxRubCri + 216)
+#define ActRemFolTchCrs (ActChgMaxRubCri + 217)
+#define ActCopTchCrs (ActChgMaxRubCri + 218)
+#define ActPasTchCrs (ActChgMaxRubCri + 219)
+#define ActRemTreTchCrs (ActChgMaxRubCri + 220)
+#define ActFrmCreTchCrs (ActChgMaxRubCri + 221)
+#define ActCreFolTchCrs (ActChgMaxRubCri + 222)
+#define ActCreLnkTchCrs (ActChgMaxRubCri + 223)
+#define ActRenFolTchCrs (ActChgMaxRubCri + 224)
+#define ActRcvFilTchCrsDZ (ActChgMaxRubCri + 225)
+#define ActRcvFilTchCrsCla (ActChgMaxRubCri + 226)
+#define ActExpTchCrs (ActChgMaxRubCri + 227)
+#define ActConTchCrs (ActChgMaxRubCri + 228)
+#define ActZIPTchCrs (ActChgMaxRubCri + 229)
+#define ActReqDatTchCrs (ActChgMaxRubCri + 230)
+#define ActChgDatTchCrs (ActChgMaxRubCri + 231)
+#define ActDowTchCrs (ActChgMaxRubCri + 232)
-#define ActAdmTchGrp (ActFrmNewRubCri + 233)
-#define ActReqRemFilTchGrp (ActFrmNewRubCri + 234)
-#define ActRemFilTchGrp (ActFrmNewRubCri + 235)
-#define ActRemFolTchGrp (ActFrmNewRubCri + 236)
-#define ActCopTchGrp (ActFrmNewRubCri + 237)
-#define ActPasTchGrp (ActFrmNewRubCri + 238)
-#define ActRemTreTchGrp (ActFrmNewRubCri + 239)
-#define ActFrmCreTchGrp (ActFrmNewRubCri + 240)
-#define ActCreFolTchGrp (ActFrmNewRubCri + 241)
-#define ActCreLnkTchGrp (ActFrmNewRubCri + 242)
-#define ActRenFolTchGrp (ActFrmNewRubCri + 243)
-#define ActRcvFilTchGrpDZ (ActFrmNewRubCri + 244)
-#define ActRcvFilTchGrpCla (ActFrmNewRubCri + 245)
-#define ActExpTchGrp (ActFrmNewRubCri + 246)
-#define ActConTchGrp (ActFrmNewRubCri + 247)
-#define ActZIPTchGrp (ActFrmNewRubCri + 248)
-#define ActReqDatTchGrp (ActFrmNewRubCri + 249)
-#define ActChgDatTchGrp (ActFrmNewRubCri + 250)
-#define ActDowTchGrp (ActFrmNewRubCri + 251)
+#define ActAdmTchGrp (ActChgMaxRubCri + 233)
+#define ActReqRemFilTchGrp (ActChgMaxRubCri + 234)
+#define ActRemFilTchGrp (ActChgMaxRubCri + 235)
+#define ActRemFolTchGrp (ActChgMaxRubCri + 236)
+#define ActCopTchGrp (ActChgMaxRubCri + 237)
+#define ActPasTchGrp (ActChgMaxRubCri + 238)
+#define ActRemTreTchGrp (ActChgMaxRubCri + 239)
+#define ActFrmCreTchGrp (ActChgMaxRubCri + 240)
+#define ActCreFolTchGrp (ActChgMaxRubCri + 241)
+#define ActCreLnkTchGrp (ActChgMaxRubCri + 242)
+#define ActRenFolTchGrp (ActChgMaxRubCri + 243)
+#define ActRcvFilTchGrpDZ (ActChgMaxRubCri + 244)
+#define ActRcvFilTchGrpCla (ActChgMaxRubCri + 245)
+#define ActExpTchGrp (ActChgMaxRubCri + 246)
+#define ActConTchGrp (ActChgMaxRubCri + 247)
+#define ActZIPTchGrp (ActChgMaxRubCri + 248)
+#define ActReqDatTchGrp (ActChgMaxRubCri + 249)
+#define ActChgDatTchGrp (ActChgMaxRubCri + 250)
+#define ActDowTchGrp (ActChgMaxRubCri + 251)
-#define ActChgToAdmSha (ActFrmNewRubCri + 252)
+#define ActChgToAdmSha (ActChgMaxRubCri + 252)
-#define ActAdmShaCrs (ActFrmNewRubCri + 253)
-#define ActReqRemFilShaCrs (ActFrmNewRubCri + 254)
-#define ActRemFilShaCrs (ActFrmNewRubCri + 255)
-#define ActRemFolShaCrs (ActFrmNewRubCri + 256)
-#define ActCopShaCrs (ActFrmNewRubCri + 257)
-#define ActPasShaCrs (ActFrmNewRubCri + 258)
-#define ActRemTreShaCrs (ActFrmNewRubCri + 259)
-#define ActFrmCreShaCrs (ActFrmNewRubCri + 260)
-#define ActCreFolShaCrs (ActFrmNewRubCri + 261)
-#define ActCreLnkShaCrs (ActFrmNewRubCri + 262)
-#define ActRenFolShaCrs (ActFrmNewRubCri + 263)
-#define ActRcvFilShaCrsDZ (ActFrmNewRubCri + 264)
-#define ActRcvFilShaCrsCla (ActFrmNewRubCri + 265)
-#define ActExpShaCrs (ActFrmNewRubCri + 266)
-#define ActConShaCrs (ActFrmNewRubCri + 267)
-#define ActZIPShaCrs (ActFrmNewRubCri + 268)
-#define ActReqDatShaCrs (ActFrmNewRubCri + 269)
-#define ActChgDatShaCrs (ActFrmNewRubCri + 270)
-#define ActDowShaCrs (ActFrmNewRubCri + 271)
+#define ActAdmShaCrs (ActChgMaxRubCri + 253)
+#define ActReqRemFilShaCrs (ActChgMaxRubCri + 254)
+#define ActRemFilShaCrs (ActChgMaxRubCri + 255)
+#define ActRemFolShaCrs (ActChgMaxRubCri + 256)
+#define ActCopShaCrs (ActChgMaxRubCri + 257)
+#define ActPasShaCrs (ActChgMaxRubCri + 258)
+#define ActRemTreShaCrs (ActChgMaxRubCri + 259)
+#define ActFrmCreShaCrs (ActChgMaxRubCri + 260)
+#define ActCreFolShaCrs (ActChgMaxRubCri + 261)
+#define ActCreLnkShaCrs (ActChgMaxRubCri + 262)
+#define ActRenFolShaCrs (ActChgMaxRubCri + 263)
+#define ActRcvFilShaCrsDZ (ActChgMaxRubCri + 264)
+#define ActRcvFilShaCrsCla (ActChgMaxRubCri + 265)
+#define ActExpShaCrs (ActChgMaxRubCri + 266)
+#define ActConShaCrs (ActChgMaxRubCri + 267)
+#define ActZIPShaCrs (ActChgMaxRubCri + 268)
+#define ActReqDatShaCrs (ActChgMaxRubCri + 269)
+#define ActChgDatShaCrs (ActChgMaxRubCri + 270)
+#define ActDowShaCrs (ActChgMaxRubCri + 271)
-#define ActAdmShaGrp (ActFrmNewRubCri + 272)
-#define ActReqRemFilShaGrp (ActFrmNewRubCri + 273)
-#define ActRemFilShaGrp (ActFrmNewRubCri + 274)
-#define ActRemFolShaGrp (ActFrmNewRubCri + 275)
-#define ActCopShaGrp (ActFrmNewRubCri + 276)
-#define ActPasShaGrp (ActFrmNewRubCri + 277)
-#define ActRemTreShaGrp (ActFrmNewRubCri + 278)
-#define ActFrmCreShaGrp (ActFrmNewRubCri + 279)
-#define ActCreFolShaGrp (ActFrmNewRubCri + 280)
-#define ActCreLnkShaGrp (ActFrmNewRubCri + 281)
-#define ActRenFolShaGrp (ActFrmNewRubCri + 282)
-#define ActRcvFilShaGrpDZ (ActFrmNewRubCri + 283)
-#define ActRcvFilShaGrpCla (ActFrmNewRubCri + 284)
-#define ActExpShaGrp (ActFrmNewRubCri + 285)
-#define ActConShaGrp (ActFrmNewRubCri + 286)
-#define ActZIPShaGrp (ActFrmNewRubCri + 287)
-#define ActReqDatShaGrp (ActFrmNewRubCri + 288)
-#define ActChgDatShaGrp (ActFrmNewRubCri + 289)
-#define ActDowShaGrp (ActFrmNewRubCri + 290)
+#define ActAdmShaGrp (ActChgMaxRubCri + 272)
+#define ActReqRemFilShaGrp (ActChgMaxRubCri + 273)
+#define ActRemFilShaGrp (ActChgMaxRubCri + 274)
+#define ActRemFolShaGrp (ActChgMaxRubCri + 275)
+#define ActCopShaGrp (ActChgMaxRubCri + 276)
+#define ActPasShaGrp (ActChgMaxRubCri + 277)
+#define ActRemTreShaGrp (ActChgMaxRubCri + 278)
+#define ActFrmCreShaGrp (ActChgMaxRubCri + 279)
+#define ActCreFolShaGrp (ActChgMaxRubCri + 280)
+#define ActCreLnkShaGrp (ActChgMaxRubCri + 281)
+#define ActRenFolShaGrp (ActChgMaxRubCri + 282)
+#define ActRcvFilShaGrpDZ (ActChgMaxRubCri + 283)
+#define ActRcvFilShaGrpCla (ActChgMaxRubCri + 284)
+#define ActExpShaGrp (ActChgMaxRubCri + 285)
+#define ActConShaGrp (ActChgMaxRubCri + 286)
+#define ActZIPShaGrp (ActChgMaxRubCri + 287)
+#define ActReqDatShaGrp (ActChgMaxRubCri + 288)
+#define ActChgDatShaGrp (ActChgMaxRubCri + 289)
+#define ActDowShaGrp (ActChgMaxRubCri + 290)
-#define ActAdmAsgWrkCrs (ActFrmNewRubCri + 291)
+#define ActAdmAsgWrkCrs (ActChgMaxRubCri + 291)
-#define ActReqRemFilAsgUsr (ActFrmNewRubCri + 292)
-#define ActRemFilAsgUsr (ActFrmNewRubCri + 293)
-#define ActRemFolAsgUsr (ActFrmNewRubCri + 294)
-#define ActCopAsgUsr (ActFrmNewRubCri + 295)
-#define ActPasAsgUsr (ActFrmNewRubCri + 296)
-#define ActRemTreAsgUsr (ActFrmNewRubCri + 297)
-#define ActFrmCreAsgUsr (ActFrmNewRubCri + 298)
-#define ActCreFolAsgUsr (ActFrmNewRubCri + 299)
-#define ActCreLnkAsgUsr (ActFrmNewRubCri + 300)
-#define ActRenFolAsgUsr (ActFrmNewRubCri + 301)
-#define ActRcvFilAsgUsrDZ (ActFrmNewRubCri + 302)
-#define ActRcvFilAsgUsrCla (ActFrmNewRubCri + 303)
-#define ActExpAsgUsr (ActFrmNewRubCri + 304)
-#define ActConAsgUsr (ActFrmNewRubCri + 305)
-#define ActZIPAsgUsr (ActFrmNewRubCri + 306)
-#define ActReqDatAsgUsr (ActFrmNewRubCri + 307)
-#define ActChgDatAsgUsr (ActFrmNewRubCri + 308)
-#define ActDowAsgUsr (ActFrmNewRubCri + 309)
+#define ActReqRemFilAsgUsr (ActChgMaxRubCri + 292)
+#define ActRemFilAsgUsr (ActChgMaxRubCri + 293)
+#define ActRemFolAsgUsr (ActChgMaxRubCri + 294)
+#define ActCopAsgUsr (ActChgMaxRubCri + 295)
+#define ActPasAsgUsr (ActChgMaxRubCri + 296)
+#define ActRemTreAsgUsr (ActChgMaxRubCri + 297)
+#define ActFrmCreAsgUsr (ActChgMaxRubCri + 298)
+#define ActCreFolAsgUsr (ActChgMaxRubCri + 299)
+#define ActCreLnkAsgUsr (ActChgMaxRubCri + 300)
+#define ActRenFolAsgUsr (ActChgMaxRubCri + 301)
+#define ActRcvFilAsgUsrDZ (ActChgMaxRubCri + 302)
+#define ActRcvFilAsgUsrCla (ActChgMaxRubCri + 303)
+#define ActExpAsgUsr (ActChgMaxRubCri + 304)
+#define ActConAsgUsr (ActChgMaxRubCri + 305)
+#define ActZIPAsgUsr (ActChgMaxRubCri + 306)
+#define ActReqDatAsgUsr (ActChgMaxRubCri + 307)
+#define ActChgDatAsgUsr (ActChgMaxRubCri + 308)
+#define ActDowAsgUsr (ActChgMaxRubCri + 309)
-#define ActReqRemFilWrkUsr (ActFrmNewRubCri + 310)
-#define ActRemFilWrkUsr (ActFrmNewRubCri + 311)
-#define ActRemFolWrkUsr (ActFrmNewRubCri + 312)
-#define ActCopWrkUsr (ActFrmNewRubCri + 313)
-#define ActPasWrkUsr (ActFrmNewRubCri + 314)
-#define ActRemTreWrkUsr (ActFrmNewRubCri + 315)
-#define ActFrmCreWrkUsr (ActFrmNewRubCri + 316)
-#define ActCreFolWrkUsr (ActFrmNewRubCri + 317)
-#define ActCreLnkWrkUsr (ActFrmNewRubCri + 318)
-#define ActRenFolWrkUsr (ActFrmNewRubCri + 319)
-#define ActRcvFilWrkUsrDZ (ActFrmNewRubCri + 320)
-#define ActRcvFilWrkUsrCla (ActFrmNewRubCri + 321)
-#define ActExpWrkUsr (ActFrmNewRubCri + 322)
-#define ActConWrkUsr (ActFrmNewRubCri + 323)
-#define ActZIPWrkUsr (ActFrmNewRubCri + 324)
-#define ActReqDatWrkUsr (ActFrmNewRubCri + 325)
-#define ActChgDatWrkUsr (ActFrmNewRubCri + 326)
-#define ActDowWrkUsr (ActFrmNewRubCri + 327)
+#define ActReqRemFilWrkUsr (ActChgMaxRubCri + 310)
+#define ActRemFilWrkUsr (ActChgMaxRubCri + 311)
+#define ActRemFolWrkUsr (ActChgMaxRubCri + 312)
+#define ActCopWrkUsr (ActChgMaxRubCri + 313)
+#define ActPasWrkUsr (ActChgMaxRubCri + 314)
+#define ActRemTreWrkUsr (ActChgMaxRubCri + 315)
+#define ActFrmCreWrkUsr (ActChgMaxRubCri + 316)
+#define ActCreFolWrkUsr (ActChgMaxRubCri + 317)
+#define ActCreLnkWrkUsr (ActChgMaxRubCri + 318)
+#define ActRenFolWrkUsr (ActChgMaxRubCri + 319)
+#define ActRcvFilWrkUsrDZ (ActChgMaxRubCri + 320)
+#define ActRcvFilWrkUsrCla (ActChgMaxRubCri + 321)
+#define ActExpWrkUsr (ActChgMaxRubCri + 322)
+#define ActConWrkUsr (ActChgMaxRubCri + 323)
+#define ActZIPWrkUsr (ActChgMaxRubCri + 324)
+#define ActReqDatWrkUsr (ActChgMaxRubCri + 325)
+#define ActChgDatWrkUsr (ActChgMaxRubCri + 326)
+#define ActDowWrkUsr (ActChgMaxRubCri + 327)
-#define ActReqRemFilAsgCrs (ActFrmNewRubCri + 328)
-#define ActRemFilAsgCrs (ActFrmNewRubCri + 329)
-#define ActRemFolAsgCrs (ActFrmNewRubCri + 330)
-#define ActCopAsgCrs (ActFrmNewRubCri + 331)
-#define ActPasAsgCrs (ActFrmNewRubCri + 332)
-#define ActRemTreAsgCrs (ActFrmNewRubCri + 333)
-#define ActFrmCreAsgCrs (ActFrmNewRubCri + 334)
-#define ActCreFolAsgCrs (ActFrmNewRubCri + 335)
-#define ActCreLnkAsgCrs (ActFrmNewRubCri + 336)
-#define ActRenFolAsgCrs (ActFrmNewRubCri + 337)
-#define ActRcvFilAsgCrsDZ (ActFrmNewRubCri + 338)
-#define ActRcvFilAsgCrsCla (ActFrmNewRubCri + 339)
-#define ActExpAsgCrs (ActFrmNewRubCri + 340)
-#define ActConAsgCrs (ActFrmNewRubCri + 341)
-#define ActZIPAsgCrs (ActFrmNewRubCri + 342)
-#define ActReqDatAsgCrs (ActFrmNewRubCri + 343)
-#define ActChgDatAsgCrs (ActFrmNewRubCri + 344)
-#define ActDowAsgCrs (ActFrmNewRubCri + 345)
+#define ActReqRemFilAsgCrs (ActChgMaxRubCri + 328)
+#define ActRemFilAsgCrs (ActChgMaxRubCri + 329)
+#define ActRemFolAsgCrs (ActChgMaxRubCri + 330)
+#define ActCopAsgCrs (ActChgMaxRubCri + 331)
+#define ActPasAsgCrs (ActChgMaxRubCri + 332)
+#define ActRemTreAsgCrs (ActChgMaxRubCri + 333)
+#define ActFrmCreAsgCrs (ActChgMaxRubCri + 334)
+#define ActCreFolAsgCrs (ActChgMaxRubCri + 335)
+#define ActCreLnkAsgCrs (ActChgMaxRubCri + 336)
+#define ActRenFolAsgCrs (ActChgMaxRubCri + 337)
+#define ActRcvFilAsgCrsDZ (ActChgMaxRubCri + 338)
+#define ActRcvFilAsgCrsCla (ActChgMaxRubCri + 339)
+#define ActExpAsgCrs (ActChgMaxRubCri + 340)
+#define ActConAsgCrs (ActChgMaxRubCri + 341)
+#define ActZIPAsgCrs (ActChgMaxRubCri + 342)
+#define ActReqDatAsgCrs (ActChgMaxRubCri + 343)
+#define ActChgDatAsgCrs (ActChgMaxRubCri + 344)
+#define ActDowAsgCrs (ActChgMaxRubCri + 345)
-#define ActReqRemFilWrkCrs (ActFrmNewRubCri + 346)
-#define ActRemFilWrkCrs (ActFrmNewRubCri + 347)
-#define ActRemFolWrkCrs (ActFrmNewRubCri + 348)
-#define ActCopWrkCrs (ActFrmNewRubCri + 349)
-#define ActPasWrkCrs (ActFrmNewRubCri + 350)
-#define ActRemTreWrkCrs (ActFrmNewRubCri + 351)
-#define ActFrmCreWrkCrs (ActFrmNewRubCri + 352)
-#define ActCreFolWrkCrs (ActFrmNewRubCri + 353)
-#define ActCreLnkWrkCrs (ActFrmNewRubCri + 354)
-#define ActRenFolWrkCrs (ActFrmNewRubCri + 355)
-#define ActRcvFilWrkCrsDZ (ActFrmNewRubCri + 356)
-#define ActRcvFilWrkCrsCla (ActFrmNewRubCri + 357)
-#define ActExpWrkCrs (ActFrmNewRubCri + 358)
-#define ActConWrkCrs (ActFrmNewRubCri + 359)
-#define ActZIPWrkCrs (ActFrmNewRubCri + 360)
-#define ActReqDatWrkCrs (ActFrmNewRubCri + 361)
-#define ActChgDatWrkCrs (ActFrmNewRubCri + 362)
-#define ActDowWrkCrs (ActFrmNewRubCri + 363)
+#define ActReqRemFilWrkCrs (ActChgMaxRubCri + 346)
+#define ActRemFilWrkCrs (ActChgMaxRubCri + 347)
+#define ActRemFolWrkCrs (ActChgMaxRubCri + 348)
+#define ActCopWrkCrs (ActChgMaxRubCri + 349)
+#define ActPasWrkCrs (ActChgMaxRubCri + 350)
+#define ActRemTreWrkCrs (ActChgMaxRubCri + 351)
+#define ActFrmCreWrkCrs (ActChgMaxRubCri + 352)
+#define ActCreFolWrkCrs (ActChgMaxRubCri + 353)
+#define ActCreLnkWrkCrs (ActChgMaxRubCri + 354)
+#define ActRenFolWrkCrs (ActChgMaxRubCri + 355)
+#define ActRcvFilWrkCrsDZ (ActChgMaxRubCri + 356)
+#define ActRcvFilWrkCrsCla (ActChgMaxRubCri + 357)
+#define ActExpWrkCrs (ActChgMaxRubCri + 358)
+#define ActConWrkCrs (ActChgMaxRubCri + 359)
+#define ActZIPWrkCrs (ActChgMaxRubCri + 360)
+#define ActReqDatWrkCrs (ActChgMaxRubCri + 361)
+#define ActChgDatWrkCrs (ActChgMaxRubCri + 362)
+#define ActDowWrkCrs (ActChgMaxRubCri + 363)
-#define ActChgToSeeMrk (ActFrmNewRubCri + 364)
+#define ActChgToSeeMrk (ActChgMaxRubCri + 364)
-#define ActSeeMrkCrs (ActFrmNewRubCri + 365)
-#define ActExpSeeMrkCrs (ActFrmNewRubCri + 366)
-#define ActConSeeMrkCrs (ActFrmNewRubCri + 367)
-#define ActReqDatSeeMrkCrs (ActFrmNewRubCri + 368)
-#define ActReqLnkSeeMrkCrs (ActFrmNewRubCri + 369)
-#define ActSeeMyMrkCrs (ActFrmNewRubCri + 370)
+#define ActSeeMrkCrs (ActChgMaxRubCri + 365)
+#define ActExpSeeMrkCrs (ActChgMaxRubCri + 366)
+#define ActConSeeMrkCrs (ActChgMaxRubCri + 367)
+#define ActReqDatSeeMrkCrs (ActChgMaxRubCri + 368)
+#define ActReqLnkSeeMrkCrs (ActChgMaxRubCri + 369)
+#define ActSeeMyMrkCrs (ActChgMaxRubCri + 370)
-#define ActSeeMrkGrp (ActFrmNewRubCri + 371)
-#define ActExpSeeMrkGrp (ActFrmNewRubCri + 372)
-#define ActConSeeMrkGrp (ActFrmNewRubCri + 373)
-#define ActReqDatSeeMrkGrp (ActFrmNewRubCri + 374)
-#define ActSeeMyMrkGrp (ActFrmNewRubCri + 375)
+#define ActSeeMrkGrp (ActChgMaxRubCri + 371)
+#define ActExpSeeMrkGrp (ActChgMaxRubCri + 372)
+#define ActConSeeMrkGrp (ActChgMaxRubCri + 373)
+#define ActReqDatSeeMrkGrp (ActChgMaxRubCri + 374)
+#define ActSeeMyMrkGrp (ActChgMaxRubCri + 375)
-#define ActChgToAdmMrk (ActFrmNewRubCri + 376)
+#define ActChgToAdmMrk (ActChgMaxRubCri + 376)
-#define ActAdmMrkCrs (ActFrmNewRubCri + 377)
-#define ActReqRemFilMrkCrs (ActFrmNewRubCri + 378)
-#define ActRemFilMrkCrs (ActFrmNewRubCri + 379)
-#define ActRemFolMrkCrs (ActFrmNewRubCri + 380)
-#define ActCopMrkCrs (ActFrmNewRubCri + 381)
-#define ActPasMrkCrs (ActFrmNewRubCri + 382)
-#define ActRemTreMrkCrs (ActFrmNewRubCri + 383)
-#define ActFrmCreMrkCrs (ActFrmNewRubCri + 384)
-#define ActCreFolMrkCrs (ActFrmNewRubCri + 385)
-#define ActRenFolMrkCrs (ActFrmNewRubCri + 386)
-#define ActRcvFilMrkCrsDZ (ActFrmNewRubCri + 387)
-#define ActRcvFilMrkCrsCla (ActFrmNewRubCri + 388)
-#define ActExpAdmMrkCrs (ActFrmNewRubCri + 389)
-#define ActConAdmMrkCrs (ActFrmNewRubCri + 390)
-#define ActZIPAdmMrkCrs (ActFrmNewRubCri + 391)
-#define ActUnhMrkCrs (ActFrmNewRubCri + 392)
-#define ActHidMrkCrs (ActFrmNewRubCri + 393)
-#define ActReqDatAdmMrkCrs (ActFrmNewRubCri + 394)
-#define ActChgDatAdmMrkCrs (ActFrmNewRubCri + 395)
-#define ActReqLnkAdmMrkCrs (ActFrmNewRubCri + 396)
-#define ActDowAdmMrkCrs (ActFrmNewRubCri + 397)
-#define ActChgNumRowHeaCrs (ActFrmNewRubCri + 398)
-#define ActChgNumRowFooCrs (ActFrmNewRubCri + 399)
+#define ActAdmMrkCrs (ActChgMaxRubCri + 377)
+#define ActReqRemFilMrkCrs (ActChgMaxRubCri + 378)
+#define ActRemFilMrkCrs (ActChgMaxRubCri + 379)
+#define ActRemFolMrkCrs (ActChgMaxRubCri + 380)
+#define ActCopMrkCrs (ActChgMaxRubCri + 381)
+#define ActPasMrkCrs (ActChgMaxRubCri + 382)
+#define ActRemTreMrkCrs (ActChgMaxRubCri + 383)
+#define ActFrmCreMrkCrs (ActChgMaxRubCri + 384)
+#define ActCreFolMrkCrs (ActChgMaxRubCri + 385)
+#define ActRenFolMrkCrs (ActChgMaxRubCri + 386)
+#define ActRcvFilMrkCrsDZ (ActChgMaxRubCri + 387)
+#define ActRcvFilMrkCrsCla (ActChgMaxRubCri + 388)
+#define ActExpAdmMrkCrs (ActChgMaxRubCri + 389)
+#define ActConAdmMrkCrs (ActChgMaxRubCri + 390)
+#define ActZIPAdmMrkCrs (ActChgMaxRubCri + 391)
+#define ActUnhMrkCrs (ActChgMaxRubCri + 392)
+#define ActHidMrkCrs (ActChgMaxRubCri + 393)
+#define ActReqDatAdmMrkCrs (ActChgMaxRubCri + 394)
+#define ActChgDatAdmMrkCrs (ActChgMaxRubCri + 395)
+#define ActReqLnkAdmMrkCrs (ActChgMaxRubCri + 396)
+#define ActDowAdmMrkCrs (ActChgMaxRubCri + 397)
+#define ActChgNumRowHeaCrs (ActChgMaxRubCri + 398)
+#define ActChgNumRowFooCrs (ActChgMaxRubCri + 399)
-#define ActAdmMrkGrp (ActFrmNewRubCri + 400)
-#define ActReqRemFilMrkGrp (ActFrmNewRubCri + 401)
-#define ActRemFilMrkGrp (ActFrmNewRubCri + 402)
-#define ActRemFolMrkGrp (ActFrmNewRubCri + 403)
-#define ActCopMrkGrp (ActFrmNewRubCri + 404)
-#define ActPasMrkGrp (ActFrmNewRubCri + 405)
-#define ActRemTreMrkGrp (ActFrmNewRubCri + 406)
-#define ActFrmCreMrkGrp (ActFrmNewRubCri + 407)
-#define ActCreFolMrkGrp (ActFrmNewRubCri + 408)
-#define ActRenFolMrkGrp (ActFrmNewRubCri + 409)
-#define ActRcvFilMrkGrpDZ (ActFrmNewRubCri + 410)
-#define ActRcvFilMrkGrpCla (ActFrmNewRubCri + 411)
-#define ActExpAdmMrkGrp (ActFrmNewRubCri + 412)
-#define ActConAdmMrkGrp (ActFrmNewRubCri + 413)
-#define ActZIPAdmMrkGrp (ActFrmNewRubCri + 414)
-#define ActUnhMrkGrp (ActFrmNewRubCri + 415)
-#define ActHidMrkGrp (ActFrmNewRubCri + 416)
-#define ActReqDatAdmMrkGrp (ActFrmNewRubCri + 417)
-#define ActChgDatAdmMrkGrp (ActFrmNewRubCri + 418)
-#define ActDowAdmMrkGrp (ActFrmNewRubCri + 419)
-#define ActChgNumRowHeaGrp (ActFrmNewRubCri + 420)
-#define ActChgNumRowFooGrp (ActFrmNewRubCri + 421)
+#define ActAdmMrkGrp (ActChgMaxRubCri + 400)
+#define ActReqRemFilMrkGrp (ActChgMaxRubCri + 401)
+#define ActRemFilMrkGrp (ActChgMaxRubCri + 402)
+#define ActRemFolMrkGrp (ActChgMaxRubCri + 403)
+#define ActCopMrkGrp (ActChgMaxRubCri + 404)
+#define ActPasMrkGrp (ActChgMaxRubCri + 405)
+#define ActRemTreMrkGrp (ActChgMaxRubCri + 406)
+#define ActFrmCreMrkGrp (ActChgMaxRubCri + 407)
+#define ActCreFolMrkGrp (ActChgMaxRubCri + 408)
+#define ActRenFolMrkGrp (ActChgMaxRubCri + 409)
+#define ActRcvFilMrkGrpDZ (ActChgMaxRubCri + 410)
+#define ActRcvFilMrkGrpCla (ActChgMaxRubCri + 411)
+#define ActExpAdmMrkGrp (ActChgMaxRubCri + 412)
+#define ActConAdmMrkGrp (ActChgMaxRubCri + 413)
+#define ActZIPAdmMrkGrp (ActChgMaxRubCri + 414)
+#define ActUnhMrkGrp (ActChgMaxRubCri + 415)
+#define ActHidMrkGrp (ActChgMaxRubCri + 416)
+#define ActReqDatAdmMrkGrp (ActChgMaxRubCri + 417)
+#define ActChgDatAdmMrkGrp (ActChgMaxRubCri + 418)
+#define ActDowAdmMrkGrp (ActChgMaxRubCri + 419)
+#define ActChgNumRowHeaGrp (ActChgMaxRubCri + 420)
+#define ActChgNumRowFooGrp (ActChgMaxRubCri + 421)
-#define ActReqRemFilBrf (ActFrmNewRubCri + 422)
-#define ActRemFilBrf (ActFrmNewRubCri + 423)
-#define ActRemFolBrf (ActFrmNewRubCri + 424)
-#define ActCopBrf (ActFrmNewRubCri + 425)
-#define ActPasBrf (ActFrmNewRubCri + 426)
-#define ActRemTreBrf (ActFrmNewRubCri + 427)
-#define ActFrmCreBrf (ActFrmNewRubCri + 428)
-#define ActCreFolBrf (ActFrmNewRubCri + 429)
-#define ActCreLnkBrf (ActFrmNewRubCri + 430)
-#define ActRenFolBrf (ActFrmNewRubCri + 431)
-#define ActRcvFilBrfDZ (ActFrmNewRubCri + 432)
-#define ActRcvFilBrfCla (ActFrmNewRubCri + 433)
-#define ActExpBrf (ActFrmNewRubCri + 434)
-#define ActConBrf (ActFrmNewRubCri + 435)
-#define ActZIPBrf (ActFrmNewRubCri + 436)
-#define ActReqDatBrf (ActFrmNewRubCri + 437)
-#define ActChgDatBrf (ActFrmNewRubCri + 438)
-#define ActDowBrf (ActFrmNewRubCri + 439)
-#define ActReqRemOldBrf (ActFrmNewRubCri + 440)
-#define ActRemOldBrf (ActFrmNewRubCri + 441)
+#define ActReqRemFilBrf (ActChgMaxRubCri + 422)
+#define ActRemFilBrf (ActChgMaxRubCri + 423)
+#define ActRemFolBrf (ActChgMaxRubCri + 424)
+#define ActCopBrf (ActChgMaxRubCri + 425)
+#define ActPasBrf (ActChgMaxRubCri + 426)
+#define ActRemTreBrf (ActChgMaxRubCri + 427)
+#define ActFrmCreBrf (ActChgMaxRubCri + 428)
+#define ActCreFolBrf (ActChgMaxRubCri + 429)
+#define ActCreLnkBrf (ActChgMaxRubCri + 430)
+#define ActRenFolBrf (ActChgMaxRubCri + 431)
+#define ActRcvFilBrfDZ (ActChgMaxRubCri + 432)
+#define ActRcvFilBrfCla (ActChgMaxRubCri + 433)
+#define ActExpBrf (ActChgMaxRubCri + 434)
+#define ActConBrf (ActChgMaxRubCri + 435)
+#define ActZIPBrf (ActChgMaxRubCri + 436)
+#define ActReqDatBrf (ActChgMaxRubCri + 437)
+#define ActChgDatBrf (ActChgMaxRubCri + 438)
+#define ActDowBrf (ActChgMaxRubCri + 439)
+#define ActReqRemOldBrf (ActChgMaxRubCri + 440)
+#define ActRemOldBrf (ActChgMaxRubCri + 441)
/*****************************************************************************/
/******************************* Users tab ***********************************/
@@ -1760,7 +1768,7 @@
#define ActLst_NUM_ACTIONS (ActChgMyTT1stDay + 1)
-#define ActLst_MAX_ACTION_COD 1959
+#define ActLst_MAX_ACTION_COD 1967
#define ActLst_DEFAULT_ACTION_AFTER_LOGIN ActSeeGblTL
diff --git a/swad_agenda.c b/swad_agenda.c
index 34ea1c5b..f9e7b90c 100644
--- a/swad_agenda.c
+++ b/swad_agenda.c
@@ -1354,7 +1354,7 @@ void Agd_MakeEventPublic (void)
/******************** Put a form to create a new event ***********************/
/*****************************************************************************/
-void Agd_RequestCreatOrEditEvent (void)
+void Agd_ReqCreatOrEditEvent (void)
{
extern const char *Hlp_PROFILE_Agenda_new_event;
extern const char *Hlp_PROFILE_Agenda_edit_event;
@@ -1590,7 +1590,7 @@ void Agd_ReceiveFormEvent (void)
}
else
// TODO: The form should be filled with partial data, now is always empty
- Agd_RequestCreatOrEditEvent ();
+ Agd_ReqCreatOrEditEvent ();
}
/*****************************************************************************/
diff --git a/swad_agenda.h b/swad_agenda.h
index 0b3086a9..ea9ae5dc 100644
--- a/swad_agenda.h
+++ b/swad_agenda.h
@@ -111,7 +111,7 @@ void Agd_GetParsAndShowMyAgenda (void);
void Agd_ShowUsrAgenda (void);
void Agd_ShowOtherAgendaAfterLogIn (void);
-void Agd_RequestCreatOrEditEvent (void);
+void Agd_ReqCreatOrEditEvent (void);
void Agd_PutParsMyAgenda (unsigned Past__FutureEvents,
unsigned PrivatPublicEvents,
diff --git a/swad_assignment.c b/swad_assignment.c
index 7505e524..78e0efe0 100644
--- a/swad_assignment.c
+++ b/swad_assignment.c
@@ -1144,7 +1144,7 @@ void Asg_UnhideAssignment (void)
/****************** Put a form to create a new assignment ********************/
/*****************************************************************************/
-void Asg_RequestCreatOrEditAsg (void)
+void Asg_ReqCreatOrEditAsg (void)
{
extern const char *Hlp_ASSESSMENT_Assignments_new_assignment;
extern const char *Hlp_ASSESSMENT_Assignments_edit_assignment;
@@ -1527,7 +1527,7 @@ void Asg_ReceiveFormAssignment (void)
}
else
// TODO: The form should be filled with partial data, now is always empty
- Asg_RequestCreatOrEditAsg ();
+ Asg_ReqCreatOrEditAsg ();
}
/*****************************************************************************/
diff --git a/swad_assignment.h b/swad_assignment.h
index f813fae3..59dbfb6e 100644
--- a/swad_assignment.h
+++ b/swad_assignment.h
@@ -90,7 +90,7 @@ void Asg_ShowOneAssignmentInBox (struct Asg_Assignments *Assignments);
Dat_StartEndTime_t Asg_GetParAsgOrder (void);
-void Asg_RequestCreatOrEditAsg (void);
+void Asg_ReqCreatOrEditAsg (void);
void Asg_GetDataOfAssignmentByCod (struct Asg_Assignment *Asg);
void Asg_GetDataOfAssignmentByFolder (struct Asg_Assignment *Asg);
diff --git a/swad_attendance.c b/swad_attendance.c
index fcb08402..4d0ca963 100644
--- a/swad_attendance.c
+++ b/swad_attendance.c
@@ -937,7 +937,7 @@ void Att_UnhideAttEvent (void)
/*************** Put a form to create a new attendance event *****************/
/*****************************************************************************/
-void Att_RequestCreatOrEditAttEvent (void)
+void Att_ReqCreatOrEditAttEvent (void)
{
extern const char *Hlp_USERS_Attendance_new_event;
extern const char *Hlp_USERS_Attendance_edit_event;
@@ -1252,7 +1252,7 @@ void Att_ReceiveFormAttEvent (void)
Grp_FreeListCodSelectedGrps ();
}
else
- Att_RequestCreatOrEditAttEvent ();
+ Att_ReqCreatOrEditAttEvent ();
/***** Show attendance events again *****/
Att_SeeAttEvents ();
diff --git a/swad_attendance.h b/swad_attendance.h
index 235d73b4..932972a8 100644
--- a/swad_attendance.h
+++ b/swad_attendance.h
@@ -87,7 +87,7 @@ void Att_SeeAttEvents (void);
bool Att_CheckIfICanEditAttEvents (void);
-void Att_RequestCreatOrEditAttEvent (void);
+void Att_ReqCreatOrEditAttEvent (void);
bool Att_GetDataOfAttEventByCod (struct Att_Event *Event);
void Att_AskRemAttEvent (void);
diff --git a/swad_call_for_exam.c b/swad_call_for_exam.c
index 2919cf25..318774b3 100644
--- a/swad_call_for_exam.c
+++ b/swad_call_for_exam.c
@@ -396,7 +396,7 @@ void Cfe_PrintCallForExam (void)
/************************** Remove a call for exam ***************************/
/*****************************************************************************/
-void Cfe_ReqRemoveCallForExam (void)
+void Cfe_ReqRemCallForExam (void)
{
extern const char *Txt_Do_you_really_want_to_remove_the_following_call_for_exam;
struct Cfe_CallsForExams CallsForExams;
diff --git a/swad_call_for_exam.h b/swad_call_for_exam.h
index c7958847..ef178a64 100644
--- a/swad_call_for_exam.h
+++ b/swad_call_for_exam.h
@@ -112,7 +112,7 @@ void Cfe_FreeMemCallForExam (struct Cfe_CallsForExams *CallsForExams);
void Cfe_ReceiveCallForExam1 (void);
void Cfe_ReceiveCallForExam2 (void);
void Cfe_PrintCallForExam (void);
-void Cfe_ReqRemoveCallForExam (void);
+void Cfe_ReqRemCallForExam (void);
void Cfe_RemoveCallForExam1 (void);
void Cfe_RemoveCallForExam2 (void);
void Cfe_HideCallForExam (void);
diff --git a/swad_center_config.c b/swad_center_config.c
index 2d0fb30c..5444c0c9 100644
--- a/swad_center_config.c
+++ b/swad_center_config.c
@@ -796,7 +796,7 @@ static void CtrCfg_NumCrss (void)
/*********** Show a form for sending a logo of the current center ************/
/*****************************************************************************/
-void CtrCfg_RequestLogo (void)
+void CtrCfg_ReqLogo (void)
{
Lgo_RequestLogo (HieLvl_CTR);
}
@@ -823,7 +823,7 @@ void CtrCfg_RemoveLogo (void)
/*********** Show a form for sending a photo of the current center ***********/
/*****************************************************************************/
-void CtrCfg_RequestPhoto (void)
+void CtrCfg_ReqPhoto (void)
{
extern const char *Txt_Photo;
extern const char *Txt_Recommended_aspect_ratio;
diff --git a/swad_center_config.h b/swad_center_config.h
index c09899b7..fc7529e8 100644
--- a/swad_center_config.h
+++ b/swad_center_config.h
@@ -30,10 +30,10 @@
void CtrCfg_ShowConfiguration (void);
void CtrCfg_PrintConfiguration (void);
-void CtrCfg_RequestLogo (void);
+void CtrCfg_ReqLogo (void);
void CtrCfg_ReceiveLogo (void);
void CtrCfg_RemoveLogo (void);
-void CtrCfg_RequestPhoto (void);
+void CtrCfg_ReqPhoto (void);
void CtrCfg_ReceivePhoto (void);
void CtrCfg_ChangeCtrPhotoAttr (void);
void CtrCfg_ChangeCtrIns (void);
diff --git a/swad_changelog.h b/swad_changelog.h
index 540a63e5..88b24d9a 100644
--- a/swad_changelog.h
+++ b/swad_changelog.h
@@ -629,10 +629,19 @@ TODO: Emilce Barrera Mesa: Podr
TODO: Emilce Barrera Mesa: Mis estudiantes presentan muchas dificultades a la hora de poner la foto porque la plataforma es muy exigente respecto al fondo de la imagen.
*/
-#define Log_PLATFORM_VERSION "SWAD 22.74.2 (2023-03-10)"
+#define Log_PLATFORM_VERSION "SWAD 22.75 (2023-03-17)"
#define CSS_FILE "swad22.57.1.css"
#define JS_FILE "swad22.49.js"
/*
+ Version 22.75.1: Mar 17, 2023 Fixed up and down criteria. (? lines)
+ Version 22.75: Mar 17, 2023 New module swad_rubric_criteria. (337631 lines)
+ Code refactoring in exams.
+ 2 changes necessary in database:
+DROP TABLE IF EXISTS rub_criteria;
+CREATE TABLE IF NOT EXISTS rub_criteria (CriCod INT NOT NULL AUTO_INCREMENT,RubCod INT NOT NULL,CriInd INT NOT NULL,MinVal DOUBLE PRECISION NOT NULL DEFAULT 0,MaxVal DOUBLE PRECISION NOT NULL DEFAULT 1,Title VARCHAR(2047) NOT NULL,UNIQUE INDEX(CriCod),UNIQUE INDEX(RubCod,CriInd));
+ If you want to use MyISAM:
+ALTER TABLE rub_criteria ENGINE=MyISAM;
+
Version 22.74.2: Mar 10, 2023 Fixed bugs in exam sets. (336744 lines)
Version 22.74.1: Mar 10, 2023 Fixed links to help. (336741 lines)
Version 22.74: Mar 10, 2023 New module swad_parameter_code. (336740 lines)
diff --git a/swad_database.c b/swad_database.c
index 330dc9ac..4ea4a0de 100644
--- a/swad_database.c
+++ b/swad_database.c
@@ -2799,21 +2799,27 @@ mysql> DESCRIBE roo_check_in;
/***** Table rub_criteria *****/
/*
mysql> DESCRIBE rub_criteria;
-+--------+------+------+-----+---------+-------+
-| Field | Type | Null | Key | Default | Extra |
-+--------+------+------+-----+---------+-------+
-| RubCod | int | NO | PRI | NULL | |
-| CriInd | int | NO | PRI | NULL | |
-| CriCod | int | NO | | NULL | |
-+--------+------+------+-----+---------+-------+
-3 rows in set (0,00 sec)
++--------+---------------+------+-----+---------+----------------+
+| Field | Type | Null | Key | Default | Extra |
++--------+---------------+------+-----+---------+----------------+
+| CriCod | int | NO | PRI | NULL | auto_increment |
+| RubCod | int | NO | MUL | NULL | |
+| CriInd | int | NO | | NULL | |
+| MinVal | double | NO | | 0 | |
+| MaxVal | double | NO | | 1 | |
+| Title | varchar(2047) | NO | | NULL | |
++--------+---------------+------+-----+---------+----------------+
+6 rows in set (0,00 sec)
*/
DB_CreateTable ("CREATE TABLE IF NOT EXISTS rub_criteria ("
+ "CriCod INT NOT NULL AUTO_INCREMENT,"
"RubCod INT NOT NULL,"
"CriInd INT NOT NULL,"
- "CriCod INT NOT NULL,"
- "UNIQUE INDEX(RubCod,CriInd),"
- "UNIQUE INDEX(RubCod,CriCod))");
+ "MinVal DOUBLE PRECISION NOT NULL DEFAULT 0,"
+ "MaxVal DOUBLE PRECISION NOT NULL DEFAULT 1,"
+ "Title VARCHAR(2047) NOT NULL,"
+ "UNIQUE INDEX(CriCod),"
+ "UNIQUE INDEX(RubCod,CriInd))");
/***** Table rub_rubrics *****/
/*
diff --git a/swad_degree.c b/swad_degree.c
index 025c4ee8..e5bc34ba 100644
--- a/swad_degree.c
+++ b/swad_degree.c
@@ -1535,33 +1535,6 @@ static void Deg_ShowAlertAndButtonToGoToDeg (void)
Ale_ShowAlerts (NULL);
}
-/*****************************************************************************/
-/*********** Show a form for sending a logo of the current degree ************/
-/*****************************************************************************/
-
-void Deg_RequestLogo (void)
- {
- Lgo_RequestLogo (HieLvl_DEG);
- }
-
-/*****************************************************************************/
-/***************** Receive the logo of the current degree ********************/
-/*****************************************************************************/
-
-void Deg_ReceiveLogo (void)
- {
- Lgo_ReceiveLogo (HieLvl_DEG);
- }
-
-/*****************************************************************************/
-/****************** Remove the logo of the current degree ********************/
-/*****************************************************************************/
-
-void Deg_RemoveLogo (void)
- {
- Lgo_RemoveLogo (HieLvl_DEG);
- }
-
/*****************************************************************************/
/*********************** Get total number of degrees *************************/
/*****************************************************************************/
diff --git a/swad_degree.h b/swad_degree.h
index 280e870d..ed960cf0 100644
--- a/swad_degree.h
+++ b/swad_degree.h
@@ -102,10 +102,6 @@ void Deg_ChangeDegWWW (void);
void Deg_ChangeDegStatus (void);
void Deg_ContEditAfterChgDeg (void);
-void Deg_RequestLogo (void);
-void Deg_ReceiveLogo (void);
-void Deg_RemoveLogo (void);
-
unsigned Deg_GetCachedNumDegsInSys (void);
void Deg_FlushCacheNumDegsInCty (void);
diff --git a/swad_degree_config.c b/swad_degree_config.c
index 1d69cfe3..67ce21ea 100644
--- a/swad_degree_config.c
+++ b/swad_degree_config.c
@@ -442,6 +442,33 @@ void DegCfg_ChangeDegWWW (void)
DegCfg_ShowConfiguration ();
}
+/*****************************************************************************/
+/*********** Show a form for sending a logo of the current degree ************/
+/*****************************************************************************/
+
+void DegCfg_ReqLogo (void)
+ {
+ Lgo_RequestLogo (HieLvl_DEG);
+ }
+
+/*****************************************************************************/
+/***************** Receive the logo of the current degree ********************/
+/*****************************************************************************/
+
+void DegCfg_ReceiveLogo (void)
+ {
+ Lgo_ReceiveLogo (HieLvl_DEG);
+ }
+
+/*****************************************************************************/
+/****************** Remove the logo of the current degree ********************/
+/*****************************************************************************/
+
+void DegCfg_RemoveLogo (void)
+ {
+ Lgo_RemoveLogo (HieLvl_DEG);
+ }
+
/*****************************************************************************/
/** Show message of success after changing a degree in degree configuration **/
/*****************************************************************************/
diff --git a/swad_degree_config.h b/swad_degree_config.h
index a13103ab..8d8d6421 100644
--- a/swad_degree_config.h
+++ b/swad_degree_config.h
@@ -34,6 +34,9 @@ void DegCfg_ChangeDegCtr (void);
void DegCfg_RenameDegreeShort (void);
void DegCfg_RenameDegreeFull (void);
void DegCfg_ChangeDegWWW (void);
+void DegCfg_ReqLogo (void);
+void DegCfg_ReceiveLogo (void);
+void DegCfg_RemoveLogo (void);
void DegCfg_ContEditAfterChgDeg (void);
#endif
diff --git a/swad_exam.c b/swad_exam.c
index ebae315c..fe00f8a0 100644
--- a/swad_exam.c
+++ b/swad_exam.c
@@ -1226,10 +1226,10 @@ static void Exa_HideUnhideExam (bool Hide)
}
/*****************************************************************************/
-/**************** Request the creation or edition of an exam ******************/
+/*************** Request the creation or edition of an exam ******************/
/*****************************************************************************/
-void Exa_RequestCreatOrEditExam (void)
+void Exa_ReqCreatOrEditExam (void)
{
struct Exa_Exams Exams;
struct ExaSet_Set Set;
@@ -1427,8 +1427,7 @@ void Exa_ReceiveFormExam (void)
if (!ItsANewExam)
Exa_GetDataOfExamByCod (&Exams.Exam);
- /***** If I can edit exams ==>
- overwrite some exam data with the data received from form *****/
+ /***** Overwrite some exam data with the data received from form *****/
Exa_ReceiveExamFieldsFromForm (&Exams.Exam,Txt);
if (Exa_CheckExamFieldsReceivedFromForm (&Exams.Exam))
{
@@ -1444,7 +1443,7 @@ void Exa_ReceiveFormExam (void)
/***** Show current exam and its sets *****/
Exa_PutFormsOneExam (&Exams,&Set,
- ItsANewExam); // It's not a new exam
+ ItsANewExam);
}
static void Exa_ReceiveExamFieldsFromForm (struct Exa_Exam *Exam,
diff --git a/swad_exam.h b/swad_exam.h
index ca1d9295..9edbe3e6 100644
--- a/swad_exam.h
+++ b/swad_exam.h
@@ -67,7 +67,7 @@ void Exa_RemoveCrsExams (long CrsCod);
void Exa_HideExam (void);
void Exa_UnhideExam (void);
-void Exa_RequestCreatOrEditExam (void);
+void Exa_ReqCreatOrEditExam (void);
void Exa_PutFormsOneExam (struct Exa_Exams *Exams,
struct ExaSet_Set *Set,
bool ItsANewExam);
diff --git a/swad_exam_database.c b/swad_exam_database.c
index 05c210d0..2cb3949c 100644
--- a/swad_exam_database.c
+++ b/swad_exam_database.c
@@ -1,5 +1,4 @@
// swad_exam_database.c: exams operations with database
-
/*
SWAD (Shared Workspace At a Distance),
is a web platform developed at the University of Granada (Spain),
@@ -524,7 +523,7 @@ void Exa_DB_RemoveAllExamsFromCrs (long CrsCod)
/********************** Create a new set of questions ************************/
/*****************************************************************************/
-long Exa_DB_CreateSet (const struct ExaSet_Set *Set,unsigned SetInd)
+long Exa_DB_CreateSet (const struct ExaSet_Set *Set)
{
return
DB_QueryINSERTandReturnCode ("can not create new set of questions",
@@ -533,31 +532,11 @@ long Exa_DB_CreateSet (const struct ExaSet_Set *Set,unsigned SetInd)
" VALUES"
" (%ld,%u,%u,'%s')",
Set->ExaCod,
- SetInd,
+ Set->SetInd,
Set->NumQstsToPrint,
Set->Title);
}
-/*****************************************************************************/
-/******************** Update an existing set of questions ********************/
-/*****************************************************************************/
-
-void Exa_DB_UpdateSet (const struct ExaSet_Set *Set)
- {
- DB_QueryUPDATE ("can not update set of questions",
- "UPDATE exa_sets"
- " SET ExaCod=%ld,"
- "SetInd=%u,"
- "NumQstsToPrint=%u,"
- "Title='%s'"
- " WHERE SetCod=%ld",
- Set->ExaCod,
- Set->SetInd,
- Set->NumQstsToPrint,
- Set->Title,
- Set->SetCod);
- }
-
/*****************************************************************************/
/************************ Update set title in database ***********************/
/*****************************************************************************/
@@ -565,7 +544,6 @@ void Exa_DB_UpdateSet (const struct ExaSet_Set *Set)
void Exa_DB_UpdateSetTitle (long SetCod,long ExaCod,
const char NewTitle[ExaSet_MAX_BYTES_TITLE + 1])
{
- /***** Update set of questions changing old title by new title *****/
DB_QueryUPDATE ("can not update the title of a set of questions",
"UPDATE exa_sets"
" SET Title='%s'"
@@ -597,7 +575,7 @@ void Exa_DB_UpdateNumQstsToExam (long SetCod,long ExaCod,unsigned NumQstsToPrint
/************ Change indexes of sets greater than a given index **************/
/*****************************************************************************/
-void Exa_DB_UpdateSetIndexesInExamGreaterThan (long ExaCod,long SetInd)
+void Exa_DB_UpdateSetIndexesInExamGreaterThan (long ExaCod,unsigned SetInd)
{
DB_QueryUPDATE ("can not update indexes of sets",
"UPDATE exa_sets"
diff --git a/swad_exam_database.h b/swad_exam_database.h
index 78ef019e..5ba2a08e 100644
--- a/swad_exam_database.h
+++ b/swad_exam_database.h
@@ -54,12 +54,11 @@ void Exa_DB_RemoveExam (long ExaCod);
void Exa_DB_RemoveAllExamsFromCrs (long CrsCod);
//--------------------------------- Sets --------------------------------------
-long Exa_DB_CreateSet (const struct ExaSet_Set *Set,unsigned SetInd);
-void Exa_DB_UpdateSet (const struct ExaSet_Set *Set);
+long Exa_DB_CreateSet (const struct ExaSet_Set *Set);
void Exa_DB_UpdateSetTitle (long SetCod,long ExaCod,
const char NewTitle[ExaSet_MAX_BYTES_TITLE + 1]);
void Exa_DB_UpdateNumQstsToExam (long SetCod,long ExaCod,unsigned NumQstsToPrint);
-void Exa_DB_UpdateSetIndexesInExamGreaterThan (long ExaCod,long SetInd);
+void Exa_DB_UpdateSetIndexesInExamGreaterThan (long ExaCod,unsigned SetInd);
void Exa_DB_UpdateSetIndex (long SetInd,long SetCod,long ExaCod);
void Exa_DB_LockTables (void);
unsigned Exa_DB_GetNumSetsExam (long ExaCod);
diff --git a/swad_exam_print.c b/swad_exam_print.c
index 7e4db614..77be8b2a 100644
--- a/swad_exam_print.c
+++ b/swad_exam_print.c
@@ -722,7 +722,7 @@ static void ExaPrn_WriteQstAndAnsToFill (const struct ExaPrn_Print *Print,
/***** Number of question and answer type *****/
HTM_TD_Begin ("class=\"RT\"");
- Qst_WriteNumQst (QstInd + 1,"BIG_INDEX");
+ Lay_WriteIndex (QstInd + 1,"BIG_INDEX");
Qst_WriteAnswerType (Question->Answer.Type,"DAT_SMALL");
HTM_TD_End ();
diff --git a/swad_exam_result.c b/swad_exam_result.c
index 9b2f2de9..ce05d452 100644
--- a/swad_exam_result.c
+++ b/swad_exam_result.c
@@ -1885,7 +1885,7 @@ static void ExaRes_WriteQstAndAnsExam (struct Usr_Data *UsrDat,
/***** Number of question and answer type *****/
HTM_TD_Begin ("class=\"RT %s\"",The_GetColorRows ());
- Qst_WriteNumQst (QstInd + 1,ClassNumQst[Question->Validity]);
+ Lay_WriteIndex (QstInd + 1,ClassNumQst[Question->Validity]);
Qst_WriteAnswerType (Question->Answer.Type,
ClassAnswerType[Question->Validity]);
HTM_TD_End ();
diff --git a/swad_exam_session.c b/swad_exam_session.c
index 6d52cc24..3383ed32 100644
--- a/swad_exam_session.c
+++ b/swad_exam_session.c
@@ -784,7 +784,7 @@ static void ExaSes_GetSessionDataFromRow (MYSQL_RES *mysql_res,
/********** Request the removal of an exam session (exam instance) ***********/
/*****************************************************************************/
-void ExaSes_RequestRemoveSession (void)
+void ExaSes_ReqRemSession (void)
{
extern const char *Txt_Do_you_really_want_to_remove_the_session_X;
extern const char *Txt_Remove_session;
@@ -1108,7 +1108,7 @@ void ExaSes_PutButtonNewSession (struct Exa_Exams *Exams)
/****************** Request the creation of a new session ********************/
/*****************************************************************************/
-void ExaSes_RequestCreatOrEditSes (void)
+void ExaSes_ReqCreatOrEditSes (void)
{
struct Exa_Exams Exams;
struct ExaSes_Session Session;
diff --git a/swad_exam_session.h b/swad_exam_session.h
index b68bcf5d..49cce744 100644
--- a/swad_exam_session.h
+++ b/swad_exam_session.h
@@ -57,7 +57,7 @@ void ExaSes_GetDataOfSessionByCod (struct ExaSes_Session *Session);
void ExaSes_ToggleVisResultsSesUsr (void);
-void ExaSes_RequestRemoveSession (void);
+void ExaSes_ReqRemSession (void);
void ExaSes_RemoveSession (void);
void ExaSes_HideSession (void);
@@ -68,7 +68,7 @@ void ExaSes_GetAndCheckPars (struct Exa_Exams *Exams,
struct ExaSes_Session *Session);
void ExaSes_PutButtonNewSession (struct Exa_Exams *Exams);
-void ExaSes_RequestCreatOrEditSes (void);
+void ExaSes_ReqCreatOrEditSes (void);
void ExaSes_ReceiveFormSession (void);
bool ExaSes_CheckIfICanAnswerThisSession (const struct Exa_Exam *Exam,
diff --git a/swad_exam_set.c b/swad_exam_set.c
index 5eddd848..13b6cbf0 100644
--- a/swad_exam_set.c
+++ b/swad_exam_set.c
@@ -84,9 +84,6 @@ static bool ExaSet_CheckSetTitleReceivedFromForm (const struct ExaSet_Set *Set,
const char NewTitle[ExaSet_MAX_BYTES_TITLE + 1]);
static void ExaSet_CreateSet (struct ExaSet_Set *Set);
-static void ExaSet_UpdateSet (const struct ExaSet_Set *Set);
-
-static void ExaSet_PutParSetCod (long SetCod);
static void ExaSet_ListSetQuestions (struct Exa_Exams *Exams,
const struct ExaSet_Set *Set);
@@ -132,7 +129,7 @@ void ExaSet_PutParsOneSet (void *Exams)
if (Exams)
{
Exa_PutPars (Exams);
- ExaSet_PutParSetCod (((struct Exa_Exams *) Exams)->SetCod);
+ ParCod_PutPar (ParCod_Set,((struct Exa_Exams *) Exams)->SetCod);
}
}
@@ -204,7 +201,7 @@ void ExaSet_GetDataOfSetByCod (struct ExaSet_Set *Set)
}
/*****************************************************************************/
-/********************* Put a form to create/edit an exam **********************/
+/********************* Put a form to create/edit an exam *********************/
/*****************************************************************************/
static void ExaSet_PutFormNewSet (struct Exa_Exams *Exams,
@@ -235,7 +232,7 @@ static void ExaSet_PutFormNewSet (struct Exa_Exams *Exams,
/***** Index *****/
HTM_TD_Begin ("class=\"RM\"");
- Qst_WriteNumQst (MaxSetInd + 1,"BIG_INDEX");
+ Lay_WriteIndex (MaxSetInd + 1,"BIG_INDEX");
HTM_TD_End ();
/***** Title *****/
@@ -278,7 +275,6 @@ void ExaSet_ReceiveFormSet (void)
{
struct Exa_Exams Exams;
struct ExaSet_Set Set;
- bool ItsANewSet;
/***** Reset exams context *****/
Exa_ResetExams (&Exams);
@@ -288,8 +284,6 @@ void ExaSet_ReceiveFormSet (void)
/***** Get parameters *****/
Exa_GetPars (&Exams,true);
Set.ExaCod = Exams.Exam.ExaCod;
- Exams.SetCod = Set.SetCod = ParCod_GetPar (ParCod_Set);
- ItsANewSet = (Set.SetCod <= 0);
/***** Get exam data from database *****/
Exa_GetDataOfExamByCod (&Exams.Exam);
@@ -301,13 +295,7 @@ void ExaSet_ReceiveFormSet (void)
/***** If I can edit exams ==> receive set from form *****/
ExaSet_ReceiveSetFieldsFromForm (&Set);
if (ExaSet_CheckSetTitleReceivedFromForm (&Set,Set.Title))
- {
- /***** Create a new exam or update an existing one *****/
- if (ItsANewSet)
- ExaSet_CreateSet (&Set); // Add new set to database
- else
- ExaSet_UpdateSet (&Set); // Update set data in database
- }
+ ExaSet_CreateSet (&Set); // Add new set to database
/***** Show current exam and its sets *****/
Exa_PutFormsOneExam (&Exams,&Set,
@@ -462,33 +450,19 @@ static void ExaSet_CreateSet (struct ExaSet_Set *Set)
MaxSetInd = Exa_DB_GetMaxSetIndexInExam (Set->ExaCod);
/***** Create a new exam *****/
- Set->SetCod = Exa_DB_CreateSet (Set,MaxSetInd + 1);
+ Set->SetInd = MaxSetInd + 1;
+ Set->SetCod = Exa_DB_CreateSet (Set);
/***** Write success message *****/
Ale_ShowAlert (Ale_SUCCESS,Txt_Created_new_set_of_questions_X,
Set->Title);
}
-/*****************************************************************************/
-/******************** Update an existing set of questions ********************/
-/*****************************************************************************/
-
-static void ExaSet_UpdateSet (const struct ExaSet_Set *Set)
- {
- extern const char *Txt_The_set_of_questions_has_been_modified;
-
- /***** Update the data of the set of questions *****/
- Exa_DB_UpdateSet (Set);
-
- /***** Write success message *****/
- Ale_ShowAlert (Ale_SUCCESS,Txt_The_set_of_questions_has_been_modified);
- }
-
/*****************************************************************************/
/********** Request the creation or edition of an set of questions ***********/
/*****************************************************************************/
-void ExaSet_RequestCreatOrEditSet (void)
+void ExaSet_ReqCreatOrEditSet (void)
{
struct Exa_Exams Exams;
struct ExaSet_Set Set;
@@ -583,15 +557,6 @@ void ExaSet_ListQstsToAddToSet (void)
false); // It's not a new exam
}
-/*****************************************************************************/
-/**************** Write parameter with index of set of questions *****************/
-/*****************************************************************************/
-
-static void ExaSet_PutParSetCod (long SetCod)
- {
- Par_PutParUnsigned (NULL,"SetCod",SetCod);
- }
-
/*****************************************************************************/
/************************* List the sets of an exam **************************/
/*****************************************************************************/
@@ -707,6 +672,7 @@ static void ExaSet_ListOneOrMoreSetsForEdition (struct Exa_Exams *Exams,
{
/***** Create set of questions *****/
ExaSet_ResetSet (&Set);
+ Set.ExaCod = Exams->Exam.ExaCod;
/***** Get set data *****/
row = mysql_fetch_row (mysql_res);
@@ -773,7 +739,7 @@ static void ExaSet_ListOneOrMoreSetsForEdition (struct Exa_Exams *Exams,
/***** Index *****/
HTM_TD_Begin ("rowspan=\"2\" class=\"RT %s\"",
The_GetColorRows ());
- Qst_WriteNumQst (Set.SetInd,"BIG_INDEX");
+ Lay_WriteIndex (Set.SetInd,"BIG_INDEX");
HTM_TD_End ();
/***** Title *****/
@@ -1158,7 +1124,7 @@ static void ExaSet_ListQuestionForEdition (struct Qst_Question *Question,
/***** Number of question and answer type (row[1]) *****/
HTM_TD_Begin ("class=\"RT %s\"",The_GetColorRows ());
- Qst_WriteNumQst (QstInd,ClassNumQst[Question->Validity]);
+ Lay_WriteIndex (QstInd,ClassNumQst[Question->Validity]);
Qst_WriteAnswerType (Question->Answer.Type,
ClassAnswerType[Question->Validity]);
HTM_TD_End ();
@@ -1348,7 +1314,7 @@ static void ExaSet_CopyQstFromBankToExamSet (const struct ExaSet_Set *Set,long Q
/***************** Request the removal of a set of questions *****************/
/*****************************************************************************/
-void ExaSet_RequestRemoveSet (void)
+void ExaSet_ReqRemSet (void)
{
extern const char *Txt_Do_you_really_want_to_remove_the_set_of_questions_X;
extern const char *Txt_Remove_set_of_questions;
@@ -1519,7 +1485,7 @@ void ExaSet_MoveDownSet (void)
/********************** Request the removal of a question ********************/
/*****************************************************************************/
-void ExaSet_RequestRemoveQstFromSet (void)
+void ExaSet_ReqRemQstFromSet (void)
{
extern const char *Txt_Do_you_really_want_to_remove_the_question_X;
extern const char *Txt_Remove_question;
diff --git a/swad_exam_set.h b/swad_exam_set.h
index aba5c55b..2a2802a9 100644
--- a/swad_exam_set.h
+++ b/swad_exam_set.h
@@ -43,7 +43,8 @@ void ExaSet_ReceiveFormSet (void);
void ExaSet_ChangeSetTitle (void);
void ExaSet_ChangeNumQstsToExam (void);
-void ExaSet_RequestCreatOrEditSet (void);
+void ExaSet_ReqCreatOrEditSet (void);
+
void ExaSet_ReqSelectQstsToAddToSet (void);
void ExaSet_ListQstsToAddToSet (void);
@@ -57,13 +58,13 @@ void ExaSet_GetQstDataFromDB (struct Qst_Question *Question);
void ExaSet_AddQstsToSet (void);
-void ExaSet_RequestRemoveSet (void);
+void ExaSet_ReqRemSet (void);
void ExaSet_RemoveSet (void);
void ExaSet_MoveUpSet (void);
void ExaSet_MoveDownSet (void);
-void ExaSet_RequestRemoveQstFromSet (void);
+void ExaSet_ReqRemQstFromSet (void);
void ExaSet_RemoveQstFromSet (void);
void ExaSet_ValidateQst (void);
diff --git a/swad_follow.c b/swad_follow.c
index ecb8bbac..d4cd68a5 100644
--- a/swad_follow.c
+++ b/swad_follow.c
@@ -837,12 +837,12 @@ void Fol_UnfollowUsr2 (void)
/***************** Request follow/unfollow several users *********************/
/*****************************************************************************/
-void Fol_RequestFollowStds (void)
+void Fol_ReqFollowStds (void)
{
Fol_RequestFollowUsrs (ActFolSevStd);
}
-void Fol_RequestFollowTchs (void)
+void Fol_ReqFollowTchs (void)
{
Fol_RequestFollowUsrs (ActFolSevTch);
}
@@ -881,12 +881,12 @@ static void Fol_RequestFollowUsrs (Act_Action_t NextAction)
Usr_FreeListsSelectedEncryptedUsrsCods (&Gbl.Usrs.Selected);
}
-void Fol_RequestUnfollowStds (void)
+void Fol_ReqUnfollowStds (void)
{
Fol_RequestUnfollowUsrs (ActUnfSevStd);
}
-void Fol_RequestUnfollowTchs (void)
+void Fol_ReqUnfollowTchs (void)
{
Fol_RequestUnfollowUsrs (ActUnfSevTch);
}
diff --git a/swad_follow.h b/swad_follow.h
index da025ed8..ec591eaf 100644
--- a/swad_follow.h
+++ b/swad_follow.h
@@ -62,10 +62,10 @@ void Fol_FollowUsr2 (void);
void Fol_UnfollowUsr1 (void);
void Fol_UnfollowUsr2 (void);
-void Fol_RequestFollowStds (void);
-void Fol_RequestFollowTchs (void);
-void Fol_RequestUnfollowStds (void);
-void Fol_RequestUnfollowTchs (void);
+void Fol_ReqFollowStds (void);
+void Fol_ReqFollowTchs (void);
+void Fol_ReqUnfollowStds (void);
+void Fol_ReqUnfollowTchs (void);
void Fol_FollowUsrs (void);
void Fol_UnfollowUsrs (void);
diff --git a/swad_forum.c b/swad_forum.c
index f5bf6239..4b39e21b 100644
--- a/swad_forum.c
+++ b/swad_forum.c
@@ -2962,7 +2962,7 @@ void For_RemovePost (void)
/***************** Request the removing of an existing thread ****************/
/*****************************************************************************/
-void For_RequestRemoveThread (void)
+void For_ReqRemThread (void)
{
extern const char *Txt_Do_you_really_want_to_remove_the_entire_thread_X;
extern const char *Txt_Do_you_really_want_to_remove_the_entire_thread;
diff --git a/swad_forum.h b/swad_forum.h
index b437b19e..be31ca48 100644
--- a/swad_forum.h
+++ b/swad_forum.h
@@ -162,7 +162,7 @@ void For_GetParsForums (struct For_Forums *Forums);
void For_ReceiveForumPost (void);
void For_RemovePost (void);
-void For_RequestRemoveThread (void);
+void For_ReqRemThread (void);
void For_RemoveThread (void);
void For_CutThread (void);
void For_PasteThread (void);
diff --git a/swad_game.c b/swad_game.c
index 2f288479..59f00566 100644
--- a/swad_game.c
+++ b/swad_game.c
@@ -1233,7 +1233,7 @@ void Gam_ListGame (void)
/**************** Request the creation or edition of a game ******************/
/*****************************************************************************/
-void Gam_RequestCreatOrEditGame (void)
+void Gam_ReqCreatOrEditGame (void)
{
struct Gam_Games Games;
bool ItsANewGame;
@@ -1912,7 +1912,7 @@ static void Gam_FreeListsSelectedQuestions (struct Gam_Games *Games)
/********************** Request the removal of a question ********************/
/*****************************************************************************/
-void Gam_RequestRemoveQstFromGame (void)
+void Gam_ReqRemQstFromGame (void)
{
extern const char *Txt_Do_you_really_want_to_remove_the_question_X;
extern const char *Txt_Remove_question;
@@ -2180,7 +2180,7 @@ void Gam_PutButtonNewMatch (struct Gam_Games *Games)
/************* Request the creation of a new match as a teacher **************/
/*****************************************************************************/
-void Gam_RequestNewMatch (void)
+void Gam_ReqNewMatch (void)
{
struct Gam_Games Games;
diff --git a/swad_game.h b/swad_game.h
index 594e0fb3..f64edc00 100644
--- a/swad_game.h
+++ b/swad_game.h
@@ -136,7 +136,7 @@ void Gam_UnhideGame (void);
void Gam_ListGame (void);
-void Gam_RequestCreatOrEditGame (void);
+void Gam_ReqCreatOrEditGame (void);
void Gam_ReceiveFormGame (void);
@@ -148,14 +148,14 @@ unsigned Gam_GetParQstInd (void);
void Gam_AddQstsToGame (void);
-void Gam_RequestRemoveQstFromGame (void);
+void Gam_ReqRemQstFromGame (void);
void Gam_RemoveQstFromGame (void);
void Gam_MoveUpQst (void);
void Gam_MoveDownQst (void);
void Gam_PutButtonNewMatch (struct Gam_Games *Games);
-void Gam_RequestNewMatch (void);
+void Gam_ReqNewMatch (void);
void Gam_ShowTstTagsPresentInAGame (long GamCod);
diff --git a/swad_institution_config.c b/swad_institution_config.c
index f4e79d60..9d473cf7 100644
--- a/swad_institution_config.c
+++ b/swad_institution_config.c
@@ -506,7 +506,7 @@ static void InsCfg_NumDpts (void)
/******** Show a form for sending a logo of the current institution **********/
/*****************************************************************************/
-void InsCfg_RequestLogo (void)
+void InsCfg_ReqLogo (void)
{
Lgo_RequestLogo (HieLvl_INS);
}
diff --git a/swad_institution_config.h b/swad_institution_config.h
index e6e69a28..bf0a362f 100644
--- a/swad_institution_config.h
+++ b/swad_institution_config.h
@@ -30,7 +30,7 @@
void InsCfg_ShowConfiguration (void);
void InsCfg_PrintConfiguration (void);
-void InsCfg_RequestLogo (void);
+void InsCfg_ReqLogo (void);
void InsCfg_ReceiveLogo (void);
void InsCfg_RemoveLogo (void);
void InsCfg_ChangeInsCty (void);
diff --git a/swad_layout.c b/swad_layout.c
index 867160f0..51df9251 100644
--- a/swad_layout.c
+++ b/swad_layout.c
@@ -1686,6 +1686,18 @@ void Lay_BeginHTMLFile (FILE *File,const char *Title)
Title); // Page title
}
+/*****************************************************************************/
+/************************** Write a div with an index ************************/
+/*****************************************************************************/
+// Index should be 1, 2, 3...
+
+void Lay_WriteIndex (unsigned Index,const char *Class)
+ {
+ HTM_DIV_Begin ("class=\"%s_%s\"",Class,The_GetSuffix ());
+ HTM_Unsigned (Index);
+ HTM_DIV_End ();
+ }
+
/*****************************************************************************/
/***** Get and show number of users who have chosen a layout of columns ******/
/*****************************************************************************/
diff --git a/swad_layout.h b/swad_layout.h
index 06b097b5..1ddcb8e4 100644
--- a/swad_layout.h
+++ b/swad_layout.h
@@ -79,6 +79,8 @@ void Lay_HelpRichEditor (void);
void Lay_BeginHTMLFile (FILE *File,const char *Title);
+void Lay_WriteIndex (unsigned Index,const char *Class);
+
//-------------------------------- Figures ------------------------------------
void Lay_GetAndShowNumUsrsPerSideColumns (void);
diff --git a/swad_match.c b/swad_match.c
index 3b1a3141..d979907c 100644
--- a/swad_match.c
+++ b/swad_match.c
@@ -963,7 +963,7 @@ static void Mch_GetMatchDataFromRow (MYSQL_RES *mysql_res,
/************** Request the removal of a match (game instance) ***************/
/*****************************************************************************/
-void Mch_RequestRemoveMatch (void)
+void Mch_ReqRemMatch (void)
{
extern const char *Txt_Do_you_really_want_to_remove_the_match_X;
extern const char *Txt_Remove_match;
diff --git a/swad_match.h b/swad_match.h
index c8981784..8b2b1a25 100644
--- a/swad_match.h
+++ b/swad_match.h
@@ -103,7 +103,7 @@ void Mch_ListOneOrMoreMatchesNumPlayers (const struct Mch_Match *Match);
void Mch_ToggleVisResultsMchUsr (void);
-void Mch_RequestRemoveMatch (void);
+void Mch_ReqRemMatch (void);
void Mch_RemoveMatch (void);
void Mch_RemoveMatchesInGameFromAllTables (long GamCod);
diff --git a/swad_notice.c b/swad_notice.c
index f3d36e5b..803448aa 100644
--- a/swad_notice.c
+++ b/swad_notice.c
@@ -252,7 +252,7 @@ void Not_RevealHiddenNotice (void)
/********************* Request the removal of a notice ***********************/
/*****************************************************************************/
-void Not_RequestRemNotice (void)
+void Not_ReqRemNotice (void)
{
extern const char *Txt_Do_you_really_want_to_remove_the_following_notice;
long NotCod;
diff --git a/swad_notice.h b/swad_notice.h
index 1ec9e26b..acd1d947 100644
--- a/swad_notice.h
+++ b/swad_notice.h
@@ -60,7 +60,7 @@ void Not_GetHighLightedNotCod (void);
void Not_HideActiveNotice (void);
void Not_RevealHiddenNotice (void);
-void Not_RequestRemNotice (void);
+void Not_ReqRemNotice (void);
void Not_RemoveNotice (void);
void Not_ShowNotices (Not_Listing_t TypeNoticesListing,long HighlightNotCod);
diff --git a/swad_parameter_code.c b/swad_parameter_code.c
index e84674bc..51d9c9f7 100644
--- a/swad_parameter_code.c
+++ b/swad_parameter_code.c
@@ -44,6 +44,7 @@ const char *Par_CodeStr[] =
[ParCod_Att ] = "AttCod", // Attendance event code
[ParCod_Ban ] = "BanCod", // Banner code
[ParCod_Bld ] = "BldCod", // Building code
+ [ParCod_Cri ] = "CriCod", // Criterion code in rubric
[ParCod_Crs ] = "crs", // Course code
[ParCod_Ctr ] = "ctr", // Center code
[ParCod_Cty ] = "cty", // Country code
diff --git a/swad_parameter_code.h b/swad_parameter_code.h
index 86417368..ecd0689e 100644
--- a/swad_parameter_code.h
+++ b/swad_parameter_code.h
@@ -36,6 +36,7 @@ typedef enum
ParCod_Att, // Attendance event code
ParCod_Ban, // Banner code
ParCod_Bld, // Building code
+ ParCod_Cri, // Criterion code in rubric
ParCod_Crs, // Course code
ParCod_Ctr, // Center code
ParCod_Cty, // Country code
diff --git a/swad_photo.c b/swad_photo.c
index 5d8668c9..64debd0e 100644
--- a/swad_photo.c
+++ b/swad_photo.c
@@ -88,8 +88,8 @@ static const char *Pho_StrAvgPhotoPrograms[Pho_NUM_AVERAGE_PHOTO_TYPES] =
/***************************** Private prototypes ****************************/
/*****************************************************************************/
-static void Pho_PutIconToRequestRemoveMyPhoto (__attribute__((unused)) void *Args);
-static void Pho_PutIconToRequestRemoveOtherUsrPhoto (__attribute__((unused)) void *Args);
+static void Pho_PutIconToReqRemMyPhoto (__attribute__((unused)) void *Args);
+static void Pho_PutIconToReqRemOtherUsrPhoto (__attribute__((unused)) void *Args);
static void Pho_ReqOtherUsrPhoto (void);
static void Pho_ReqPhoto (const struct Usr_Data *UsrDat);
@@ -203,7 +203,7 @@ void Pho_PutIconToChangeUsrPhoto (struct Usr_Data *UsrDat)
/************** Put a link to request the removal of my photo ****************/
/*****************************************************************************/
-static void Pho_PutIconToRequestRemoveMyPhoto (__attribute__((unused)) void *Args)
+static void Pho_PutIconToReqRemMyPhoto (__attribute__((unused)) void *Args)
{
if (Gbl.Usrs.Me.MyPhotoExists)
Lay_PutContextualLinkOnlyIcon (ActReqRemMyPho,NULL,
@@ -215,7 +215,7 @@ static void Pho_PutIconToRequestRemoveMyPhoto (__attribute__((unused)) void *Arg
/********** Put a link to request the removal of a user's photo **************/
/*****************************************************************************/
-static void Pho_PutIconToRequestRemoveOtherUsrPhoto (__attribute__((unused)) void *Args)
+static void Pho_PutIconToReqRemOtherUsrPhoto (__attribute__((unused)) void *Args)
{
char PhotoURL[Cns_MAX_BYTES_WWW + 1];
bool PhotoExists;
@@ -294,8 +294,8 @@ static void Pho_ReqPhoto (const struct Usr_Data *UsrDat)
/***** Begin box *****/
Box_BoxBegin (NULL,Txt_Photo,
- ItsMe ? Pho_PutIconToRequestRemoveMyPhoto :
- Pho_PutIconToRequestRemoveOtherUsrPhoto,NULL,
+ ItsMe ? Pho_PutIconToReqRemMyPhoto :
+ Pho_PutIconToReqRemOtherUsrPhoto,NULL,
Hlp_PROFILE_Photo,Box_NOT_CLOSABLE);
/***** Begin form *****/
@@ -395,7 +395,7 @@ void Pho_RecOtherUsrPhotoDetFaces (void)
/********************** Request the removal of my photo **********************/
/*****************************************************************************/
-void Pho_ReqRemoveMyPhoto (void)
+void Pho_ReqRemMyPhoto (void)
{
extern const char *Txt_Do_you_really_want_to_remove_your_photo;
extern const char *Txt_Remove_photo;
@@ -457,7 +457,7 @@ void Pho_RemoveMyPhoto2 (void)
/**************** Request the removal of another user's photo ****************/
/*****************************************************************************/
-void Pho_ReqRemoveUsrPhoto (void)
+void Pho_ReqRemUsrPhoto (void)
{
extern const char *Txt_Photo;
extern const char *Txt_Do_you_really_want_to_remove_the_photo_of_X;
diff --git a/swad_photo.h b/swad_photo.h
index 4f9f59d5..5ae80ff2 100644
--- a/swad_photo.h
+++ b/swad_photo.h
@@ -102,10 +102,10 @@ void Pho_SendPhotoUsr (void);
void Pho_RecMyPhotoDetFaces (void);
void Pho_RecOtherUsrPhotoDetFaces (void);
-void Pho_ReqRemoveMyPhoto (void);
+void Pho_ReqRemMyPhoto (void);
void Pho_RemoveMyPhoto1 (void);
void Pho_RemoveMyPhoto2 (void);
-void Pho_ReqRemoveUsrPhoto (void);
+void Pho_ReqRemUsrPhoto (void);
void Pho_RemoveUsrPhoto (void);
void Pho_UpdateMyPhoto1 (void);
diff --git a/swad_profile.c b/swad_profile.c
index 214ab1ac..82dad914 100644
--- a/swad_profile.c
+++ b/swad_profile.c
@@ -120,7 +120,7 @@ void Prf_SeeSocialProfiles (void)
if (Gbl.Usrs.Me.Logged)
Fol_SuggestUsrsToFollowMainZone ();
else
- Prf_RequestUserProfile ();
+ Prf_ReqUserProfile ();
}
/*****************************************************************************/
@@ -172,7 +172,7 @@ void Prf_PutLinkRequestAnotherUserProfile (void)
/************************** Request a user's profile *************************/
/*****************************************************************************/
-void Prf_RequestUserProfile (void)
+void Prf_ReqUserProfile (void)
{
extern const char *Hlp_START_Profiles_view_public_profile;
extern const char *Txt_Another_user_s_profile;
@@ -261,7 +261,7 @@ void Prf_GetUsrDatAndShowUserProfile (void)
Ale_ShowAlertUserNotFoundOrYouDoNotHavePermission ();
/* Request a user's profile */
- Prf_RequestUserProfile ();
+ Prf_ReqUserProfile ();
}
/***** If it's not me, mark possible notification as seen *****/
diff --git a/swad_profile.h b/swad_profile.h
index 4c957670..a14f9766 100644
--- a/swad_profile.h
+++ b/swad_profile.h
@@ -56,7 +56,7 @@ char *Prf_GetURLPublicProfile (char URL[Cns_MAX_BYTES_WWW + 1],
const char *NickWithoutArr);
void Prf_PutLinkMyPublicProfile (void);
void Prf_PutLinkRequestAnotherUserProfile (void);
-void Prf_RequestUserProfile (void);
+void Prf_ReqUserProfile (void);
void Prf_GetUsrDatAndShowUserProfile (void);
bool Prf_ShowUserProfile (struct Usr_Data *UsrDat);
diff --git a/swad_program.c b/swad_program.c
index 5533b5f7..c86c6a40 100644
--- a/swad_program.c
+++ b/swad_program.c
@@ -1892,7 +1892,7 @@ void Prg_ViewItemAfterEdit (void)
/*********** List program items with a form to change a given item ***********/
/*****************************************************************************/
-void Prg_RequestChangeItem (void)
+void Prg_ReqChangeItem (void)
{
struct Prg_Item Item;
@@ -1913,7 +1913,7 @@ void Prg_RequestChangeItem (void)
/************ List program items with a form to create a new item ************/
/*****************************************************************************/
-void Prg_RequestCreateItem (void)
+void Prg_ReqCreateItem (void)
{
struct Prg_Item Item;
diff --git a/swad_program.h b/swad_program.h
index 2baf9486..03e09218 100644
--- a/swad_program.h
+++ b/swad_program.h
@@ -169,8 +169,8 @@ unsigned Prg_GetItmIndFromNumItem (unsigned NumItem);
unsigned Prg_GetLevelFromNumItem (unsigned NumItem);
void Prg_ViewItemAfterEdit (void);
-void Prg_RequestChangeItem (void);
-void Prg_RequestCreateItem (void);
+void Prg_ReqChangeItem (void);
+void Prg_ReqCreateItem (void);
void Prg_ReceiveFormChgItem (void);
void Prg_ReceiveFormNewItem (void);
diff --git a/swad_project.c b/swad_project.c
index 1eb11456..f3d9a3e9 100644
--- a/swad_project.c
+++ b/swad_project.c
@@ -286,7 +286,7 @@ static void Prj_GetListProjects (struct Prj_Projects *Projects);
static void Prj_ResetProject (struct Prj_Project *Prj);
-static void Prj_RequestCreatOrEditPrj (struct Prj_Projects *Projects);
+static void Prj_ReqCreatOrEditPrj (struct Prj_Projects *Projects);
static void Prj_PutFormProject (struct Prj_Projects *Projects,bool ItsANewProject);
static void Prj_EditOneProjectTxtArea (const char *Id,
const char *Label,char *TxtField,
@@ -2881,7 +2881,7 @@ static void Prj_FormToSelectUsrs (struct Prj_Projects *Projects,
free (TxtButton);
/***** Put a form to create/edit project *****/
- Prj_RequestCreatOrEditPrj (Projects);
+ Prj_ReqCreatOrEditPrj (Projects);
}
/*****************************************************************************/
@@ -2974,7 +2974,7 @@ static void Prj_AddUsrsToProject (Prj_RoleInProject_t RoleInPrj)
Usr_FreeListsSelectedEncryptedUsrsCods (&Prj_MembersToAdd);
/***** Put form to edit project again *****/
- Prj_RequestCreatOrEditPrj (&Projects);
+ Prj_ReqCreatOrEditPrj (&Projects);
}
/*****************************************************************************/
@@ -3075,7 +3075,7 @@ static void Prj_ReqRemUsrFromPrj (struct Prj_Projects *Projects,
Prj_FreeMemProject (&Projects->Prj);
/***** Put form to edit project again *****/
- Prj_RequestCreatOrEditPrj (Projects);
+ Prj_ReqCreatOrEditPrj (Projects);
}
/*****************************************************************************/
@@ -3144,7 +3144,7 @@ static void Prj_RemUsrFromPrj (Prj_RoleInProject_t RoleInPrj)
Prj_FreeMemProject (&Projects.Prj);
/***** Put form to edit project again *****/
- Prj_RequestCreatOrEditPrj (&Projects);
+ Prj_ReqCreatOrEditPrj (&Projects);
}
/*****************************************************************************/
@@ -3646,7 +3646,7 @@ void Prj_UnhideProject (void)
/********************* Put a form to create/edit project *********************/
/*****************************************************************************/
-void Prj_RequestCreatePrj (void)
+void Prj_ReqCreatePrj (void)
{
struct Prj_Projects Projects;
@@ -3658,10 +3658,10 @@ void Prj_RequestCreatePrj (void)
Projects.Prj.PrjCod = -1L; // It's a new, non existing, project
/***** Form to create project *****/
- Prj_RequestCreatOrEditPrj (&Projects);
+ Prj_ReqCreatOrEditPrj (&Projects);
}
-void Prj_RequestEditPrj (void)
+void Prj_ReqEditPrj (void)
{
struct Prj_Projects Projects;
@@ -3673,10 +3673,10 @@ void Prj_RequestEditPrj (void)
Projects.Prj.PrjCod = ParCod_GetAndCheckPar (ParCod_Prj);
/***** Form to edit project *****/
- Prj_RequestCreatOrEditPrj (&Projects);
+ Prj_ReqCreatOrEditPrj (&Projects);
}
-static void Prj_RequestCreatOrEditPrj (struct Prj_Projects *Projects)
+static void Prj_ReqCreatOrEditPrj (struct Prj_Projects *Projects)
{
bool ItsANewProject = (Projects->Prj.PrjCod < 0);
@@ -4101,7 +4101,7 @@ void Prj_ReceiveFormProject (void)
Prj_PutFormProject (&Projects,ItsANewProject);
/***** Show again form to edit project *****/
- Prj_RequestCreatOrEditPrj (&Projects);
+ Prj_ReqCreatOrEditPrj (&Projects);
}
else
Err_NoPermissionExit ();
diff --git a/swad_project.h b/swad_project.h
index c5a58d81..421911ce 100644
--- a/swad_project.h
+++ b/swad_project.h
@@ -246,8 +246,8 @@ void Prj_RemStd (void);
void Prj_RemTut (void);
void Prj_RemEvl (void);
-void Prj_RequestCreatePrj (void);
-void Prj_RequestEditPrj (void);
+void Prj_ReqCreatePrj (void);
+void Prj_ReqEditPrj (void);
void Prj_AllocMemProject (struct Prj_Project *Prj);
void Prj_FreeMemProject (struct Prj_Project *Prj);
diff --git a/swad_question.c b/swad_question.c
index cbb9ccd7..af5c3cd7 100644
--- a/swad_question.c
+++ b/swad_question.c
@@ -117,7 +117,7 @@ void Qst_Destructor (struct Qst_Questions *Questions)
/*********************** Request the edition of tests ************************/
/*****************************************************************************/
-void Qst_RequestEditQsts (void)
+void Qst_ReqEditQsts (void)
{
struct Qst_Questions Questions;
@@ -519,7 +519,7 @@ void Qst_ListQuestionForEdition (struct Qst_Question *Question,
/***** Number of question and answer type (row[1]) *****/
HTM_TD_Begin ("class=\"RT %s\"",The_GetColorRows ());
- Qst_WriteNumQst (QstInd,"BIG_INDEX");
+ Lay_WriteIndex (QstInd,"BIG_INDEX");
if (QuestionExists)
Qst_WriteAnswerType (Question->Answer.Type,"DAT_SMALL");
HTM_TD_End ();
@@ -567,18 +567,6 @@ void Qst_ListQuestionForEdition (struct Qst_Question *Question,
HTM_TD_End ();
}
-/*****************************************************************************/
-/********************* Write the number of a test question *******************/
-/*****************************************************************************/
-// Number of question should be 1, 2, 3...
-
-void Qst_WriteNumQst (unsigned NumQst,const char *Class)
- {
- HTM_DIV_Begin ("class=\"%s_%s\"",Class,The_GetSuffix ());
- HTM_Unsigned (NumQst);
- HTM_DIV_End ();
- }
-
/*****************************************************************************/
/************************** Write the type of answer *************************/
/*****************************************************************************/
@@ -984,7 +972,7 @@ void Qst_WriteQuestionListing (struct Qst_Questions *Questions,unsigned QstInd)
/* Number of question and answer type */
HTM_TD_Begin ("class=\"RT %s\"",The_GetColorRows ());
- Qst_WriteNumQst (QstInd + 1,"BIG_INDEX");
+ Lay_WriteIndex (QstInd + 1,"BIG_INDEX");
Qst_WriteAnswerType (Questions->Question.Answer.Type,"DAT_SMALL");
HTM_TD_End ();
@@ -3230,7 +3218,7 @@ long Qst_GetIntAnsFromStr (char *Str)
/***************** Request the removal of selected questions *****************/
/*****************************************************************************/
-void Qst_RequestRemoveSelectedQsts (void)
+void Qst_ReqRemSelectedQsts (void)
{
extern const char *Txt_Do_you_really_want_to_remove_the_selected_questions;
extern const char *Txt_Remove_questions;
@@ -3319,7 +3307,7 @@ void Qst_PutIconToRemoveOneQst (void *QstCod)
/******************** Request the removal of a question **********************/
/*****************************************************************************/
-void Qst_RequestRemoveOneQst (void)
+void Qst_ReqRemOneQst (void)
{
extern const char *Txt_Do_you_really_want_to_remove_the_question_X;
extern const char *Txt_Remove_question;
diff --git a/swad_question.h b/swad_question.h
index 627d816f..4e1d4cc1 100644
--- a/swad_question.h
+++ b/swad_question.h
@@ -131,7 +131,7 @@ struct Qst_Stats
void Qst_Constructor (struct Qst_Questions *Questions);
void Qst_Destructor (struct Qst_Questions *Questions);
-void Qst_RequestEditQsts (void);
+void Qst_ReqEditQsts (void);
void Qst_ShowFormRequestEditQsts (struct Qst_Questions *Questions);
void Qst_ShowFormAnswerTypes (const struct Qst_AnswerTypes *AnswerTypes);
void Qst_RequestSelectQstsForExamSet (struct Exa_Exams *Exams);
@@ -149,7 +149,6 @@ void Qst_PutButtonToAddQuestion (void);
void Qst_ListQuestionForEdition (struct Qst_Question *Question,
unsigned QstInd,bool QuestionExists,
const char *Anchor);
-void Qst_WriteNumQst (unsigned NumQst,const char *Class);
void Qst_WriteAnswerType (Qst_AnswerType_t AnswerType,const char *Class);
void Qst_WriteQstStem (const char *Stem,const char *ClassStem,bool Visible);
void Qst_PutFormToEditQstMedia (const struct Med_Media *Media,int NumMedia,
@@ -251,10 +250,10 @@ void Qst_MoveMediaToDefinitiveDirectories (struct Qst_Question *Question);
long Qst_GetIntAnsFromStr (char *Str);
-void Qst_RequestRemoveSelectedQsts (void);
+void Qst_ReqRemSelectedQsts (void);
void Qst_RemoveSelectedQsts (void);
void Qst_PutIconToRemoveOneQst (void *QstCod);
-void Qst_RequestRemoveOneQst (void);
+void Qst_ReqRemOneQst (void);
void Qst_PutParsRemoveOnlyThisQst (void *QstCod);
void Qst_RemoveOneQst (void);
void Qst_RemoveOneQstFromDB (long CrsCod,long QstCod);
diff --git a/swad_rubric.c b/swad_rubric.c
index 814bdacc..4e8c0d25 100644
--- a/swad_rubric.c
+++ b/swad_rubric.c
@@ -73,9 +73,6 @@ static void Rub_PutIconsToRemEditOneRubric (struct Rub_Rubrics *Rubrics);
static void Rub_RemoveRubricFromAllTables (long RubCod);
-static void Rub_PutFormsEditionRubric (struct Rub_Rubrics *Rubrics,
- char Txt[Cns_MAX_BYTES_TEXT + 1],
- bool ItsANewRubric);
static void Rub_ReceiveRubricFieldsFromForm (struct Rub_Rubric *Rubric,
char Txt[Cns_MAX_BYTES_TEXT + 1]);
static bool Rub_CheckRubricFieldsReceivedFromForm (const struct Rub_Rubric *Rubric);
@@ -122,7 +119,7 @@ void Rub_SeeAllRubrics (void)
Rub_ResetRubrics (&Rubrics);
/***** Get parameters *****/
- Rub_GetPars (&Rubrics); // Return value ignored
+ Rub_GetPars (&Rubrics,false);
/***** Show all rubrics *****/
Rub_ListAllRubrics (&Rubrics);
@@ -236,6 +233,21 @@ bool Rub_CheckIfICanEditRubrics (void)
return ICanEditRubrics[Gbl.Usrs.Me.Role.Logged];
}
+/*****************************************************************************/
+/*********************** Check if edition is possible ************************/
+/*****************************************************************************/
+
+bool Rub_CheckIfEditable (const struct Rub_Rubric *Rubric)
+ {
+ if (Rub_CheckIfICanEditRubrics ())
+ /***** Rubric is editable only if ... *****/
+ // TODO: Change to control that a rubric is not edited in some circunstances?
+ return Rubric->NumCriteria == 0 ||
+ Rubric->NumCriteria != 0;
+ else
+ return false; // Questions are not editable
+ }
+
/*****************************************************************************/
/****************** Put contextual icons in list of rubrics ******************/
/*****************************************************************************/
@@ -304,8 +316,7 @@ void Rub_SeeOneRubric (void)
Rub_ResetRubric (&Rubrics.Rubric);
/***** Get parameters *****/
- if ((Rubrics.Rubric.RubCod = Rub_GetPars (&Rubrics)) <= 0)
- Err_WrongRubricExit ();
+ Rub_GetPars (&Rubrics,true);
Rub_GetDataOfRubricByCod (&Rubrics.Rubric);
/***** Show rubric *****/
@@ -492,13 +503,19 @@ void Rub_PutPars (void *Rubrics)
/****************** Get parameters used to edit a rubric *********************/
/*****************************************************************************/
-long Rub_GetPars (struct Rub_Rubrics *Rubrics)
+void Rub_GetPars (struct Rub_Rubrics *Rubrics,bool CheckRubCod)
{
+ long (*GetExaCo[2]) (ParCod_Param_t ParCode) =
+ {
+ [false] = ParCod_GetPar,
+ [true ] = ParCod_GetAndCheckPar,
+ };
+
/***** Get other parameters *****/
Rubrics->CurrentPage = Pag_GetParPagNum (Pag_RUBRICS);
/***** Get rubric code *****/
- return ParCod_GetPar (ParCod_Rub);
+ Rubrics->Rubric.RubCod = GetExaCo[CheckRubCod] (ParCod_Rub);
}
/*****************************************************************************/
@@ -612,8 +629,7 @@ void Rub_AskRemRubric (void)
Rub_ResetRubric (&Rubrics.Rubric);
/***** Get parameters *****/
- if ((Rubrics.Rubric.RubCod = Rub_GetPars (&Rubrics)) <= 0)
- Err_WrongRubricExit ();
+ Rub_GetPars (&Rubrics,true);
/***** Get data of the rubric from database *****/
Rub_GetDataOfRubricByCod (&Rubrics.Rubric);
@@ -707,8 +723,7 @@ void Rub_ListRubric (void)
Rub_ResetRubric (&Rubrics.Rubric);
/***** Get parameters *****/
- if ((Rubrics.Rubric.RubCod = Rub_GetPars (&Rubrics)) <= 0)
- Err_WrongRubricExit ();
+ Rub_GetPars (&Rubrics,true);
/***** Get rubric data *****/
Rub_GetDataOfRubricByCod (&Rubrics.Rubric);
@@ -723,58 +738,72 @@ void Rub_ListRubric (void)
/*************** Request the creation or edition of a rubric *****************/
/*****************************************************************************/
-void Rub_RequestCreatOrEditRubric (void)
+void Rub_ReqCreatOrEditRubric (void)
{
struct Rub_Rubrics Rubrics;
+ struct RubCri_Criterion Criterion;
bool ItsANewRubric;
- char Txt[Cns_MAX_BYTES_TEXT + 1];
-
- /***** Reset rubrics context *****/
- Rub_ResetRubrics (&Rubrics);
-
- /***** Reset rubric *****/
- Rub_ResetRubric (&Rubrics.Rubric);
/***** Check if I can edit rubrics *****/
if (!Rub_CheckIfICanEditRubrics ())
Err_NoPermissionExit ();
+ /***** Reset rubrics context *****/
+ Rub_ResetRubrics (&Rubrics);
+ Rub_ResetRubric (&Rubrics.Rubric);
+ RubCri_ResetCriterion (&Criterion);
+
/***** Get parameters *****/
- ItsANewRubric = ((Rubrics.Rubric.RubCod = Rub_GetPars (&Rubrics)) <= 0);
+ Rub_GetPars (&Rubrics,false); // Don't check rubric code
+ ItsANewRubric = (Rubrics.Rubric.RubCod <= 0);
/***** Get rubric data *****/
if (ItsANewRubric)
- {
/* Initialize to empty rubric */
Rub_ResetRubric (&Rubrics.Rubric);
- Txt[0] = '\0';
- }
else
- {
/* Get rubric data from database */
Rub_GetDataOfRubricByCod (&Rubrics.Rubric);
- Rub_DB_GetRubricTxt (Rubrics.Rubric.RubCod,Txt);
- }
- /***** Put forms to create/edit a rubric *****/
- Rub_PutFormsEditionRubric (&Rubrics,Txt,ItsANewRubric);
+ /***** Put form to create/edit a rubric and show criteria *****/
+ Rub_PutFormsOneRubric (&Rubrics,&Criterion,ItsANewRubric);
+ }
- /***** Show rubrics or criteria *****/
+/*****************************************************************************/
+/******************** Put forms to create/edit a rubric **********************/
+/*****************************************************************************/
+
+void Rub_PutFormsOneRubric (struct Rub_Rubrics *Rubrics,
+ struct RubCri_Criterion *Criterion,
+ bool ItsANewRubric)
+ {
+ char Txt[Cns_MAX_BYTES_TEXT + 1];
+
+ /***** Initialize text / get text from database *****/
+ if (ItsANewRubric)
+ Txt[0] = '\0';
+ else
+ Rub_DB_GetRubricTxt (Rubrics->Rubric.RubCod,Txt);
+
+ /***** Put form to create/edit an exam *****/
+ Rub_PutFormEditionRubric (Rubrics,Txt,ItsANewRubric);
+
+ /***** Show other lists *****/
if (ItsANewRubric)
/* Show rubrics again */
- Rub_ListAllRubrics (&Rubrics);
+ Rub_ListAllRubrics (Rubrics);
else
- /* Show criteria of the rubric ready to be edited */
- RubCri_ListRubricCriteria (&Rubrics);
+ /* Show list of criteria */
+ RubCri_ListCriteria (Rubrics,Criterion);
}
/*****************************************************************************/
/******************** Put a form to create/edit a rubric *********************/
/*****************************************************************************/
-static void Rub_PutFormsEditionRubric (struct Rub_Rubrics *Rubrics,
- char Txt[Cns_MAX_BYTES_TEXT + 1],
- bool ItsANewRubric)
+void Rub_PutFormEditionRubric (struct Rub_Rubrics *Rubrics,
+ char Txt[Cns_MAX_BYTES_TEXT + 1],
+ bool ItsANewRubric)
{
extern const char *Hlp_ASSESSMENT_Rubrics_new_rubric;
extern const char *Hlp_ASSESSMENT_Rubrics_edit_rubric;
@@ -854,57 +883,46 @@ static void Rub_PutFormsEditionRubric (struct Rub_Rubrics *Rubrics,
void Rub_ReceiveFormRubric (void)
{
struct Rub_Rubrics Rubrics;
+ struct RubCri_Criterion Criterion;
bool ItsANewRubric;
char Txt[Cns_MAX_BYTES_TEXT + 1];
- /***** Reset rubrics context *****/
- Rub_ResetRubrics (&Rubrics);
-
- /***** Reset rubric *****/
- Rub_ResetRubric (&Rubrics.Rubric);
-
/***** Check if I can edit rubrics *****/
if (!Rub_CheckIfICanEditRubrics ())
Err_NoPermissionExit ();
+ /***** Reset rubrics context *****/
+ Rub_ResetRubrics (&Rubrics);
+ Rub_ResetRubric (&Rubrics.Rubric);
+ RubCri_ResetCriterion (&Criterion);
+
/***** Get parameters *****/
- ItsANewRubric = ((Rubrics.Rubric.RubCod = Rub_GetPars (&Rubrics)) <= 0);
+ Rub_GetPars (&Rubrics,false);
+ ItsANewRubric = (Rubrics.Rubric.RubCod <= 0);
- /***** If I can edit rubrics ==> receive rubric from form *****/
- if (Rub_CheckIfICanEditRubrics ())
+ /***** Get all current rubric data from database *****/
+ // Some data, not received from form,
+ // are necessary to show rubric and criteria again
+ if (!ItsANewRubric)
+ Rub_GetDataOfRubricByCod (&Rubrics.Rubric);
+
+ /***** Overwrite some rubric data with the data received from form *****/
+ Rub_ReceiveRubricFieldsFromForm (&Rubrics.Rubric,Txt);
+ if (Rub_CheckRubricFieldsReceivedFromForm (&Rubrics.Rubric))
{
- Rub_ReceiveRubricFieldsFromForm (&Rubrics.Rubric,Txt);
- if (Rub_CheckRubricFieldsReceivedFromForm (&Rubrics.Rubric))
+ /***** Create a new rubric or update an existing one *****/
+ if (ItsANewRubric)
{
- /***** Create a new rubric or update an existing one *****/
- if (ItsANewRubric)
- Rub_CreateRubric (&Rubrics.Rubric,Txt); // Add new rubric to database
- else
- Rub_UpdateRubric (&Rubrics.Rubric,Txt); // Update rubric data in database
-
- /***** Put forms to edit the rubric created or updated *****/
- Rub_PutFormsEditionRubric (&Rubrics,Txt,
- false); // No new rubric
-
- /***** Show criteria of the rubric ready to be edited ******/
- RubCri_ListRubricCriteria (&Rubrics);
+ Rub_CreateRubric (&Rubrics.Rubric,Txt); // Add new rubric to database
+ ItsANewRubric = false;
}
else
- {
- /***** Put forms to create/edit the rubric *****/
- Rub_PutFormsEditionRubric (&Rubrics,Txt,ItsANewRubric);
-
- /***** Show rubrics or criteria *****/
- if (ItsANewRubric)
- /* Show rubrics again */
- Rub_ListAllRubrics (&Rubrics);
- else
- /* Show criteria of the rubric ready to be edited */
- RubCri_ListRubricCriteria (&Rubrics);
- }
+ Rub_UpdateRubric (&Rubrics.Rubric,Txt); // Update rubric data in database
}
- else
- Err_NoPermissionExit ();
+
+ /***** Show current rubric and its criteria *****/
+ Rub_PutFormsOneRubric (&Rubrics,&Criterion,
+ ItsANewRubric);
}
static void Rub_ReceiveRubricFieldsFromForm (struct Rub_Rubric *Rubric,
diff --git a/swad_rubric.h b/swad_rubric.h
index 00e1b984..70384f19 100644
--- a/swad_rubric.h
+++ b/swad_rubric.h
@@ -27,35 +27,14 @@
/********************************* Headers ***********************************/
/*****************************************************************************/
+#include "swad_rubric_type.h"
#include "swad_string.h"
/*****************************************************************************/
/************************** Public types and constants ***********************/
/*****************************************************************************/
-#define Rub_MAX_CHARS_TITLE (128 - 1) // 127
-#define Rub_MAX_BYTES_TITLE ((Rub_MAX_CHARS_TITLE + 1) * Str_MAX_BYTES_PER_CHAR - 1) // 2047
-
-#define Rub_AFTER_LAST_CRITERION ((unsigned)((1UL << 31) - 1)) // 2^31 - 1, don't change this number because it is used in database
-
-struct Rub_Rubric
- {
- long RubCod; // Rubric code
- long CrsCod; // Course code
- long UsrCod; // Author code
- char Title[Rub_MAX_BYTES_TITLE + 1];
- unsigned NumCriteria; // Number of criteria in the rubric
- };
-
-struct Rub_Rubrics
- {
- bool LstIsRead; // Is the list already read from database...
- // ...or it needs to be read?
- unsigned Num; // Total number of rubrics
- long *Lst; // List of rubric codes
- unsigned CurrentPage;
- struct Rub_Rubric Rubric; // Selected/current rubric
- };
+#define RubCri_AFTER_LAST_CRITERION ((unsigned)((1UL << 31) - 1)) // 2^31 - 1, don't change this number because it is used in database
/*****************************************************************************/
/***************************** Public prototypes *****************************/
@@ -67,6 +46,7 @@ void Rub_ResetRubric (struct Rub_Rubric *Rubric);
void Rub_SeeAllRubrics (void);
void Rub_ListAllRubrics (struct Rub_Rubrics *Rubrics);
bool Rub_CheckIfICanEditRubrics (void);
+bool Rub_CheckIfEditable (const struct Rub_Rubric *Rubric);
void Rub_SeeOneRubric (void);
void Rub_ShowOnlyOneRubric (struct Rub_Rubrics *Rubrics,
bool ListRubricDims);
@@ -76,7 +56,7 @@ void Rub_ShowOnlyOneRubricEnd (void);
void Rub_SetCurrentRubCod (long GamCod);
void Rub_PutPars (void *Rubrics);
-long Rub_GetPars (struct Rub_Rubrics *Rubrics);
+void Rub_GetPars (struct Rub_Rubrics *Rubrics,bool CheckRubCod);
void Rub_GetListRubrics (struct Rub_Rubrics *Rubrics);
void Rub_GetDataOfRubricByCod (struct Rub_Rubric *Rubric);
@@ -89,7 +69,13 @@ void Rub_RemoveCrsRubrics (long CrsCod);
void Rub_ListRubric (void);
-void Rub_RequestCreatOrEditRubric (void);
+void Rub_ReqCreatOrEditRubric (void);
+void Rub_PutFormsOneRubric (struct Rub_Rubrics *Rubrics,
+ struct RubCri_Criterion *Criterion,
+ bool ItsANewRubric);
+void Rub_PutFormEditionRubric (struct Rub_Rubrics *Rubrics,
+ char Txt[Cns_MAX_BYTES_TEXT + 1],
+ bool ItsANewRubric);
void Rub_ReceiveFormRubric (void);
diff --git a/swad_rubric_criteria.c b/swad_rubric_criteria.c
index 415bec1f..62fea47c 100644
--- a/swad_rubric_criteria.c
+++ b/swad_rubric_criteria.c
@@ -20,6 +20,90 @@
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
+
+#define _GNU_SOURCE // For asprintf
+#include // For DBL_MAX
+#include // For PATH_MAX
+#include // For NULL
+#include // For asprintf
+#include // For free
+#include // For string functions
+
+#include "swad_action_list.h"
+#include "swad_box.h"
+#include "swad_database.h"
+#include "swad_error.h"
+#include "swad_figure.h"
+#include "swad_form.h"
+#include "swad_global.h"
+#include "swad_HTML.h"
+#include "swad_match.h"
+#include "swad_match_result.h"
+#include "swad_pagination.h"
+#include "swad_parameter.h"
+#include "swad_parameter_code.h"
+#include "swad_question_database.h"
+#include "swad_role.h"
+#include "swad_rubric.h"
+#include "swad_rubric_criteria.h"
+#include "swad_rubric_database.h"
+#include "swad_test.h"
+#include "swad_test_visibility.h"
+
+/*****************************************************************************/
+/************** External global variables from others modules ****************/
+/*****************************************************************************/
+
+extern struct Globals Gbl;
+
+/*****************************************************************************/
+/***************************** Private constants *****************************/
+/*****************************************************************************/
+
+#define RubCri_MAX_SELECTED_QUESTIONS 10000
+#define RubCri_MAX_BYTES_LIST_SELECTED_QUESTIONS (RubCri_MAX_SELECTED_QUESTIONS * (Cns_MAX_DECIMAL_DIGITS_LONG + 1))
+
+// Form parameters for minimum/maximum criterion values
+static const char *RubCri_ParValues[RubCri_NUM_VALUES] =
+ {
+ [RubCri_MIN] = "MinVal",
+ [RubCri_MAX] = "MaxVal",
+ };
+
+/*****************************************************************************/
+/************************** Public types and constants ***********************/
+/*****************************************************************************/
+
+/*****************************************************************************/
+/***************************** Private prototypes ****************************/
+/*****************************************************************************/
+
+static void RubCri_PutParsOneCriterion (void *Rubrics);
+
+static void RubCri_PutFormNewCriterion (struct Rub_Rubrics *Rubrics,
+ struct RubCri_Criterion *Criterion,
+ unsigned MaxCriInd);
+static void RubCri_ReceiveCriterionFieldsFromForm (struct RubCri_Criterion *Criterion);
+static bool RubCri_CheckCriterionTitleReceivedFromForm (const struct RubCri_Criterion *Criterion,
+ const char NewTitle[RubCri_MAX_BYTES_TITLE + 1]);
+
+static void RubCri_ChangeValueCriterion (RubCri_ValueRange_t ValueRange);
+
+static void RubCri_CreateCriterion (struct RubCri_Criterion *Criterion);
+
+static void RubCri_ListOneOrMoreCriteriaForEdition (struct Rub_Rubrics *Rubrics,
+ unsigned MaxCriInd,
+ unsigned NumCriteria,
+ MYSQL_RES *mysql_res,
+ bool ICanEditCriteria);
+static void RubCri_PutTableHeadingForCriteria (void);
+
+static void RubCri_GetAndCheckPars (struct Rub_Rubrics *Rubrics,
+ struct RubCri_Criterion *Criterion);
+
+static void RubCri_ExchangeCriteria (long RubCod,
+ unsigned CriIndTop,unsigned CriIndBottom);
+
/*****************************************************************************/
/********************************* Headers ***********************************/
/*****************************************************************************/
@@ -49,17 +133,12 @@ extern struct Globals Gbl;
/***************************** Private prototypes ****************************/
/*****************************************************************************/
-static void RubCri_ListOneOrMoreCriteriaForEdition (struct Rub_Rubrics *Rubrics,
- unsigned NumCriteria,
- MYSQL_RES *mysql_res,
- bool ICanEditCriteria);
-static void RubCri_PutParsOneCriterion (void *Rubrics);
/*****************************************************************************/
/********************** Initialize a new citerion to zero ********************/
/*****************************************************************************/
-void RubCri_CriterionConstructor (struct Rub_Criterion *Criterion)
+void RubCri_CriterionConstructor (struct RubCri_Criterion *Criterion)
{
Criterion->CriCod = -1L;
}
@@ -68,55 +147,16 @@ void RubCri_CriterionConstructor (struct Rub_Criterion *Criterion)
/*************** Free memory allocated for rubric criterion ******************/
/*****************************************************************************/
-void RubCri_CriterionDestructor (struct Rub_Criterion *Criterion)
+void RubCri_CriterionDestructor (struct RubCri_Criterion *Criterion)
{
Criterion->CriCod = -1L;
}
-/*****************************************************************************/
-/*********** Put parameter with criterion code to edit, remove... ************/
-/*****************************************************************************/
-
-void RubCri_PutParCriCod (void *CriCod) // Should be a pointer to long
- {
- if (CriCod)
- if (*((long *) CriCod) > 0) // If criterion exists
- Par_PutParLong (NULL,"CriCod",*((long *) CriCod));
- }
-
-/*****************************************************************************/
-/*************** Get data of a rubric criterion from database ****************/
-/*****************************************************************************/
-
-bool RubCri_GetCriterionDataFromDB (struct Rub_Criterion *Criterion)
- {
- MYSQL_RES *mysql_res;
- MYSQL_ROW row;
- bool CriterionExists;
-
- /***** Get question data from database *****/
- if ((CriterionExists = (Rub_DB_GetCriterionData (&mysql_res,Criterion->CriCod) != 0)))
- {
- row = mysql_fetch_row (mysql_res);
-
- /* Get the title (row[0]) */
- Criterion->Title[0] = '\0';
- if (row[0])
- if (row[0][0])
- Str_Copy (Criterion->Title,row[0],Cns_MAX_BYTES_TEXT);
- }
-
- /* Free structure that stores the query result */
- DB_FreeMySQLResult (&mysql_res);
-
- return CriterionExists;
- }
-
/*****************************************************************************/
/******************* List a rubric criterion for edition *********************/
/*****************************************************************************/
-void RubCri_ListCriterionForEdition (struct Rub_Criterion *Criterion,
+void RubCri_ListCriterionForEdition (struct RubCri_Criterion *Criterion,
unsigned CriInd,bool CriterionExists,
const char *Anchor)
{
@@ -124,7 +164,7 @@ void RubCri_ListCriterionForEdition (struct Rub_Criterion *Criterion,
/***** Number of criterion *****/
HTM_TD_Begin ("class=\"RT %s\"",The_GetColorRows ());
- RubCri_WriteNumCriterion (CriInd,"BIG_INDEX");
+ Lay_WriteIndex (CriInd,"BIG_INDEX");
HTM_TD_End ();
/***** Write criterion code *****/
@@ -138,8 +178,7 @@ void RubCri_ListCriterionForEdition (struct Rub_Criterion *Criterion,
HTM_ARTICLE_Begin (Anchor);
if (CriterionExists)
/* Write title */
- RubCri_WriteCriterionTitle (Criterion->Title,"Qst_TXT",
- true); // Visible
+ RubCri_WriteCriterionTitle (Criterion); // Visible
else
{
HTM_SPAN_Begin ("class=\"DAT_LIGHT_%s\"",
@@ -151,58 +190,6 @@ void RubCri_ListCriterionForEdition (struct Rub_Criterion *Criterion,
HTM_TD_End ();
}
-/*****************************************************************************/
-/******************* Write the number of a rubric criterion ******************/
-/*****************************************************************************/
-// Number of criterion should be 1, 2, 3...
-
-void RubCri_WriteNumCriterion (unsigned NumCri,const char *Class)
- {
- HTM_DIV_Begin ("class=\"%s_%s\"",Class,The_GetSuffix ());
- HTM_Unsigned (NumCri);
- HTM_DIV_End ();
- }
-
-/*****************************************************************************/
-/******************* Write the title of a rubric criterion *******************/
-/*****************************************************************************/
-
-void RubCri_WriteCriterionTitle (const char *Title,const char *ClassTitle,bool Visible)
- {
- unsigned long TitleLength;
- char *TitleRigorousHTML;
-
- /***** DIV begin *****/
- HTM_DIV_Begin ("class=\"%s_%s\"",ClassTitle,The_GetSuffix ());
-
- /***** Write title *****/
- if (Title && Visible)
- {
- if (Title[0])
- {
- /* Convert the title, that is in HTML, to rigorous HTML */
- TitleLength = strlen (Title) * Str_MAX_BYTES_PER_CHAR;
- if ((TitleRigorousHTML = malloc (TitleLength + 1)) == NULL)
- Err_NotEnoughMemoryExit ();
- Str_Copy (TitleRigorousHTML,Title,TitleLength);
-
- Str_ChangeFormat (Str_FROM_HTML,Str_TO_RIGOROUS_HTML,
- TitleRigorousHTML,TitleLength,false);
-
- /* Write title text */
- HTM_Txt (TitleRigorousHTML);
-
- /* Free memory allocated for the title */
- free (TitleRigorousHTML);
- }
- }
- else
- Ico_PutIconNotVisible ();
-
- /***** DIV end *****/
- HTM_DIV_End ();
- }
-
/*****************************************************************************/
/***************** Put icon to add a new criterion to rubric *****************/
/*****************************************************************************/
@@ -252,128 +239,537 @@ unsigned RubCri_GetParCriInd (void)
}
/*****************************************************************************/
-/*********************** List the criteria of a rubric ***********************/
+/************ Request the creation or edition of a rubric criterion **********/
/*****************************************************************************/
-void RubCri_ListRubricCriteria (struct Rub_Rubrics *Rubrics)
+void RubCri_ReqCreatOrEditCriterion (void)
+ {
+ struct Rub_Rubrics Rubrics;
+ struct RubCri_Criterion Criterion;
+ bool ItsANewCriterion;
+ char Txt[Cns_MAX_BYTES_TEXT + 1];
+
+ /***** Check if I can edit rubrics *****/
+ if (!Rub_CheckIfICanEditRubrics ())
+ Err_NoPermissionExit ();
+
+ /***** Reset rubrics context *****/
+ Rub_ResetRubrics (&Rubrics);
+ Rub_ResetRubric (&Rubrics.Rubric);
+ RubCri_ResetCriterion (&Criterion);
+
+ /***** Get parameters *****/
+ Rub_GetPars (&Rubrics,true);
+ Rubrics.CriCod = Criterion.CriCod = ParCod_GetPar (ParCod_Cri);
+ ItsANewCriterion = (Criterion.CriCod <= 0);
+
+ /***** Get exam data from database *****/
+ Rub_GetDataOfRubricByCod (&Rubrics.Rubric);
+ Rub_DB_GetRubricTxt (Rubrics.Rubric.RubCod,Txt);
+
+ /***** Get rubric data *****/
+ if (ItsANewCriterion)
+ /* Initialize to empty rubric */
+ Rub_ResetRubric (&Rubrics.Rubric);
+ else
+ {
+ /* Get rubric data from database */
+ RubCri_GetDataOfCriterionByCod (&Criterion);
+ Rubrics.CriCod = Criterion.CriCod;
+ }
+
+ /***** Put form to edit the rubric created or updated *****/
+ Rub_PutFormEditionRubric (&Rubrics,Txt,
+ false); // No new rubric
+ }
+
+/****************************************************************************************************************************/
+/******************************************************* Headers ************************************************************/
+/****************************************************************************************************************************/
+
+/*****************************************************************************/
+/*************** Put parameter to edit one rubric criterion ******************/
+/*****************************************************************************/
+
+static void RubCri_PutParsOneCriterion (void *Rubrics)
+ {
+ if (Rubrics)
+ {
+ Rub_PutPars (Rubrics);
+ ParCod_PutPar (ParCod_Cri,((struct Rub_Rubrics *) Rubrics)->CriCod);
+ }
+ }
+
+/*****************************************************************************/
+/******************** Get criterion data using its code **********************/
+/*****************************************************************************/
+
+void RubCri_GetDataOfCriterionByCod (struct RubCri_Criterion *Criterion)
+ {
+ MYSQL_RES *mysql_res;
+ MYSQL_ROW row;
+ char StrCriInd[Cns_MAX_DECIMAL_DIGITS_UINT + 1];
+ RubCri_ValueRange_t ValueRange;
+
+ /***** Trivial check *****/
+ if (Criterion->CriCod <= 0)
+ {
+ /* Initialize to empty criterion */
+ RubCri_ResetCriterion (Criterion);
+ return;
+ }
+
+ /***** Get data of rubric criterion from database *****/
+ if (Rub_DB_GetDataOfCriterionByCod (&mysql_res,Criterion->CriCod)) // Criterion found...
+ {
+ /* Get row */
+ row = mysql_fetch_row (mysql_res);
+ /*
+ row[0] CriCod
+ row[1] RubCod
+ row[2] CriInd
+ row[3] MinVal
+ row[4] MaxVal
+ row[5] Title
+ */
+ /* Get criterion code (row[0]) */
+ Criterion->CriCod = Str_ConvertStrCodToLongCod (row[0]);
+
+ /* Get rubric code (row[0]) */
+ Criterion->RubCod = Str_ConvertStrCodToLongCod (row[1]);
+
+ /* Get criterion index (row[2]) */
+ Criterion->CriInd = Str_ConvertStrToUnsigned (row[2]);
+ snprintf (StrCriInd,sizeof (Criterion->CriInd),"%u",Criterion->CriInd);
+
+ /* Get criterion minimum and maximum values (row[3], row[4]) */
+ for (ValueRange = (RubCri_ValueRange_t) 0;
+ ValueRange <= (RubCri_ValueRange_t) (RubCri_NUM_VALUES - 1);
+ ValueRange++)
+ Criterion->Values[ValueRange] = Str_GetDoubleFromStr (row[3 + ValueRange]);
+
+ /* Get the title of the criterion (row[5]) */
+ Str_Copy (Criterion->Title,row[3 + RubCri_NUM_VALUES],sizeof (Criterion->Title) - 1);
+ }
+ else
+ /* Initialize to empty criterion */
+ RubCri_ResetCriterion (Criterion);
+
+ /* Free structure that stores the query result */
+ DB_FreeMySQLResult (&mysql_res);
+ }
+
+/*****************************************************************************/
+/*************** Put a form to create/edit a rubric criterion ****************/
+/*****************************************************************************/
+
+static void RubCri_PutFormNewCriterion (struct Rub_Rubrics *Rubrics,
+ struct RubCri_Criterion *Criterion,
+ unsigned MaxCriInd)
+ {
+ extern const char *Txt_New_criterion;
+ extern const char *Txt_Create_criterion;
+ RubCri_ValueRange_t ValueRange;
+
+ /***** Begin form *****/
+ Frm_BeginForm (ActNewRubCri);
+ Rub_PutPars (Rubrics);
+
+ /***** Begin box and table *****/
+ Box_BoxTableBegin (NULL,Txt_New_criterion,
+ NULL,NULL,
+ NULL,Box_NOT_CLOSABLE,2);
+
+ /***** Table heading *****/
+ RubCri_PutTableHeadingForCriteria ();
+
+ /***** Begin row *****/
+ HTM_TR_Begin (NULL);
+
+ /***** Empty column for buttons *****/
+ HTM_TD_Begin ("class=\"BM\"");
+ HTM_TD_End ();
+
+ /***** Index *****/
+ HTM_TD_Begin ("class=\"RM\"");
+ Lay_WriteIndex (MaxCriInd + 1,"BIG_INDEX");
+ HTM_TD_End ();
+
+ /***** Title *****/
+ HTM_TD_Begin ("class=\"LM\"");
+ HTM_INPUT_TEXT ("Title",RubCri_MAX_CHARS_TITLE,Criterion->Title,
+ HTM_DONT_SUBMIT_ON_CHANGE,
+ "id=\"Title\""
+ " class=\"TITLE_DESCRIPTION_WIDTH INPUT_%s\""
+ " required=\"required\"",
+ The_GetSuffix ());
+ HTM_TD_End ();
+
+ /***** Minimum and maximum values of the criterion *****/
+ for (ValueRange = (RubCri_ValueRange_t) 0;
+ ValueRange <= (RubCri_ValueRange_t) (RubCri_NUM_VALUES - 1);
+ ValueRange++)
+ {
+ HTM_TD_Begin ("class=\"RM\"");
+ HTM_INPUT_FLOAT (RubCri_ParValues[ValueRange],0.0,DBL_MAX,0.1,
+ Criterion->Values[ValueRange],false,
+ " class=\"INPUT_%s\" required=\"required\"",
+ The_GetSuffix ());
+ HTM_TD_End ();
+ }
+
+ /***** End row *****/
+ HTM_TR_End ();
+
+ /***** End table, send button and end box *****/
+ Box_BoxTableWithButtonEnd (Btn_CREATE_BUTTON,Txt_Create_criterion);
+
+ /***** End form *****/
+ Frm_EndForm ();
+ }
+
+/*****************************************************************************/
+/**************** Receive form to create a new rubric criterion **************/
+/*****************************************************************************/
+
+void RubCri_ReceiveFormCriterion (void)
+ {
+ struct Rub_Rubrics Rubrics;
+ struct RubCri_Criterion Criterion;
+
+ /***** Reset rubrics context *****/
+ Rub_ResetRubrics (&Rubrics);
+ Rub_ResetRubric (&Rubrics.Rubric);
+ RubCri_ResetCriterion (&Criterion);
+
+ /***** Get parameters *****/
+ Rub_GetPars (&Rubrics,true);
+ Criterion.RubCod = Rubrics.Rubric.RubCod;
+
+ /***** Get rubric data from database *****/
+ Rub_GetDataOfRubricByCod (&Rubrics.Rubric);
+
+ /***** Check if rubric is editable *****/
+ if (!Rub_CheckIfEditable (&Rubrics.Rubric))
+ Err_NoPermissionExit ();
+
+ /***** If I can edit rubrics ==> receive criterion from form *****/
+ RubCri_ReceiveCriterionFieldsFromForm (&Criterion);
+
+ if (RubCri_CheckCriterionTitleReceivedFromForm (&Criterion,Criterion.Title))
+ RubCri_CreateCriterion (&Criterion); // Add new criterion to database
+
+ /***** Show current rubric and its criteria *****/
+ Rub_PutFormsOneRubric (&Rubrics,&Criterion,
+ false); // It's not a new rubric
+ }
+
+static void RubCri_ReceiveCriterionFieldsFromForm (struct RubCri_Criterion *Criterion)
+ {
+ RubCri_ValueRange_t ValueRange;
+ char ValueStr[64];
+
+ /***** Get criterion title *****/
+ Par_GetParText ("Title",Criterion->Title,RubCri_MAX_BYTES_TITLE);
+
+ /***** Get minimum and maximum values of criterion *****/
+ for (ValueRange = (RubCri_ValueRange_t) 0;
+ ValueRange <= (RubCri_ValueRange_t) (RubCri_NUM_VALUES - 1);
+ ValueRange++)
+ {
+ Par_GetParText (RubCri_ParValues[ValueRange],ValueStr,sizeof (ValueStr) - 1);
+ Criterion->Values[ValueRange] = Str_GetDoubleFromStr (ValueStr);
+ }
+ }
+
+static bool RubCri_CheckCriterionTitleReceivedFromForm (const struct RubCri_Criterion *Criterion,
+ const char NewTitle[RubCri_MAX_BYTES_TITLE + 1])
+ {
+ extern const char *Txt_Already_existed_a_criterion_in_this_rubric_with_the_title_X;
+ bool NewTitleIsCorrect;
+
+ /***** Check if title is correct *****/
+ NewTitleIsCorrect = true;
+ if (NewTitle[0]) // If there's an criterion title
+ {
+ /***** Check if old and new titles are the same
+ (this happens when return is pressed without changes) *****/
+ if (strcmp (Criterion->Title,NewTitle)) // Different titles
+ {
+ /* If title of criterion was in database... */
+ if (Rub_DB_CheckIfSimilarCriterionExists (Criterion,NewTitle))
+ {
+ NewTitleIsCorrect = false;
+ Ale_ShowAlert (Ale_WARNING,Txt_Already_existed_a_criterion_in_this_rubric_with_the_title_X,
+ Criterion->Title);
+ }
+ }
+ }
+ else // If there is not a criterion title
+ {
+ NewTitleIsCorrect = false;
+ Ale_ShowAlertYouMustSpecifyTheTitle ();
+ }
+
+ return NewTitleIsCorrect;
+ }
+
+/*****************************************************************************/
+/************* Receive form to change title of rubric criterion **************/
+/*****************************************************************************/
+
+void RubCri_ChangeCriterionTitle (void)
+ {
+ struct Rub_Rubrics Rubrics;
+ struct RubCri_Criterion Criterion;
+ char NewTitle[RubCri_MAX_BYTES_TITLE + 1];
+
+ /***** Check if I can edit rubrics *****/
+ if (!Rub_CheckIfICanEditRubrics ())
+ Err_NoPermissionExit ();
+
+ /***** Reset rubrics context *****/
+ Rub_ResetRubrics (&Rubrics);
+ Rub_ResetRubric (&Rubrics.Rubric);
+ RubCri_ResetCriterion (&Criterion);
+
+ /***** Get and check parameters *****/
+ RubCri_GetAndCheckPars (&Rubrics,&Criterion);
+
+ /***** Check if rubric is editable *****/
+ if (!Rub_CheckIfEditable (&Rubrics.Rubric))
+ Err_NoPermissionExit ();
+
+ /***** Receive new title from form *****/
+ Par_GetParText ("Title",NewTitle,RubCri_MAX_BYTES_TITLE);
+
+ /***** Check if title should be changed *****/
+ if (RubCri_CheckCriterionTitleReceivedFromForm (&Criterion,NewTitle))
+ {
+ /* Update the table changing old title by new title */
+ Rub_DB_UpdateCriterionTitle (Criterion.CriCod,Criterion.RubCod,NewTitle);
+
+ /* Update title */
+ Str_Copy (Criterion.Title,NewTitle,sizeof (Criterion.Title) - 1);
+ }
+
+ /***** Show current rubric and its criteria *****/
+ Rub_PutFormsOneRubric (&Rubrics,&Criterion,
+ false); // It's not a new rubric
+ }
+
+/*****************************************************************************/
+/********* Receive form to change minimum/maximum value of criterion *********/
+/*****************************************************************************/
+
+void RubCri_ChangeMinValueCriterion (void)
+ {
+ RubCri_ChangeValueCriterion (RubCri_MIN);
+ }
+
+void RubCri_ChangeMaxValueCriterion (void)
+ {
+ RubCri_ChangeValueCriterion (RubCri_MAX);
+ }
+
+static void RubCri_ChangeValueCriterion (RubCri_ValueRange_t ValueRange)
+ {
+ struct Rub_Rubrics Rubrics;
+ struct RubCri_Criterion Criterion;
+ char ValueStr[64];
+
+ /***** Check if I can edit rubrics *****/
+ if (!Rub_CheckIfICanEditRubrics ())
+ Err_NoPermissionExit ();
+
+ /***** Reset rubrics context *****/
+ Rub_ResetRubrics (&Rubrics);
+ Rub_ResetRubric (&Rubrics.Rubric);
+ RubCri_ResetCriterion (&Criterion);
+
+ /***** Get parameters *****/
+ Rub_GetPars (&Rubrics,true);
+ Criterion.RubCod = Rubrics.Rubric.RubCod;
+ Rubrics.CriCod = Criterion.CriCod = ParCod_GetAndCheckPar (ParCod_Cri);
+
+ /***** Get and check parameters *****/
+ RubCri_GetAndCheckPars (&Rubrics,&Criterion);
+
+ /***** Check if rubric is editable *****/
+ if (!Rub_CheckIfEditable (&Rubrics.Rubric))
+ Err_NoPermissionExit ();
+
+ /***** Receive new value from form *****/
+ Par_GetParText (RubCri_ParValues[ValueRange],ValueStr,sizeof (ValueStr) - 1);
+ Criterion.Values[ValueRange] = Str_GetDoubleFromStr (ValueStr);
+
+ /***** Change value *****/
+ /* Update the table changing old value by new value */
+ Rub_DB_UpdateCriterionValue (Criterion.CriCod,Criterion.RubCod,
+ ValueRange,Criterion.Values[ValueRange]);
+
+ /***** Show current rubric and its criteria *****/
+ Rub_PutFormsOneRubric (&Rubrics,&Criterion,
+ false); // It's not a new rubric
+ }
+
+/*****************************************************************************/
+/************************ Create a new rubric criterion **********************/
+/*****************************************************************************/
+
+static void RubCri_CreateCriterion (struct RubCri_Criterion *Criterion)
+ {
+ extern const char *Txt_Created_new_criterion_X;
+ unsigned MaxCriInd;
+
+ /***** Get maximum criterion index *****/
+ MaxCriInd = Rub_DB_GetMaxCriterionIndexInRubric (Criterion->RubCod);
+
+ /***** Create a new criterion *****/
+ Criterion->CriInd = MaxCriInd + 1;
+ Criterion->CriCod = Rub_DB_CreateCriterion (Criterion);
+
+ /***** Write success message *****/
+ Ale_ShowAlert (Ale_SUCCESS,Txt_Created_new_criterion_X,
+ Criterion->Title);
+ }
+
+/*****************************************************************************/
+/********************** List the criteria of a rubric ************************/
+/*****************************************************************************/
+
+void RubCri_ListCriteria (struct Rub_Rubrics *Rubrics,
+ struct RubCri_Criterion *Criterion)
{
extern const char *Hlp_ASSESSMENT_Rubrics_criteria;
extern const char *Txt_Criteria;
MYSQL_RES *mysql_res;
+ unsigned MaxCriInd;
unsigned NumCriteria;
- bool ICanEditCriteria = Rub_CheckIfICanEditRubrics ();
+ bool ICanEditCriteria = Rub_CheckIfEditable (&Rubrics->Rubric);
- /***** Get data of criteria from database *****/
- NumCriteria = Rub_DB_GetRubricCriteriaBasic (&mysql_res,Rubrics->Rubric.RubCod);
+ /***** Get maximum criterion index *****/
+ MaxCriInd = Rub_DB_GetMaxCriterionIndexInRubric (Rubrics->Rubric.RubCod);
+
+ /***** Get data of rubric criteria from database *****/
+ NumCriteria = Rub_DB_GetCriteria (&mysql_res,Rubrics->Rubric.RubCod);
/***** Begin box *****/
- if (ICanEditCriteria)
- Box_BoxBegin (NULL,Txt_Criteria,
- RubCri_PutIconToAddNewCriterion,Rubrics,
- Hlp_ASSESSMENT_Rubrics_criteria,Box_NOT_CLOSABLE);
- else
- Box_BoxBegin (NULL,Txt_Criteria,
- NULL,NULL,
- Hlp_ASSESSMENT_Rubrics_criteria,Box_NOT_CLOSABLE);
+ Box_BoxBegin (NULL,Txt_Criteria,
+ NULL,NULL,
+ Hlp_ASSESSMENT_Rubrics_criteria,Box_NOT_CLOSABLE);
- /***** Show table with criteria *****/
- if (NumCriteria)
- RubCri_ListOneOrMoreCriteriaForEdition (Rubrics,NumCriteria,mysql_res,
- ICanEditCriteria);
+ /***** Show table with rubric criteria *****/
+ if (NumCriteria)
+ RubCri_ListOneOrMoreCriteriaForEdition (Rubrics,
+ MaxCriInd,
+ NumCriteria,mysql_res,
+ ICanEditCriteria);
- /***** Put button to add a new criterion in this rubric *****/
- if (ICanEditCriteria) // I can edit criteria
- RubCri_PutButtonToAddNewCriterion (Rubrics);
+ /***** Free structure that stores the query result *****/
+ DB_FreeMySQLResult (&mysql_res);
- /***** Free structure that stores the query result *****/
- DB_FreeMySQLResult (&mysql_res);
+ /***** Put forms to create/edit a criterion *****/
+ if (ICanEditCriteria)
+ RubCri_PutFormNewCriterion (Rubrics,Criterion,MaxCriInd);
/***** End box *****/
Box_BoxEnd ();
}
/*****************************************************************************/
-/********************* List rubric criteria for edition **********************/
+/********************** List rubric criteria for edition **********************/
/*****************************************************************************/
static void RubCri_ListOneOrMoreCriteriaForEdition (struct Rub_Rubrics *Rubrics,
- unsigned NumCriteria,
+ unsigned MaxCriInd,
+ unsigned NumCriteria,
MYSQL_RES *mysql_res,
- bool ICanEditCriteria)
+ bool ICanEditCriteria)
{
extern const char *Txt_Criteria;
- extern const char *Txt_No_INDEX;
- extern const char *Txt_Code;
- extern const char *Txt_Tags;
- extern const char *Txt_Criterion;
extern const char *Txt_Movement_not_allowed;
- unsigned NumCri;
- unsigned CriInd;
- unsigned MaxCriInd;
+ // Actions to change minimum/maximum criterion values
+ static Act_Action_t RubCri_ActionsValues[RubCri_NUM_VALUES] =
+ {
+ [RubCri_MIN] = ActChgMinRubCri,
+ [RubCri_MAX] = ActChgMaxRubCri,
+ };
+ unsigned NumCriterion;
+ struct RubCri_Criterion Criterion;
MYSQL_ROW row;
- struct Rub_Criterion Criterion;
+ char *Anchor;
char StrCriInd[Cns_MAX_DECIMAL_DIGITS_UINT + 1];
- bool CriterionExists;
- char *Anchor = NULL;
+ RubCri_ValueRange_t ValueRange;
/***** Trivial check *****/
if (!NumCriteria)
return;
- /***** Get maximum criterion index *****/
- MaxCriInd = Rub_DB_GetMaxCriterionIndexInRubric (Rubrics->Rubric.RubCod); // 0 is no criteria in rubric
-
- /***** Write the heading *****/
+ /***** Begin table *****/
HTM_TABLE_BeginWideMarginPadding (5);
- HTM_TR_Begin (NULL);
- HTM_TH_Empty (1);
- HTM_TH (Txt_No_INDEX ,HTM_HEAD_CENTER);
- HTM_TH (Txt_Code ,HTM_HEAD_CENTER);
- HTM_TH (Txt_Tags ,HTM_HEAD_CENTER);
- HTM_TH (Txt_Criterion,HTM_HEAD_CENTER);
- HTM_TR_End ();
+ /***** Write the heading *****/
+ RubCri_PutTableHeadingForCriteria ();
/***** Write rows *****/
- for (NumCri = 0, The_ResetRowColor ();
- NumCri < NumCriteria;
- NumCri++, The_ChangeRowColor ())
+ for (NumCriterion = 0, The_ResetRowColor ();
+ NumCriterion < NumCriteria;
+ NumCriterion++, The_ChangeRowColor ())
{
- /***** Create rubric criterion *****/
- RubCri_CriterionConstructor (&Criterion);
+ /***** Create criterion of questions *****/
+ RubCri_ResetCriterion (&Criterion);
+ Criterion.RubCod = Rubrics->Rubric.RubCod;
/***** Get criterion data *****/
row = mysql_fetch_row (mysql_res);
/*
- row[0] QstCod
- row[1] QstInd
+ row[0] CriCod
+ row[1] CriInd
+ row[2] MinVal
+ row[3] MaxVal
+ row[4] Title
*/
/* Get criterion code (row[0]) */
Criterion.CriCod = Str_ConvertStrCodToLongCod (row[0]);
/* Get criterion index (row[1]) */
- CriInd = Str_ConvertStrToUnsigned (row[1]);
- snprintf (StrCriInd,sizeof (StrCriInd),"%u",CriInd);
+ Criterion.CriInd = Str_ConvertStrToUnsigned (row[1]);
+ snprintf (StrCriInd,sizeof (Criterion.CriInd),"%u",Criterion.CriInd);
+
+ /* Get minimum value (row[2]) and maximum value (row[3]) */
+ for (ValueRange = (RubCri_ValueRange_t) 0;
+ ValueRange <= (RubCri_ValueRange_t) (RubCri_NUM_VALUES - 1);
+ ValueRange++)
+ Criterion.Values[ValueRange] = Str_GetDoubleFromStr (row[2 + ValueRange]);
+
+ /* Get the title of the criterion (row[4]) */
+ Str_Copy (Criterion.Title,row[2 + RubCri_NUM_VALUES],sizeof (Criterion.Title) - 1);
+
+ /* Initialize context */
+ Rubrics->CriCod = Criterion.CriCod;
+ Rubrics->CriInd = Criterion.CriInd;
/***** Build anchor string *****/
Frm_SetAnchorStr (Criterion.CriCod,&Anchor);
- /***** Begin row *****/
+ /***** Begin first row *****/
HTM_TR_Begin (NULL);
/***** Icons *****/
- HTM_TD_Begin ("class=\"BT %s\"",The_GetColorRows ());
+ HTM_TD_Begin ("rowspan=\"2\" class=\"BT %s\"",
+ The_GetColorRows ());
/* Put icon to remove the criterion */
if (ICanEditCriteria)
- Ico_PutContextualIconToRemove (ActReqRemGamQst,NULL,
+ Ico_PutContextualIconToRemove (ActReqRemRubCri,NULL,
RubCri_PutParsOneCriterion,Rubrics);
else
Ico_PutIconRemovalNotAllowed ();
- /* Put icon to move up the criterion */
- if (ICanEditCriteria && CriInd > 1)
- Lay_PutContextualLinkOnlyIcon (ActUp_GamQst,Anchor,
+ /* Put icon to move up the question */
+ if (ICanEditCriteria && Criterion.CriInd > 1)
+ Lay_PutContextualLinkOnlyIcon (ActUp_RubCri,Anchor,
RubCri_PutParsOneCriterion,Rubrics,
"arrow-up.svg",Ico_BLACK);
else
@@ -381,33 +777,88 @@ static void RubCri_ListOneOrMoreCriteriaForEdition (struct Rub_Rubrics *Rubrics,
Txt_Movement_not_allowed);
/* Put icon to move down the criterion */
- if (ICanEditCriteria && CriInd < MaxCriInd)
- Lay_PutContextualLinkOnlyIcon (ActDwnGamQst,Anchor,
+ if (ICanEditCriteria && Criterion.CriInd < MaxCriInd)
+ Lay_PutContextualLinkOnlyIcon (ActDwnRubCri,Anchor,
RubCri_PutParsOneCriterion,Rubrics,
"arrow-down.svg",Ico_BLACK);
else
Ico_PutIconOff ("arrow-down.svg",Ico_BLACK,
Txt_Movement_not_allowed);
- /* Put icon to edit the criterion */
- if (ICanEditCriteria)
- Ico_PutContextualIconToEdit (ActEdiOneTstQst,NULL,
- RubCri_PutParCriCod,&Criterion.CriCod);
+ HTM_TD_End ();
+
+ /***** Index *****/
+ HTM_TD_Begin ("rowspan=\"2\" class=\"RT %s\"",
+ The_GetColorRows ());
+ Lay_WriteIndex (Criterion.CriInd,"BIG_INDEX");
+ HTM_TD_End ();
+
+ /***** Title *****/
+ HTM_TD_Begin ("class=\"LT %s\"",The_GetColorRows ());
+ HTM_ARTICLE_Begin (Anchor);
+ if (ICanEditCriteria)
+ {
+ Frm_BeginFormAnchor (ActChgTitRubCri,Anchor);
+ RubCri_PutParsOneCriterion (Rubrics);
+ HTM_INPUT_TEXT ("Title",RubCri_MAX_CHARS_TITLE,Criterion.Title,
+ HTM_SUBMIT_ON_CHANGE,
+ "id=\"Title\""
+ " class=\"TITLE_DESCRIPTION_WIDTH INPUT_%s\""
+ " required=\"required\"",
+ The_GetSuffix ());
+ Frm_EndForm ();
+ }
+ else
+ {
+ HTM_SPAN_Begin ("class=\"EXA_SET_TITLE\"");
+ HTM_Txt (Criterion.Title);
+ HTM_SPAN_End ();
+ }
+ HTM_ARTICLE_End ();
+ HTM_TD_End ();
+
+ /***** Minimum and maximum values of criterion *****/
+ for (ValueRange = (RubCri_ValueRange_t) 0;
+ ValueRange <= (RubCri_ValueRange_t) (RubCri_NUM_VALUES - 1);
+ ValueRange++)
+ {
+ HTM_TD_Begin ("class=\"RT %s\"",The_GetColorRows ());
+ if (ICanEditCriteria)
+ {
+ Frm_BeginFormAnchor (RubCri_ActionsValues[ValueRange],Anchor);
+ RubCri_PutParsOneCriterion (Rubrics);
+ HTM_INPUT_FLOAT (RubCri_ParValues[ValueRange],0.0,DBL_MAX,0.1,
+ Criterion.Values[ValueRange],false,
+ " class=\"INPUT_%s\" required=\"required\"",
+ The_GetSuffix ());
+ Frm_EndForm ();
+ }
+ else
+ {
+ HTM_SPAN_Begin ("class=\"CRI_VALUE\"");
+ HTM_Unsigned (Criterion.Values[ValueRange]);
+ HTM_SPAN_End ();
+ }
+ HTM_TD_End ();
+ }
+
+ /***** End first row *****/
+ HTM_TR_End ();
+
+ /***** Begin second row *****/
+ HTM_TR_Begin (NULL);
+
+ /***** Questions *****/
+ HTM_TD_Begin ("colspan=\"3\" class=\"LT %s\"",
+ The_GetColorRows ());
HTM_TD_End ();
- /***** Criterion *****/
- CriterionExists = RubCri_GetCriterionDataFromDB (&Criterion);
- RubCri_ListCriterionForEdition (&Criterion,CriInd,CriterionExists,Anchor);
-
- /***** End row *****/
+ /***** End second row *****/
HTM_TR_End ();
/***** Free anchor string *****/
Frm_FreeAnchorStr (Anchor);
-
- /***** Destroy rubric criterion *****/
- RubCri_CriterionDestructor (&Criterion);
}
/***** End table *****/
@@ -415,62 +866,319 @@ static void RubCri_ListOneOrMoreCriteriaForEdition (struct Rub_Rubrics *Rubrics,
}
/*****************************************************************************/
-/**************** Put parameter to move/remove one criterion *****************/
+/****************** Put table heading for rubric criteria ********************/
/*****************************************************************************/
-static void RubCri_PutParsOneCriterion (void *Rubrics)
+static void RubCri_PutTableHeadingForCriteria (void)
{
- if (Rubrics)
- Rub_PutPars (Rubrics);
+ extern const char *Txt_No_INDEX;
+ extern const char *Txt_Criterion;
+ extern const char *Txt_Minimum;
+ extern const char *Txt_Maximum;
+
+ /***** Begin row *****/
+ HTM_TR_Begin (NULL);
+
+ /***** Header cells *****/
+ HTM_TH_Empty (1);
+ HTM_TH (Txt_No_INDEX ,HTM_HEAD_RIGHT);
+ HTM_TH (Txt_Criterion,HTM_HEAD_LEFT );
+ HTM_TH (Txt_Minimum ,HTM_HEAD_RIGHT);
+ HTM_TH (Txt_Maximum ,HTM_HEAD_RIGHT);
+
+ /***** End row *****/
+ HTM_TR_End ();
}
/*****************************************************************************/
-/************ Request the creation or edition of a rubric criterion **********/
+/*************************** Reset rubric criterion **************************/
/*****************************************************************************/
-void RubCri_RequestCreatOrEditCri (void)
+void RubCri_ResetCriterion (struct RubCri_Criterion *Criterion)
{
- struct Rub_Rubrics Rubrics;
- bool ItsANewCriterion;
- char Txt[Cns_MAX_BYTES_TEXT + 1];
+ // Default values minimum/maximum criterion values
+ static double RubCri_DefaultValues[RubCri_NUM_VALUES] =
+ {
+ [RubCri_MIN] = 0.0,
+ [RubCri_MAX] = 0.1,
+ };
+ RubCri_ValueRange_t ValueRange;
- Err_ShowErrorAndExit ("Not implemented.");
+ Criterion->RubCod = -1L;
+ Criterion->CriCod = -1L;
+ Criterion->CriInd = 0;
+ Criterion->Title[0] = '\0';
+ for (ValueRange = (RubCri_ValueRange_t) 0;
+ ValueRange <= (RubCri_ValueRange_t) (RubCri_NUM_VALUES - 1);
+ ValueRange++)
+ Criterion->Values[ValueRange] = RubCri_DefaultValues[ValueRange];
+ }
+
+/*****************************************************************************/
+/***************** Request the removal of a rubric criterion *****************/
+/*****************************************************************************/
+
+void RubCri_ReqRemCriterion (void)
+ {
+ extern const char *Txt_Do_you_really_want_to_remove_the_criterion_X;
+ extern const char *Txt_Remove_criterion;
+ struct Rub_Rubrics Rubrics;
+ struct RubCri_Criterion Criterion;
/***** Reset rubrics context *****/
Rub_ResetRubrics (&Rubrics);
-
- /***** Reset rubric *****/
Rub_ResetRubric (&Rubrics.Rubric);
+ RubCri_ResetCriterion (&Criterion);
- /***** Check if I can edit rubrics *****/
- if (!Rub_CheckIfICanEditRubrics ())
+ /***** Get and check parameters *****/
+ RubCri_GetAndCheckPars (&Rubrics,&Criterion);
+
+ /***** Check if rubric is editable *****/
+ if (!Rub_CheckIfEditable (&Rubrics.Rubric))
Err_NoPermissionExit ();
- /***** Get parameters *****/
- ItsANewCriterion = ((Rubrics.Rubric.RubCod = Rub_GetPars (&Rubrics)) <= 0);
+ /***** Show question and button to remove question *****/
+ Ale_ShowAlertAndButton (ActRemRubCri,NULL,NULL,
+ RubCri_PutParsOneCriterion,&Rubrics,
+ Btn_REMOVE_BUTTON,Txt_Remove_criterion,
+ Ale_QUESTION,Txt_Do_you_really_want_to_remove_the_criterion_X,
+ Criterion.Title);
- /***** Get rubric data *****/
- if (ItsANewCriterion)
- {
- /* Initialize to empty rubric */
- Rub_ResetRubric (&Rubrics.Rubric);
- Txt[0] = '\0';
- }
- else
- {
- /* Get rubric data from database */
- Rub_GetDataOfRubricByCod (&Rubrics.Rubric);
- Rub_DB_GetRubricTxt (Rubrics.Rubric.RubCod,Txt);
- }
-
- /***** Put forms to create/edit a rubric *****/
- // Rub_PutFormsEditionRubric (&Rubrics,Txt,ItsANewCriterion);
-
- /***** Show rubrics or criteria *****/
- if (ItsANewCriterion)
- /* Show rubrics again */
- Rub_ListAllRubrics (&Rubrics);
- else
- /* Show criteria of the rubric ready to be edited */
- RubCri_ListRubricCriteria (&Rubrics);
+ /***** Show current rubric and its criteria *****/
+ Rub_PutFormsOneRubric (&Rubrics,&Criterion,
+ false); // It's not a new rubric
+ }
+
+/*****************************************************************************/
+/************************* Remove a rubric criterion *************************/
+/*****************************************************************************/
+
+void RubCri_RemoveCriterion (void)
+ {
+ extern const char *Txt_Criterion_removed;
+ struct Rub_Rubrics Rubrics;
+ struct RubCri_Criterion Criterion;
+
+ /***** Reset rubrics context *****/
+ Rub_ResetRubrics (&Rubrics);
+ Rub_ResetRubric (&Rubrics.Rubric);
+ RubCri_ResetCriterion (&Criterion);
+
+ /***** Get and check parameters *****/
+ RubCri_GetAndCheckPars (&Rubrics,&Criterion);
+
+ /***** Check if rubric is editable *****/
+ if (!Rub_CheckIfEditable (&Rubrics.Rubric))
+ Err_NoPermissionExit ();
+
+ /***** Remove the criterion from all tables *****/
+ /* Remove questions associated to criterion */
+ // Exa_DB_RemoveAllSetQuestionsFromSet (Criterion.CriCod,Criterion.RubCod);
+
+ /* Remove the criterion itself */
+ Rub_DB_RemoveCriterionFromRubric (Criterion.CriCod,Criterion.RubCod);
+
+ /* Change indexes of criteria greater than this */
+ Rub_DB_UpdateCriteriaIndexesInRubricGreaterThan (Criterion.RubCod,Criterion.CriInd);
+
+ /***** Write message *****/
+ Ale_ShowAlert (Ale_SUCCESS,Txt_Criterion_removed);
+
+ /***** Show current rubric and its criteria *****/
+ Rub_PutFormsOneRubric (&Rubrics,&Criterion,
+ false); // It's not a new rubric
+ }
+
+/*****************************************************************************/
+/*************** Move up position of a criterion in a rubric *****************/
+/*****************************************************************************/
+
+void RubCri_MoveUpCriterion (void)
+ {
+ extern const char *Txt_Movement_not_allowed;
+ struct Rub_Rubrics Rubrics;
+ struct RubCri_Criterion Criterion;
+ unsigned CriIndTop;
+ unsigned CriIndBottom;
+
+ /***** Reset rubrics context *****/
+ Rub_ResetRubrics (&Rubrics);
+ Rub_ResetRubric (&Rubrics.Rubric);
+ RubCri_ResetCriterion (&Criterion);
+
+ /***** Get and check parameters *****/
+ RubCri_GetAndCheckPars (&Rubrics,&Criterion);
+
+ /***** Check if rubric is editable *****/
+ if (!Rub_CheckIfEditable (&Rubrics.Rubric))
+ Err_NoPermissionExit ();
+
+ /***** Get criterion index *****/
+ CriIndBottom = Rub_DB_GetCriIndFromCriCod (Rubrics.Rubric.RubCod,Criterion.CriCod);
+
+ /***** Move up criterion *****/
+ if (CriIndBottom > 1)
+ {
+ /* Indexes of criteria to be exchanged */
+ CriIndTop = Rub_DB_GetPrevCriterionIndexInRubric (Rubrics.Rubric.RubCod,CriIndBottom);
+ if (CriIndTop == 0)
+ Err_ShowErrorAndExit ("Wrong criterion index.");
+
+ /* Exchange criteria */
+ RubCri_ExchangeCriteria (Rubrics.Rubric.RubCod,CriIndTop,CriIndBottom);
+ }
+ else
+ Ale_ShowAlert (Ale_WARNING,Txt_Movement_not_allowed);
+
+ /***** Show current rubric and its criteria *****/
+ Rub_PutFormsOneRubric (&Rubrics,&Criterion,
+ false); // It's not a new rubric
+ }
+
+/*****************************************************************************/
+/************** Move down position of a criterion in a rubric ****************/
+/*****************************************************************************/
+
+void RubCri_MoveDownCriterion (void)
+ {
+ extern const char *Txt_Movement_not_allowed;
+ struct Rub_Rubrics Rubrics;
+ struct RubCri_Criterion Criterion;
+ unsigned CriIndTop;
+ unsigned CriIndBottom;
+ unsigned MaxCriInd; // 0 if no criteria
+
+ /***** Reset rubrics context *****/
+ Rub_ResetRubrics (&Rubrics);
+ Rub_ResetRubric (&Rubrics.Rubric);
+ RubCri_ResetCriterion (&Criterion);
+
+ /***** Get and check parameters *****/
+ RubCri_GetAndCheckPars (&Rubrics,&Criterion);
+
+ /***** Check if rubric is editable *****/
+ if (!Rub_CheckIfEditable (&Rubrics.Rubric))
+ Err_NoPermissionExit ();
+
+ /***** Get criterion index *****/
+ CriIndTop = Rub_DB_GetCriIndFromCriCod (Rubrics.Rubric.RubCod,Criterion.CriCod);
+
+ /***** Get maximum criterion index *****/
+ MaxCriInd = Rub_DB_GetMaxCriterionIndexInRubric (Rubrics.Rubric.RubCod);
+
+ /***** Move down criterion *****/
+ if (CriIndTop < MaxCriInd)
+ {
+ /* Indexes of criteria to be exchanged */
+ CriIndBottom = Rub_DB_GetNextCriterionIndexInRubric (Rubrics.Rubric.RubCod,CriIndTop);
+ if (CriIndBottom == 0)
+ Err_ShowErrorAndExit ("Wrong criterion index.");
+
+ /* Exchange criteria */
+ RubCri_ExchangeCriteria (Rubrics.Rubric.RubCod,CriIndTop,CriIndBottom);
+ }
+ else
+ Ale_ShowAlert (Ale_WARNING,Txt_Movement_not_allowed);
+
+ /***** Show current rubric and its criteria *****/
+ Rub_PutFormsOneRubric (&Rubrics,&Criterion,
+ false); // It's not a new trubric
+ }
+
+/*****************************************************************************/
+/************************** Get and check parameters *************************/
+/*****************************************************************************/
+
+static void RubCri_GetAndCheckPars (struct Rub_Rubrics *Rubrics,
+ struct RubCri_Criterion *Criterion)
+ {
+ /***** Get parameters *****/
+ Rub_GetPars (Rubrics,true);
+ Criterion->CriCod = ParCod_GetAndCheckPar (ParCod_Cri);
+
+ /***** Get rubric data from database *****/
+ Rub_GetDataOfRubricByCod (&Rubrics->Rubric);
+ if (Rubrics->Rubric.CrsCod != Gbl.Hierarchy.Crs.CrsCod)
+ Err_WrongRubricExit ();
+
+ /***** Get criterion data from database *****/
+ RubCri_GetDataOfCriterionByCod (Criterion);
+ if (Criterion->RubCod != Rubrics->Rubric.RubCod)
+ Err_WrongCriterionExit ();
+ Rubrics->CriCod = Criterion->CriCod;
+ }
+
+/*****************************************************************************/
+/******** Exchange the order of two consecutive criteria in a rubric *********/
+/*****************************************************************************/
+
+static void RubCri_ExchangeCriteria (long RubCod,
+ unsigned CriIndTop,unsigned CriIndBottom)
+ {
+ long CriCodTop;
+ long CriCodBottom;
+
+ /***** Lock table to make the move atomic *****/
+ Rub_DB_LockTable ();
+
+ /***** Get criterion codes of the sets to be moved *****/
+ CriCodTop = Rub_DB_GetCriCodFromCriInd (RubCod,CriIndTop );
+ CriCodBottom = Rub_DB_GetCriCodFromCriInd (RubCod,CriIndBottom);
+
+ /***** Exchange indexes of sets *****/
+ /*
+ Example:
+ CriIndTop = 1; CriCodTop = 218
+ CriIndBottom = 2; CriCodBottom = 220
+ Step 1 Step 2 Step 3
++--------+--------+ +--------+--------+ +--------+--------+ +--------+--------+
+| CriInd | CriCod | | CriInd | CriCod | | CriInd | CriCod | | CriInd | CriCod |
++--------+--------+ +--------+--------+ +--------+--------+ +--------+--------+
+| 1 | 218 |>| -2 | 218 |>| -2 | 218 |>| 2 | 218 |
+| 2 | 220 | | 2 | 220 | | 1 | 220 | | 1 | 220 |
+| 3 | 232 | | 3 | 232 | | 3 | 232 | | 3 | 232 |
++--------+--------+ +--------+--------+ +--------+--------+ +--------+--------+
+ */
+ /* Step 1: change temporarily top index to minus bottom index
+ in order to not repeat unique index (RubCod,CriInd) */
+ Rub_DB_UpdateCriterionIndex (-((long) CriIndBottom),CriCodTop ,RubCod);
+
+ /* Step 2: change bottom index to old top index */
+ Rub_DB_UpdateCriterionIndex ( (long) CriIndTop ,CriCodBottom,RubCod);
+
+ /* Step 3: change top index to old bottom index */
+ Rub_DB_UpdateCriterionIndex ( (long) CriIndBottom ,CriCodTop ,RubCod);
+
+ /***** Unlock table *****/
+ DB_UnlockTables ();
+ }
+
+/*****************************************************************************/
+/********************** Show title of rubric criterion ***********************/
+/*****************************************************************************/
+
+void RubCri_WriteCriterionTitle (const struct RubCri_Criterion *Criterion)
+ {
+ RubCri_ValueRange_t ValueRange;
+
+ /***** Begin table *****/
+ HTM_TABLE_BeginWide ();
+
+ /***** Title *****/
+ HTM_TD_Begin ("class=\"CRI_TITLE\"");
+ HTM_Txt (Criterion->Title);
+ HTM_TD_End ();
+
+ /***** Minimum and maximum values *****/
+ for (ValueRange = (RubCri_ValueRange_t) 0;
+ ValueRange <= (RubCri_ValueRange_t) (RubCri_NUM_VALUES - 1);
+ ValueRange++)
+ {
+ HTM_TD_Begin ("class=\"CRI_VALUE\"");
+ HTM_Double (Criterion->Values[ValueRange]);
+ HTM_TD_End ();
+ }
+
+ /***** End table *****/
+ HTM_TABLE_End ();
}
diff --git a/swad_rubric_criteria.h b/swad_rubric_criteria.h
index 8b072991..9a1f326b 100644
--- a/swad_rubric_criteria.h
+++ b/swad_rubric_criteria.h
@@ -24,37 +24,21 @@
along with this program. If not, see .
*/
/*****************************************************************************/
-/************************** Public types and constants ***********************/
+/********************************* Headers ***********************************/
/*****************************************************************************/
-#define Rub_MAX_CHARS_CRITERION_TITLE (128 - 1) // 127
-#define Rub_MAX_BYTES_CRITERION_TITLE ((Rub_MAX_CHARS_CRITERION_TITLE + 1) * Str_MAX_BYTES_PER_CHAR - 1) // 2047
-
-#define Rub_AFTER_LAST_CRITERION ((unsigned)((1UL << 31) - 1)) // 2^31 - 1, don't change this number because it is used in database
-
-struct Rub_Criterion
- {
- long RubCod; // Rubric code
- long CriCod; // Course code
- char Title[Rub_MAX_BYTES_CRITERION_TITLE + 1];
- };
+#include "swad_rubric_type.h"
/*****************************************************************************/
/***************************** Public prototypes *****************************/
/*****************************************************************************/
-void RubCri_CriterionConstructor (struct Rub_Criterion *Criterion);
-void RubCri_CriterionDestructor (struct Rub_Criterion *Criterion);
+void RubCri_CriterionConstructor (struct RubCri_Criterion *Criterion);
+void RubCri_CriterionDestructor (struct RubCri_Criterion *Criterion);
-void RubCri_PutParCriCod (void *CriCod);
-
-bool RubCri_GetCriterionDataFromDB (struct Rub_Criterion *Criterion);
-
-void RubCri_ListCriterionForEdition (struct Rub_Criterion *Criterion,
+void RubCri_ListCriterionForEdition (struct RubCri_Criterion *Criterion,
unsigned CriInd,bool CriterionExists,
const char *Anchor);
-void RubCri_WriteNumCriterion (unsigned NumDim,const char *Class);
-void RubCri_WriteCriterionTitle (const char *Title,const char *ClassTitle,bool Visible);
void RubCri_PutIconToAddNewCriterion (void *Rubrics);
void RubCri_PutButtonToAddNewCriterion (struct Rub_Rubrics *Rubrics);
@@ -62,8 +46,30 @@ void RubCri_PutButtonToAddNewCriterion (struct Rub_Rubrics *Rubrics);
void RubCri_PutParCriInd (unsigned CriInd);
unsigned RubCri_GetParCriInd (void);
-void RubCri_ListRubricCriteria (struct Rub_Rubrics *Rubrics);
+void RubCri_ReqCreatOrEditCriterion (void);
-void RubCri_RequestCreatOrEditCri (void);
+/*****************************************************************************/
+/***************************** Public prototypes *****************************/
+/*****************************************************************************/
+
+void RubCri_GetDataOfCriterionByCod (struct RubCri_Criterion *Criterion);
+
+void RubCri_ReceiveFormCriterion (void);
+void RubCri_ChangeCriterionTitle (void);
+void RubCri_ChangeMinValueCriterion (void);
+void RubCri_ChangeMaxValueCriterion (void);
+
+void RubCri_ListCriteria (struct Rub_Rubrics *Rubrics,
+ struct RubCri_Criterion *Criterion);
+
+void RubCri_ResetCriterion (struct RubCri_Criterion *Criterion);
+
+void RubCri_ReqRemCriterion (void);
+void RubCri_RemoveCriterion (void);
+
+void RubCri_MoveUpCriterion (void);
+void RubCri_MoveDownCriterion (void);
+
+void RubCri_WriteCriterionTitle (const struct RubCri_Criterion *Criterion);
#endif
diff --git a/swad_rubric_database.c b/swad_rubric_database.c
index 97b90351..767691ea 100644
--- a/swad_rubric_database.c
+++ b/swad_rubric_database.c
@@ -31,10 +31,22 @@
#include "swad_database.h"
#include "swad_error.h"
-#include "swad_rubric.h"
#include "swad_rubric_database.h"
#include "swad_global.h"
+/*****************************************************************************/
+/**************************** Private constants ******************************/
+/*****************************************************************************/
+
+#define RubCri_AFTER_LAST_CRITERION ((unsigned)((1UL << 31) - 1)) // 2^31 - 1, don't change this number because it is used in database
+
+// Fields in database for minimum/maximum criterion values
+static const char *RubCri_ValuesFields[RubCri_NUM_VALUES] =
+ {
+ [RubCri_MIN] = "MinVal",
+ [RubCri_MAX] = "MaxVal",
+ };
+
/*****************************************************************************/
/************** External global variables from others modules ****************/
/*****************************************************************************/
@@ -333,26 +345,73 @@ void Rub_DB_RemoveCrsRubrics (long CrsCod)
}
/*****************************************************************************/
-/**************** Insert criterion in the table of criteria *****************/
+/********************** Create a new rubric criterion ************************/
/*****************************************************************************/
-void Rub_DB_InsertCriterionInRubric (long RubCod,unsigned CriInd,long CriCod)
+long Rub_DB_CreateCriterion (const struct RubCri_Criterion *Criterion)
{
- DB_QueryINSERT ("can not add criterion to rubric",
- "INSERT INTO rub_criteria"
- " (RubCod,CriInd,CriCod)"
- " VALUES"
- " (%ld,%u,%ld)",
- RubCod,
- CriInd,
- CriCod);
+ long CriCod;
+
+ Str_SetDecimalPointToUS (); // To write the decimal point as a dot
+ CriCod =
+ DB_QueryINSERTandReturnCode ("can not create new criterion",
+ "INSERT INTO rub_criteria"
+ " (RubCod,CriInd,%s,%s,Title)"
+ " VALUES"
+ " (%ld,%u,%.15lg,%.15lg,'%s')",
+ RubCri_ValuesFields[RubCri_MIN],
+ RubCri_ValuesFields[RubCri_MAX],
+ Criterion->RubCod,
+ Criterion->CriInd,
+ Criterion->Values[RubCri_MIN],
+ Criterion->Values[RubCri_MAX],
+ Criterion->Title);
+ Str_SetDecimalPointToLocal (); // Return to local system
+
+ return CriCod;
}
/*****************************************************************************/
-/*********** Update indexes of criteria greater than a given one ***********/
+/********************* Update criterion title in database ********************/
/*****************************************************************************/
-void Rub_DB_UpdateIndexesOfCriteriaGreaterThan (long RubCod,unsigned CriInd)
+void Rub_DB_UpdateCriterionTitle (long CriCod,long RubCod,
+ const char NewTitle[RubCri_MAX_BYTES_TITLE + 1])
+ {
+ DB_QueryUPDATE ("can not update the title of a criterion",
+ "UPDATE rub_criteria"
+ " SET Title='%s'"
+ " WHERE CriCod=%ld"
+ " AND RubCod=%ld", // Extra check
+ NewTitle,
+ CriCod,
+ RubCod);
+ }
+
+/*****************************************************************************/
+/********************* Update criterion value in database ********************/
+/*****************************************************************************/
+
+void Rub_DB_UpdateCriterionValue (long CriCod,long RubCod,
+ RubCri_ValueRange_t ValueRange,double Value)
+ {
+ Str_SetDecimalPointToUS (); // To write the decimal point as a dot
+ DB_QueryUPDATE ("can not update the value of a criterion",
+ "UPDATE rub_criteria"
+ " SET %s=%.15lg"
+ " WHERE CriCod=%ld"
+ " AND RubCod=%ld", // Extra check
+ RubCri_ValuesFields[ValueRange],Value,
+ CriCod,
+ RubCod);
+ Str_SetDecimalPointToLocal (); // Return to local system
+ }
+
+/*****************************************************************************/
+/************ Update indexes of criteria greater than a given one ************/
+/*****************************************************************************/
+
+void Rub_DB_UpdateCriteriaIndexesInRubricGreaterThan (long RubCod,unsigned CriInd)
{
DB_QueryUPDATE ("can not update indexes of criteria",
"UPDATE rub_criteria"
@@ -405,22 +464,6 @@ unsigned Rub_DB_GetNumCriteriaInRubric (long RubCod)
RubCod);
}
-/*****************************************************************************/
-/*********************** Get the criteria of a rubric ***********************/
-/*****************************************************************************/
-
-unsigned Rub_DB_GetRubricCriteriaBasic (MYSQL_RES **mysql_res,long RubCod)
- {
- return (unsigned)
- DB_QuerySELECT (mysql_res,"can not get rubric criteria",
- "SELECT CriCod," // row[0]
- "CriInd" // row[1]
- " FROM rub_criteria"
- " WHERE RubCod=%ld"
- " ORDER BY CriInd",
- RubCod);
- }
-
/*****************************************************************************/
/********* Get criterion code given rubric and index of criterion ************/
/*****************************************************************************/
@@ -510,24 +553,73 @@ unsigned Rub_DB_GetNextCriterionIndexInRubric (long RubCod,unsigned CriInd)
" FROM rub_criteria"
" WHERE RubCod=%ld"
" AND CriInd>%u",
- Rub_AFTER_LAST_CRITERION, // End of criteria has been reached
+ RubCri_AFTER_LAST_CRITERION, // End of criteria has been reached
RubCod,
CriInd);
}
/*****************************************************************************/
-/****************** Get data of a criterion from database ********************/
+/********************* Get criteria in a given rubric ************************/
/*****************************************************************************/
-unsigned Rub_DB_GetCriterionData (MYSQL_RES **mysql_res,long CriCod)
+unsigned Rub_DB_GetCriteria (MYSQL_RES **mysql_res,long RubCod)
{
return (unsigned)
- DB_QuerySELECT (mysql_res,"can not get a criterion",
- "SELECT Title" // row[0]
+ DB_QuerySELECT (mysql_res,"can not get criteria",
+ "SELECT CriCod," // row[0]
+ "CriInd," // row[1]
+ "%s," // row[2]
+ "%s," // row[3]
+ "Title" // row[4]
" FROM rub_criteria"
- " WHERE CriCod=%ld"
- " AND CrsCod=%ld", // Extra check
- CriCod,
+ " WHERE RubCod=%ld"
+ " ORDER BY CriInd",
+ RubCri_ValuesFields[RubCri_MIN],
+ RubCri_ValuesFields[RubCri_MAX],
+ RubCod);
+ }
+
+/*****************************************************************************/
+/***************** Get rubric criterion data using its code ******************/
+/*****************************************************************************/
+
+unsigned Rub_DB_GetDataOfCriterionByCod (MYSQL_RES **mysql_res,long CriCod)
+ {
+ return (unsigned)
+ DB_QuerySELECT (mysql_res,"can not get criterion data",
+ "SELECT CriCod," // row[0]
+ "RubCod," // row[1]
+ "CriInd," // row[2]
+ "%s," // row[3]
+ "%s," // row[4]
+ "Title" // row[5]
+ " FROM rub_criteria"
+ " WHERE CriCod=%ld",
+ RubCri_ValuesFields[RubCri_MIN],
+ RubCri_ValuesFields[RubCri_MAX],
+ CriCod);
+ }
+
+/*****************************************************************************/
+/************** Check if the title of a rubric criterion exists **************/
+/*****************************************************************************/
+
+bool Rub_DB_CheckIfSimilarCriterionExists (const struct RubCri_Criterion *Criterion,
+ const char Title[RubCri_MAX_BYTES_TITLE + 1])
+ {
+ return
+ DB_QueryEXISTS ("can not check similar criterion",
+ "SELECT EXISTS"
+ "(SELECT *"
+ " FROM rub_criteria,"
+ "rub_rubrics"
+ " WHERE rub_criteria.ExaCod=%ld"
+ " AND rub_criteria.Title='%s'"
+ " AND rub_criteria.SetCod<>%ld"
+ " AND rub_criteria.ExaCod=rub_rubrics.ExaCod"
+ " AND rub_rubrics.CrsCod=%ld)", // Extra check
+ Criterion->RubCod,Title,
+ Criterion->CriCod,
Gbl.Hierarchy.Crs.CrsCod);
}
@@ -634,15 +726,15 @@ double Rub_DB_GetNumCriteriaPerRubric (HieLvl_Level_t Scope)
/*********************** Remove criterion from a rubric **********************/
/*****************************************************************************/
-void Rub_DB_RemoveCriterionFromRubric (long RubCod,unsigned CriInd)
+void Rub_DB_RemoveCriterionFromRubric (long CriCod,long RubCod)
{
- DB_QueryDELETE ("can not remove a criterion",
+ DB_QueryDELETE ("can not remove rubric criterion",
"DELETE FROM rub_criteria"
- " WHERE RubCod=%ld"
- " AND CriInd=%u",
- RubCod,
- CriInd);
- }
+ " WHERE CriCod=%ld"
+ " AND RubCod=%ld",
+ CriCod,
+ RubCod);
+ }
/*****************************************************************************/
/**************************** Remove rubric criteria *************************/
diff --git a/swad_rubric_database.h b/swad_rubric_database.h
index 6e55b292..23055f29 100644
--- a/swad_rubric_database.h
+++ b/swad_rubric_database.h
@@ -31,6 +31,7 @@
#include "swad_game.h"
#include "swad_hierarchy_level.h"
+#include "swad_rubric_type.h"
/*****************************************************************************/
/***************************** Public prototypes *****************************/
@@ -53,22 +54,29 @@ void Rub_DB_RemoveRubric (long RubCod);
void Rub_DB_RemoveCrsRubrics (long CrsCod);
//--------------------------- Rubric criteria -------------------------------
-void Rub_DB_InsertCriterionInRubric (long RubCod,unsigned CriInd,long CriCod);
-void Rub_DB_UpdateIndexesOfCriteriaGreaterThan (long RubCod,unsigned CriInd);
+long Rub_DB_CreateCriterion (const struct RubCri_Criterion *Criterion);
+void Rub_DB_UpdateCriterionTitle (long CriCod,long RubCod,
+ const char NewTitle[RubCri_MAX_BYTES_TITLE + 1]);
+void Rub_DB_UpdateCriterionValue (long CriCod,long RubCod,
+ RubCri_ValueRange_t ValueRange,double Value);
+void Rub_DB_UpdateCriteriaIndexesInRubricGreaterThan (long RubCod,unsigned CriInd);
void Rub_DB_UpdateCriterionIndex (long CriInd,long RubCod,long CriCod);
void Rub_DB_LockTable (void);
unsigned Rub_DB_GetNumCriteriaInRubric (long RubCod);
-unsigned Rub_DB_GetRubricCriteriaBasic (MYSQL_RES **mysql_res,long RubCod);
long Rub_DB_GetCriCodFromCriInd (long RubCod,unsigned QstInd);
unsigned Rub_DB_GetCriIndFromCriCod (long RubCod,long QstCod);
unsigned Rub_DB_GetMaxCriterionIndexInRubric (long RubCod);
unsigned Rub_DB_GetPrevCriterionIndexInRubric (long RubCod,unsigned QstInd);
unsigned Rub_DB_GetNextCriterionIndexInRubric (long RubCod,unsigned QstInd);
-unsigned Rub_DB_GetCriterionData (MYSQL_RES **mysql_res,long CriCod);
+unsigned Rub_DB_GetCriteria (MYSQL_RES **mysql_res,long RubCod);
+unsigned Rub_DB_GetDataOfCriterionByCod (MYSQL_RES **mysql_res,long CriCod);
+bool Rub_DB_CheckIfSimilarCriterionExists (const struct RubCri_Criterion *Criterion,
+ const char Title[RubCri_MAX_BYTES_TITLE + 1]);
+
double Rub_DB_GetNumCriteriaPerRubric (HieLvl_Level_t Scope);
-void Rub_DB_RemoveCriterionFromRubric (long RubCod,unsigned CriInd);
+void Rub_DB_RemoveCriterionFromRubric (long CriCod,long RubCod);
void Rub_DB_RemoveRubricCriteria (long RubCod);
void Rub_DB_RemoveCrsRubricCriteria (long CrsCod);
diff --git a/swad_rubric_type.h b/swad_rubric_type.h
new file mode 100644
index 00000000..76c81e40
--- /dev/null
+++ b/swad_rubric_type.h
@@ -0,0 +1,85 @@
+// swad_rubric_type.h: definition of types for rubrics
+
+#ifndef _SWAD_RUB_TYP
+#define _SWAD_RUB_TYP
+/*
+ SWAD (Shared Workspace At a Distance),
+ is a web platform developed at the University of Granada (Spain),
+ and used to support university teaching.
+
+ This file is part of SWAD core.
+ Copyright (C) 1999-2023 Antonio Cañas Vargas
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General 3 License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see .
+*/
+
+/*****************************************************************************/
+/********************************* Headers ***********************************/
+/*****************************************************************************/
+
+#include // For boolean type
+
+#include "swad_date.h"
+#include "swad_hierarchy_level.h"
+#include "swad_string.h"
+
+/*****************************************************************************/
+/************************** Public types and constants ***********************/
+/*****************************************************************************/
+
+#define Rub_MAX_CHARS_TITLE (128 - 1) // 127
+#define Rub_MAX_BYTES_TITLE ((Rub_MAX_CHARS_TITLE + 1) * Str_MAX_BYTES_PER_CHAR - 1) // 2047
+
+#define RubCri_MAX_CHARS_TITLE (128 - 1) // 127
+#define RubCri_MAX_BYTES_TITLE ((RubCri_MAX_CHARS_TITLE + 1) * Str_MAX_BYTES_PER_CHAR - 1) // 2047
+
+#define RubCri_NUM_VALUES 2
+typedef enum
+ {
+ RubCri_MIN = 0,
+ RubCri_MAX = 1,
+ } RubCri_ValueRange_t;
+
+struct Rub_Rubric
+ {
+ long RubCod; // Rubric code
+ long CrsCod; // Course code
+ long UsrCod; // Author code
+ char Title[Rub_MAX_BYTES_TITLE + 1];
+ unsigned NumCriteria; // Number of criteria in the rubric
+ };
+
+struct Rub_Rubrics
+ {
+ bool LstIsRead; // Is the list already read from database...
+ // ...or it needs to be read?
+ unsigned Num; // Total number of rubrics
+ long *Lst; // List of rubric codes
+ unsigned CurrentPage;
+ struct Rub_Rubric Rubric; // Selected/current rubric
+ long CriCod; // Selected/current criterion code
+ unsigned CriInd; // Current citerion index
+ long QstCod; // Current question code
+ };
+
+struct RubCri_Criterion
+ {
+ long RubCod; // Rubric code
+ long CriCod; // Criterion code
+ unsigned CriInd; // Criterion index (position in the rubric)
+ double Values[RubCri_NUM_VALUES];
+ char Title[RubCri_MAX_BYTES_TITLE + 1]; // Title of the criterion
+ };
+
+#endif
diff --git a/swad_survey.c b/swad_survey.c
index 368194eb..f4ad8a19 100644
--- a/swad_survey.c
+++ b/swad_survey.c
@@ -1634,7 +1634,7 @@ void Svy_UnhideSurvey (void)
/********************* Put a form to create a new survey *********************/
/*****************************************************************************/
-void Svy_RequestCreatOrEditSvy (void)
+void Svy_ReqCreatOrEditSvy (void)
{
extern const char *Hlp_ANALYTICS_Surveys_new_survey;
extern const char *Hlp_ANALYTICS_Surveys_edit_survey;
@@ -2093,7 +2093,7 @@ void Svy_ReceiveFormSurvey (void)
Grp_FreeListCodSelectedGrps ();
}
else
- Svy_RequestCreatOrEditSvy ();
+ Svy_ReqCreatOrEditSvy ();
/***** Notify by email about the new survey *****/
if (NewSvy.Scope == HieLvl_CRS) // Notify only the surveys for a course, not for a degree or global
@@ -2248,7 +2248,7 @@ void Svy_RemoveSurveys (HieLvl_Level_t Scope,long Cod)
/*********** Put a form to edit/create a question in survey *****************/
/*****************************************************************************/
-void Svy_RequestEditQuestion (void)
+void Svy_ReqEditQuestion (void)
{
struct Svy_Surveys Surveys;
struct Svy_Question SvyQst;
@@ -3104,7 +3104,7 @@ static void Svy_PutParsRemoveOneQst (void *Surveys)
/********************** Request the removal of a question ********************/
/*****************************************************************************/
-void Svy_RequestRemoveQst (void)
+void Svy_ReqRemQst (void)
{
extern const char *Txt_Do_you_really_want_to_remove_the_question_X;
extern const char *Txt_Remove_question;
diff --git a/swad_survey.h b/swad_survey.h
index 05414d01..1f4c293e 100644
--- a/swad_survey.h
+++ b/swad_survey.h
@@ -93,7 +93,7 @@ void Svy_SeeAllSurveys (void);
void Svy_ListAllSurveys (struct Svy_Surveys *Surveys);
void Svy_SeeOneSurvey (void);
void Svy_PutParSvyOrder (Dat_StartEndTime_t SelectedOrder);
-void Svy_RequestCreatOrEditSvy (void);
+void Svy_ReqCreatOrEditSvy (void);
void Svy_GetDataOfSurveyByCod (struct Svy_Survey *Svy);
void Svy_GetDataOfSurveyByFolder (struct Svy_Survey *Svy);
void Svy_FreeListSurveys (struct Svy_Surveys *Surveys);
@@ -109,10 +109,10 @@ void Svy_UnhideSurvey (void);
void Svy_ReceiveFormSurvey (void);
void Svy_RemoveSurveys (HieLvl_Level_t Scope,long Cod);
-void Svy_RequestEditQuestion (void);
+void Svy_ReqEditQuestion (void);
void Svy_ReceiveQst (void);
-void Svy_RequestRemoveQst (void);
+void Svy_ReqRemQst (void);
void Svy_RemoveQst (void);
void Svy_ReceiveSurveyAnswers (void);
diff --git a/swad_test.c b/swad_test.c
index b9c147bb..43dd1796 100644
--- a/swad_test.c
+++ b/swad_test.c
@@ -94,7 +94,7 @@ static unsigned Tst_GetParNumQsts (void);
/********************* Request a self-assessment test ************************/
/*****************************************************************************/
-void Tst_RequestTest (void)
+void Tst_ReqTest (void)
{
struct Qst_Questions Questions;
diff --git a/swad_test.h b/swad_test.h
index 21cb6176..e56de2b6 100644
--- a/swad_test.h
+++ b/swad_test.h
@@ -58,7 +58,7 @@ typedef enum
/***************************** Public prototypes *****************************/
/*****************************************************************************/
-void Tst_RequestTest (void);
+void Tst_ReqTest (void);
void Tst_ShowNewTest (void);
void Tst_ReceiveTestDraft (void);
diff --git a/swad_test_print.c b/swad_test_print.c
index c5234594..f12e5bc5 100644
--- a/swad_test_print.c
+++ b/swad_test_print.c
@@ -293,7 +293,7 @@ static void TstPrn_WriteQstAndAnsToFill (struct TstPrn_PrintedQuestion *PrintedQ
/***** Number of question and answer type *****/
HTM_TD_Begin ("class=\"RT %s\"",The_GetColorRows ());
- Qst_WriteNumQst (QstInd + 1,"BIG_INDEX");
+ Lay_WriteIndex (QstInd + 1,"BIG_INDEX");
Qst_WriteAnswerType (Question->Answer.Type,"DAT_SMALL");
HTM_TD_End ();
@@ -640,7 +640,7 @@ static void TstPrn_WriteQstAndAnsExam (struct Usr_Data *UsrDat,
/***** Number of question and answer type *****/
HTM_TD_Begin ("class=\"RT %s\"",The_GetColorRows ());
- Qst_WriteNumQst (QstInd + 1,"BIG_INDEX");
+ Lay_WriteIndex (QstInd + 1,"BIG_INDEX");
if (QuestionUneditedAfterExam)
Qst_WriteAnswerType (Question->Answer.Type,"DAT_SMALL");
HTM_TD_End ();
diff --git a/swad_text.c b/swad_text.c
index ad3adabf..7c760416 100644
--- a/swad_text.c
+++ b/swad_text.c
@@ -1621,6 +1621,29 @@ const char *Txt_Alphabetic_BR_code_BR_ISO_3166_1 =
"Alphabetic
code
ISO 3166-1"; // Çeviri lazim!
#endif
+const char *Txt_Already_existed_a_criterion_in_this_rubric_with_the_title_X = // Warning: it is very important to include %s in the following sentences
+#if L==1 // ca
+ "Ja existia un criteri en aquesta rúbrica amb el títol %s.";
+#elif L==2 // de
+ "In dieser Rubrik existierte bereits ein Kriterium mit dem Titel %s.";
+#elif L==3 // en
+ "Already existed a criterion in this rubric with the title %s.";
+#elif L==4 // es
+ "Ya existía un criterio en esta rúbrica con el título %s.";
+#elif L==5 // fr
+ "Il existe déjà un critère dans cette rubrique avec le titre %s.";
+#elif L==6 // gn
+ "Ya existía un criterio en esta rúbrica con el título %s."; // Okoteve traducción
+#elif L==7 // it
+ "Esiste già un criterio in questa rubrica con il titolo %s.";
+#elif L==8 // pl
+ "Było już kryterium w tej rubryce z tytułem %s.";
+#elif L==9 // pt
+ "Já existia um critério nesta rubrica com o título %s.";
+#elif L==10 // tr
+ "Bu değerlendirme tablosunda %s başlıklı bir ölçüt zaten vardı.";
+#endif
+
const char *Txt_Already_existed_a_game_with_the_title_X = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca
"Ja existia un joc amb el títol %s.";
@@ -6730,6 +6753,29 @@ const char *Txt_Create_course =
"Create course"; // Çeviri lazim!
#endif
+const char *Txt_Create_criterion =
+#if L==1 // ca
+ "Crear criteri";
+#elif L==2 // de
+ "Kriterium eingeben";
+#elif L==3 // en
+ "Create criterion";
+#elif L==4 // es
+ "Crear criterio";
+#elif L==5 // fr
+ "Créer critère";
+#elif L==6 // gn
+ "Crear criterio"; // Okoteve traducción
+#elif L==7 // it
+ "Crear criterio";
+#elif L==8 // pl
+ "Utwórz kryterium";
+#elif L==9 // pt
+ "Criar critério";
+#elif L==10 // tr
+ "Ölçüt oluştur";
+#endif
+
const char *Txt_Create_degree =
#if L==1 // ca
"Crear titulació";
@@ -7417,7 +7463,7 @@ const char *Txt_Created_new_assignment_X = // Warning: it is very important to i
#elif L==9 // pt
"Criada nova atividade %s.";
#elif L==10 // tr
- "Created new assignment %s."; // Çeviri lazim!
+ "Yeni atama %s oluşturuldu.";
#endif
const char *Txt_Created_new_banner_X = // Warning: it is very important to include %s in the following sentences
@@ -7440,7 +7486,7 @@ const char *Txt_Created_new_banner_X = // Warning: it is very important to inclu
#elif L==9 // pt
"Criado novo banner %s.";
#elif L==10 // tr
- "Created new banner %s."; // Çeviri lazim!
+ "Yeni banner %s oluşturuldu.";
#endif
const char *Txt_Created_new_building_X = // Warning: it is very important to include %s in the following sentences
@@ -7463,7 +7509,7 @@ const char *Txt_Created_new_building_X = // Warning: it is very important to inc
#elif L==9 // pt
"Criado novo edifício %s.";
#elif L==10 // tr
- "Created new building %s."; // Çeviri lazim!
+ "Yeni bina %s oluşturuldu.";
#endif
const char *Txt_Created_new_call_for_exam =
@@ -7486,7 +7532,7 @@ const char *Txt_Created_new_call_for_exam =
#elif L==9 // pt
"Criado nova chamada para exame.";
#elif L==10 // tr
- "Created new call for exam."; // Çeviri lazim!
+ "Sınav için yeni çağrı oluşturuldu.";
#endif
const char *Txt_Created_new_center_X = // Warning: it is very important to include %s in the following sentences
@@ -7509,7 +7555,7 @@ const char *Txt_Created_new_center_X = // Warning: it is very important to inclu
#elif L==9 // pt
"Criado novo centro %s.";
#elif L==10 // tr
- "Created new center %s."; // Çeviri lazim!
+ "Yeni merkez %s oluşturuldu.";
#endif
const char *Txt_Created_new_country_X = // Warning: it is very important to include %s in the following sentences
@@ -7532,7 +7578,7 @@ const char *Txt_Created_new_country_X = // Warning: it is very important to incl
#elif L==9 // pt
"Criado novo país %s.";
#elif L==10 // tr
- "Created new country %s."; // Çeviri lazim!
+ "Yeni ülke %s oluşturuldu.";
#endif
const char *Txt_Created_new_course_X = // Warning: it is very important to include %s in the following sentences
@@ -7555,7 +7601,30 @@ const char *Txt_Created_new_course_X = // Warning: it is very important to inclu
#elif L==9 // pt
"Criada nova disciplina %s.";
#elif L==10 // tr
- "Created new course %s."; // Çeviri lazim!
+ "Yeni kurs %s oluşturuldu.";
+#endif
+
+const char *Txt_Created_new_criterion_X = // Warning: it is very important to include %s in the following sentences
+#if L==1 // ca
+ "Creat nou criteri %s.";
+#elif L==2 // de
+ "Neues Kriterium %s eingegeben.";
+#elif L==3 // en
+ "Created new criterion %s.";
+#elif L==4 // es
+ "Creado nuevo criterio %s.";
+#elif L==5 // fr
+ "Créé nouveau critère %s.";
+#elif L==6 // gn
+ "Creado nuevo criterio %s."; // Okoteve traducción
+#elif L==7 // it
+ "Creato nuovo criterio %s.";
+#elif L==8 // pl
+ "Utworzono nowe kryterium %s.";
+#elif L==9 // pt
+ "Criado novo critério %s.";
+#elif L==10 // tr
+ "Yeni kriter %s oluşturuldu.";
#endif
const char *Txt_Created_new_degree_X = // Warning: it is very important to include %s in the following sentences
@@ -7578,7 +7647,7 @@ const char *Txt_Created_new_degree_X = // Warning: it is very important to inclu
#elif L==9 // pt
"Criada novo grau %s.";
#elif L==10 // tr
- "Created new degree %s."; // Çeviri lazim!
+ "Yeni derece %s oluşturuldu.";
#endif
const char *Txt_Created_new_department_X = // Warning: it is very important to include %s in the following sentences
@@ -7601,7 +7670,7 @@ const char *Txt_Created_new_department_X = // Warning: it is very important to i
#elif L==9 // pt
"Criado novo departamento %s.";
#elif L==10 // tr
- "Created new department %s."; // Çeviri lazim!
+ "Yeni departman %s oluşturuldu.";
#endif
const char *Txt_Created_new_email_domain_X = // Warning: it is very important to include %s in the following sentences
@@ -7624,7 +7693,7 @@ const char *Txt_Created_new_email_domain_X = // Warning: it is very important to
#elif L==9 // pt
"Criado novo domínio de email %s.";
#elif L==10 // tr
- "Created new email domain %s."; // Çeviri lazim!
+ "Yeni e-posta etki alanı %s oluşturuldu.";
#endif
const char *Txt_Created_new_event_X = // Warning: it is very important to include %s in the following sentences
@@ -7647,7 +7716,7 @@ const char *Txt_Created_new_event_X = // Warning: it is very important to includ
#elif L==9 // pt
"Criado novo evento %s.";
#elif L==10 // tr
- "Created new event %s."; // Çeviri lazim!
+ "Yeni etkinlik %s oluşturuldu.";
#endif
const char *Txt_Created_new_exam_X = // Warning: it is very important to include %s in the following sentences
@@ -7670,7 +7739,7 @@ const char *Txt_Created_new_exam_X = // Warning: it is very important to include
#elif L==9 // pt
"Criado novo exame %s.";
#elif L==10 // tr
- "Created new exam %s."; // Çeviri lazim!
+ "Yeni sınav %s oluşturuldu.";
#endif
const char *Txt_Created_new_game_X = // Warning: it is very important to include %s in the following sentences
@@ -7693,7 +7762,7 @@ const char *Txt_Created_new_game_X = // Warning: it is very important to include
#elif L==9 // pt
"Criado novo jogo %s.";
#elif L==10 // tr
- "Created new game %s."; // Çeviri lazim!
+ "Yeni oyun %s oluşturuldu.";
#endif
const char *Txt_Created_new_group_X = // Warning: it is very important to include %s in the following sentences
@@ -7716,7 +7785,7 @@ const char *Txt_Created_new_group_X = // Warning: it is very important to includ
#elif L==9 // pt
"Criado novo grupo %s.";
#elif L==10 // tr
- "Created new group %s."; // Çeviri lazim!
+ "Yeni grup %s oluşturuldu.";
#endif
const char *Txt_Created_new_holiday_X = // Warning: it is very important to include %s in the following sentences
@@ -7739,7 +7808,7 @@ const char *Txt_Created_new_holiday_X = // Warning: it is very important to incl
#elif L==9 // pt
"Criado nova féria %s.";
#elif L==10 // tr
- "Created new holiday %s."; // Çeviri lazim!
+ "Yeni tatil %s oluşturuldu.";
#endif
const char *Txt_Created_new_institution_X = // Warning: it is very important to include %s in the following sentences
@@ -7762,7 +7831,7 @@ const char *Txt_Created_new_institution_X = // Warning: it is very important to
#elif L==9 // pt
"Criada nova institução %s.";
#elif L==10 // tr
- "Created new institution %s."; // Çeviri lazim!
+ "Yeni kurum %s oluşturuldu.";
#endif
const char *Txt_Created_new_link_X = // Warning: it is very important to include %s in the following sentences
@@ -7785,7 +7854,7 @@ const char *Txt_Created_new_link_X = // Warning: it is very important to include
#elif L==9 // pt
"Criado nova ligação %s.";
#elif L==10 // tr
- "Created new link %s."; // Çeviri lazim!
+ "Yeni bağlantı %s oluşturuldu.";
#endif
const char *Txt_Created_new_place_X = // Warning: it is very important to include %s in the following sentences
@@ -7808,7 +7877,7 @@ const char *Txt_Created_new_place_X = // Warning: it is very important to includ
#elif L==9 // pt
"Criado nova localização %s.";
#elif L==10 // tr
- "Created new place %s."; // Çeviri lazim!
+ "Yeni yer %s oluşturuldu.";
#endif
const char *Txt_Created_new_plugin_X = // Warning: it is very important to include %s in the following sentences
@@ -7831,7 +7900,7 @@ const char *Txt_Created_new_plugin_X = // Warning: it is very important to inclu
#elif L==9 // pt
"Criado novo plugin %s.";
#elif L==10 // tr
- "Created new plugin %s."; // Çeviri lazim!
+ "Yeni eklenti %s oluşturuldu.";
#endif
const char *Txt_Created_new_project_X = // Warning: it is very important to include %s in the following sentences
@@ -7854,7 +7923,7 @@ const char *Txt_Created_new_project_X = // Warning: it is very important to incl
#elif L==9 // pt
"Criado novo projeto %s.";
#elif L==10 // tr
- "Created new project %s."; // Çeviri lazim!
+ "Yeni proje %s oluşturuldu.";
#endif
const char *Txt_Created_new_record_field_X = // Warning: it is very important to include %s in the following sentences
@@ -7877,7 +7946,7 @@ const char *Txt_Created_new_record_field_X = // Warning: it is very important to
#elif L==9 // pt
"Criado novo campo de cartão %s.";
#elif L==10 // tr
- "Created new record field %s."; // Çeviri lazim!
+ "Yeni kayıt alanı %s oluşturuldu.";
#endif
const char *Txt_Created_new_room_X = // Warning: it is very important to include %s in the following sentences
@@ -7900,7 +7969,7 @@ const char *Txt_Created_new_room_X = // Warning: it is very important to include
#elif L==9 // pt
"Criada nova sala %s.";
#elif L==10 // tr
- "Created new room %s."; // Çeviri lazim!
+ "Yeni oda %s oluşturuldu.";
#endif
const char *Txt_Created_new_rubric_X = // Warning: it is very important to include %s in the following sentences
@@ -7946,7 +8015,7 @@ const char *Txt_Created_new_set_of_questions_X = // Warning: it is very importan
#elif L==9 // pt
"Criado novo conjunto de perguntas %s.";
#elif L==10 // tr
- "Created new set of questions %s."; // Çeviri lazim!
+ "Yeni soru grubu %s oluşturuldu.";
#endif
const char *Txt_Created_new_survey_X = // Warning: it is very important to include %s in the following sentences
@@ -7969,7 +8038,7 @@ const char *Txt_Created_new_survey_X = // Warning: it is very important to inclu
#elif L==9 // pt
"Criado novo inquérito %s.";
#elif L==10 // tr
- "Created new survey %s."; // Çeviri lazim!
+ "Yeni anket %s oluşturuldu.";
#endif
const char *Txt_Created_new_type_of_degree_X = // Warning: it is very important to include %s in the following sentences
@@ -7992,7 +8061,7 @@ const char *Txt_Created_new_type_of_degree_X = // Warning: it is very important
#elif L==9 // pt
"Criado novo tipo de grau %s.";
#elif L==10 // tr
- "Created new type of degree %s."; // Çeviri lazim!
+ "Yeni tip derecesi %s oluşturuldu.";
#endif
const char *Txt_Created_new_type_of_group_X = // Warning: it is very important to include %s in the following sentences
@@ -8015,7 +8084,7 @@ const char *Txt_Created_new_type_of_group_X = // Warning: it is very important t
#elif L==9 // pt
"Criado novo tipo de grupo %s.";
#elif L==10 // tr
- "Created new type of group %s."; // Çeviri lazim!
+ "Yeni tip grubu %s oluşturuldu.";
#endif
const char *Txt_Created_tables_in_the_database_that_did_not_exist =
@@ -10225,6 +10294,29 @@ const char *Txt_Do_you_really_want_to_remove_the_assignment_X = // Warning: it i
"Do you really want to remove the assignment %s?"; // Çeviri lazim!
#endif
+const char *Txt_Do_you_really_want_to_remove_the_criterion_X = // Warning: it is very important to include %s in the following sentences
+#if L==1 // ca
+ "De veres voleu eliminar el criteri %s?";
+#elif L==2 // de
+ "Wollen Sie der Kriterium %s wirklich entfernen?";
+#elif L==3 // en
+ "Do you really want to remove the criterion %s?";
+#elif L==4 // es
+ "¿Realmente desea eliminar el criterio %s?";
+#elif L==5 // fr
+ "Voulez-vous vraiment supprimer le critère %s?";
+#elif L==6 // gn
+ "¿Realmente desea eliminar el criterio %s?"; // Okoteve traducción
+#elif L==7 // it
+ "Vuoi realmente rimuovere il criterio %s?";
+#elif L==8 // pl
+ "Czy na pewno chcesz usunąć kryterium %s?";
+#elif L==9 // pt
+ "Você realmente deseja remover o critério %s?";
+#elif L==10 // tr
+ "%s kriterini gerçekten kaldırmak istiyor musunuz?";
+#endif
+
const char *Txt_Do_you_really_want_to_remove_the_entire_thread =
#if L==1 // ca
"De veres voleu eliminar tota la discusió?";
@@ -20863,6 +20955,29 @@ const char *Txt_Max_BR_students =
"Max.
stud."; // Çeviri lazim!
#endif
+const char *Txt_Maximum =
+#if L==1 // ca
+ "Màxim";
+#elif L==2 // de
+ "Maximum";
+#elif L==3 // en
+ "Maximum";
+#elif L==4 // es
+ "Máximo";
+#elif L==5 // fr
+ "Maximum";
+#elif L==6 // gn
+ "Máximo"; // Okoteve traducción
+#elif L==7 // it
+ "Massimo";
+#elif L==8 // pl
+ "Maksimum";
+#elif L==9 // pt
+ "Máximo";
+#elif L==10 // tr
+ "Maksimum";
+#endif
+
const char *Txt_maximum =
#if L==1 // ca
"màxim";
@@ -20883,7 +20998,7 @@ const char *Txt_maximum =
#elif L==9 // pt
"máximo";
#elif L==10 // tr
- "maximum"; // Çeviri lazim!
+ "maksimum";
#endif
const char *Txt_Maximum_grade =
@@ -20906,7 +21021,7 @@ const char *Txt_Maximum_grade =
#elif L==9 // pt
"Nota máxima";
#elif L==10 // tr
- "Maximum grade"; // Çeviri lazim!
+ "Maksimum derece";
#endif
const char *Txt_Members = // Project members
@@ -23448,9 +23563,32 @@ const char *Txt_Messages_sent_from_A_COURSE =
"Messages sent from"; // Çeviri lazim!
#endif
+const char *Txt_Minimum =
+#if L==1 // ca
+ "Mínim";
+#elif L==2 // de
+ "Mindest";
+#elif L==3 // en
+ "Minimum";
+#elif L==4 // es
+ "Mínimo";
+#elif L==5 // fr
+ "Minimum";
+#elif L==6 // gn
+ "Mínimo"; // Okoteve traducción
+#elif L==7 // it
+ "Minimo";
+#elif L==8 // pl
+ "Minimum";
+#elif L==9 // pt
+ "Mínimo";
+#elif L==10 // tr
+ "Asgari";
+#endif
+
const char *Txt_minimum =
#if L==1 // ca
- "mínimo"; // Necessita traducció
+ "mínim";
#elif L==2 // de
"Mindest";
#elif L==3 // en
@@ -23468,7 +23606,7 @@ const char *Txt_minimum =
#elif L==9 // pt
"mínimo";
#elif L==10 // tr
- "minimum"; // Çeviri lazim!
+ "asgari";
#endif
const char *Txt_Minimum_time_seconds_per_question_between_two_tests =
@@ -35035,6 +35173,29 @@ const char *Txt_Remove_assignment =
"Atamayı kaldır";
#endif
+const char *Txt_Remove_criterion =
+#if L==1 // ca
+ "Eliminar criteri";
+#elif L==2 // de
+ "Kriterium entfernen";
+#elif L==3 // en
+ "Remove criterion";
+#elif L==4 // es
+ "Eliminar criterio";
+#elif L==5 // fr
+ "Supprimer critère";
+#elif L==6 // gn
+ "Eliminar criterio"; // Okoteve traducción
+#elif L==7 // it
+ "Rimuovere criterio";
+#elif L==8 // pl
+ "Usuń kryterium";
+#elif L==9 // pt
+ "Remover critério";
+#elif L==10 // tr
+ "Kriter kaldır";
+#endif
+
const char *Txt_Remove_event =
#if L==1 // ca
"Eliminar esdeveniment";
@@ -52704,7 +52865,7 @@ const char *Txt_The_session_has_expired =
#elif L==10 // tr
"The session has expired."; // Çeviri lazim!
#endif
-
+/*
const char *Txt_The_set_of_questions_has_been_modified =
#if L==1 // ca
"El conjunt de preguntes ha estat modificat.";
@@ -52727,7 +52888,7 @@ const char *Txt_The_set_of_questions_has_been_modified =
#elif L==10 // tr
"Soru seti değiştirildi.";
#endif
-
+*/
const char *Txt_The_size_of_the_file_exceeds_the_maximum_allowed_X = // Warning: it is very important to include %s in the following sentences
#if L==1 // ca
"La mida del fitxer"
diff --git a/swad_timeline_comment.c b/swad_timeline_comment.c
index d0b03797..60be2bf1 100644
--- a/swad_timeline_comment.c
+++ b/swad_timeline_comment.c
@@ -822,7 +822,7 @@ static long TmlCom_ReceiveComm (void)
/**************** Request the removal of a comment in a note *****************/
/*****************************************************************************/
-void TmlCom_RequestRemComUsr (void)
+void TmlCom_ReqRemComUsr (void)
{
struct Tml_Timeline Timeline;
@@ -848,7 +848,7 @@ void TmlCom_RequestRemComUsr (void)
HTM_SECTION_End ();
}
-void TmlCom_RequestRemComGbl (void)
+void TmlCom_ReqRemComGbl (void)
{
struct Tml_Timeline Timeline;
diff --git a/swad_timeline_comment.h b/swad_timeline_comment.h
index 327b142f..e9a1c56d 100644
--- a/swad_timeline_comment.h
+++ b/swad_timeline_comment.h
@@ -65,8 +65,8 @@ void TmlCom_ShowHiddenCommsGbl (void);
void TmlCom_ReceiveCommUsr (void);
void TmlCom_ReceiveCommGbl (void);
-void TmlCom_RequestRemComUsr (void);
-void TmlCom_RequestRemComGbl (void);
+void TmlCom_ReqRemComUsr (void);
+void TmlCom_ReqRemComGbl (void);
void TmlCom_RemoveComUsr (void);
void TmlCom_RemoveComGbl (void);
diff --git a/swad_timeline_note.c b/swad_timeline_note.c
index 3ca529e9..4dd5e7f5 100644
--- a/swad_timeline_note.c
+++ b/swad_timeline_note.c
@@ -111,7 +111,7 @@ static void TmlNot_WriteFavShaRem (const struct Tml_Timeline *Timeline,
static void TmlNot_PutFormToRemoveNote (const struct Tml_Timeline *Timeline,
long NotCod);
-static void TmlNot_RequestRemovalNote (struct Tml_Timeline *Timeline);
+static void TmlNot_ReqRemNote (struct Tml_Timeline *Timeline);
static void TmlNot_PutParsRemoveNote (void *Timeline);
static void TmlNot_RemoveNote (void);
static void TmlNot_RemoveNoteMediaAndDBEntries (struct TmlNot_Note *Not);
@@ -963,7 +963,7 @@ void TmlNot_MarkNotesChildrenOfFolderAsUnavailable (const char *Path)
/*********************** Request the removal of a note ***********************/
/*****************************************************************************/
-void TmlNot_RequestRemNoteUsr (void)
+void TmlNot_ReqRemNoteUsr (void)
{
struct Tml_Timeline Timeline;
@@ -980,7 +980,7 @@ void TmlNot_RequestRemNoteUsr (void)
HTM_SECTION_Begin (Tml_TIMELINE_SECTION_ID);
/***** Request the removal of note *****/
- TmlNot_RequestRemovalNote (&Timeline);
+ TmlNot_ReqRemNote (&Timeline);
/***** Write timeline again (user) *****/
Tml_ShowTimelineUsr (&Timeline);
@@ -989,7 +989,7 @@ void TmlNot_RequestRemNoteUsr (void)
HTM_SECTION_End ();
}
-void TmlNot_RequestRemNoteGbl (void)
+void TmlNot_ReqRemNoteGbl (void)
{
struct Tml_Timeline Timeline;
@@ -997,13 +997,13 @@ void TmlNot_RequestRemNoteGbl (void)
Tml_InitTimelineGbl (&Timeline);
/***** Request the removal of note *****/
- TmlNot_RequestRemovalNote (&Timeline);
+ TmlNot_ReqRemNote (&Timeline);
/***** Write timeline again (global) *****/
Tml_ShowNoteAndTimelineGbl (&Timeline);
}
-static void TmlNot_RequestRemovalNote (struct Tml_Timeline *Timeline)
+static void TmlNot_ReqRemNote (struct Tml_Timeline *Timeline)
{
extern const char *Txt_Do_you_really_want_to_remove_the_following_post;
struct TmlNot_Note Not;
diff --git a/swad_timeline_note.h b/swad_timeline_note.h
index 703799fe..ffaf6cff 100644
--- a/swad_timeline_note.h
+++ b/swad_timeline_note.h
@@ -106,8 +106,8 @@ void TmlNot_StoreAndPublishNoteInternal (TmlNot_Type_t NoteType,long Cod,
void TmlNot_MarkNoteOneFileAsUnavailable (const char *Path);
void TmlNot_MarkNotesChildrenOfFolderAsUnavailable (const char *Path);
-void TmlNot_RequestRemNoteUsr (void);
-void TmlNot_RequestRemNoteGbl (void);
+void TmlNot_ReqRemNoteUsr (void);
+void TmlNot_ReqRemNoteGbl (void);
void TmlNot_RemoveNoteUsr (void);
void TmlNot_RemoveNoteGbl (void);