From d0c3e2da33f4830b17e29d19bf80845179c27d95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Ca=C3=B1as=20Vargas?= Date: Tue, 23 May 2017 20:42:38 +0200 Subject: [PATCH] Version 16.222.1 --- swad_action.c | 60 +++++++++++++++++++-------------------- swad_changelog.h | 3 +- swad_forum.c | 74 +++++++++++++++++++++++++++++++++++++----------- swad_user.c | 10 +++++-- 4 files changed, 97 insertions(+), 50 deletions(-) diff --git a/swad_action.c b/swad_action.c index 6f405ad24..7082714c1 100644 --- a/swad_action.c +++ b/swad_action.c @@ -2664,56 +2664,56 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = /* ActSeeFlr */{1413,-1,TabUnk,ActSeeSocPrf ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,Fol_ListFollowers ,NULL}, /* ActSeeForCrsUsr */{ 345,-1,TabUnk,ActSeeFor ,0x3F8,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowForumTheads ,NULL}, - /* ActSeeForCrsTch */{ 431,-1,TabUnk,ActSeeFor ,0x220,0x204,0x204,0x204,0x204,0x204,0x204,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowForumTheads ,NULL}, + /* ActSeeForCrsTch */{ 431,-1,TabUnk,ActSeeFor ,0x230,0x204,0x204,0x204,0x204,0x204,0x204,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowForumTheads ,NULL}, /* ActSeeForDegUsr */{ 241,-1,TabUnk,ActSeeFor ,0x3F8,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowForumTheads ,NULL}, - /* ActSeeForDegTch */{ 243,-1,TabUnk,ActSeeFor ,0x3E0,0x3C4,0x204,0x204,0x204,0x204,0x204,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowForumTheads ,NULL}, + /* ActSeeForDegTch */{ 243,-1,TabUnk,ActSeeFor ,0x3F0,0x3C4,0x204,0x204,0x204,0x204,0x204,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowForumTheads ,NULL}, /* ActSeeForCtrUsr */{ 901,-1,TabUnk,ActSeeFor ,0x3F8,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowForumTheads ,NULL}, - /* ActSeeForCtrTch */{ 430,-1,TabUnk,ActSeeFor ,0x3E0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowForumTheads ,NULL}, + /* ActSeeForCtrTch */{ 430,-1,TabUnk,ActSeeFor ,0x3F0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowForumTheads ,NULL}, /* ActSeeForInsUsr */{ 725,-1,TabUnk,ActSeeFor ,0x3F8,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowForumTheads ,NULL}, - /* ActSeeForInsTch */{ 724,-1,TabUnk,ActSeeFor ,0x3E0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowForumTheads ,NULL}, + /* ActSeeForInsTch */{ 724,-1,TabUnk,ActSeeFor ,0x3F0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowForumTheads ,NULL}, /* ActSeeForGenUsr */{ 726,-1,TabUnk,ActSeeFor ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowForumTheads ,NULL}, - /* ActSeeForGenTch */{ 723,-1,TabUnk,ActSeeFor ,0x3E0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowForumTheads ,NULL}, + /* ActSeeForGenTch */{ 723,-1,TabUnk,ActSeeFor ,0x3F0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowForumTheads ,NULL}, /* ActSeeForSWAUsr */{ 242,-1,TabUnk,ActSeeFor ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowForumTheads ,NULL}, - /* ActSeeForSWATch */{ 245,-1,TabUnk,ActSeeFor ,0x3E0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowForumTheads ,NULL}, + /* ActSeeForSWATch */{ 245,-1,TabUnk,ActSeeFor ,0x3F0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowForumTheads ,NULL}, /* ActSeePstForCrsUsr*/{ 346,-1,TabUnk,ActSeeFor ,0x3F8,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowThreadPosts ,NULL}, - /* ActSeePstForCrsTch*/{ 347,-1,TabUnk,ActSeeFor ,0x220,0x204,0x204,0x204,0x204,0x204,0x204,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowThreadPosts ,NULL}, + /* ActSeePstForCrsTch*/{ 347,-1,TabUnk,ActSeeFor ,0x230,0x204,0x204,0x204,0x204,0x204,0x204,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowThreadPosts ,NULL}, /* ActSeePstForDegUsr*/{ 255,-1,TabUnk,ActSeeFor ,0x3F8,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowThreadPosts ,NULL}, - /* ActSeePstForDegTch*/{ 291,-1,TabUnk,ActSeeFor ,0x3E0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowThreadPosts ,NULL}, + /* ActSeePstForDegTch*/{ 291,-1,TabUnk,ActSeeFor ,0x3F0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowThreadPosts ,NULL}, /* ActSeePstForCtrUsr*/{ 348,-1,TabUnk,ActSeeFor ,0x3F8,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowThreadPosts ,NULL}, - /* ActSeePstForCtrTch*/{ 902,-1,TabUnk,ActSeeFor ,0x3E0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowThreadPosts ,NULL}, + /* ActSeePstForCtrTch*/{ 902,-1,TabUnk,ActSeeFor ,0x3F0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowThreadPosts ,NULL}, /* ActSeePstForInsUsr*/{ 730,-1,TabUnk,ActSeeFor ,0x3F8,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowThreadPosts ,NULL}, - /* ActSeePstForInsTch*/{ 746,-1,TabUnk,ActSeeFor ,0x3E0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowThreadPosts ,NULL}, + /* ActSeePstForInsTch*/{ 746,-1,TabUnk,ActSeeFor ,0x3F0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowThreadPosts ,NULL}, /* ActSeePstForGenUsr*/{ 727,-1,TabUnk,ActSeeFor ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowThreadPosts ,NULL}, - /* ActSeePstForGenTch*/{ 731,-1,TabUnk,ActSeeFor ,0x3E0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowThreadPosts ,NULL}, + /* ActSeePstForGenTch*/{ 731,-1,TabUnk,ActSeeFor ,0x3F0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowThreadPosts ,NULL}, /* ActSeePstForSWAUsr*/{ 244,-1,TabUnk,ActSeeFor ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowThreadPosts ,NULL}, - /* ActSeePstForSWATch*/{ 246,-1,TabUnk,ActSeeFor ,0x3E0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowThreadPosts ,NULL}, + /* ActSeePstForSWATch*/{ 246,-1,TabUnk,ActSeeFor ,0x3F0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_ShowThreadPosts ,NULL}, /* ActRcvThrForCrsUsr*/{ 350,-1,TabUnk,ActSeeFor ,0x3F8,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, - /* ActRcvThrForCrsTch*/{ 754,-1,TabUnk,ActSeeFor ,0x220,0x204,0x204,0x204,0x204,0x204,0x204,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, + /* ActRcvThrForCrsTch*/{ 754,-1,TabUnk,ActSeeFor ,0x230,0x204,0x204,0x204,0x204,0x204,0x204,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, /* ActRcvThrForDegUsr*/{ 252,-1,TabUnk,ActSeeFor ,0x3F8,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, - /* ActRcvThrForDegTch*/{ 247,-1,TabUnk,ActSeeFor ,0x3E0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, + /* ActRcvThrForDegTch*/{ 247,-1,TabUnk,ActSeeFor ,0x3F0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, /* ActRcvThrForCtrUsr*/{ 903,-1,TabUnk,ActSeeFor ,0x3F8,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, - /* ActRcvThrForCtrTch*/{ 904,-1,TabUnk,ActSeeFor ,0x3E0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, + /* ActRcvThrForCtrTch*/{ 904,-1,TabUnk,ActSeeFor ,0x3F0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, /* ActRcvThrForInsUsr*/{ 737,-1,TabUnk,ActSeeFor ,0x3F8,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, - /* ActRcvThrForInsTch*/{ 769,-1,TabUnk,ActSeeFor ,0x3E0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, + /* ActRcvThrForInsTch*/{ 769,-1,TabUnk,ActSeeFor ,0x3F0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, /* ActRcvThrForGenUsr*/{ 736,-1,TabUnk,ActSeeFor ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, - /* ActRcvThrForGenTch*/{ 765,-1,TabUnk,ActSeeFor ,0x3E0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, + /* ActRcvThrForGenTch*/{ 765,-1,TabUnk,ActSeeFor ,0x3F0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, /* ActRcvThrForSWAUsr*/{ 258,-1,TabUnk,ActSeeFor ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, - /* ActRcvThrForSWATch*/{ 259,-1,TabUnk,ActSeeFor ,0x3E0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, + /* ActRcvThrForSWATch*/{ 259,-1,TabUnk,ActSeeFor ,0x3F0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, /* ActRcvRepForCrsUsr*/{ 599,-1,TabUnk,ActSeeFor ,0x3F8,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, - /* ActRcvRepForCrsTch*/{ 755,-1,TabUnk,ActSeeFor ,0x220,0x204,0x204,0x204,0x204,0x204,0x204,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, + /* ActRcvRepForCrsTch*/{ 755,-1,TabUnk,ActSeeFor ,0x230,0x204,0x204,0x204,0x204,0x204,0x204,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, /* ActRcvRepForDegUsr*/{ 606,-1,TabUnk,ActSeeFor ,0x3F8,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, - /* ActRcvRepForDegTch*/{ 617,-1,TabUnk,ActSeeFor ,0x3E0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, + /* ActRcvRepForDegTch*/{ 617,-1,TabUnk,ActSeeFor ,0x3F0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, /* ActRcvRepForCtrUsr*/{ 905,-1,TabUnk,ActSeeFor ,0x3F8,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, - /* ActRcvRepForCtrTch*/{ 906,-1,TabUnk,ActSeeFor ,0x3E0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, + /* ActRcvRepForCtrTch*/{ 906,-1,TabUnk,ActSeeFor ,0x3F0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, /* ActRcvRepForInsUsr*/{ 740,-1,TabUnk,ActSeeFor ,0x3F8,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, - /* ActRcvRepForInsTch*/{ 770,-1,TabUnk,ActSeeFor ,0x3E0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, + /* ActRcvRepForInsTch*/{ 770,-1,TabUnk,ActSeeFor ,0x3F0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, /* ActRcvRepForGenUsr*/{ 747,-1,TabUnk,ActSeeFor ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, - /* ActRcvRepForGenTch*/{ 816,-1,TabUnk,ActSeeFor ,0x3E0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, + /* ActRcvRepForGenTch*/{ 816,-1,TabUnk,ActSeeFor ,0x3F0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, /* ActRcvRepForSWAUsr*/{ 603,-1,TabUnk,ActSeeFor ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, - /* ActRcvRepForSWATch*/{ 622,-1,TabUnk,ActSeeFor ,0x3E0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, + /* ActRcvRepForSWATch*/{ 622,-1,TabUnk,ActSeeFor ,0x3F0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_DATA,Act_THIS_WINDOW,NULL ,For_ReceiveForumPost ,NULL}, /* ActReqDelThrCrsUsr*/{ 867,-1,TabUnk,ActSeeFor ,0x220,0x204,0x204,0x204,0x204,0x204,0x204,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_RequestRemoveThread ,NULL}, /* ActReqDelThrCrsTch*/{ 869,-1,TabUnk,ActSeeFor ,0x220,0x204,0x204,0x204,0x204,0x204,0x204,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_RequestRemoveThread ,NULL}, @@ -2768,17 +2768,17 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] = /* ActPasThrForSWATch*/{ 947,-1,TabUnk,ActSeeFor ,0x200,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_PasteThread ,NULL}, /* ActDelPstForCrsUsr*/{ 602,-1,TabUnk,ActSeeFor ,0x238,0x204,0x204,0x204,0x204,0x204,0x204,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_RemovePost ,NULL}, - /* ActDelPstForCrsTch*/{ 756,-1,TabUnk,ActSeeFor ,0x220,0x204,0x204,0x204,0x204,0x204,0x204,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_RemovePost ,NULL}, + /* ActDelPstForCrsTch*/{ 756,-1,TabUnk,ActSeeFor ,0x230,0x204,0x204,0x204,0x204,0x204,0x204,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_RemovePost ,NULL}, /* ActDelPstForDegUsr*/{ 608,-1,TabUnk,ActSeeFor ,0x3F8,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_RemovePost ,NULL}, - /* ActDelPstForDegTch*/{ 680,-1,TabUnk,ActSeeFor ,0x3E0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_RemovePost ,NULL}, + /* ActDelPstForDegTch*/{ 680,-1,TabUnk,ActSeeFor ,0x3F0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_RemovePost ,NULL}, /* ActDelPstForCtrUsr*/{ 948,-1,TabUnk,ActSeeFor ,0x3F8,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_RemovePost ,NULL}, - /* ActDelPstForCtrTch*/{ 949,-1,TabUnk,ActSeeFor ,0x3E0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_RemovePost ,NULL}, + /* ActDelPstForCtrTch*/{ 949,-1,TabUnk,ActSeeFor ,0x3F0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_RemovePost ,NULL}, /* ActDelPstForInsUsr*/{ 743,-1,TabUnk,ActSeeFor ,0x3F8,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_RemovePost ,NULL}, - /* ActDelPstForInsTch*/{ 772,-1,TabUnk,ActSeeFor ,0x3E0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_RemovePost ,NULL}, + /* ActDelPstForInsTch*/{ 772,-1,TabUnk,ActSeeFor ,0x3F0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_RemovePost ,NULL}, /* ActDelPstForGenUsr*/{ 735,-1,TabUnk,ActSeeFor ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_RemovePost ,NULL}, - /* ActDelPstForGenTch*/{ 950,-1,TabUnk,ActSeeFor ,0x3E0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_RemovePost ,NULL}, + /* ActDelPstForGenTch*/{ 950,-1,TabUnk,ActSeeFor ,0x3F0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_RemovePost ,NULL}, /* ActDelPstForSWAUsr*/{ 613,-1,TabUnk,ActSeeFor ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_RemovePost ,NULL}, - /* ActDelPstForSWATch*/{ 623,-1,TabUnk,ActSeeFor ,0x3E0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_RemovePost ,NULL}, + /* ActDelPstForSWATch*/{ 623,-1,TabUnk,ActSeeFor ,0x3F0,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,0x3C4,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_RemovePost ,NULL}, /* ActEnbPstForCrsUsr*/{ 624,-1,TabUnk,ActSeeFor ,0x220,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_EnablePost ,NULL}, /* ActEnbPstForCrsTch*/{ 951,-1,TabUnk,ActSeeFor ,0x220,0x200,0x200,0x200,0x200,0x200,0x200,Act_CONT_NORM,Act_THIS_WINDOW,NULL ,For_EnablePost ,NULL}, diff --git a/swad_changelog.h b/swad_changelog.h index 1751c70aa..783874aec 100644 --- a/swad_changelog.h +++ b/swad_changelog.h @@ -233,13 +233,14 @@ /****************************** Public constants *****************************/ /*****************************************************************************/ -#define Log_PLATFORM_VERSION "SWAD 16.222 (2017-05-23)" +#define Log_PLATFORM_VERSION "SWAD 16.222.1 (2017-05-23)" #define CSS_FILE "swad16.222.css" #define JS_FILE "swad16.206.3.js" // Number of lines (includes comments but not blank lines) has been got with the following command: // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*?.h sql/swad*.sql | tail -1 /* + Version 16.222.1: May 23, 2017 Fixed bugs in records and forums related with new role. (220359 lines) Version 16.222: May 23, 2017 Alerts can be closed. (220313 lines) Copy the following icon to icon public directory: sudo cp -a icon/close64x64.png /var/www/html/swad/icon/ diff --git a/swad_forum.c b/swad_forum.c index 540ea80db..827517ea4 100644 --- a/swad_forum.c +++ b/swad_forum.c @@ -1817,8 +1817,15 @@ static void For_PutFormWhichForums (void) static void For_WriteLinksToGblForums (bool IsLastItemInLevel[1 + For_FORUM_MAX_LEVELS]) { bool Highlight; + bool ICanSeeTeacherForum; struct Forum Forum; + /***** Can I see teachers's forums? *****/ + Rol_GetRolesInAllCrssIfNotYetGot (&Gbl.Usrs.Me.UsrDat); + ICanSeeTeacherForum = Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM || + (Gbl.Usrs.Me.UsrDat.Roles & ((1 << Rol_NET) | + (1 << Rol_TCH))); + /***** Link to forum global *****/ Forum.Type = For_FORUM_GLOBAL_USRS; Forum.Location = -1L; @@ -1828,7 +1835,7 @@ static void For_WriteLinksToGblForums (bool IsLastItemInLevel[1 + For_FORUM_MAX_ /***** Link to forum of teachers global *****/ Rol_GetRolesInAllCrssIfNotYetGot (&Gbl.Usrs.Me.UsrDat); - if (Gbl.Usrs.Me.UsrDat.Roles >= (1 << Rol_TCH)) + if (ICanSeeTeacherForum) { Forum.Type = For_FORUM_GLOBAL_TCHS; Forum.Location = -1L; @@ -1851,8 +1858,9 @@ static void For_WriteLinksToPlatformForums (bool IsLastForum, /***** Can I see teachers's forums? *****/ Rol_GetRolesInAllCrssIfNotYetGot (&Gbl.Usrs.Me.UsrDat); - ICanSeeTeacherForum = (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM || - Gbl.Usrs.Me.UsrDat.Roles >= (1 << Rol_TCH)); + ICanSeeTeacherForum = Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM || + (Gbl.Usrs.Me.UsrDat.Roles & ((1 << Rol_NET) | + (1 << Rol_TCH))); /***** Link to forum of users about the platform *****/ Forum.Type = For_FORUM__SWAD__USRS; @@ -1881,13 +1889,16 @@ static long For_WriteLinksToInsForums (long InsCod,bool IsLastIns, bool IsLastItemInLevel[1 + For_FORUM_MAX_LEVELS]) { bool Highlight; + Rol_Role_t MaxRoleInIns; bool ICanSeeTeacherForum; struct Forum Forum; if (InsCod > 0) { + MaxRoleInIns = Rol_GetMyMaxRoleInIns (InsCod); ICanSeeTeacherForum = (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM || - Rol_GetMyMaxRoleInIns (InsCod) >= Rol_TCH); + MaxRoleInIns == Rol_NET || + MaxRoleInIns == Rol_TCH); /***** Link to the forum of users from this institution *****/ Forum.Type = For_FORUM_INSTIT_USRS; @@ -1920,13 +1931,16 @@ static long For_WriteLinksToCtrForums (long CtrCod,bool IsLastCtr, bool IsLastItemInLevel[1 + For_FORUM_MAX_LEVELS]) { bool Highlight; + Rol_Role_t MaxRoleInCtr; bool ICanSeeTeacherForum; struct Forum Forum; if (CtrCod > 0) { + MaxRoleInCtr = Rol_GetMyMaxRoleInCtr (CtrCod); ICanSeeTeacherForum = (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM || - Rol_GetMyMaxRoleInCtr (CtrCod) >= Rol_TCH); + MaxRoleInCtr == Rol_NET || + MaxRoleInCtr == Rol_TCH); /***** Link to the forum of users from this centre *****/ Forum.Type = For_FORUM_CENTRE_USRS; @@ -1959,13 +1973,16 @@ static long For_WriteLinksToDegForums (long DegCod,bool IsLastDeg, bool IsLastItemInLevel[1 + For_FORUM_MAX_LEVELS]) { bool Highlight; + Rol_Role_t MaxRoleInDeg; bool ICanSeeTeacherForum; struct Forum Forum; if (DegCod > 0) { + MaxRoleInDeg = Rol_GetMyMaxRoleInDeg (DegCod); ICanSeeTeacherForum = (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM || - Rol_GetMyMaxRoleInDeg (DegCod) >= Rol_TCH); + MaxRoleInDeg == Rol_NET || + MaxRoleInDeg == Rol_TCH); /***** Link to the forum of users from this degree *****/ Forum.Type = For_FORUM_DEGREE_USRS; @@ -1998,13 +2015,16 @@ static long For_WriteLinksToCrsForums (long CrsCod,bool IsLastCrs, bool IsLastItemInLevel[1 + For_FORUM_MAX_LEVELS]) { bool Highlight; + Rol_Role_t MyRoleInCrs; bool ICanSeeTeacherForum; struct Forum Forum; if (CrsCod > 0) { + MyRoleInCrs = Rol_GetMyRoleInCrs (CrsCod); ICanSeeTeacherForum = (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM || - Rol_GetMyRoleInCrs (CrsCod) >= Rol_TCH); + MyRoleInCrs == Rol_NET || + MyRoleInCrs == Rol_TCH); /***** Link to the forum of users from this course *****/ Forum.Type = For_FORUM_COURSE_USRS; @@ -3737,6 +3757,7 @@ static void For_SetForumType (void) static void For_RestrictAccess (void) { extern const char *Txt_You_dont_have_permission_to_access_to_this_forum; + Rol_Role_t MaxRole; bool ICanSeeForum; /***** Restrict access *****/ @@ -3749,39 +3770,60 @@ static void For_RestrictAccess (void) case For_FORUM_GLOBAL_TCHS: case For_FORUM__SWAD__TCHS: Rol_GetRolesInAllCrssIfNotYetGot (&Gbl.Usrs.Me.UsrDat); - ICanSeeForum = (Gbl.Usrs.Me.UsrDat.Roles >= (1 << Rol_TCH)); + ICanSeeForum = (Gbl.Usrs.Me.UsrDat.Roles & ((1 << Rol_NET) | + (1 << Rol_TCH))); break; case For_FORUM_INSTIT_USRS: + MaxRole = Rol_GetMyMaxRoleInIns (Gbl.Forum.ForumSelected.Location); ICanSeeForum = (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM || - Rol_GetMyMaxRoleInIns (Gbl.Forum.ForumSelected.Location) >= Rol_STD); + MaxRole == Rol_STD || + MaxRole == Rol_NET || + MaxRole == Rol_TCH); break; case For_FORUM_INSTIT_TCHS: + MaxRole = Rol_GetMyMaxRoleInIns (Gbl.Forum.ForumSelected.Location); ICanSeeForum = (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM || - Rol_GetMyMaxRoleInIns (Gbl.Forum.ForumSelected.Location) >= Rol_NET); + MaxRole == Rol_NET || + MaxRole == Rol_TCH); break; case For_FORUM_CENTRE_USRS: + MaxRole = Rol_GetMyMaxRoleInCtr (Gbl.Forum.ForumSelected.Location); ICanSeeForum = (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM || - Rol_GetMyMaxRoleInCtr (Gbl.Forum.ForumSelected.Location) >= Rol_STD); + MaxRole >= Rol_STD || + MaxRole == Rol_NET || + MaxRole == Rol_TCH); break; case For_FORUM_CENTRE_TCHS: + MaxRole = Rol_GetMyMaxRoleInCtr (Gbl.Forum.ForumSelected.Location); ICanSeeForum = (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM || - Rol_GetMyMaxRoleInCtr (Gbl.Forum.ForumSelected.Location) >= Rol_NET); + MaxRole == Rol_NET || + MaxRole == Rol_TCH); break; case For_FORUM_DEGREE_USRS: + MaxRole = Rol_GetMyMaxRoleInDeg (Gbl.Forum.ForumSelected.Location); ICanSeeForum = (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM || - Rol_GetMyMaxRoleInDeg (Gbl.Forum.ForumSelected.Location) >= Rol_STD); + MaxRole >= Rol_STD || + MaxRole == Rol_NET || + MaxRole == Rol_TCH); break; case For_FORUM_DEGREE_TCHS: + MaxRole = Rol_GetMyMaxRoleInDeg (Gbl.Forum.ForumSelected.Location); ICanSeeForum = (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM || - Rol_GetMyMaxRoleInDeg (Gbl.Forum.ForumSelected.Location) >= Rol_NET); + MaxRole == Rol_NET || + MaxRole == Rol_TCH); break; case For_FORUM_COURSE_USRS: + MaxRole = Rol_GetMyRoleInCrs (Gbl.Forum.ForumSelected.Location); ICanSeeForum = (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM || - Rol_GetMyRoleInCrs (Gbl.Forum.ForumSelected.Location) >= Rol_STD); + MaxRole >= Rol_STD || + MaxRole == Rol_NET || + MaxRole == Rol_TCH); break; case For_FORUM_COURSE_TCHS: + MaxRole = Rol_GetMyRoleInCrs (Gbl.Forum.ForumSelected.Location); ICanSeeForum = (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM || - Rol_GetMyRoleInCrs (Gbl.Forum.ForumSelected.Location) >= Rol_NET); + MaxRole == Rol_NET || + MaxRole == Rol_TCH); break; default: ICanSeeForum = false; diff --git a/swad_user.c b/swad_user.c index 8a7888bb2..5ad1735ab 100644 --- a/swad_user.c +++ b/swad_user.c @@ -1042,6 +1042,9 @@ bool Usr_CheckIfICanViewRecordStd (const struct UsrData *UsrDat) /*****************************************************************************/ /************ Check if I can view the record card of a teacher ***************/ /*****************************************************************************/ +// Teacher here is intended as: +// - a non-editing teacher +// - or a teacher bool Usr_CheckIfICanViewRecordTch (struct UsrData *UsrDat) { @@ -1049,12 +1052,13 @@ bool Usr_CheckIfICanViewRecordTch (struct UsrData *UsrDat) if (!Gbl.Usrs.Me.Logged) return false; - /***** 2. Fast/slow check: Is he/she a teacher in any course? *****/ + /***** 2. Fast/slow check: Is he/she a non-editing teacher or a teacher in any course? *****/ Rol_GetRolesInAllCrssIfNotYetGot (UsrDat); - if (!(UsrDat->Roles & (1 << Rol_TCH))) + if ((UsrDat->Roles & ((1 << Rol_NET) | + (1 << Rol_TCH))) == 0) return false; - // He/she is a teacher + // He/she is a non-editing teacher or a teacher in any course /***** 3. Fast check: It's me? *****/ if (Gbl.Usrs.Me.UsrDat.UsrCod == UsrDat->UsrCod)