Version 15.34

This commit is contained in:
Antonio Cañas Vargas 2015-11-01 20:21:59 +01:00
parent 7dba78b2d1
commit 58277e9168
11 changed files with 640 additions and 486 deletions

View File

@ -350,6 +350,15 @@ hr.YELLOW_SEPARA {height:0; border-top:0; border-bottom:#BD4815 dotted 1px;}
text-align:center; text-align:center;
overflow:hidden; overflow:hidden;
} }
.NOTICE_SUBJECT_OBSOLETE
{
margin:12px auto;
font-size:15pt;
font-weight:bold;
color:#808080;
text-align:center;
overflow:hidden;
}
.NOTICE_TEXT_ACTIVE .NOTICE_TEXT_ACTIVE
{ {
clear:both; clear:both;

View File

@ -302,6 +302,15 @@ form {margin:0; display:inline;}
text-align:center; text-align:center;
overflow:hidden; overflow:hidden;
} }
.NOTICE_SUBJECT_OBSOLETE
{
margin:12px auto;
font-size:15pt;
font-weight:bold;
color:#808080;
text-align:center;
overflow:hidden;
}
.NOTICE_TEXT_ACTIVE .NOTICE_TEXT_ACTIVE
{ {
clear:both; clear:both;

View File

@ -63,10 +63,12 @@ CREATE TABLE IF NOT EXISTS ann_seen (
-- --
CREATE TABLE IF NOT EXISTS announcements ( CREATE TABLE IF NOT EXISTS announcements (
AnnCod INT NOT NULL AUTO_INCREMENT, AnnCod INT NOT NULL AUTO_INCREMENT,
Status TINYINT NOT NULL DEFAULT 0,
Roles INT NOT NULL DEFAULT 0, Roles INT NOT NULL DEFAULT 0,
Subject TEXT NOT NULL, Subject TEXT NOT NULL,
Content TEXT NOT NULL, Content TEXT NOT NULL,
UNIQUE INDEX(AnnCod)); UNIQUE INDEX(AnnCod),
INDEX(Status));
-- --
-- Table asg_grp: stores the groups associated to assigments -- Table asg_grp: stores the groups associated to assigments
-- --

View File

@ -75,7 +75,7 @@ extern struct Globals Gbl;
/************************ Internal global variables **************************/ /************************ Internal global variables **************************/
/*****************************************************************************/ /*****************************************************************************/
/* /*
1107 actions in one CGI: 1109 actions in one CGI:
0. ActAll Any action (used for statistics) 0. ActAll Any action (used for statistics)
1. ActUnk Unknown action 1. ActUnk Unknown action
2. ActHom Show home menu 2. ActHom Show home menu
@ -1012,281 +1012,283 @@ Messages:
842. ActMaiStd Send an e-mail to students 842. ActMaiStd Send an e-mail to students
843. ActWriAnn Show form to create a new global announcement 843. ActWriAnn Show form to create a new global announcement
844. ActRcvAnn Receive and create a new global announcement 844. ActRcvAnn Receive and create a new global announcement
845. ActRemAnn Remove global announcement 845. ActHidAnn Hide a global announcement that was active
846. ActShoNot Show (expand) a notice 846. ActRevAnn Reveal a global announcement that was hidden
847. ActWriNot Write a new notice 847. ActRemAnn Remove global announcement
848. ActRcvNot Receive and create a new notice 848. ActShoNot Show (expand) a notice
849. ActHidNot Hide a notice that was active 849. ActWriNot Write a new notice
850. ActRevNot Reveal a notice that was hidden 850. ActRcvNot Receive and create a new notice
851. ActRemNot Remove a notice 851. ActHidNot Hide a notice that was active
852. ActSeeNewNtf Show my recent notifications (link in top heading) 852. ActRevNot Reveal a notice that was hidden
853. ActMrkNtfSee Mark all my notifications as seen 853. ActRemNot Remove a notice
854. ActSeeForCrsUsr Show top level of forum of users of the course 854. ActSeeNewNtf Show my recent notifications (link in top heading)
855. ActSeeForCrsTch Show top level of forum of teachers of the course 855. ActMrkNtfSee Mark all my notifications as seen
856. ActSeeForDegUsr Show top level of forum of users of the degree 856. ActSeeForCrsUsr Show top level of forum of users of the course
857. ActSeeForDegTch Show top level of forum of teachers of the degree 857. ActSeeForCrsTch Show top level of forum of teachers of the course
858. ActSeeForCtrUsr Show top level of forum of users of the centre 858. ActSeeForDegUsr Show top level of forum of users of the degree
859. ActSeeForCtrTch Show top level of forum of teachers of the centre 859. ActSeeForDegTch Show top level of forum of teachers of the degree
860. ActSeeForInsUsr Show top level of forum of users of the institution 860. ActSeeForCtrUsr Show top level of forum of users of the centre
861. ActSeeForInsTch Show top level of forum of teachers of the institution 861. ActSeeForCtrTch Show top level of forum of teachers of the centre
862. ActSeeForGenUsr Show top level of forum of users general 862. ActSeeForInsUsr Show top level of forum of users of the institution
863. ActSeeForGenTch Show top level of forum of teachers general 863. ActSeeForInsTch Show top level of forum of teachers of the institution
864. ActSeeForSWAUsr Show top level of forum of users of the platform 864. ActSeeForGenUsr Show top level of forum of users general
865. ActSeeForSWATch Show top level of forum of teachers of the platform 865. ActSeeForGenTch Show top level of forum of teachers general
866. ActSeePstForCrsUsr Show the messages of a thread of the forum of users of the course 866. ActSeeForSWAUsr Show top level of forum of users of the platform
867. ActSeePstForCrsTch Show the messages of a thread of the forum of teachers of the course 867. ActSeeForSWATch Show top level of forum of teachers of the platform
868. ActSeePstForDegUsr Show the messages of a thread of the forum of users of the degree 868. ActSeePstForCrsUsr Show the messages of a thread of the forum of users of the course
869. ActSeePstForDegTch Show the messages of a thread of the forum of teachers of the degree 869. ActSeePstForCrsTch Show the messages of a thread of the forum of teachers of the course
870. ActSeePstForCtrUsr Show the messages of a thread of the forum of users of the centre 870. ActSeePstForDegUsr Show the messages of a thread of the forum of users of the degree
871. ActSeePstForCtrTch Show the messages of a thread of the forum of teachers of the centre 871. ActSeePstForDegTch Show the messages of a thread of the forum of teachers of the degree
872. ActSeePstForInsUsr Show the messages of a thread of the forum of users of the institution 872. ActSeePstForCtrUsr Show the messages of a thread of the forum of users of the centre
873. ActSeePstForInsTch Show the messages of a thread of the forum of teachers of the institution 873. ActSeePstForCtrTch Show the messages of a thread of the forum of teachers of the centre
874. ActSeePstForGenUsr Show the messages of a thread of the forum of users general 874. ActSeePstForInsUsr Show the messages of a thread of the forum of users of the institution
875. ActSeePstForGenTch Show the messages of a thread of the forum of teachers general 875. ActSeePstForInsTch Show the messages of a thread of the forum of teachers of the institution
876. ActSeePstForSWAUsr Show the messages of a thread of the forum of users of the platform 876. ActSeePstForGenUsr Show the messages of a thread of the forum of users general
877. ActSeePstForSWATch Show the messages of a thread of the forum of teachers of the platform 877. ActSeePstForGenTch Show the messages of a thread of the forum of teachers general
878. ActRcvThrForCrsUsr Receive the first message of a new thread of forum of users of the course 878. ActSeePstForSWAUsr Show the messages of a thread of the forum of users of the platform
879. ActRcvThrForCrsTch Receive the first message of a new thread of forum of teachers of the course 879. ActSeePstForSWATch Show the messages of a thread of the forum of teachers of the platform
880. ActRcvThrForDegUsr Receive the first message of a new thread of forum of users of the degree 880. ActRcvThrForCrsUsr Receive the first message of a new thread of forum of users of the course
881. ActRcvThrForDegTch Receive the first message of a new thread of forum of teachers of the degree 881. ActRcvThrForCrsTch Receive the first message of a new thread of forum of teachers of the course
882. ActRcvThrForCtrUsr Receive the first message of a new thread of forum of users of centre 882. ActRcvThrForDegUsr Receive the first message of a new thread of forum of users of the degree
883. ActRcvThrForCtrTch Receive the first message of a new thread of forum of teachers of centre 883. ActRcvThrForDegTch Receive the first message of a new thread of forum of teachers of the degree
884. ActRcvThrForInsUsr Receive the first message of a new thread of forum of users of the institution 884. ActRcvThrForCtrUsr Receive the first message of a new thread of forum of users of centre
885. ActRcvThrForInsTch Receive the first message of a new thread of forum of teachers of the institution 885. ActRcvThrForCtrTch Receive the first message of a new thread of forum of teachers of centre
886. ActRcvThrForGenUsr Receive the first message of a new thread of forum of users general 886. ActRcvThrForInsUsr Receive the first message of a new thread of forum of users of the institution
887. ActRcvThrForGenTch Receive the first message of a new thread of forum of teachers general 887. ActRcvThrForInsTch Receive the first message of a new thread of forum of teachers of the institution
888. ActRcvThrForSWAUsr Receive the first message of a new thread of forum of users of the platform 888. ActRcvThrForGenUsr Receive the first message of a new thread of forum of users general
889. ActRcvThrForSWATch Receive the first message of a new thread of forum of teachers of the platform 889. ActRcvThrForGenTch Receive the first message of a new thread of forum of teachers general
890. ActRcvRepForCrsUsr Receive a message of answer in a thread existente in the forum of users of the course 890. ActRcvThrForSWAUsr Receive the first message of a new thread of forum of users of the platform
891. ActRcvRepForCrsTch Receive a message of answer in a thread existente in the forum of teachers of the course 891. ActRcvThrForSWATch Receive the first message of a new thread of forum of teachers of the platform
892. ActRcvRepForDegUsr Receive a message of answer in a thread existente in the forum of users of the degree 892. ActRcvRepForCrsUsr Receive a message of answer in a thread existente in the forum of users of the course
893. ActRcvRepForDegTch Receive a message of answer in a thread existente in the forum of teachers of the degree 893. ActRcvRepForCrsTch Receive a message of answer in a thread existente in the forum of teachers of the course
894. ActRcvRepForCtrUsr Receive a message of answer in a thread existente in the forum of users of centre 894. ActRcvRepForDegUsr Receive a message of answer in a thread existente in the forum of users of the degree
895. ActRcvRepForCtrTch Receive a message of answer in a thread existente in the forum of teachers of centre 895. ActRcvRepForDegTch Receive a message of answer in a thread existente in the forum of teachers of the degree
896. ActRcvRepForInsUsr Receive a message of answer in a thread existente in the forum of users of the institution 896. ActRcvRepForCtrUsr Receive a message of answer in a thread existente in the forum of users of centre
897. ActRcvRepForInsTch Receive a message of answer in a thread existente in the forum of teachers of the institution 897. ActRcvRepForCtrTch Receive a message of answer in a thread existente in the forum of teachers of centre
898. ActRcvRepForGenUsr Receive a message of answer in a thread existente in the forum of users general 898. ActRcvRepForInsUsr Receive a message of answer in a thread existente in the forum of users of the institution
899. ActRcvRepForGenTch Receive a message of answer in a thread existente in the forum of teachers general 899. ActRcvRepForInsTch Receive a message of answer in a thread existente in the forum of teachers of the institution
900. ActRcvRepForSWAUsr Receive a message of answer in a thread existente in the forum of users of the platform 900. ActRcvRepForGenUsr Receive a message of answer in a thread existente in the forum of users general
901. ActRcvRepForSWATch Receive a message of answer in a thread existente in the forum of teachers of the platform 901. ActRcvRepForGenTch Receive a message of answer in a thread existente in the forum of teachers general
902. ActReqDelThrCrsUsr Request the removal of a thread of forum of users of the course 902. ActRcvRepForSWAUsr Receive a message of answer in a thread existente in the forum of users of the platform
903. ActReqDelThrCrsTch Request the removal of a thread of forum of teachers of the course 903. ActRcvRepForSWATch Receive a message of answer in a thread existente in the forum of teachers of the platform
904. ActReqDelThrDegUsr Request the removal of a thread of forum of users of the degree 904. ActReqDelThrCrsUsr Request the removal of a thread of forum of users of the course
905. ActReqDelThrDegTch Request the removal of a thread of forum of teachers of the degree 905. ActReqDelThrCrsTch Request the removal of a thread of forum of teachers of the course
906. ActReqDelThrCtrUsr Request the removal of a thread of forum of users of centre 906. ActReqDelThrDegUsr Request the removal of a thread of forum of users of the degree
907. ActReqDelThrCtrTch Request the removal of a thread of forum of teachers of centre 907. ActReqDelThrDegTch Request the removal of a thread of forum of teachers of the degree
908. ActReqDelThrInsUsr Request the removal of a thread of forum of users of the institution 908. ActReqDelThrCtrUsr Request the removal of a thread of forum of users of centre
909. ActReqDelThrInsTch Request the removal of a thread of forum of teachers of the institution 909. ActReqDelThrCtrTch Request the removal of a thread of forum of teachers of centre
910. ActReqDelThrGenUsr Request the removal of a thread of forum of users general 910. ActReqDelThrInsUsr Request the removal of a thread of forum of users of the institution
911. ActReqDelThrGenTch Request the removal of a thread of forum of teachers general 911. ActReqDelThrInsTch Request the removal of a thread of forum of teachers of the institution
912. ActReqDelThrSWAUsr Request the removal of a thread of forum of users of the platform 912. ActReqDelThrGenUsr Request the removal of a thread of forum of users general
913. ActReqDelThrSWATch Request the removal of a thread of forum of teachers of the platform 913. ActReqDelThrGenTch Request the removal of a thread of forum of teachers general
914. ActDelThrForCrsUsr Remove a thread of forum of users of the course 914. ActReqDelThrSWAUsr Request the removal of a thread of forum of users of the platform
915. ActDelThrForCrsTch Remove a thread of forum of teachers of the course 915. ActReqDelThrSWATch Request the removal of a thread of forum of teachers of the platform
916. ActDelThrForDegUsr Remove a thread of forum of users of the degree 916. ActDelThrForCrsUsr Remove a thread of forum of users of the course
917. ActDelThrForDegTch Remove a thread of forum of teachers of the degree 917. ActDelThrForCrsTch Remove a thread of forum of teachers of the course
918. ActDelThrForCtrUsr Remove a thread of forum of users of centre 918. ActDelThrForDegUsr Remove a thread of forum of users of the degree
919. ActDelThrForCtrTch Remove a thread of forum of teachers of centre 919. ActDelThrForDegTch Remove a thread of forum of teachers of the degree
920. ActDelThrForInsUsr Remove a thread of forum of users of the institution 920. ActDelThrForCtrUsr Remove a thread of forum of users of centre
921. ActDelThrForInsTch Remove a thread of forum of teachers of the institution 921. ActDelThrForCtrTch Remove a thread of forum of teachers of centre
922. ActDelThrForGenUsr Remove a thread of forum of users general 922. ActDelThrForInsUsr Remove a thread of forum of users of the institution
923. ActDelThrForGenTch Remove a thread of forum of teachers general 923. ActDelThrForInsTch Remove a thread of forum of teachers of the institution
924. ActDelThrForSWAUsr Remove a thread of forum of users of the platform 924. ActDelThrForGenUsr Remove a thread of forum of users general
925. ActDelThrForSWATch Remove a thread of forum of teachers of the platform 925. ActDelThrForGenTch Remove a thread of forum of teachers general
926. ActCutThrForCrsUsr Cut a thread of forum of users of the course 926. ActDelThrForSWAUsr Remove a thread of forum of users of the platform
927. ActCutThrForCrsTch Cut a thread of forum of teachers of the course 927. ActDelThrForSWATch Remove a thread of forum of teachers of the platform
928. ActCutThrForDegUsr Cut a thread of forum of users of the degree 928. ActCutThrForCrsUsr Cut a thread of forum of users of the course
929. ActCutThrForDegTch Cut a thread of forum of teachers of the degree 929. ActCutThrForCrsTch Cut a thread of forum of teachers of the course
930. ActCutThrForCtrUsr Cut a thread of forum of users of centre 930. ActCutThrForDegUsr Cut a thread of forum of users of the degree
931. ActCutThrForCtrTch Cut a thread of forum of teachers of centre 931. ActCutThrForDegTch Cut a thread of forum of teachers of the degree
932. ActCutThrForInsUsr Cut a thread of forum of users of the institution 932. ActCutThrForCtrUsr Cut a thread of forum of users of centre
933. ActCutThrForInsTch Cut a thread of forum of teachers of the institution 933. ActCutThrForCtrTch Cut a thread of forum of teachers of centre
934. ActCutThrForGenUsr Cut a thread of forum of users general 934. ActCutThrForInsUsr Cut a thread of forum of users of the institution
935. ActCutThrForGenTch Cut a thread of forum of teachers general 935. ActCutThrForInsTch Cut a thread of forum of teachers of the institution
936. ActCutThrForSWAUsr Cut a thread of forum of users of the platform 936. ActCutThrForGenUsr Cut a thread of forum of users general
937. ActCutThrForSWATch Cut a thread of forum of teachers of the platform 937. ActCutThrForGenTch Cut a thread of forum of teachers general
938. ActPasThrForCrsUsr Paste a thread of forum of users of the course 938. ActCutThrForSWAUsr Cut a thread of forum of users of the platform
939. ActPasThrForCrsTch Paste a thread of forum of teachers of the course 939. ActCutThrForSWATch Cut a thread of forum of teachers of the platform
940. ActPasThrForDegUsr Paste a thread of forum of users of the degree 940. ActPasThrForCrsUsr Paste a thread of forum of users of the course
941. ActPasThrForDegTch Paste a thread of forum of teachers of the degree 941. ActPasThrForCrsTch Paste a thread of forum of teachers of the course
942. ActPasThrForCtrUsr Paste a thread of forum of users of centre 942. ActPasThrForDegUsr Paste a thread of forum of users of the degree
943. ActPasThrForCtrTch Paste a thread of forum of teachers of centre 943. ActPasThrForDegTch Paste a thread of forum of teachers of the degree
944. ActPasThrForInsUsr Paste a thread of forum of users of the institution 944. ActPasThrForCtrUsr Paste a thread of forum of users of centre
945. ActPasThrForInsTch Paste a thread of forum of teachers of the institution 945. ActPasThrForCtrTch Paste a thread of forum of teachers of centre
946. ActPasThrForGenUsr Paste a thread of forum of users general 946. ActPasThrForInsUsr Paste a thread of forum of users of the institution
947. ActPasThrForGenTch Paste a thread of forum of teachers general 947. ActPasThrForInsTch Paste a thread of forum of teachers of the institution
948. ActPasThrForSWAUsr Paste a thread of forum of users of the platform 948. ActPasThrForGenUsr Paste a thread of forum of users general
949. ActPasThrForSWATch Paste a thread of forum of teachers of the platform 949. ActPasThrForGenTch Paste a thread of forum of teachers general
950. ActDelPstForCrsUsr Remove a message of forum of users of the course 950. ActPasThrForSWAUsr Paste a thread of forum of users of the platform
951. ActDelPstForCrsTch Remove a message of forum of teachers of the course 951. ActPasThrForSWATch Paste a thread of forum of teachers of the platform
952. ActDelPstForDegUsr Remove a message of forum of users of the degree 952. ActDelPstForCrsUsr Remove a message of forum of users of the course
953. ActDelPstForDegTch Remove a message of forum of teachers of the degree 953. ActDelPstForCrsTch Remove a message of forum of teachers of the course
954. ActDelPstForCtrUsr Remove a message of forum of users of centre 954. ActDelPstForDegUsr Remove a message of forum of users of the degree
955. ActDelPstForCtrTch Remove a message of forum of teachers of centre 955. ActDelPstForDegTch Remove a message of forum of teachers of the degree
956. ActDelPstForInsUsr Remove a message of forum of users of the institution 956. ActDelPstForCtrUsr Remove a message of forum of users of centre
957. ActDelPstForInsTch Remove a message of forum of teachers of the institution 957. ActDelPstForCtrTch Remove a message of forum of teachers of centre
958. ActDelPstForGenUsr Remove a message of forum of users general 958. ActDelPstForInsUsr Remove a message of forum of users of the institution
959. ActDelPstForGenTch Remove a message of forum of teachers general 959. ActDelPstForInsTch Remove a message of forum of teachers of the institution
960. ActDelPstForSWAUsr Remove a message of forum of users of the platform 960. ActDelPstForGenUsr Remove a message of forum of users general
961. ActDelPstForSWATch Remove a message of forum of teachers of the platform 961. ActDelPstForGenTch Remove a message of forum of teachers general
962. ActEnbPstForCrsUsr Enable a message of forum of users of the course 962. ActDelPstForSWAUsr Remove a message of forum of users of the platform
963. ActEnbPstForCrsTch Enable a message of forum of teachers of the course 963. ActDelPstForSWATch Remove a message of forum of teachers of the platform
964. ActEnbPstForDegUsr Enable a message of forum of users of the degree 964. ActEnbPstForCrsUsr Enable a message of forum of users of the course
965. ActEnbPstForDegTch Enable a message of forum of teachers of the degree 965. ActEnbPstForCrsTch Enable a message of forum of teachers of the course
966. ActEnbPstForCtrUsr Enable a message of forum of users of centre 966. ActEnbPstForDegUsr Enable a message of forum of users of the degree
967. ActEnbPstForCtrTch Enable a message of forum of teachers of centre 967. ActEnbPstForDegTch Enable a message of forum of teachers of the degree
968. ActEnbPstForInsUsr Enable a message of forum of users of the institution 968. ActEnbPstForCtrUsr Enable a message of forum of users of centre
969. ActEnbPstForInsTch Enable a message of forum of teachers of the institution 969. ActEnbPstForCtrTch Enable a message of forum of teachers of centre
970. ActEnbPstForGenUsr Enable a message of forum of users general 970. ActEnbPstForInsUsr Enable a message of forum of users of the institution
971. ActEnbPstForGenTch Enable a message of forum of teachers general 971. ActEnbPstForInsTch Enable a message of forum of teachers of the institution
972. ActEnbPstForSWAUsr Enable a message of forum of users of the platform 972. ActEnbPstForGenUsr Enable a message of forum of users general
973. ActEnbPstForSWATch Enable a message of forum of teachers of the platform 973. ActEnbPstForGenTch Enable a message of forum of teachers general
974. ActDisPstForCrsUsr Disable a message of forum of users of the course 974. ActEnbPstForSWAUsr Enable a message of forum of users of the platform
975. ActDisPstForCrsTch Disable a message of forum of teachers of the course 975. ActEnbPstForSWATch Enable a message of forum of teachers of the platform
976. ActDisPstForDegUsr Disable a message of forum of users of the degree 976. ActDisPstForCrsUsr Disable a message of forum of users of the course
977. ActDisPstForDegTch Disable a message of forum of teachers of the degree 977. ActDisPstForCrsTch Disable a message of forum of teachers of the course
978. ActDisPstForCtrUsr Disable a message of forum of users of centre 978. ActDisPstForDegUsr Disable a message of forum of users of the degree
979. ActDisPstForCtrTch Disable a message of forum of teachers of centre 979. ActDisPstForDegTch Disable a message of forum of teachers of the degree
980. ActDisPstForInsUsr Disable a message of forum of users of the institution 980. ActDisPstForCtrUsr Disable a message of forum of users of centre
981. ActDisPstForInsTch Disable a message of forum of teachers of the institution 981. ActDisPstForCtrTch Disable a message of forum of teachers of centre
982. ActDisPstForGenUsr Disable a message of forum of users general 982. ActDisPstForInsUsr Disable a message of forum of users of the institution
983. ActDisPstForGenTch Disable a message of forum of teachers general 983. ActDisPstForInsTch Disable a message of forum of teachers of the institution
984. ActDisPstForSWAUsr Disable a message of forum of users of the platform 984. ActDisPstForGenUsr Disable a message of forum of users general
985. ActDisPstForSWATch Disable a message of forum of teachers of the platform 985. ActDisPstForGenTch Disable a message of forum of teachers general
986. ActRcvMsgUsr Sent/Receive a message of a user 986. ActDisPstForSWAUsr Disable a message of forum of users of the platform
987. ActReqDelAllSntMsg Request the removal of todos the messages sent to other users 987. ActDisPstForSWATch Disable a message of forum of teachers of the platform
988. ActReqDelAllRcvMsg Request the removal of todos the messages received from other users 988. ActRcvMsgUsr Sent/Receive a message of a user
989. ActDelAllSntMsg Remove todos the messages sent to other users 989. ActReqDelAllSntMsg Request the removal of todos the messages sent to other users
990. ActDelAllRcvMsg Remove todos the messages received from other users 990. ActReqDelAllRcvMsg Request the removal of todos the messages received from other users
991. ActDelSntMsg Remove a message sent to other users 991. ActDelAllSntMsg Remove todos the messages sent to other users
992. ActDelRcvMsg Remove a message received from other user 992. ActDelAllRcvMsg Remove todos the messages received from other users
993. ActExpSntMsg See (expand) sent message 993. ActDelSntMsg Remove a message sent to other users
994. ActExpRcvMsg See (expand) received message 994. ActDelRcvMsg Remove a message received from other user
995. ActConSntMsg Hide (contract) sent message 995. ActExpSntMsg See (expand) sent message
996. ActConRcvMsg Hide (contract) received message 996. ActExpRcvMsg See (expand) received message
997. ActLstBanUsr List banned users 997. ActConSntMsg Hide (contract) sent message
998. ActBanUsrMsg Ban the sender of a message when showing received messages 998. ActConRcvMsg Hide (contract) received message
999. ActUnbUsrMsg Unban the sender of a message when showing received messages 999. ActLstBanUsr List banned users
1000. ActUnbUsrLst Unban a user when listing banned users 1000. ActBanUsrMsg Ban the sender of a message when showing received messages
1001. ActCht Enter in a chat room to chat 1001. ActUnbUsrMsg Unban the sender of a message when showing received messages
1002. ActUnbUsrLst Unban a user when listing banned users
1003. ActCht Enter in a chat room to chat
Statistics: Statistics:
1002. ActSeeAllSvy List all surveys in pages 1004. ActSeeAllSvy List all surveys in pages
1003. ActReqUseGbl Request showing use of the platform 1005. ActReqUseGbl Request showing use of the platform
1004. ActSeePhoDeg Show a class photo with the average photos of the students of each degree 1006. ActSeePhoDeg Show a class photo with the average photos of the students of each degree
1005. ActReqStaCrs Request statistics of courses 1007. ActReqStaCrs Request statistics of courses
1006. ActReqAccGbl Request query of clicks to the complete platform 1008. ActReqAccGbl Request query of clicks to the complete platform
1007. ActSeeOneSvy Show one survey 1009. ActSeeOneSvy Show one survey
1008. ActAnsSvy Answer a survey 1010. ActAnsSvy Answer a survey
1009. ActFrmNewSvy Form to create a new survey 1011. ActFrmNewSvy Form to create a new survey
1010. ActEdiOneSvy Edit one survey 1012. ActEdiOneSvy Edit one survey
1011. ActNewSvy Create new survey 1013. ActNewSvy Create new survey
1012. ActChgSvy Modify data of an existing survey 1014. ActChgSvy Modify data of an existing survey
1013. ActReqRemSvy Request the removal of a survey 1015. ActReqRemSvy Request the removal of a survey
1014. ActRemSvy Remove survey 1016. ActRemSvy Remove survey
1015. ActReqRstSvy Request the reset of answers of a survey 1017. ActReqRstSvy Request the reset of answers of a survey
1016. ActRstSvy Reset answers of survey 1018. ActRstSvy Reset answers of survey
1017. ActHidSvy Hide survey 1019. ActHidSvy Hide survey
1018. ActShoSvy Show survey 1020. ActShoSvy Show survey
1019. ActEdiOneSvyQst Edit a new question for a survey 1021. ActEdiOneSvyQst Edit a new question for a survey
1020. ActRcvSvyQst Receive a question of a survey 1022. ActRcvSvyQst Receive a question of a survey
1021. ActRemSvyQst Remove a question of a survey 1023. ActRemSvyQst Remove a question of a survey
1022. ActSeeUseGbl Show use of the platform 1024. ActSeeUseGbl Show use of the platform
1023. ActPrnPhoDeg Show vista of impresión of the class photo with the average photos of the students of each degree. 1025. ActPrnPhoDeg Show vista of impresión of the class photo with the average photos of the students of each degree.
1024. ActCalPhoDeg Compute the average photos of the students of each degree 1026. ActCalPhoDeg Compute the average photos of the students of each degree
1025. ActSeeAccGbl Query clicks to the complete platform 1027. ActSeeAccGbl Query clicks to the complete platform
1026. ActReqAccCrs Request query of clicks in the course 1028. ActReqAccCrs Request query of clicks in the course
1027. ActSeeAccCrs Query clicks to current course 1029. ActSeeAccCrs Query clicks to current course
1028. ActSeeAllStaCrs Show statistics of courses 1030. ActSeeAllStaCrs Show statistics of courses
Profile: Profile:
1029. ActFrmLogIn Show form to log in 1031. ActFrmLogIn Show form to log in
1030. ActMyCrs Select one of my courses 1032. ActMyCrs Select one of my courses
1031. ActSeeMyTimTbl Show the timetable of all courses of the logged user 1033. ActSeeMyTimTbl Show the timetable of all courses of the logged user
1032. ActFrmUsrAcc Show form to the creation or change of user's account 1034. ActFrmUsrAcc Show form to the creation or change of user's account
1033. ActReqEdiRecCom Request the edition of the record with the personal data of the user 1035. ActReqEdiRecCom Request the edition of the record with the personal data of the user
1034. ActEdiPrf Show forms to edit preferences 1036. ActEdiPrf Show forms to edit preferences
1035. ActAdmBrf Show the briefcase of private archives 1037. ActAdmBrf Show the briefcase of private archives
1036. ActMFUAct Show most frequently used actions 1038. ActMFUAct Show most frequently used actions
1037. ActAutUsrInt Authentify user internally (directly from the platform) 1039. ActAutUsrInt Authentify user internally (directly from the platform)
1038. ActAutUsrExt Authentify user externally (remotely from an external site) 1040. ActAutUsrExt Authentify user externally (remotely from an external site)
1039. ActAutUsrChgLan Change language to my language just after authentication 1041. ActAutUsrChgLan Change language to my language just after authentication
1040. ActLogOut Close session 1042. ActLogOut Close session
1041. ActAnnSee Mark announcement as seen 1043. ActAnnSee Mark announcement as seen
1042. ActReqSndNewPwd Show form to send a new password via e-mail 1044. ActReqSndNewPwd Show form to send a new password via e-mail
1043. ActSndNewPwd Send a new password via e-mail 1045. ActSndNewPwd Send a new password via e-mail
1044. ActChgMyRol Change type of logged user 1046. ActChgMyRol Change type of logged user
1045. ActCreUsrAcc Create new user account 1047. ActCreUsrAcc Create new user account
1046. ActRemIDMe Remove one of my user's IDs 1048. ActRemIDMe Remove one of my user's IDs
1047. ActNewIDMe Create a new user's ID for me 1049. ActNewIDMe Create a new user's ID for me
1048. ActRemOldNic Remove one of my old nicknames 1050. ActRemOldNic Remove one of my old nicknames
1049. ActChgNic Change my nickname 1051. ActChgNic Change my nickname
1050. ActRemOldMai Remove one of my old e-mails 1052. ActRemOldMai Remove one of my old e-mails
1051. ActChgMai Change my e-mail address 1053. ActChgMai Change my e-mail address
1052. ActCnfMai Confirm e-mail address 1054. ActCnfMai Confirm e-mail address
1053. ActFrmChgMyPwd Show form to the change of the password 1055. ActFrmChgMyPwd Show form to the change of the password
1054. ActChgPwd Change the password 1056. ActChgPwd Change the password
1055. ActReqRemMyAcc Request the removal of my account 1057. ActReqRemMyAcc Request the removal of my account
1056. ActRemMyAcc Remove my account 1058. ActRemMyAcc Remove my account
1057. ActChgMyData Update my personal data 1059. ActChgMyData Update my personal data
1058. ActReqMyPho Show form to send my photo 1060. ActReqMyPho Show form to send my photo
1059. ActDetMyPho Receive my photo and detect faces on it 1061. ActDetMyPho Receive my photo and detect faces on it
1060. ActUpdMyPho Update my photo 1062. ActUpdMyPho Update my photo
1061. ActRemMyPho Remove my photo 1063. ActRemMyPho Remove my photo
1062. ActEdiPri Edit my privacy 1064. ActEdiPri Edit my privacy
1063. ActChgPriPho Change privacy of my photo 1065. ActChgPriPho Change privacy of my photo
1064. ActChgPriPrf Change privacy of my public profile 1066. ActChgPriPrf Change privacy of my public profile
1065. ActReqEdiMyIns Request the edition of my institution, centre and department 1067. ActReqEdiMyIns Request the edition of my institution, centre and department
1066. ActChgCtyMyIns Change the country of my institution 1068. ActChgCtyMyIns Change the country of my institution
1067. ActChgMyIns Change my institution 1069. ActChgMyIns Change my institution
1068. ActChgMyCtr Change my centre 1070. ActChgMyCtr Change my centre
1069. ActChgMyDpt Change my department 1071. ActChgMyDpt Change my department
1070. ActChgMyOff Change my office 1072. ActChgMyOff Change my office
1071. ActChgMyOffPho Change my office phone 1073. ActChgMyOffPho Change my office phone
1072. ActReqEdiMyNet Request the edition of my social networks 1074. ActReqEdiMyNet Request the edition of my social networks
1073. ActChgMyNet Change my web and social networks 1075. ActChgMyNet Change my web and social networks
1074. ActChgLay Change layout 1076. ActChgLay Change layout
1075. ActChgThe Change theme 1077. ActChgThe Change theme
1076. ActReqChgLan Ask if change language 1078. ActReqChgLan Ask if change language
1077. ActChgLan Change language 1079. ActChgLan Change language
1078. ActChgCol Change side columns 1080. ActChgCol Change side columns
1079. ActHidLftCol Hide left side column 1081. ActHidLftCol Hide left side column
1080. ActHidRgtCol Hide right side column 1082. ActHidRgtCol Hide right side column
1081. ActShoLftCol Show left side column 1083. ActShoLftCol Show left side column
1082. ActShoRgtCol Show right side column 1084. ActShoRgtCol Show right side column
1083. ActChgIco Change icon set 1085. ActChgIco Change icon set
1084. ActChgMnu Change menu 1086. ActChgMnu Change menu
1085. ActChgNtfPrf Change whether to notify by e-mail new messages 1087. ActChgNtfPrf Change whether to notify by e-mail new messages
1086. ActPrnUsrQR Show my QR code ready to print 1088. ActPrnUsrQR Show my QR code ready to print
1087. ActPrnMyTimTbl Show the timetable listo to impresión of all my courses 1089. ActPrnMyTimTbl Show the timetable listo to impresión of all my courses
1088. ActEdiTut Edit the timetable of tutorías 1090. ActEdiTut Edit the timetable of tutorías
1089. ActChgTut Modify the timetable of tutorías 1091. ActChgTut Modify the timetable of tutorías
1090. ActReqRemFilBrf Request removal of a file of the briefcase 1092. ActReqRemFilBrf Request removal of a file of the briefcase
1091. ActRemFilBrf Remove a file of the briefcase 1093. ActRemFilBrf Remove a file of the briefcase
1092. ActRemFolBrf Remove a folder empty of the briefcase 1094. ActRemFolBrf Remove a folder empty of the briefcase
1093. ActCopBrf Set source of copy in the briefcase 1095. ActCopBrf Set source of copy in the briefcase
1094. ActPasBrf Paste a folder or file in the briefcase 1096. ActPasBrf Paste a folder or file in the briefcase
1095. ActRemTreBrf Remove a folder no empty of the briefcase 1097. ActRemTreBrf Remove a folder no empty of the briefcase
1096. ActFrmCreBrf Form to crear a folder or file in the briefcase 1098. ActFrmCreBrf Form to crear a folder or file in the briefcase
1097. ActCreFolBrf Create a new folder in the briefcase 1099. ActCreFolBrf Create a new folder in the briefcase
1098. ActCreLnkBrf Create a new link in the briefcase 1100. ActCreLnkBrf Create a new link in the briefcase
1099. ActRenFolBrf Rename a folder of the briefcase 1101. ActRenFolBrf Rename a folder of the briefcase
1100. ActRcvFilBrfDZ Receive a file in the briefcase using Dropzone.js 1102. ActRcvFilBrfDZ Receive a file in the briefcase using Dropzone.js
1101. ActRcvFilBrfCla Receive a file in the briefcase using the classic way 1103. ActRcvFilBrfCla Receive a file in the briefcase using the classic way
1102. ActExpBrf Expand a folder in briefcase 1104. ActExpBrf Expand a folder in briefcase
1103. ActConBrf Contract a folder in briefcase 1105. ActConBrf Contract a folder in briefcase
1104. ActZIPBrf Compress a folder in briefcase 1106. ActZIPBrf Compress a folder in briefcase
1105. ActReqDatBrf Ask for metadata of a file in the briefcase 1107. ActReqDatBrf Ask for metadata of a file in the briefcase
1106. ActChgDatBrf Change metadata of a file in the briefcase 1108. ActChgDatBrf Change metadata of a file in the briefcase
1107. ActDowBrf Download a file in the briefcase 1109. ActDowBrf Download a file in the briefcase
*/ */
const struct Act_Menu Act_Menu[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] = const struct Act_Menu Act_Menu[Tab_NUM_TABS][Act_MAX_OPTIONS_IN_MENU_PER_TAB] =
@ -2450,6 +2452,8 @@ struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
// Actions not in menu: // Actions not in menu:
/* ActWriAnn */{1237,-1,TabMsg,ActSeeAnn ,0x100,0x100,0x100,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Ann_ShowFormAnnouncement ,NULL}, /* ActWriAnn */{1237,-1,TabMsg,ActSeeAnn ,0x100,0x100,0x100,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Ann_ShowFormAnnouncement ,NULL},
/* ActRcvAnn */{1238,-1,TabMsg,ActSeeAnn ,0x100,0x100,0x100,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Ann_ReceiveAnnouncement ,NULL}, /* ActRcvAnn */{1238,-1,TabMsg,ActSeeAnn ,0x100,0x100,0x100,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Ann_ReceiveAnnouncement ,NULL},
/* ActHidAnn */{1470,-1,TabMsg,ActSeeAnn ,0x100,0x100,0x100,Act_CONTENT_NORM,Act_MAIN_WINDOW,Ann_HideActiveAnnouncement ,Ann_ShowAllAnnouncements ,NULL},
/* ActRevAnn */{1471,-1,TabMsg,ActSeeAnn ,0x100,0x100,0x100,Act_CONTENT_NORM,Act_MAIN_WINDOW,Ann_RevealHiddenAnnouncement,Ann_ShowAllAnnouncements ,NULL},
/* ActRemAnn */{1236,-1,TabMsg,ActSeeAnn ,0x100,0x100,0x100,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Ann_RemoveAnnouncement ,NULL}, /* ActRemAnn */{1236,-1,TabMsg,ActSeeAnn ,0x100,0x100,0x100,Act_CONTENT_NORM,Act_MAIN_WINDOW,NULL ,Ann_RemoveAnnouncement ,NULL},
/* ActShoNot */{1164,-1,TabMsg,ActSeeNot ,0x1FF,0x1FF,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,Not_ShowANotice ,Not_ListNotices ,NULL}, /* ActShoNot */{1164,-1,TabMsg,ActSeeNot ,0x1FF,0x1FF,0x000,Act_CONTENT_NORM,Act_MAIN_WINDOW,Not_ShowANotice ,Not_ListNotices ,NULL},
@ -4235,6 +4239,8 @@ Act_Action_t Act_FromActCodToAction[1+Act_MAX_ACTION_COD] = // Do not reuse uniq
ActChgPwdOth, // #1467 ActChgPwdOth, // #1467
ActChgPwdStd, // #1468 ActChgPwdStd, // #1468
ActChgPwdTch, // #1469 ActChgPwdTch, // #1469
ActHidAnn, // #1470
ActRevAnn, // #1471
}; };
/*****************************************************************************/ /*****************************************************************************/

View File

@ -70,9 +70,9 @@ typedef enum
typedef int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action typedef int Act_Action_t; // Must be a signed type, because -1 is used to indicate obsolete action
#define Act_NUM_ACTIONS (7+52+15+90+73+68+204+182+143+168+27+79) #define Act_NUM_ACTIONS (7+52+15+90+73+68+204+182+143+170+27+79)
#define Act_MAX_ACTION_COD 1469 #define Act_MAX_ACTION_COD 1471
#define Act_MAX_OPTIONS_IN_MENU_PER_TAB 20 #define Act_MAX_OPTIONS_IN_MENU_PER_TAB 20
@ -1047,163 +1047,165 @@ typedef int Act_Action_t; // Must be a signed type, because -1 is used to indica
// Secondary actions // Secondary actions
#define ActWriAnn (ActSeeFlr+ 10) #define ActWriAnn (ActSeeFlr+ 10)
#define ActRcvAnn (ActSeeFlr+ 11) #define ActRcvAnn (ActSeeFlr+ 11)
#define ActRemAnn (ActSeeFlr+ 12) #define ActHidAnn (ActSeeFlr+ 12)
#define ActShoNot (ActSeeFlr+ 13) #define ActRevAnn (ActSeeFlr+ 13)
#define ActWriNot (ActSeeFlr+ 14) #define ActRemAnn (ActSeeFlr+ 14)
#define ActRcvNot (ActSeeFlr+ 15) #define ActShoNot (ActSeeFlr+ 15)
#define ActHidNot (ActSeeFlr+ 16) #define ActWriNot (ActSeeFlr+ 16)
#define ActRevNot (ActSeeFlr+ 17) #define ActRcvNot (ActSeeFlr+ 17)
#define ActRemNot (ActSeeFlr+ 18) #define ActHidNot (ActSeeFlr+ 18)
#define ActSeeNewNtf (ActSeeFlr+ 19) #define ActRevNot (ActSeeFlr+ 19)
#define ActMrkNtfSee (ActSeeFlr+ 20) #define ActRemNot (ActSeeFlr+ 20)
#define ActSeeForCrsUsr (ActSeeFlr+ 21) #define ActSeeNewNtf (ActSeeFlr+ 21)
#define ActSeeForCrsTch (ActSeeFlr+ 22) #define ActMrkNtfSee (ActSeeFlr+ 22)
#define ActSeeForDegUsr (ActSeeFlr+ 23) #define ActSeeForCrsUsr (ActSeeFlr+ 23)
#define ActSeeForDegTch (ActSeeFlr+ 24) #define ActSeeForCrsTch (ActSeeFlr+ 24)
#define ActSeeForCtrUsr (ActSeeFlr+ 25) #define ActSeeForDegUsr (ActSeeFlr+ 25)
#define ActSeeForCtrTch (ActSeeFlr+ 26) #define ActSeeForDegTch (ActSeeFlr+ 26)
#define ActSeeForInsUsr (ActSeeFlr+ 27) #define ActSeeForCtrUsr (ActSeeFlr+ 27)
#define ActSeeForInsTch (ActSeeFlr+ 28) #define ActSeeForCtrTch (ActSeeFlr+ 28)
#define ActSeeForGenUsr (ActSeeFlr+ 29) #define ActSeeForInsUsr (ActSeeFlr+ 29)
#define ActSeeForGenTch (ActSeeFlr+ 30) #define ActSeeForInsTch (ActSeeFlr+ 30)
#define ActSeeForSWAUsr (ActSeeFlr+ 31) #define ActSeeForGenUsr (ActSeeFlr+ 31)
#define ActSeeForSWATch (ActSeeFlr+ 32) #define ActSeeForGenTch (ActSeeFlr+ 32)
#define ActSeePstForCrsUsr (ActSeeFlr+ 33) #define ActSeeForSWAUsr (ActSeeFlr+ 33)
#define ActSeePstForCrsTch (ActSeeFlr+ 34) #define ActSeeForSWATch (ActSeeFlr+ 34)
#define ActSeePstForDegUsr (ActSeeFlr+ 35) #define ActSeePstForCrsUsr (ActSeeFlr+ 35)
#define ActSeePstForDegTch (ActSeeFlr+ 36) #define ActSeePstForCrsTch (ActSeeFlr+ 36)
#define ActSeePstForCtrUsr (ActSeeFlr+ 37) #define ActSeePstForDegUsr (ActSeeFlr+ 37)
#define ActSeePstForCtrTch (ActSeeFlr+ 38) #define ActSeePstForDegTch (ActSeeFlr+ 38)
#define ActSeePstForInsUsr (ActSeeFlr+ 39) #define ActSeePstForCtrUsr (ActSeeFlr+ 39)
#define ActSeePstForInsTch (ActSeeFlr+ 40) #define ActSeePstForCtrTch (ActSeeFlr+ 40)
#define ActSeePstForGenUsr (ActSeeFlr+ 41) #define ActSeePstForInsUsr (ActSeeFlr+ 41)
#define ActSeePstForGenTch (ActSeeFlr+ 42) #define ActSeePstForInsTch (ActSeeFlr+ 42)
#define ActSeePstForSWAUsr (ActSeeFlr+ 43) #define ActSeePstForGenUsr (ActSeeFlr+ 43)
#define ActSeePstForSWATch (ActSeeFlr+ 44) #define ActSeePstForGenTch (ActSeeFlr+ 44)
#define ActRcvThrForCrsUsr (ActSeeFlr+ 45) #define ActSeePstForSWAUsr (ActSeeFlr+ 45)
#define ActRcvThrForCrsTch (ActSeeFlr+ 46) #define ActSeePstForSWATch (ActSeeFlr+ 46)
#define ActRcvThrForDegUsr (ActSeeFlr+ 47) #define ActRcvThrForCrsUsr (ActSeeFlr+ 47)
#define ActRcvThrForDegTch (ActSeeFlr+ 48) #define ActRcvThrForCrsTch (ActSeeFlr+ 48)
#define ActRcvThrForCtrUsr (ActSeeFlr+ 49) #define ActRcvThrForDegUsr (ActSeeFlr+ 49)
#define ActRcvThrForCtrTch (ActSeeFlr+ 50) #define ActRcvThrForDegTch (ActSeeFlr+ 50)
#define ActRcvThrForInsUsr (ActSeeFlr+ 51) #define ActRcvThrForCtrUsr (ActSeeFlr+ 51)
#define ActRcvThrForInsTch (ActSeeFlr+ 52) #define ActRcvThrForCtrTch (ActSeeFlr+ 52)
#define ActRcvThrForGenUsr (ActSeeFlr+ 53) #define ActRcvThrForInsUsr (ActSeeFlr+ 53)
#define ActRcvThrForGenTch (ActSeeFlr+ 54) #define ActRcvThrForInsTch (ActSeeFlr+ 54)
#define ActRcvThrForSWAUsr (ActSeeFlr+ 55) #define ActRcvThrForGenUsr (ActSeeFlr+ 55)
#define ActRcvThrForSWATch (ActSeeFlr+ 56) #define ActRcvThrForGenTch (ActSeeFlr+ 56)
#define ActRcvRepForCrsUsr (ActSeeFlr+ 57) #define ActRcvThrForSWAUsr (ActSeeFlr+ 57)
#define ActRcvRepForCrsTch (ActSeeFlr+ 58) #define ActRcvThrForSWATch (ActSeeFlr+ 58)
#define ActRcvRepForDegUsr (ActSeeFlr+ 59) #define ActRcvRepForCrsUsr (ActSeeFlr+ 59)
#define ActRcvRepForDegTch (ActSeeFlr+ 60) #define ActRcvRepForCrsTch (ActSeeFlr+ 60)
#define ActRcvRepForCtrUsr (ActSeeFlr+ 61) #define ActRcvRepForDegUsr (ActSeeFlr+ 61)
#define ActRcvRepForCtrTch (ActSeeFlr+ 62) #define ActRcvRepForDegTch (ActSeeFlr+ 62)
#define ActRcvRepForInsUsr (ActSeeFlr+ 63) #define ActRcvRepForCtrUsr (ActSeeFlr+ 63)
#define ActRcvRepForInsTch (ActSeeFlr+ 64) #define ActRcvRepForCtrTch (ActSeeFlr+ 64)
#define ActRcvRepForGenUsr (ActSeeFlr+ 65) #define ActRcvRepForInsUsr (ActSeeFlr+ 65)
#define ActRcvRepForGenTch (ActSeeFlr+ 66) #define ActRcvRepForInsTch (ActSeeFlr+ 66)
#define ActRcvRepForSWAUsr (ActSeeFlr+ 67) #define ActRcvRepForGenUsr (ActSeeFlr+ 67)
#define ActRcvRepForSWATch (ActSeeFlr+ 68) #define ActRcvRepForGenTch (ActSeeFlr+ 68)
#define ActReqDelThrCrsUsr (ActSeeFlr+ 69) #define ActRcvRepForSWAUsr (ActSeeFlr+ 69)
#define ActReqDelThrCrsTch (ActSeeFlr+ 70) #define ActRcvRepForSWATch (ActSeeFlr+ 70)
#define ActReqDelThrDegUsr (ActSeeFlr+ 71) #define ActReqDelThrCrsUsr (ActSeeFlr+ 71)
#define ActReqDelThrDegTch (ActSeeFlr+ 72) #define ActReqDelThrCrsTch (ActSeeFlr+ 72)
#define ActReqDelThrCtrUsr (ActSeeFlr+ 73) #define ActReqDelThrDegUsr (ActSeeFlr+ 73)
#define ActReqDelThrCtrTch (ActSeeFlr+ 74) #define ActReqDelThrDegTch (ActSeeFlr+ 74)
#define ActReqDelThrInsUsr (ActSeeFlr+ 75) #define ActReqDelThrCtrUsr (ActSeeFlr+ 75)
#define ActReqDelThrInsTch (ActSeeFlr+ 76) #define ActReqDelThrCtrTch (ActSeeFlr+ 76)
#define ActReqDelThrGenUsr (ActSeeFlr+ 77) #define ActReqDelThrInsUsr (ActSeeFlr+ 77)
#define ActReqDelThrGenTch (ActSeeFlr+ 78) #define ActReqDelThrInsTch (ActSeeFlr+ 78)
#define ActReqDelThrSWAUsr (ActSeeFlr+ 79) #define ActReqDelThrGenUsr (ActSeeFlr+ 79)
#define ActReqDelThrSWATch (ActSeeFlr+ 80) #define ActReqDelThrGenTch (ActSeeFlr+ 80)
#define ActDelThrForCrsUsr (ActSeeFlr+ 81) #define ActReqDelThrSWAUsr (ActSeeFlr+ 81)
#define ActDelThrForCrsTch (ActSeeFlr+ 82) #define ActReqDelThrSWATch (ActSeeFlr+ 82)
#define ActDelThrForDegUsr (ActSeeFlr+ 83) #define ActDelThrForCrsUsr (ActSeeFlr+ 83)
#define ActDelThrForDegTch (ActSeeFlr+ 84) #define ActDelThrForCrsTch (ActSeeFlr+ 84)
#define ActDelThrForCtrUsr (ActSeeFlr+ 85) #define ActDelThrForDegUsr (ActSeeFlr+ 85)
#define ActDelThrForCtrTch (ActSeeFlr+ 86) #define ActDelThrForDegTch (ActSeeFlr+ 86)
#define ActDelThrForInsUsr (ActSeeFlr+ 87) #define ActDelThrForCtrUsr (ActSeeFlr+ 87)
#define ActDelThrForInsTch (ActSeeFlr+ 88) #define ActDelThrForCtrTch (ActSeeFlr+ 88)
#define ActDelThrForGenUsr (ActSeeFlr+ 89) #define ActDelThrForInsUsr (ActSeeFlr+ 89)
#define ActDelThrForGenTch (ActSeeFlr+ 90) #define ActDelThrForInsTch (ActSeeFlr+ 90)
#define ActDelThrForSWAUsr (ActSeeFlr+ 91) #define ActDelThrForGenUsr (ActSeeFlr+ 91)
#define ActDelThrForSWATch (ActSeeFlr+ 92) #define ActDelThrForGenTch (ActSeeFlr+ 92)
#define ActCutThrForCrsUsr (ActSeeFlr+ 93) #define ActDelThrForSWAUsr (ActSeeFlr+ 93)
#define ActCutThrForCrsTch (ActSeeFlr+ 94) #define ActDelThrForSWATch (ActSeeFlr+ 94)
#define ActCutThrForDegUsr (ActSeeFlr+ 95) #define ActCutThrForCrsUsr (ActSeeFlr+ 95)
#define ActCutThrForDegTch (ActSeeFlr+ 96) #define ActCutThrForCrsTch (ActSeeFlr+ 96)
#define ActCutThrForCtrUsr (ActSeeFlr+ 97) #define ActCutThrForDegUsr (ActSeeFlr+ 97)
#define ActCutThrForCtrTch (ActSeeFlr+ 98) #define ActCutThrForDegTch (ActSeeFlr+ 98)
#define ActCutThrForInsUsr (ActSeeFlr+ 99) #define ActCutThrForCtrUsr (ActSeeFlr+ 99)
#define ActCutThrForInsTch (ActSeeFlr+100) #define ActCutThrForCtrTch (ActSeeFlr+100)
#define ActCutThrForGenUsr (ActSeeFlr+101) #define ActCutThrForInsUsr (ActSeeFlr+101)
#define ActCutThrForGenTch (ActSeeFlr+102) #define ActCutThrForInsTch (ActSeeFlr+102)
#define ActCutThrForSWAUsr (ActSeeFlr+103) #define ActCutThrForGenUsr (ActSeeFlr+103)
#define ActCutThrForSWATch (ActSeeFlr+104) #define ActCutThrForGenTch (ActSeeFlr+104)
#define ActPasThrForCrsUsr (ActSeeFlr+105) #define ActCutThrForSWAUsr (ActSeeFlr+105)
#define ActPasThrForCrsTch (ActSeeFlr+106) #define ActCutThrForSWATch (ActSeeFlr+106)
#define ActPasThrForDegUsr (ActSeeFlr+107) #define ActPasThrForCrsUsr (ActSeeFlr+107)
#define ActPasThrForDegTch (ActSeeFlr+108) #define ActPasThrForCrsTch (ActSeeFlr+108)
#define ActPasThrForCtrUsr (ActSeeFlr+109) #define ActPasThrForDegUsr (ActSeeFlr+109)
#define ActPasThrForCtrTch (ActSeeFlr+110) #define ActPasThrForDegTch (ActSeeFlr+110)
#define ActPasThrForInsUsr (ActSeeFlr+111) #define ActPasThrForCtrUsr (ActSeeFlr+111)
#define ActPasThrForInsTch (ActSeeFlr+112) #define ActPasThrForCtrTch (ActSeeFlr+112)
#define ActPasThrForGenUsr (ActSeeFlr+113) #define ActPasThrForInsUsr (ActSeeFlr+113)
#define ActPasThrForGenTch (ActSeeFlr+114) #define ActPasThrForInsTch (ActSeeFlr+114)
#define ActPasThrForSWAUsr (ActSeeFlr+115) #define ActPasThrForGenUsr (ActSeeFlr+115)
#define ActPasThrForSWATch (ActSeeFlr+116) #define ActPasThrForGenTch (ActSeeFlr+116)
#define ActDelPstForCrsUsr (ActSeeFlr+117) #define ActPasThrForSWAUsr (ActSeeFlr+117)
#define ActDelPstForCrsTch (ActSeeFlr+118) #define ActPasThrForSWATch (ActSeeFlr+118)
#define ActDelPstForDegUsr (ActSeeFlr+119) #define ActDelPstForCrsUsr (ActSeeFlr+119)
#define ActDelPstForDegTch (ActSeeFlr+120) #define ActDelPstForCrsTch (ActSeeFlr+120)
#define ActDelPstForCtrUsr (ActSeeFlr+121) #define ActDelPstForDegUsr (ActSeeFlr+121)
#define ActDelPstForCtrTch (ActSeeFlr+122) #define ActDelPstForDegTch (ActSeeFlr+122)
#define ActDelPstForInsUsr (ActSeeFlr+123) #define ActDelPstForCtrUsr (ActSeeFlr+123)
#define ActDelPstForInsTch (ActSeeFlr+124) #define ActDelPstForCtrTch (ActSeeFlr+124)
#define ActDelPstForGenUsr (ActSeeFlr+125) #define ActDelPstForInsUsr (ActSeeFlr+125)
#define ActDelPstForGenTch (ActSeeFlr+126) #define ActDelPstForInsTch (ActSeeFlr+126)
#define ActDelPstForSWAUsr (ActSeeFlr+127) #define ActDelPstForGenUsr (ActSeeFlr+127)
#define ActDelPstForSWATch (ActSeeFlr+128) #define ActDelPstForGenTch (ActSeeFlr+128)
#define ActEnbPstForCrsUsr (ActSeeFlr+129) #define ActDelPstForSWAUsr (ActSeeFlr+129)
#define ActEnbPstForCrsTch (ActSeeFlr+130) #define ActDelPstForSWATch (ActSeeFlr+130)
#define ActEnbPstForDegUsr (ActSeeFlr+131) #define ActEnbPstForCrsUsr (ActSeeFlr+131)
#define ActEnbPstForDegTch (ActSeeFlr+132) #define ActEnbPstForCrsTch (ActSeeFlr+132)
#define ActEnbPstForCtrUsr (ActSeeFlr+133) #define ActEnbPstForDegUsr (ActSeeFlr+133)
#define ActEnbPstForCtrTch (ActSeeFlr+134) #define ActEnbPstForDegTch (ActSeeFlr+134)
#define ActEnbPstForInsUsr (ActSeeFlr+135) #define ActEnbPstForCtrUsr (ActSeeFlr+135)
#define ActEnbPstForInsTch (ActSeeFlr+136) #define ActEnbPstForCtrTch (ActSeeFlr+136)
#define ActEnbPstForGenUsr (ActSeeFlr+137) #define ActEnbPstForInsUsr (ActSeeFlr+137)
#define ActEnbPstForGenTch (ActSeeFlr+138) #define ActEnbPstForInsTch (ActSeeFlr+138)
#define ActEnbPstForSWAUsr (ActSeeFlr+139) #define ActEnbPstForGenUsr (ActSeeFlr+139)
#define ActEnbPstForSWATch (ActSeeFlr+140) #define ActEnbPstForGenTch (ActSeeFlr+140)
#define ActDisPstForCrsUsr (ActSeeFlr+141) #define ActEnbPstForSWAUsr (ActSeeFlr+141)
#define ActDisPstForCrsTch (ActSeeFlr+142) #define ActEnbPstForSWATch (ActSeeFlr+142)
#define ActDisPstForDegUsr (ActSeeFlr+143) #define ActDisPstForCrsUsr (ActSeeFlr+143)
#define ActDisPstForDegTch (ActSeeFlr+144) #define ActDisPstForCrsTch (ActSeeFlr+144)
#define ActDisPstForCtrUsr (ActSeeFlr+145) #define ActDisPstForDegUsr (ActSeeFlr+145)
#define ActDisPstForCtrTch (ActSeeFlr+146) #define ActDisPstForDegTch (ActSeeFlr+146)
#define ActDisPstForInsUsr (ActSeeFlr+147) #define ActDisPstForCtrUsr (ActSeeFlr+147)
#define ActDisPstForInsTch (ActSeeFlr+148) #define ActDisPstForCtrTch (ActSeeFlr+148)
#define ActDisPstForGenUsr (ActSeeFlr+149) #define ActDisPstForInsUsr (ActSeeFlr+149)
#define ActDisPstForGenTch (ActSeeFlr+150) #define ActDisPstForInsTch (ActSeeFlr+150)
#define ActDisPstForSWAUsr (ActSeeFlr+151) #define ActDisPstForGenUsr (ActSeeFlr+151)
#define ActDisPstForSWATch (ActSeeFlr+152) #define ActDisPstForGenTch (ActSeeFlr+152)
#define ActRcvMsgUsr (ActSeeFlr+153) #define ActDisPstForSWAUsr (ActSeeFlr+153)
#define ActReqDelAllSntMsg (ActSeeFlr+154) #define ActDisPstForSWATch (ActSeeFlr+154)
#define ActReqDelAllRcvMsg (ActSeeFlr+155) #define ActRcvMsgUsr (ActSeeFlr+155)
#define ActDelAllSntMsg (ActSeeFlr+156) #define ActReqDelAllSntMsg (ActSeeFlr+156)
#define ActDelAllRcvMsg (ActSeeFlr+157) #define ActReqDelAllRcvMsg (ActSeeFlr+157)
#define ActDelSntMsg (ActSeeFlr+158) #define ActDelAllSntMsg (ActSeeFlr+158)
#define ActDelRcvMsg (ActSeeFlr+159) #define ActDelAllRcvMsg (ActSeeFlr+159)
#define ActExpSntMsg (ActSeeFlr+160) #define ActDelSntMsg (ActSeeFlr+160)
#define ActExpRcvMsg (ActSeeFlr+161) #define ActDelRcvMsg (ActSeeFlr+161)
#define ActConSntMsg (ActSeeFlr+162) #define ActExpSntMsg (ActSeeFlr+162)
#define ActConRcvMsg (ActSeeFlr+163) #define ActExpRcvMsg (ActSeeFlr+163)
#define ActLstBanUsr (ActSeeFlr+164) #define ActConSntMsg (ActSeeFlr+164)
#define ActBanUsrMsg (ActSeeFlr+165) #define ActConRcvMsg (ActSeeFlr+165)
#define ActUnbUsrMsg (ActSeeFlr+166) #define ActLstBanUsr (ActSeeFlr+166)
#define ActUnbUsrLst (ActSeeFlr+167) #define ActBanUsrMsg (ActSeeFlr+167)
#define ActCht (ActSeeFlr+168) #define ActUnbUsrMsg (ActSeeFlr+168)
#define ActUnbUsrLst (ActSeeFlr+169)
#define ActCht (ActSeeFlr+170)
/*****************************************************************************/ /*****************************************************************************/
/****************************** Statistics tab *******************************/ /****************************** Statistics tab *******************************/

View File

@ -27,6 +27,7 @@
#include <string.h> // For strncpy... #include <string.h> // For strncpy...
#include "swad_announcement.h"
#include "swad_database.h" #include "swad_database.h"
#include "swad_global.h" #include "swad_global.h"
#include "swad_parameter.h" #include "swad_parameter.h"
@ -57,7 +58,8 @@ extern struct Globals Gbl;
/***************************** Internal prototypes ***************************/ /***************************** Internal prototypes ***************************/
/*****************************************************************************/ /*****************************************************************************/
static void Ann_DrawAnAnnouncement (long AnnCod,const char *Subject,const char *Content, static void Ann_DrawAnAnnouncement (long AnnCod,Ann_Status_t Status,
const char *Subject,const char *Content,
unsigned Roles,bool ShowAllAnnouncements, unsigned Roles,bool ShowAllAnnouncements,
bool ICanEditAnnouncements); bool ICanEditAnnouncements);
static void Ann_PutHiddenParamAnnCod (long AnnCod); static void Ann_PutHiddenParamAnnCod (long AnnCod);
@ -82,6 +84,8 @@ void Ann_ShowAllAnnouncements (void)
unsigned Roles; unsigned Roles;
char Subject[Cns_MAX_BYTES_SUBJECT+1]; char Subject[Cns_MAX_BYTES_SUBJECT+1];
char Content[Cns_MAX_BYTES_TEXT+1]; char Content[Cns_MAX_BYTES_TEXT+1];
unsigned UnsignedNum;
Ann_Status_t Status;
bool ICanEditAnnouncements = (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM); bool ICanEditAnnouncements = (Gbl.Usrs.Me.LoggedRole == Rol_SYS_ADM);
/***** Put link (form) to create a new announcement *****/ /***** Put link (form) to create a new announcement *****/
@ -93,7 +97,8 @@ void Ann_ShowAllAnnouncements (void)
} }
/***** Get announcements from database *****/ /***** Get announcements from database *****/
sprintf (Query,"SELECT AnnCod,Roles,Subject,Content FROM announcements" sprintf (Query,"SELECT AnnCod,Status,Roles,Subject,Content"
" FROM announcements"
" ORDER BY AnnCod DESC"); " ORDER BY AnnCod DESC");
NumAnnouncements = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get announcements"); NumAnnouncements = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get announcements");
@ -114,21 +119,28 @@ void Ann_ShowAllAnnouncements (void)
if (sscanf (row[0],"%ld",&AnnCod) != 1) if (sscanf (row[0],"%ld",&AnnCod) != 1)
Lay_ShowErrorAndExit ("Wrong code of announcement."); Lay_ShowErrorAndExit ("Wrong code of announcement.");
/* Get roles (row[1]) */ /* Get status of the announcement (row[1]) */
if (sscanf (row[1],"%u",&Roles) != 1) Status = Ann_OBSOLETE_ANNOUNCEMENT;
if (sscanf (row[1],"%u",&UnsignedNum) == 1)
if (UnsignedNum < Ann_NUM_STATUS)
Status = (Ann_Status_t) UnsignedNum;
/* Get roles (row[2]) */
if (sscanf (row[2],"%u",&Roles) != 1)
Lay_ShowErrorAndExit ("Error when reading roles of announcement."); Lay_ShowErrorAndExit ("Error when reading roles of announcement.");
/* Get the content (row[2]) */ /* Get the content (row[3]) */
strncpy (Subject,row[2],Cns_MAX_BYTES_SUBJECT); strncpy (Subject,row[3],Cns_MAX_BYTES_SUBJECT);
Content[Cns_MAX_BYTES_SUBJECT] = '\0'; Content[Cns_MAX_BYTES_SUBJECT] = '\0';
/* Get the content (row[3]) and insert links */ /* Get the content (row[4]) and insert links */
strncpy (Content,row[3],Cns_MAX_BYTES_TEXT); strncpy (Content,row[4],Cns_MAX_BYTES_TEXT);
Content[Cns_MAX_BYTES_TEXT] = '\0'; Content[Cns_MAX_BYTES_TEXT] = '\0';
Str_InsertLinkInURLs (Content,Cns_MAX_BYTES_TEXT,50); Str_InsertLinkInURLs (Content,Cns_MAX_BYTES_TEXT,50);
/* Show the announcement */ /* Show the announcement */
Ann_DrawAnAnnouncement (AnnCod,Subject,Content,Roles,true, Ann_DrawAnAnnouncement (AnnCod,Status,Subject,Content,
Roles,true,
ICanEditAnnouncements); ICanEditAnnouncements);
} }
@ -158,9 +170,11 @@ void Ann_ShowMyAnnouncementsNotMarkedAsSeen (void)
/***** Select announcements not seen *****/ /***** Select announcements not seen *****/
// Roles == 24 ==> Teachers and students // Roles == 24 ==> Teachers and students
sprintf (Query,"SELECT AnnCod,Subject,Content FROM announcements" sprintf (Query,"SELECT AnnCod,Subject,Content FROM announcements"
" WHERE (Roles&%u)<>0 AND AnnCod NOT IN" " WHERE (Roles&%u)<>0 AND Status='%u'"
" AND AnnCod NOT IN"
" (SELECT AnnCod FROM ann_seen WHERE UsrCod='%ld')" " (SELECT AnnCod FROM ann_seen WHERE UsrCod='%ld')"
" ORDER BY AnnCod DESC", // Newest first " ORDER BY AnnCod DESC", // Newest first
(unsigned) Ann_ACTIVE_ANNOUNCEMENT,
Gbl.Usrs.Me.UsrDat.Roles, // All my roles in different courses Gbl.Usrs.Me.UsrDat.Roles, // All my roles in different courses
Gbl.Usrs.Me.UsrDat.UsrCod); Gbl.Usrs.Me.UsrDat.UsrCod);
NumAnnouncements = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get announcements"); NumAnnouncements = (unsigned) DB_QuerySELECT (Query,&mysql_res,"can not get announcements");
@ -190,7 +204,8 @@ void Ann_ShowMyAnnouncementsNotMarkedAsSeen (void)
Str_InsertLinkInURLs (Content,Cns_MAX_BYTES_TEXT,50); Str_InsertLinkInURLs (Content,Cns_MAX_BYTES_TEXT,50);
/* Show the announcement */ /* Show the announcement */
Ann_DrawAnAnnouncement (AnnCod,Subject,Content,0,false,false); Ann_DrawAnAnnouncement (AnnCod,Ann_ACTIVE_ANNOUNCEMENT,Subject,Content,
0,false,false);
} }
fprintf (Gbl.F.Out,"</div>"); fprintf (Gbl.F.Out,"</div>");
@ -201,7 +216,8 @@ void Ann_ShowMyAnnouncementsNotMarkedAsSeen (void)
/****************** Draw an announcement as a yellow note ********************/ /****************** Draw an announcement as a yellow note ********************/
/*****************************************************************************/ /*****************************************************************************/
static void Ann_DrawAnAnnouncement (long AnnCod,const char *Subject,const char *Content, static void Ann_DrawAnAnnouncement (long AnnCod,Ann_Status_t Status,
const char *Subject,const char *Content,
unsigned Roles,bool ShowAllAnnouncements, unsigned Roles,bool ShowAllAnnouncements,
bool ICanEditAnnouncements) bool ICanEditAnnouncements)
{ {
@ -209,13 +225,35 @@ static void Ann_DrawAnAnnouncement (long AnnCod,const char *Subject,const char *
extern const char *Txt_Users; extern const char *Txt_Users;
extern const char *Txt_ROLES_PLURAL_abc[Rol_NUM_ROLES][Usr_NUM_SEXS]; extern const char *Txt_ROLES_PLURAL_abc[Rol_NUM_ROLES][Usr_NUM_SEXS];
extern const char *Txt_Remove; extern const char *Txt_Remove;
extern const char *Txt_NOTICE_Active_Mark_as_obsolete;
extern const char *Txt_NOTICE_Obsolete_Mark_as_active;
extern const char *Txt_Do_not_show_again; extern const char *Txt_Do_not_show_again;
static const char *ContainerClass[Ann_NUM_STATUS] =
{
"NOTICE_CONTAINER_ACTIVE", // Ann_ACTIVE_ANNOUNCEMENT
"NOTICE_CONTAINER_OBSOLETE", // Ann_OBSOLETE_ANNOUNCEMENT
};
static const char *SubjectClass[Ann_NUM_STATUS] =
{
"NOTICE_SUBJECT_ACTIVE", // Ann_ACTIVE_ANNOUNCEMENT
"NOTICE_SUBJECT_OBSOLETE", // Ann_OBSOLETE_ANNOUNCEMENT
};
static const char *ContentClass[Ann_NUM_STATUS] =
{
"NOTICE_TEXT_ACTIVE", // Ann_ACTIVE_ANNOUNCEMENT
"NOTICE_TEXT_OBSOLETE", // Ann_OBSOLETE_ANNOUNCEMENT
};
static const char *UsersClass[Ann_NUM_STATUS] =
{
"NOTICE_AUTHOR_ACTIVE", // Ann_ACTIVE_ANNOUNCEMENT
"NOTICE_AUTHOR_OBSOLETE", // Ann_OBSOLETE_ANNOUNCEMENT
};
Rol_Role_t Role; Rol_Role_t Role;
bool RolesSelected; bool RolesSelected;
/***** Start yellow note *****/ /***** Start yellow note *****/
fprintf (Gbl.F.Out,"<div class=\"NOTICE_CONTAINER_ACTIVE\"" fprintf (Gbl.F.Out,"<div class=\"%s\" style=\"width:500px;\">",
" style=\"width:500px;\">"); ContainerClass[Status]);
if (ICanEditAnnouncements) if (ICanEditAnnouncements)
{ {
@ -232,15 +270,47 @@ static void Ann_DrawAnAnnouncement (long AnnCod,const char *Subject,const char *
Txt_Remove, Txt_Remove,
Txt_Remove); Txt_Remove);
Act_FormEnd (); Act_FormEnd ();
/* Put form to change the status of the notice */
switch (Status)
{
case Ann_ACTIVE_ANNOUNCEMENT:
Act_FormStart (ActHidAnn);
Ann_PutHiddenParamAnnCod (AnnCod);
fprintf (Gbl.F.Out,"<div class=\"CONTEXT_OPT ICON_HIGHLIGHT\">"
"<input type=\"image\""
" src=\"%s/visible_on16x16.gif\""
" alt=%s\" title=\"%s\""
" class=\"ICON16x16\" />"
"</div>",
Gbl.Prefs.IconsURL,
Txt_NOTICE_Active_Mark_as_obsolete,
Txt_NOTICE_Active_Mark_as_obsolete);
break;
case Ann_OBSOLETE_ANNOUNCEMENT:
Act_FormStart (ActRevAnn);
Ann_PutHiddenParamAnnCod (AnnCod);
fprintf (Gbl.F.Out,"<div class=\"CONTEXT_OPT ICON_HIGHLIGHT\">"
"<input type=\"image\""
" src=\"%s/hidden_on16x16.gif\""
" alt=\"%s\" title=\"%s\""
" class=\"ICON16x16\" />"
"</div>",
Gbl.Prefs.IconsURL,
Txt_NOTICE_Obsolete_Mark_as_active,
Txt_NOTICE_Obsolete_Mark_as_active);
break;
}
Act_FormEnd ();
} }
/***** Write the content of the announcement *****/ /***** Write the subject of the announcement *****/
fprintf (Gbl.F.Out,"<div class=\"NOTICE_SUBJECT_ACTIVE\">%s</div>", fprintf (Gbl.F.Out,"<div class=\"%s\">%s</div>",
Subject); SubjectClass[Status],Subject);
/***** Write the content of the announcement *****/ /***** Write the content of the announcement *****/
fprintf (Gbl.F.Out,"<div class=\"NOTICE_TEXT_ACTIVE\">%s</div>", fprintf (Gbl.F.Out,"<div class=\"%s\">%s</div>",
Content); ContentClass[Status],Content);
/***** Write form *****/ /***** Write form *****/
fprintf (Gbl.F.Out,"<div class=\"CENTER_MIDDLE\" style=\"margin:12px;\">"); fprintf (Gbl.F.Out,"<div class=\"CENTER_MIDDLE\" style=\"margin:12px;\">");
@ -248,8 +318,8 @@ static void Ann_DrawAnAnnouncement (long AnnCod,const char *Subject,const char *
if (ShowAllAnnouncements) if (ShowAllAnnouncements)
{ {
/* Users' roles who can view this announcement */ /* Users' roles who can view this announcement */
fprintf (Gbl.F.Out,"<p class=\"DAT\">%s:", fprintf (Gbl.F.Out,"<p class=\"%s\">%s:",
Txt_Users); UsersClass[Status],Txt_Users);
for (Role = Rol_STUDENT, RolesSelected = false; for (Role = Rol_STUDENT, RolesSelected = false;
Role <= Rol_TEACHER; Role <= Rol_TEACHER;
Role++) Role++)
@ -422,6 +492,45 @@ static void Ann_CreateAnnouncement (unsigned Roles,const char *Subject,const cha
DB_QueryINSERT (Query,"can not create announcement"); DB_QueryINSERT (Query,"can not create announcement");
} }
/*****************************************************************************/
/*********** Mark as hidden a global announcement that was active ************/
/*****************************************************************************/
void Ann_HideActiveAnnouncement (void)
{
char Query[256];
long AnnCod;
/***** Get the code of the global announcement to hide *****/
AnnCod = Ann_GetParamAnnCod ();
/***** Set global announcement as hidden *****/
sprintf (Query,"UPDATE announcements SET Status='%u'"
" WHERE AnnCod='%ld'",
(unsigned) Ann_OBSOLETE_ANNOUNCEMENT,AnnCod);
DB_QueryUPDATE (Query,"can not hide announcement");
}
/*****************************************************************************/
/*********** Mark as active a global announcement that was hidden ************/
/*****************************************************************************/
void Ann_RevealHiddenAnnouncement (void)
{
char Query[256];
long AnnCod;
/***** Get the code of the global announcement to show *****/
AnnCod = Ann_GetParamAnnCod ();
/***** Set global announcement as shown *****/
sprintf (Query,"UPDATE announcements SET Status='%u'"
" WHERE AnnCod='%ld'",
(unsigned) Ann_ACTIVE_ANNOUNCEMENT,AnnCod);
DB_QueryUPDATE (Query,"can not reveal announcement");
}
/*****************************************************************************/ /*****************************************************************************/
/********************** Remove a global announcement *************************/ /********************** Remove a global announcement *************************/
/*****************************************************************************/ /*****************************************************************************/

View File

@ -35,6 +35,13 @@
/******************************* Public types ********************************/ /******************************* Public types ********************************/
/*****************************************************************************/ /*****************************************************************************/
#define Ann_NUM_STATUS 2
typedef enum
{
Ann_ACTIVE_ANNOUNCEMENT = 0,
Ann_OBSOLETE_ANNOUNCEMENT = 1,
} Ann_Status_t; // Don't change these numbers because they are used in database
/*****************************************************************************/ /*****************************************************************************/
/***************************** Public prototypes *****************************/ /***************************** Public prototypes *****************************/
/*****************************************************************************/ /*****************************************************************************/
@ -44,6 +51,8 @@ void Ann_ShowMyAnnouncementsNotMarkedAsSeen (void);
void Ann_ShowFormAnnouncement (void); void Ann_ShowFormAnnouncement (void);
void Ann_ReceiveAnnouncement (void); void Ann_ReceiveAnnouncement (void);
void Ann_HideActiveAnnouncement (void);
void Ann_RevealHiddenAnnouncement (void);
void Ann_RemoveAnnouncement (void); void Ann_RemoveAnnouncement (void);
void Ann_MarkAnnouncementAsSeen (void); void Ann_MarkAnnouncementAsSeen (void);
void Ann_RemoveUsrFromSeenAnnouncements (long UsrCod); void Ann_RemoveUsrFromSeenAnnouncements (long UsrCod);

View File

@ -109,12 +109,18 @@
/****************************** Public constants *****************************/ /****************************** Public constants *****************************/
/*****************************************************************************/ /*****************************************************************************/
#define Log_PLATFORM_VERSION "SWAD 15.33.1 (2015/11/01)" #define Log_PLATFORM_VERSION "SWAD 15.34 (2015/11/01)"
// Number of lines (includes comments but not blank lines) has been got with the following command: // 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 // nl swad*.c swad*.h css/swad*.css py/swad*.py js/swad*.js soap/swad*.h sql/swad*.sql | tail -1
/* /*
Version 15.33.1: Nov 01, 2015 New layout of announcements. (186755 lines) Version 15.34: Nov 01, 2015 Global announcements can be hidden. (186896 lines)
3 changes necessary in database:
ALTER TABLE announcements ADD COLUMN Status TINYINT NOT NULL DEFAULT 0 AFTER AnnCod,ADD INDEX (Status);
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1470','es','N','Ocultar anuncio global');
INSERT INTO actions (ActCod,Language,Obsolete,Txt) VALUES ('1471','es','N','Mostrar anuncio global');
Version 15.33.1: Nov 01, 2015 New layout of global announcements. (186755 lines)
Version 15.33: Nov 01, 2015 New layout of notices. (186708 lines) Version 15.33: Nov 01, 2015 New layout of notices. (186708 lines)
Version 15.32.2: Oct 31, 2015 Fixed bug in form submit. (186618 lines) Version 15.32.2: Oct 31, 2015 Fixed bug in form submit. (186618 lines)
Version 15.32.1: Oct 31, 2015 Dates in holidays are shown in big-endian. Version 15.32.1: Oct 31, 2015 Dates in holidays are shown in big-endian.

View File

@ -206,22 +206,24 @@ mysql> DESCRIBE ann_seen;
/***** Table announcements *****/ /***** Table announcements *****/
/* /*
mysql> DESCRIBE announcements; mysql> DESCRIBE announcements;
+---------+---------+------+-----+---------+----------------+ +---------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra | | Field | Type | Null | Key | Default | Extra |
+---------+---------+------+-----+---------+----------------+ +---------+------------+------+-----+---------+----------------+
| AnnCod | int(11) | NO | PRI | NULL | auto_increment | | AnnCod | int(11) | NO | PRI | NULL | auto_increment |
| Roles | int(11) | NO | | 0 | | | Status | tinyint(4) | NO | MUL | 0 | |
| Subject | text | NO | | NULL | | | Roles | int(11) | NO | | 0 | |
| Content | text | NO | | NULL | | | Subject | text | NO | | NULL | |
+---------+---------+------+-----+---------+----------------+ | Content | text | NO | | NULL | |
4 rows in set (0.00 sec) +---------+------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
*/ */
DB_CreateTable ("CREATE TABLE IF NOT EXISTS announcements (" DB_CreateTable ("CREATE TABLE IF NOT EXISTS announcements ("
"AnnCod INT NOT NULL AUTO_INCREMENT," "AnnCod INT NOT NULL AUTO_INCREMENT,"
"Status TINYINT NOT NULL DEFAULT 0,"
"Roles INT NOT NULL DEFAULT 0," "Roles INT NOT NULL DEFAULT 0,"
"Subject TEXT NOT NULL," "Subject TEXT NOT NULL,"
"Content TEXT NOT NULL," "Content TEXT NOT NULL,"
"UNIQUE INDEX(AnnCod))"); "UNIQUE INDEX(AnnCod),INDEX(Status))");
/***** Table asg_grp *****/ /***** Table asg_grp *****/
/* /*

View File

@ -70,7 +70,7 @@ static void Not_DrawANotice (Not_Listing_t TypeNoticesListing,
time_t TimeUTC, time_t TimeUTC,
const char *Content, const char *Content,
long UsrCod, long UsrCod,
Not_Status_t NoticeStatus, Not_Status_t Status,
bool ICanEditNotices); bool ICanEditNotices);
static long Not_InsertNoticeInDB (const char *Content); static long Not_InsertNoticeInDB (const char *Content);
static void Not_UpdateNumUsrsNotifiedByEMailAboutNotice (long NotCod,unsigned NumUsrsToBeNotifiedByEMail); static void Not_UpdateNumUsrsNotifiedByEMailAboutNotice (long NotCod,unsigned NumUsrsToBeNotifiedByEMail);
@ -220,22 +220,22 @@ void Not_RevealHiddenNotice (void)
char Query[256]; char Query[256];
long NotCod; long NotCod;
/***** Get the code of the notice to show *****/ /***** Get the code of the notice to reveal *****/
NotCod = Not_GetParamNotCod (); NotCod = Not_GetParamNotCod ();
/***** Set notice as shown *****/ /***** Set notice as active *****/
sprintf (Query,"UPDATE notices SET Status='%u'" sprintf (Query,"UPDATE notices SET Status='%u'"
" WHERE NotCod='%ld' AND CrsCod='%ld'", " WHERE NotCod='%ld' AND CrsCod='%ld'",
(unsigned) Not_ACTIVE_NOTICE, (unsigned) Not_ACTIVE_NOTICE,
NotCod,Gbl.CurrentCrs.Crs.CrsCod); NotCod,Gbl.CurrentCrs.Crs.CrsCod);
DB_QueryUPDATE (Query,"can not show notice"); DB_QueryUPDATE (Query,"can not reveal notice");
/***** Update RSS of current course *****/ /***** Update RSS of current course *****/
RSS_UpdateRSSFileForACrs (&Gbl.CurrentCrs.Crs); RSS_UpdateRSSFileForACrs (&Gbl.CurrentCrs.Crs);
} }
/*****************************************************************************/ /*****************************************************************************/
/******************************* Delete a notice *****************************/ /******************************* Remove a notice *****************************/
/*****************************************************************************/ /*****************************************************************************/
void Not_DeleteNotice (void) void Not_DeleteNotice (void)
@ -299,7 +299,7 @@ void Not_ShowNotices (Not_Listing_t TypeNoticesListing)
time_t TimeUTC; time_t TimeUTC;
long UsrCod; long UsrCod;
unsigned UnsignedNum; unsigned UnsignedNum;
Not_Status_t NoticeStatus; Not_Status_t Status;
bool ICanEditNotices; bool ICanEditNotices;
/***** A course must be selected (Gbl.CurrentCrs.Crs.CrsCod > 0) *****/ /***** A course must be selected (Gbl.CurrentCrs.Crs.CrsCod > 0) *****/
@ -343,15 +343,15 @@ void Not_ShowNotices (Not_Listing_t TypeNoticesListing)
Str_LimitLengthHTMLStr (Content,Not_MAX_CHARS_ON_NOTICE); Str_LimitLengthHTMLStr (Content,Not_MAX_CHARS_ON_NOTICE);
/* Get status of the notice (row[3]) */ /* Get status of the notice (row[3]) */
NoticeStatus = Not_OBSOLETE_NOTICE; Status = Not_OBSOLETE_NOTICE;
if (sscanf (row[3],"%u",&UnsignedNum) == 1) if (sscanf (row[3],"%u",&UnsignedNum) == 1)
if (UnsignedNum < Not_NUM_STATUS) if (UnsignedNum < Not_NUM_STATUS)
NoticeStatus = (Not_Status_t) UnsignedNum; Status = (Not_Status_t) UnsignedNum;
/* Draw the notice */ /* Draw the notice */
Not_DrawANotice (TypeNoticesListing, Not_DrawANotice (TypeNoticesListing,
Gbl.CurrentCrs.Notices.HighlightNotCod, Gbl.CurrentCrs.Notices.HighlightNotCod,
TimeUTC,Content,UsrCod,NoticeStatus, TimeUTC,Content,UsrCod,Status,
ICanEditNotices); ICanEditNotices);
} }
@ -440,15 +440,15 @@ void Not_ShowNotices (Not_Listing_t TypeNoticesListing)
Str_LimitLengthHTMLStr (Content,Not_MAX_CHARS_ON_NOTICE); Str_LimitLengthHTMLStr (Content,Not_MAX_CHARS_ON_NOTICE);
/* Get status of the notice (row[4]) */ /* Get status of the notice (row[4]) */
NoticeStatus = Not_OBSOLETE_NOTICE; Status = Not_OBSOLETE_NOTICE;
if (sscanf (row[4],"%u",&UnsignedNum) == 1) if (sscanf (row[4],"%u",&UnsignedNum) == 1)
if (UnsignedNum < Not_NUM_STATUS) if (UnsignedNum < Not_NUM_STATUS)
NoticeStatus = (Not_Status_t) UnsignedNum; Status = (Not_Status_t) UnsignedNum;
/* Draw the notice */ /* Draw the notice */
Not_DrawANotice (TypeNoticesListing, Not_DrawANotice (TypeNoticesListing,
NotCod, NotCod,
TimeUTC,Content,UsrCod,NoticeStatus, TimeUTC,Content,UsrCod,Status,
ICanEditNotices); ICanEditNotices);
} }
@ -475,7 +475,7 @@ static void Not_DrawANotice (Not_Listing_t TypeNoticesListing,
time_t TimeUTC, time_t TimeUTC,
const char *Content, const char *Content,
long UsrCod, long UsrCod,
Not_Status_t NoticeStatus, Not_Status_t Status,
bool ICanEditNotices) bool ICanEditNotices)
{ {
extern const char *The_ClassForm[The_NUM_THEMES]; extern const char *The_ClassForm[The_NUM_THEMES];
@ -510,7 +510,7 @@ static void Not_DrawANotice (Not_Listing_t TypeNoticesListing,
/***** Start yellow note *****/ /***** Start yellow note *****/
fprintf (Gbl.F.Out,"<div class=\"%s\" style=\"width:%upx;\">", fprintf (Gbl.F.Out,"<div class=\"%s\" style=\"width:%upx;\">",
ContainerClass[NoticeStatus], ContainerClass[Status],
Not_ContainerWidth[TypeNoticesListing]); Not_ContainerWidth[TypeNoticesListing]);
/***** Write the date in the top part of the yellow note *****/ /***** Write the date in the top part of the yellow note *****/
@ -533,8 +533,8 @@ static void Not_DrawANotice (Not_Listing_t TypeNoticesListing,
Txt_Remove); Txt_Remove);
Act_FormEnd (); Act_FormEnd ();
/* Put form to change the state of the notice */ /* Put form to change the status of the notice */
switch (NoticeStatus) switch (Status)
{ {
case Not_ACTIVE_NOTICE: case Not_ACTIVE_NOTICE:
Act_FormStart (ActHidNot); Act_FormStart (ActHidNot);
@ -567,7 +567,7 @@ static void Not_DrawANotice (Not_Listing_t TypeNoticesListing,
} }
else // Don't put forms else // Don't put forms
/* Status of the notice */ /* Status of the notice */
switch (NoticeStatus) switch (Status)
{ {
case Not_ACTIVE_NOTICE: case Not_ACTIVE_NOTICE:
fprintf (Gbl.F.Out,"<span title=\"%s\">" fprintf (Gbl.F.Out,"<span title=\"%s\">"
@ -597,13 +597,13 @@ static void Not_DrawANotice (Not_Listing_t TypeNoticesListing,
/* Write the date */ /* Write the date */
UniqueId++; UniqueId++;
fprintf (Gbl.F.Out,"<div class=\"%s\">", fprintf (Gbl.F.Out,"<div class=\"%s\">",
DateClass[NoticeStatus]); DateClass[Status]);
if (TypeNoticesListing == Not_LIST_BRIEF_NOTICES) if (TypeNoticesListing == Not_LIST_BRIEF_NOTICES)
{ {
/* Form to view full notice */ /* Form to view full notice */
Act_FormStart (ActShoNot); Act_FormStart (ActShoNot);
Not_PutHiddenParamNotCod (NotCod); Not_PutHiddenParamNotCod (NotCod);
Act_LinkFormSubmit (Txt_See_full_notice,DateClass[NoticeStatus]); Act_LinkFormSubmit (Txt_See_full_notice,DateClass[Status]);
} }
fprintf (Gbl.F.Out,"<span id=\"notice_date_%u\"></span>", fprintf (Gbl.F.Out,"<span id=\"notice_date_%u\"></span>",
UniqueId); UniqueId);
@ -620,7 +620,7 @@ static void Not_DrawANotice (Not_Listing_t TypeNoticesListing,
/***** Write the content of the notice *****/ /***** Write the content of the notice *****/
fprintf (Gbl.F.Out,"<div class=\"%s\">%s", fprintf (Gbl.F.Out,"<div class=\"%s\">%s",
TextClass[NoticeStatus],Content); TextClass[Status],Content);
if (TypeNoticesListing == Not_LIST_BRIEF_NOTICES) if (TypeNoticesListing == Not_LIST_BRIEF_NOTICES)
{ {
fprintf (Gbl.F.Out,"<div class=\"CENTER_MIDDLE\">"); fprintf (Gbl.F.Out,"<div class=\"CENTER_MIDDLE\">");
@ -642,7 +642,7 @@ static void Not_DrawANotice (Not_Listing_t TypeNoticesListing,
/***** Write the author *****/ /***** Write the author *****/
fprintf (Gbl.F.Out,"<div class=\"%s\">", fprintf (Gbl.F.Out,"<div class=\"%s\">",
AuthorClass[NoticeStatus]); AuthorClass[Status]);
Usr_UsrDataConstructor (&UsrDat); Usr_UsrDataConstructor (&UsrDat);
UsrDat.UsrCod = UsrCod; UsrDat.UsrCod = UsrCod;
if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat)) // Get from the database the data of the autor if (Usr_ChkUsrCodAndGetAllUsrDataFromUsrCod (&UsrDat)) // Get from the database the data of the autor
@ -701,7 +701,7 @@ void Not_GetNotifNotice (char *SummaryStr,char **ContentStr,long NotCod,unsigned
// Returns the number of (active or obsolete) notices // Returns the number of (active or obsolete) notices
// sent from this location (all the platform, current degree or current course) // sent from this location (all the platform, current degree or current course)
unsigned Not_GetNumNotices (Sco_Scope_t Scope,Not_Status_t NoticeStatus,unsigned *NumNotif) unsigned Not_GetNumNotices (Sco_Scope_t Scope,Not_Status_t Status,unsigned *NumNotif)
{ {
char Query[1024]; char Query[1024];
MYSQL_RES *mysql_res; MYSQL_RES *mysql_res;
@ -715,7 +715,7 @@ unsigned Not_GetNumNotices (Sco_Scope_t Scope,Not_Status_t NoticeStatus,unsigned
sprintf (Query,"SELECT COUNT(*),SUM(NumNotif)" sprintf (Query,"SELECT COUNT(*),SUM(NumNotif)"
" FROM notices" " FROM notices"
" WHERE Status='%u'", " WHERE Status='%u'",
NoticeStatus); Status);
break; break;
case Sco_SCOPE_CTY: case Sco_SCOPE_CTY:
sprintf (Query,"SELECT COUNT(*),SUM(notices.NumNotif)" sprintf (Query,"SELECT COUNT(*),SUM(notices.NumNotif)"
@ -727,7 +727,7 @@ unsigned Not_GetNumNotices (Sco_Scope_t Scope,Not_Status_t NoticeStatus,unsigned
" AND courses.CrsCod=notices.CrsCod" " AND courses.CrsCod=notices.CrsCod"
" AND notices.Status='%u'", " AND notices.Status='%u'",
Gbl.CurrentCty.Cty.CtyCod, Gbl.CurrentCty.Cty.CtyCod,
NoticeStatus); Status);
break; break;
case Sco_SCOPE_INS: case Sco_SCOPE_INS:
sprintf (Query,"SELECT COUNT(*),SUM(notices.NumNotif)" sprintf (Query,"SELECT COUNT(*),SUM(notices.NumNotif)"
@ -738,7 +738,7 @@ unsigned Not_GetNumNotices (Sco_Scope_t Scope,Not_Status_t NoticeStatus,unsigned
" AND courses.CrsCod=notices.CrsCod" " AND courses.CrsCod=notices.CrsCod"
" AND notices.Status='%u'", " AND notices.Status='%u'",
Gbl.CurrentIns.Ins.InsCod, Gbl.CurrentIns.Ins.InsCod,
NoticeStatus); Status);
break; break;
case Sco_SCOPE_CTR: case Sco_SCOPE_CTR:
sprintf (Query,"SELECT COUNT(*),SUM(notices.NumNotif)" sprintf (Query,"SELECT COUNT(*),SUM(notices.NumNotif)"
@ -748,7 +748,7 @@ unsigned Not_GetNumNotices (Sco_Scope_t Scope,Not_Status_t NoticeStatus,unsigned
" AND courses.CrsCod=notices.CrsCod" " AND courses.CrsCod=notices.CrsCod"
" AND notices.Status='%u'", " AND notices.Status='%u'",
Gbl.CurrentCtr.Ctr.CtrCod, Gbl.CurrentCtr.Ctr.CtrCod,
NoticeStatus); Status);
break; break;
case Sco_SCOPE_DEG: case Sco_SCOPE_DEG:
sprintf (Query,"SELECT COUNT(*),SUM(notices.NumNotif)" sprintf (Query,"SELECT COUNT(*),SUM(notices.NumNotif)"
@ -757,7 +757,7 @@ unsigned Not_GetNumNotices (Sco_Scope_t Scope,Not_Status_t NoticeStatus,unsigned
" AND courses.CrsCod=notices.CrsCod" " AND courses.CrsCod=notices.CrsCod"
" AND notices.Status='%u'", " AND notices.Status='%u'",
Gbl.CurrentDeg.Deg.DegCod, Gbl.CurrentDeg.Deg.DegCod,
NoticeStatus); Status);
break; break;
case Sco_SCOPE_CRS: case Sco_SCOPE_CRS:
sprintf (Query,"SELECT COUNT(*),SUM(NumNotif)" sprintf (Query,"SELECT COUNT(*),SUM(NumNotif)"
@ -765,7 +765,7 @@ unsigned Not_GetNumNotices (Sco_Scope_t Scope,Not_Status_t NoticeStatus,unsigned
" WHERE CrsCod='%ld'" " WHERE CrsCod='%ld'"
" AND Status='%u'", " AND Status='%u'",
Gbl.CurrentCrs.Crs.CrsCod, Gbl.CurrentCrs.Crs.CrsCod,
NoticeStatus); Status);
break; break;
default: default:
Lay_ShowErrorAndExit ("Wrong scope."); Lay_ShowErrorAndExit ("Wrong scope.");

View File

@ -64,7 +64,7 @@ void Not_DeleteNotice (void);
void Not_ShowANotice (void); void Not_ShowANotice (void);
void Not_ShowNotices (Not_Listing_t TypeNoticesListing); void Not_ShowNotices (Not_Listing_t TypeNoticesListing);
void Not_GetNotifNotice (char *SummaryStr,char **ContentStr,long NotCod,unsigned MaxChars,bool GetContent); void Not_GetNotifNotice (char *SummaryStr,char **ContentStr,long NotCod,unsigned MaxChars,bool GetContent);
unsigned Not_GetNumNotices (Sco_Scope_t Scope,Not_Status_t NoticeStatus,unsigned *NumNotif); unsigned Not_GetNumNotices (Sco_Scope_t Scope,Not_Status_t Status,unsigned *NumNotif);
unsigned Not_GetNumNoticesDeleted (Sco_Scope_t Scope,unsigned *NumNotif); unsigned Not_GetNumNoticesDeleted (Sco_Scope_t Scope,unsigned *NumNotif);
#endif #endif