Version19.113

This commit is contained in:
Antonio Cañas Vargas 2020-01-08 14:04:25 +01:00
parent 4d6c9c7587
commit b5f15eed03
24 changed files with 841 additions and 1572 deletions

View File

@ -93,664 +93,6 @@ extern struct Globals Gbl;
/*****************************************************************************/
/************************* Private global variables **************************/
/*****************************************************************************/
/*
Files:
706. ActAdmDocGrp Admin the files of the documents zone of a group
707. ActReqRemFilDocGrp Request removal of a file in the documents zone of a group
708. ActRemFilDocGrp Remove a file in the documents zone of a group
709. ActRemFolDocGrp Remove a folder empty in the documents zone of a group
710. ActCopDocGrp Set source of copy in the documents zone of a group
711. ActPasDocGrp Paste a folder or file in the documents zone of a group
712. ActRemTreDocGrp Remove a folder no empty in the documents zone of a group
713. ActFrmCreDocGrp Form to crear a folder or file in the documents zone of a group
714. ActCreFolDocGrp Create a new folder in the documents zone of a group
715. ActCreLnkDocGrp Create a new link in the documents zone of a group
716. ActRenFolDocGrp Rename a folder in the documents zone of a group
717. ActRcvFilDocGrpDZ Receive a file in the documents zone of a group using Dropzone.js
718. ActRcvFilDocGrpCla Receive a file in the documents zone of a group using the classic way
719. ActExpAdmDocGrp Expand a folder when administrating the documents zone of a group
720. ActConAdmDocGrp Contract a folder when administrating the documents zone of a group
721. ActZIPAdmDocGrp Compress a folder when administrating the documents zone of a group
722. ActShoDocGrp Show hidden folder or file of download
723. ActHidDocGrp Hide folder or file of download
724. ActReqDatAdmDocGrp Ask for metadata of a file of the documents zone of a group
725. ActChgDatAdmDocGrp Change metadata of a file of the documents zone of a group
726. ActDowAdmDocGrp Download a file of the documents zone of a group
727. ActChgToAdmTch Change to administrate teachers' files of the course/group
728. ActAdmTchCrs Admin the teachers' files zone of the course
729. ActReqRemFilTchCrs Request removal of a teachers' file of the course
730. ActRemFilTchCrs Remove a teachers' file of the course
731. ActRemFolTchCrs Remove an empty teachers' folder of the course
732. ActCopTchCrs Set source of teachers' zone of the course
733. ActPasTchCrs Paste a folder or file in teachers' zone of the course
734. ActRemTreTchCrs Remove a folder no empty of teachers' zone of the course
735. ActFrmCreTchCrs Form to crear a folder or file in teachers' zone of the course
736. ActCreFolTchCrs Create a new folder in teachers' zone of the course
737. ActCreLnkTchCrs Create a new link in teachers' zone of the course
738. ActRenFolTchCrs Rename a folder in teachers' zone of the course
739. ActRcvFilTchCrsDZ Receive a file in teachers' zone of the course using Dropzone.js
740. ActRcvFilTchCrsCla Receive a file in teachers' zone of the course using the classic way
741. ActExpTchCrs Expand a folder in teachers' zone of the course
742. ActConTchCrs Contract a folder in teachers' zone of the course
743. ActZIPTchCrs Compress a folder in teachers' zone of the course
744. ActReqDatTchCrs Ask for metadata of a file of the teachers' zone of the course
745. ActChgDatTchCrs Change metadata of a file of the teachers' zone of the course
746. ActDowTchCrs Download a file of the teachers' zone of the course
747. ActAdmTchGrp Admin the teachers' files zone of a group
748. ActReqRemFilTchGrp Request removal of a teachers' file of a group
749. ActRemFilTchGrp Remove a teachers' file of a group
750. ActRemFolTchGrp Remove an empty teachers' folder of a group
751. ActCopTchGrp Set source of copy in teachers' zone of a group
752. ActPasTchGrp Paste a folder or file in teachers' zone of a group
753. ActRemTreTchGrp Remove a folder no empty of teachers' zone of a group
754. ActFrmCreTchGrp Form to crear a folder or file in teachers' zone of a group
755. ActCreFolTchGrp Create a new folder in teachers' zone of a group
756. ActCreLnkTchGrp Create a new link in teachers' zone of a group
757. ActRenFolTchGrp Rename a folder in teachers' zone of a group
758. ActRcvFilTchGrpDZ Receive a file in teachers' zone of a group using Dropzone.js
759. ActRcvFilTchGrpCla Receive a file in teachers' zone of a group using the classic way
760. ActExpTchGrp Expand a folder in teachers' zone of a group
761. ActConTchGrp Contract a folder in teachers' zone of a group
762. ActZIPTchGrp Compress a folder in teachers' zone of a group
763. ActReqDatTchGrp Ask for metadata of a file of the teachers' zone of a group
764. ActChgDatTchGrp Change metadata of a file of the teachers' zone of a group
765. ActDowTchGrp Download a file of the teachers' zone of a group
766. ActChgToAdmSha Change to administrate shared files of the course/group
767. ActAdmShaCrs Admin the shared files zone of the course
768. ActReqRemFilShaCrs Request removal of a shared file of the course
769. ActRemFilShaCrs Remove a shared file of the course
770. ActRemFolShaCrs Remove a empty shared folder of the course
771. ActCopShaCrs Set source of copy in shared zone of the course
772. ActPasShaCrs Paste a folder or file in shared zone of the course
773. ActRemTreShaCrs Remove a folder no empty of shared zone of the course
774. ActFrmCreShaCrs Form to crear a folder or file in shared zone of the course
775. ActCreFolShaCrs Create a new folder in shared zone of the course
776. ActCreLnkShaCrs Create a new link in shared zone of the course
777. ActRenFolShaCrs Rename a folder in shared zone of the course
778. ActRcvFilShaCrsDZ Receive a file in shared zone of the course using Dropzone.js
779. ActRcvFilShaCrsCla Receive a file in shared zone of the course using the classic way
780. ActExpShaCrs Expand a folder in shared zone of the course
781. ActConShaCrs Contract a folder in shared zone of the course
782. ActZIPShaCrs Compress a folder in shared zone of the course
783. ActReqDatShaCrs Ask for metadata of a file of the shared zone of the course
784. ActChgDatShaCrs Change metadata of a file of the shared zone of the course
785. ActDowShaCrs Download a file of the shared zone of the course
786. ActAdmShaGrp Admin the shared files zone of a group
787. ActReqRemFilShaGrp Request removal of a shared file of a group
788. ActRemFilShaGrp Remove a shared file of a group
789. ActRemFolShaGrp Remove a folder empty común of a group
790. ActCopShaGrp Set source of copy in shared zone of a group
791. ActPasShaGrp Paste a folder or file in shared zone of a group
792. ActRemTreShaGrp Remove a folder no empty of shared zone of a group
793. ActFrmCreShaGrp Form to crear a folder or file in shared zone of a group
794. ActCreFolShaGrp Create a new folder in shared zone of a group
795. ActCreLnkShaGrp Create a new link in shared zone of a group
796. ActRenFolShaGrp Rename a folder in shared zone of a group
797. ActRcvFilShaGrpDZ Receive a file in shared zone of a group using Dropzone.js
798. ActRcvFilShaGrpCla Receive a file in shared zone of a group using the classic way
799. ActExpShaGrp Expand a folder in shared zone of a group
800. ActConShaGrp Contract a folder in shared zone of a group
801. ActZIPShaGrp Compress a folder in shared zone of a group
802. ActReqDatShaGrp Ask for metadata of a file of the shared zone of a group
803. ActChgDatShaGrp Change metadata of a file of the shared zone of a group
804. ActDowShaGrp Download a file of the shared zone of a group
805. ActAdmAsgWrkCrs Edit all the works sent to the course
806. ActReqRemFilAsgUsr Request removal of a file of assignments from a user
807. ActRemFilAsgUsr Remove a file of assignments from a user
808. ActRemFolAsgUsr Remove an empty folder of assignments of a user
809. ActCopAsgUsr Set origin of copy in assignments of a user
810. ActPasAsgUsr Paste a file or folder of assignments of a user
811. ActRemTreAsgUsr Remove a not empty folder of assignments of a user
812. ActFrmCreAsgUsr Form to create a new folder or file of assignments of a user
813. ActCreFolAsgUsr Create a new folder of assignments of a user
814. ActCreLnkAsgUsr Create a new link of assignments of a user
815. ActRenFolAsgUsr Rename a folder of assignments of a user
816. ActRcvFilAsgUsrDZ Receive a new file of assignments of a user using Dropzone.js
817. ActRcvFilAsgUsrCla Receive a new file of assignments of a user using the classic way
818. ActExpAsgUsr Expand a folder of assignments of a user
819. ActConAsgUsr Contract a folder of assignments of a user
820. ActZIPAsgUsr Compress a folder of assignments of a user
821. ActReqDatAsgUsr Ask for metadata of a file of assignments of a user
822. ActChgDatAsgUsr Change metadata of a file of assignments of a user
823. ActDowAsgUsr Download a file of assignments of a user
824. ActReqRemFilWrkUsr Request removal of a file of works from a user
825. ActRemFilWrkUsr Remove a file of works from a user
826. ActRemFolWrkUsr Remove an empty folder of works of a user
827. ActCopWrkUsr Set origin of copy in works of a user
828. ActPasWrkUsr Paste a file or folder of works of a user
829. ActRemTreWrkUsr Remove a not empty folder of works of a user
830. ActFrmCreWrkUsr Form to create a new folder or file of works of a user
831. ActCreFolWrkUsr Create a new folder of works of a user
832. ActCreLnkWrkUsr Create a new link of works of a user
833. ActRenFolWrkUsr Rename a folder of works of a user
834. ActRcvFilWrkUsrDZ Receive a new file of works of a user using Dropzone.js
835. ActRcvFilWrkUsrCla Receive a new file of works of a user using the classic way
836. ActExpWrkUsr Expand a folder of works of a user
837. ActConWrkUsr Contract a folder of works of a user
838. ActZIPWrkUsr Compress a folder of works of a user
839. ActReqDatWrkUsr Ask for metadata of a file of works of a user
840. ActChgDatWrkUsr Change metadata of a file of works of a user
841. ActDowWrkUsr Download a file of works of a user
842. ActReqRemFilAsgCrs Request removal of a file of assignments in the course
843. ActRemFilAsgCrs Remove a file of assignments in the course
844. ActRemFolAsgCrs Remove an empty folder of assignments in the course
845. ActCopAsgCrs Set origin of copy in assignments in the course
846. ActPasAsgCrs Paste a file or folder of assignments in the course
847. ActRemTreAsgCrs Remove a not empty folder of assignments in the course
848. ActFrmCreAsgCrs Form to create a new folder or file of assignments in the course
849. ActCreFolAsgCrs Create a new folder of assignments in the course
850. ActCreLnkAsgCrs Create a new link of assignments in the course
851. ActRenFolAsgCrs Rename a folder of assignments in the course
852. ActRcvFilAsgCrsDZ Receive a file of assignments in the course using Dropzone.js
853. ActRcvFilAsgCrsCla Receive a file of assignments in the course using the classic way
854. ActExpAsgCrs Expand a folder of assignments in a course
855. ActConAsgCrs Contract a folder of assignments in a course
856. ActZIPAsgCrs Compress a folder of assignments in a course
857. ActReqDatAsgCrs Ask for metadata of a file of assignments in a course
858. ActChgDatAsgCrs Change metadata of a file of assignments in a course
859. ActDowAsgCrs Download a file of assignments in a course
860. ActReqRemFilWrkCrs Request removal of a file of works in the course
861. ActRemFilWrkCrs Remove a file of works in the course
862. ActRemFolWrkCrs Remove an empty folder of works in the course
863. ActCopWrkCrs Set origin of copy in works in the course
864. ActPasWrkCrs Paste a file or folder of works in the course
865. ActRemTreWrkCrs Remove a not empty folder of works in the course
866. ActFrmCreWrkCrs Form to create a new folder or file of works in the course
867. ActCreFolWrkCrs Create a new folder of works in the course
868. ActCreLnkWrkCrs Create a new link of works in the course
869. ActRenFolWrkCrs Rename a folder of works in the course
870. ActRcvFilWrkCrsDZ Receive a file of works in the course using Dropzone.js
871. ActRcvFilWrkCrsCla Receive a file of works in the course using the classic way
872. ActExpWrkCrs Expand a folder of works in a course
873. ActConWrkCrs Contract a folder of works in a course
874. ActZIPWrkCrs Compress a folder of works in a course
875. ActReqDatWrkCrs Ask for metadata of a file of works in a course
876. ActChgDatWrkCrs Change metadata of a file of works in a course
877. ActDowWrkCrs Download a file of works in a course
878. ActChgToSeeMrk Change to see marks in course/group
879. ActSeeMrkCrs See marks in course
880. ActExpSeeMrkCrs Expand a folder in marks in course
881. ActConSeeMrkCrs Contract a folder in marks in course
882. ActReqDatSeeMrkCrs Ask for metadata of a file of the marks zone of the course
883. ActSeeMyMrkCrs Individualized access to marks in course
884. ActSeeMrkGrp See marks in group
885. ActExpSeeMrkGrp Expand a folder in marks in group
886. ActConSeeMrkGrp Contract a folder in marks in group
887. ActReqDatSeeMrkGrp Ask for metadata of a file of the marks zone of a group
888. ActSeeMyMrkGrp Individualized access to marks in group
889. ActChgToAdmMrk Change to admin marks in course/group
890. ActAdmMrkCrs Admin the files of the zone of marks in course
891. ActReqRemFilMrkCrs Request removal of a file of marks in course
892. ActRemFilMrkCrs Remove a file of marks in course
893. ActRemFolMrkCrs Remove a folder empty of marks in course
894. ActCopMrkCrs Set source of copy in marks in course
895. ActPasMrkCrs Paste a folder or file in marks in course
896. ActRemTreMrkCrs Remove a folder no empty of marks in course
897. ActFrmCreMrkCrs Form to crear a folder or file in marks in course
898. ActCreFolMrkCrs Create a new folder in marks in course
899. ActRenFolMrkCrs Rename a folder in marks in course
900. ActRcvFilMrkCrsDZ Receive a file of marks in course using Dropzone.js
901. ActRcvFilMrkCrsCla Receive a file of marks in course using the classic way
902. ActExpAdmMrkCrs Expand a folder in marks administration in course
903. ActConAdmMrkCrs Contract a folder in marks administration in course
904. ActZIPAdmMrkCrs Compress a folder in marks administration in course
905. ActShoMrkCrs Show hidden folder or file of the marks administration in course
906. ActHidMrkCrs Hide folder or file of the marks administration in course
907. ActReqDatAdmMrkCrs Ask for metadata of a file in marks administration in course
908. ActChgDatAdmMrkCrs Change metadata of a file in marks administration in course
909. ActDowAdmMrkCrs Download a file in marks administration in course
910. ActChgNumRowHeaCrs Change the number of rows of cabecera of a file of marks in course
911. ActChgNumRowFooCrs Change the number of rows of pie of a file of marks in course
912. ActAdmMrkGrp Admin the files of the zone of marks in group
913. ActReqRemFilMrkGrp Request removal of a file of marks in group
914. ActRemFilMrkGrp Remove a file of marks in group
915. ActRemFolMrkGrp Remove a folder empty of marks in group
916. ActCopMrkGrp Set source of copy in marks in group
917. ActPasMrkGrp Paste a folder or file in marks in group
918. ActRemTreMrkGrp Remove a folder no empty of marks in group
919. ActFrmCreMrkGrp Form to crear a folder or file in marks in group
920. ActCreFolMrkGrp Create a new folder in marks in group
921. ActRenFolMrkGrp Rename a folder in marks in group
922. ActRcvFilMrkGrpDZ Receive a file to marks in group using Dropzone.js
923. ActRcvFilMrkGrpCla Receive a file to marks in group using the classic way
924. ActExpAdmMrkGrp Expand a folder in marks administration in group
925. ActConAdmMrkGrp Contract a folder in marks administration in group
926. ActZIPAdmMrkGrp Compress a folder in marks administration in group
927. ActShoMrkGrp Show hidden folder or file of the marks administration in group
928. ActHidMrkGrp Hide folder or file of the marks administration in group
929. ActReqDatAdmMrkGrp Ask for metadata of a file in marks administration in group
930. ActChgDatAdmMrkGrp Change metadata of a file in marks administration in group
931. ActDowAdmMrkGrp Download a file in marks administration in group
932. ActChgNumRowHeaGrp Change the number of rows of cabecera of a file of marks in group
933. ActChgNumRowFooGrp Change the number of rows of pie of a file of marks in group
934. ActReqRemFilBrf Request removal of a file of the briefcase
935. ActRemFilBrf Remove a file of the briefcase
936. ActRemFolBrf Remove a folder empty of the briefcase
937. ActCopBrf Set source of copy in the briefcase
938. ActPasBrf Paste a folder or file in the briefcase
939. ActRemTreBrf Remove a folder no empty of the briefcase
940. ActFrmCreBrf Form to crear a folder or file in the briefcase
941. ActCreFolBrf Create a new folder in the briefcase
942. ActCreLnkBrf Create a new link in the briefcase
943. ActRenFolBrf Rename a folder of the briefcase
944. ActRcvFilBrfDZ Receive a file in the briefcase using Dropzone.js
945. ActRcvFilBrfCla Receive a file in the briefcase using the classic way
946. ActExpBrf Expand a folder in briefcase
947. ActConBrf Contract a folder in briefcase
948. ActZIPBrf Compress a folder in briefcase
949. ActReqDatBrf Ask for metadata of a file in the briefcase
950. ActChgDatBrf Change metadata of a file in the briefcase
951. ActDowBrf Download a file in the briefcase
952. ActReqRemOldBrf Ask for removing old files in the briefcase
953. ActRemOldBrf Remove old files in the briefcase
Users:
954. ActReqSelGrp Request the selection of groups of students
955. ActLstStd Show class photo or list of students
956. ActLstTch Show class photo or list of teachers
957. ActLstOth Show class photo or list of guests
958. ActSeeAtt Show attendance events
959. ActReqSignUp Apply for my enrolment
960. ActSeeSignUpReq Show pending requests for inscription in the current course
961. ActLstCon List connected users
962. ActChgGrp Change my groups
963. ActReqEdiGrp Request the edition of groups
964. ActNewGrpTyp Request the creation of a type of group
965. ActReqRemGrpTyp Request the removal of a type of group
966. ActRemGrpTyp Remove a type of group of students
967. ActRenGrpTyp Request renaming of a type of group of students
968. ActChgMdtGrpTyp Request change if it is mandatory to register in groups of a type
969. ActChgMulGrpTyp Request change if it is possible to register in multiple groups of a type
970. ActChgTimGrpTyp Request change when the groups of a type will be open
971. ActNewGrp Request the creation of a group
972. ActReqRemGrp Request the removal of a group
973. ActRemGrp Remove a group
974. ActOpeGrp Open a group
975. ActCloGrp Close a group
976. ActEnaFilZonGrp Enable filezones of a group
977. ActDisFilZonGrp Disable filezones of a group
978. ActChgGrpTyp Change the type of group of a group
979. ActRenGrp Rename a group
980. ActChgGrpCla Change the classroom of a group
981. ActChgMaxStdGrp Change the maximum number of students in a group
982. ActLstGst List main data of administrators
983. ActPrnGstPho Show the class photo of guests ready to be printed
984. ActPrnStdPho Show the class photo of students ready to be printed
985. ActPrnTchPho Show the class photo of teachers ready to be printed
986. ActLstGstAll List in another window the full data of guests
987. ActLstStdAll List in another window the full data of students
988. ActLstTchAll List in another window the full data of teachers
989. ActSeeRecOneStd Show record of one selected student
990. ActSeeRecOneTch Show record of one selected teacher
991. ActDoActOnSevGst Do action on several selected guests
992. ActDoActOnSevStd Do action on several selected students
993. ActDoActOnSevTch Do action on several selected teachers
994. ActPrnRecSevGst Show records of several selected guests
995. ActPrnRecSevStd Show records of several selected students
996. ActPrnRecSevTch Show records of several selected teachers
997. ActPrnRecSevGst Show records of several selected guests ready to be printed
998. ActPrnRecSevStd Show records of several selected students ready to be printed
999. ActPrnRecSevTch Show records of several selected teachers ready to be printed
1000. ActRcvRecOthUsr Update record fields of a student in this course
1001. ActEdiRecFie Request the edition of record fields of students
1002. ActNewFie Request the creation of a record field
1003. ActReqRemFie Request the removal of record field
1004. ActRemFie Remove a record field
1005. ActRenFie Request renaming of record field
1006. ActChgRowFie Request change in number of lines of form of a record field
1007. ActChgVisFie Request change in visibility of a record field
1008. ActRcvRecCrs Receive and update fields of my record in this course
1009. ActFrmLogInUsrAgd Put form to log in to show another user's public agenda
1010. ActLogInUsrAgd Show another user's public agenda after log in
1011. ActLogInUsrAgdLan Show another user's public agenda after change language
1012. ActSeeUsrAgd Show another user's public agenda
1013. ActReqEnrSevStd Request the enrolment/removing of several students to / from current course
1014. ActReqEnrSevNET Request the enrolment/removing of several non-editing teachers to / from current course
1015. ActReqEnrSevTch Request the enrolment/removing of several teachers to / from current course
1016. ActReqLstUsrAtt Request listing of attendance of several students to several events
1017. ActSeeLstMyAtt List my attendance as student to several events
1018. ActPrnLstMyAtt Print my attendance as student to several events
1019. ActSeeLstUsrAtt List attendance of several students to several events
1020. ActPrnLstUsrAtt Print attendance of several students to several events
1021. ActFrmNewAtt Form to create a new attendance event
1022. ActEdiOneAtt Edit one attendance event
1023. ActNewAtt Create new attendance event
1024. ActChgAtt Modify data of an existing attendance event
1025. ActReqRemAtt Request the removal of an attendance event
1026. ActRemAtt Remove attendance event
1027. ActHidAtt Hide attendance event
1028. ActShoAtt Show attendance event
1029. ActSeeOneAtt List students who attended to an event
1030. ActRecAttStd Save students who attended to an event and comments
1031. ActRecAttMe Save my comments as student in an attendance event
1032. ActSignUp Apply for my enrolment
1033. ActUpdSignUpReq Update pending requests for inscription in the current course
1034. ActReqRejSignUp Ask if reject the enrolment of a user in a course
1035. ActRejSignUp Reject the enrolment of a user in a course
1036. ActReqMdfOneOth Request a user's ID for enrolment/removing
1037. ActReqMdfOneStd Request a student's ID for enrolment/removing
1038. ActReqMdfOneTch Request a teacher's ID for enrolment/removing
1039. ActReqMdfOth Request enrolment/removing of a user
1040. ActReqMdfStd Request enrolment/removing of a student
1041. ActReqMdfNET Request enrolment/removing of a non-editing teacher
1042. ActReqMdfTch Request enrolment/removing of a teacher
1043. ActReqOthPho Show form to send the photo of another user
1044. ActReqStdPho Show form to send the photo of another user
1045. ActReqTchPho Show form to send the photo of another user
1046. ActDetOthPho Receive other user's photo and detect faces on it
1047. ActDetStdPho Receive other user's photo and detect faces on it
1048. ActDetTchPho Receive other user's photo and detect faces on it
1049. ActUpdOthPho Update other user's photo
1050. ActUpdStdPho Update other user's photo
1051. ActUpdTchPho Update other user's photo
1052. ActRemOthPho Request the removal of other user's photo
1053. ActRemStdPho Request the removal of student's photo
1054. ActRemTchPho Request the removal of teacher's photo
1055. ActRemOthPho Remove other user's photo
1056. ActRemStdPho Remove student's photo
1057. ActRemTchPho Remove teacher's photo
1058. ActCreOth Create a new guest
1059. ActCreStd Create a new student
1060. ActCreNET Create a new non.editing teacher
1061. ActCreTch Create a new teacher
1062. ActUpdOth Update another user's data and groups
1063. ActUpdStd Update another student's data and groups
1064. ActUpdNET Update another non-editing teacher's data and groups
1065. ActUpdTch Update another teacher's data and groups
1066. ActReqAccEnrStd Confirm acceptation / refusion of enrolment as student in current course
1067. ActReqAccEnrNET Confirm acceptation / refusion of enrolment as non-editing teacher in current course
1068. ActReqAccEnrTch Confirm acceptation / refusion of enrolment as teacher in current course
1069. ActAccEnrStd Accept enrolment as student in current course
1070. ActAccEnrNET Accept enrolment as non-editing teacher in current course
1071. ActAccEnrTch Accept enrolment as teacher in current course
1072. ActRemMe_Std Reject enrolment as student in current course
1073. ActRemMe_NET Reject enrolment as non-editing teacher in current course
1074. ActRemMe_Tch Reject enrolment as teacher in current course
1075. ActNewAdmIns Register an administrador in this institution
1076. ActRemAdmIns Remove an administrador of this institution
1077. ActNewAdmCtr Register an administrador in this centre
1078. ActRemAdmCtr Remove an administrador of this centre
1079. ActNewAdmDeg Register an administrador in this degree
1080. ActRemAdmDeg Remove an administrador of this degree
1081. ActRcvFrmEnrSevStd Receive a form with IDs of students to be registered/removed to/from current course
1082. ActRcvFrmEnrSevNET Receive a form with IDs of non-editing teachers to be registered/removed to/from current course
1083. ActRcvFrmEnrSevTch Receive a form with IDs of teachers to be registered/removed to/from current course
1084. ActCnfID_Oth Confirm another user's ID
1085. ActCnfID_Std Confirm another user's ID
1086. ActCnfID_Tch Confirm another user's ID
1087. ActFrmAccOth Show forms to the change another user's account
1088. ActFrmAccStd Show forms to the change another user's account
1089. ActFrmAccTch Show forms to the change another user's account
1090. ActRemOldNicOth Remove one of another user's old nicknames
1091. ActRemOldNicStd Remove one of another user's old nicknames
1092. ActRemOldNicTch Remove one of another user's old nicknames
1093. ActChgNicOth Change another user's nickname
1094. ActChgNicStd Change another user's nickname
1095. ActChgNicTch Change another user's nickname
1096. ActRemID_Oth Remove one of the IDs of another user
1097. ActRemID_Std Remove one of the IDs of another user
1098. ActRemID_Tch Remove one of the IDs of another user
1099. ActNewID_Oth Create a new user's ID for another user
1100. ActNewID_Std Create a new user's ID for another user
1101. ActNewID_Tch Create a new user's ID for another user
1102. ActChgPwdOth Change the password of another user
1103. ActChgPwdStd Change the password of another user
1104. ActChgPwdTch Change the password of another user
1105. ActRemMaiOth Remove one of the email of another user
1106. ActRemMaiStd Remove one of the email of another user
1107. ActRemMaiTch Remove one of the email of another user
1108. ActNewMaiOth Create a new user's email for another user
1109. ActNewMaiStd Create a new user's email for another user
1110. ActNewMaiTch Create a new user's email for another user
1111. ActRemStdCrs Remove a student from the current course
1112. ActRemNETCrs Remove a non-editing teacher from the current course
1113. ActRemTchCrs Remove a teacher from the current course
1114. ActRemUsrGbl Eliminate completely a user from the platform
1115. ActReqRemAllStdCrs Request the removal of all the students from the current course
1116. ActRemAllStdCrs Remove all the students from the current course
1117. ActReqRemOldUsr Request the complete elimination of old users
1118. ActRemOldUsr Eliminate completely old users
1119. ActLstDupUsr List possible duplicate users
1120. ActLstSimUsr List users similar to a given one (possible duplicates)
1121. ActRemDupUsr Remove user from list of possible duplicate users
1122. ActReqFolSevStd Request follow several students
1123. ActReqFolSevTch Request follow several teachers
1124. ActReqUnfSevStd Request unfollow several students
1125. ActReqUnfSevTch Request unfollow several teachers
1126. ActFolSevStd Follow several students
1127. ActFolSevTch Follow several teachers
1128. ActUnfSevStd Unfollow several students
1129. ActUnfSevTch Unfollow several teachers
Messages:
1130. ActSeeAnn Show global announcements
1131. ActSeeAllNot Show all notices
1132. ActSeeFor Show the level superior of the forums
1133. ActSeeChtRms Show the chat rooms
1134. ActReqMsgUsr Write message to several users
1135. ActSeeRcvMsg Show the messages received from other users (link in menu)
1136. ActSeeSntMsg Show the messages sent to other users
1137. ActReqMaiUsr Select users to send an email to them
1138. ActMaiUsr Send an email to users
1139. ActWriAnn Show form to create a new global announcement
1140. ActRcvAnn Receive and create a new global announcement
1141. ActHidAnn Hide a global announcement that was active
1142. ActRevAnn Reveal a global announcement that was hidden
1143. ActRemAnn Remove global announcement
1144. ActSeeOneNot Show (expand) a notice
1145. ActWriNot Write a new notice
1146. ActRcvNot Receive and create a new notice
1147. ActHidNot Hide a notice that was active
1148. ActRevNot Reveal a notice that was hidden
1149. ActReqRemNot Request removal of a notice
1150. ActRemNot Remove a notice
1151. ActSeeForCrsUsr Show top level of forum of users of the course
1152. ActSeeForCrsTch Show top level of forum of teachers of the course
1153. ActSeeForDegUsr Show top level of forum of users of the degree
1154. ActSeeForDegTch Show top level of forum of teachers of the degree
1155. ActSeeForCtrUsr Show top level of forum of users of the centre
1156. ActSeeForCtrTch Show top level of forum of teachers of the centre
1157. ActSeeForInsUsr Show top level of forum of users of the institution
1158. ActSeeForInsTch Show top level of forum of teachers of the institution
1159. ActSeeForGenUsr Show top level of forum of users general
1160. ActSeeForGenTch Show top level of forum of teachers general
1161. ActSeeForSWAUsr Show top level of forum of users of the platform
1162. ActSeeForSWATch Show top level of forum of teachers of the platform
1163. ActSeePstForCrsUsr Show the messages of a thread of the forum of users of the course
1164. ActSeePstForCrsTch Show the messages of a thread of the forum of teachers of the course
1165. ActSeePstForDegUsr Show the messages of a thread of the forum of users of the degree
1166. ActSeePstForDegTch Show the messages of a thread of the forum of teachers of the degree
1167. ActSeePstForCtrUsr Show the messages of a thread of the forum of users of the centre
1168. ActSeePstForCtrTch Show the messages of a thread of the forum of teachers of the centre
1169. ActSeePstForInsUsr Show the messages of a thread of the forum of users of the institution
1170. ActSeePstForInsTch Show the messages of a thread of the forum of teachers of the institution
1171. ActSeePstForGenUsr Show the messages of a thread of the forum of users general
1172. ActSeePstForGenTch Show the messages of a thread of the forum of teachers general
1173. ActSeePstForSWAUsr Show the messages of a thread of the forum of users of the platform
1174. ActSeePstForSWATch Show the messages of a thread of the forum of teachers of the platform
1175. ActRcvThrForCrsUsr Receive the first message of a new thread of forum of users of the course
1176. ActRcvThrForCrsTch Receive the first message of a new thread of forum of teachers of the course
1177. ActRcvThrForDegUsr Receive the first message of a new thread of forum of users of the degree
1178. ActRcvThrForDegTch Receive the first message of a new thread of forum of teachers of the degree
1179. ActRcvThrForCtrUsr Receive the first message of a new thread of forum of users of centre
1180. ActRcvThrForCtrTch Receive the first message of a new thread of forum of teachers of centre
1181. ActRcvThrForInsUsr Receive the first message of a new thread of forum of users of the institution
1182. ActRcvThrForInsTch Receive the first message of a new thread of forum of teachers of the institution
1183. ActRcvThrForGenUsr Receive the first message of a new thread of forum of users general
1184. ActRcvThrForGenTch Receive the first message of a new thread of forum of teachers general
1185. ActRcvThrForSWAUsr Receive the first message of a new thread of forum of users of the platform
1186. ActRcvThrForSWATch Receive the first message of a new thread of forum of teachers of the platform
1187. ActRcvRepForCrsUsr Receive a message of answer in a thread existente in the forum of users of the course
1188. ActRcvRepForCrsTch Receive a message of answer in a thread existente in the forum of teachers of the course
1189. ActRcvRepForDegUsr Receive a message of answer in a thread existente in the forum of users of the degree
1190. ActRcvRepForDegTch Receive a message of answer in a thread existente in the forum of teachers of the degree
1191. ActRcvRepForCtrUsr Receive a message of answer in a thread existente in the forum of users of centre
1192. ActRcvRepForCtrTch Receive a message of answer in a thread existente in the forum of teachers of centre
1193. ActRcvRepForInsUsr Receive a message of answer in a thread existente in the forum of users of the institution
1194. ActRcvRepForInsTch Receive a message of answer in a thread existente in the forum of teachers of the institution
1195. ActRcvRepForGenUsr Receive a message of answer in a thread existente in the forum of users general
1196. ActRcvRepForGenTch Receive a message of answer in a thread existente in the forum of teachers general
1197. ActRcvRepForSWAUsr Receive a message of answer in a thread existente in the forum of users of the platform
1198. ActRcvRepForSWATch Receive a message of answer in a thread existente in the forum of teachers of the platform
1199. ActReqDelThrCrsUsr Request the removal of a thread of forum of users of the course
1200. ActReqDelThrCrsTch Request the removal of a thread of forum of teachers of the course
1201. ActReqDelThrDegUsr Request the removal of a thread of forum of users of the degree
1202. ActReqDelThrDegTch Request the removal of a thread of forum of teachers of the degree
1203. ActReqDelThrCtrUsr Request the removal of a thread of forum of users of centre
1204. ActReqDelThrCtrTch Request the removal of a thread of forum of teachers of centre
1205. ActReqDelThrInsUsr Request the removal of a thread of forum of users of the institution
1206. ActReqDelThrInsTch Request the removal of a thread of forum of teachers of the institution
1207. ActReqDelThrGenUsr Request the removal of a thread of forum of users general
1208. ActReqDelThrGenTch Request the removal of a thread of forum of teachers general
1209. ActReqDelThrSWAUsr Request the removal of a thread of forum of users of the platform
1210. ActReqDelThrSWATch Request the removal of a thread of forum of teachers of the platform
1211. ActDelThrForCrsUsr Remove a thread of forum of users of the course
1212. ActDelThrForCrsTch Remove a thread of forum of teachers of the course
1213. ActDelThrForDegUsr Remove a thread of forum of users of the degree
1214. ActDelThrForDegTch Remove a thread of forum of teachers of the degree
1215. ActDelThrForCtrUsr Remove a thread of forum of users of centre
1216. ActDelThrForCtrTch Remove a thread of forum of teachers of centre
1217. ActDelThrForInsUsr Remove a thread of forum of users of the institution
1218. ActDelThrForInsTch Remove a thread of forum of teachers of the institution
1219. ActDelThrForGenUsr Remove a thread of forum of users general
1220. ActDelThrForGenTch Remove a thread of forum of teachers general
1221. ActDelThrForSWAUsr Remove a thread of forum of users of the platform
1222. ActDelThrForSWATch Remove a thread of forum of teachers of the platform
1223. ActCutThrForCrsUsr Cut a thread of forum of users of the course
1224. ActCutThrForCrsTch Cut a thread of forum of teachers of the course
1225. ActCutThrForDegUsr Cut a thread of forum of users of the degree
1226. ActCutThrForDegTch Cut a thread of forum of teachers of the degree
1227. ActCutThrForCtrUsr Cut a thread of forum of users of centre
1228. ActCutThrForCtrTch Cut a thread of forum of teachers of centre
1229. ActCutThrForInsUsr Cut a thread of forum of users of the institution
1230. ActCutThrForInsTch Cut a thread of forum of teachers of the institution
1231. ActCutThrForGenUsr Cut a thread of forum of users general
1232. ActCutThrForGenTch Cut a thread of forum of teachers general
1233. ActCutThrForSWAUsr Cut a thread of forum of users of the platform
1234. ActCutThrForSWATch Cut a thread of forum of teachers of the platform
1235. ActPasThrForCrsUsr Paste a thread of forum of users of the course
1236. ActPasThrForCrsTch Paste a thread of forum of teachers of the course
1237. ActPasThrForDegUsr Paste a thread of forum of users of the degree
1238. ActPasThrForDegTch Paste a thread of forum of teachers of the degree
1239. ActPasThrForCtrUsr Paste a thread of forum of users of centre
1240. ActPasThrForCtrTch Paste a thread of forum of teachers of centre
1241. ActPasThrForInsUsr Paste a thread of forum of users of the institution
1242. ActPasThrForInsTch Paste a thread of forum of teachers of the institution
1243. ActPasThrForGenUsr Paste a thread of forum of users general
1244. ActPasThrForGenTch Paste a thread of forum of teachers general
1245. ActPasThrForSWAUsr Paste a thread of forum of users of the platform
1246. ActPasThrForSWATch Paste a thread of forum of teachers of the platform
1247. ActDelPstForCrsUsr Remove a message of forum of users of the course
1248. ActDelPstForCrsTch Remove a message of forum of teachers of the course
1249. ActDelPstForDegUsr Remove a message of forum of users of the degree
1250. ActDelPstForDegTch Remove a message of forum of teachers of the degree
1251. ActDelPstForCtrUsr Remove a message of forum of users of centre
1252. ActDelPstForCtrTch Remove a message of forum of teachers of centre
1253. ActDelPstForInsUsr Remove a message of forum of users of the institution
1254. ActDelPstForInsTch Remove a message of forum of teachers of the institution
1255. ActDelPstForGenUsr Remove a message of forum of users general
1256. ActDelPstForGenTch Remove a message of forum of teachers general
1257. ActDelPstForSWAUsr Remove a message of forum of users of the platform
1258. ActDelPstForSWATch Remove a message of forum of teachers of the platform
1259. ActEnbPstForCrsUsr Enable a message of forum of users of the course
1260. ActEnbPstForCrsTch Enable a message of forum of teachers of the course
1261. ActEnbPstForDegUsr Enable a message of forum of users of the degree
1262. ActEnbPstForDegTch Enable a message of forum of teachers of the degree
1263. ActEnbPstForCtrUsr Enable a message of forum of users of centre
1264. ActEnbPstForCtrTch Enable a message of forum of teachers of centre
1265. ActEnbPstForInsUsr Enable a message of forum of users of the institution
1266. ActEnbPstForInsTch Enable a message of forum of teachers of the institution
1267. ActEnbPstForGenUsr Enable a message of forum of users general
1268. ActEnbPstForGenTch Enable a message of forum of teachers general
1269. ActEnbPstForSWAUsr Enable a message of forum of users of the platform
1270. ActEnbPstForSWATch Enable a message of forum of teachers of the platform
1271. ActDisPstForCrsUsr Disable a message of forum of users of the course
1272. ActDisPstForCrsTch Disable a message of forum of teachers of the course
1273. ActDisPstForDegUsr Disable a message of forum of users of the degree
1274. ActDisPstForDegTch Disable a message of forum of teachers of the degree
1275. ActDisPstForCtrUsr Disable a message of forum of users of centre
1276. ActDisPstForCtrTch Disable a message of forum of teachers of centre
1277. ActDisPstForInsUsr Disable a message of forum of users of the institution
1278. ActDisPstForInsTch Disable a message of forum of teachers of the institution
1279. ActDisPstForGenUsr Disable a message of forum of users general
1280. ActDisPstForGenTch Disable a message of forum of teachers general
1281. ActDisPstForSWAUsr Disable a message of forum of users of the platform
1282. ActDisPstForSWATch Disable a message of forum of teachers of the platform
1283. ActCht Enter in a chat room to chat
1284. ActRcvMsgUsr Sent/Receive a message of a user
1285. ActReqDelAllSntMsg Request the removal of todos the messages sent to other users
1286. ActReqDelAllRcvMsg Request the removal of todos the messages received from other users
1287. ActDelAllSntMsg Remove todos the messages sent to other users
1288. ActDelAllRcvMsg Remove todos the messages received from other users
1289. ActDelSntMsg Remove a message sent to other users
1290. ActDelRcvMsg Remove a message received from other user
1291. ActExpSntMsg See (expand) sent message
1292. ActExpRcvMsg See (expand) received message
1293. ActConSntMsg Hide (contract) sent message
1294. ActConRcvMsg Hide (contract) received message
1295. ActLstBanUsr List banned users
1296. ActBanUsrMsg Ban the sender of a message when showing received messages
1297. ActUnbUsrMsg Unban the sender of a message when showing received messages
1298. ActUnbUsrLst Unban a user when listing banned users
Statistics:
1299. ActReqUseGbl Request showing use of the platform
1300. ActSeePhoDeg Show a class photo with the average photos of the students of each degree
1301. ActReqStaCrs Request statistics of courses
1302. ActReqAccGbl Request query of clicks to the complete platform
1303. ActReqMyUsgRep Request my usage report
1304. ActMFUAct Show most frequently used actions
1305. ActSeeUseGbl Show use of the platform
1306. ActPrnPhoDeg Show vista of impresión of the class photo with the average photos of the students of each degree.
1307. ActCalPhoDeg Compute the average photos of the students of each degree
1308. ActSeeAccGbl Query clicks to the complete platform
1309. ActReqAccCrs Request query of clicks in the course
1310. ActSeeAccCrs Query clicks to current course
1311. ActSeeAllStaCrs Show statistics of courses
1312. ActLstClk List last clicks
1313. ActRefLstClk Refresh last clicks in real time via AJAX
1314. ActSeeMyUsgRep Show my usage report
*/
#define Act_DEFAULT_ACTION_AFTER_LOGIN ActSeeSocTmlGbl
@ -2289,7 +1631,7 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
[ActSeeMyAgd ] = {1602, 3,TabPrf,ActSeeMyAgd ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Agd_ShowMyAgenda ,"calendar" },
[ActFrmMyAcc ] = { 36, 4,TabPrf,ActFrmMyAcc ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Acc_ShowFormMyAccount ,"at" },
[ActReqEdiRecSha ] = { 285, 5,TabPrf,ActReqEdiRecSha ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Rec_ShowMySharedRecordAndMore ,"card" },
[ActReqEdiSet ] = { 673, 6,TabPrf,ActReqEdiSet ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Set_EditSettings ,"cog" },
[ActReqEdiSet ] = { 673, 6,TabPrf,ActReqEdiSet ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Set_EditSettings ,"cog" },
// Actions not in menu:
[ActChgMyRol ] = { 589,-1,TabUnk,ActFrmRolSes ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,Rol_ChangeMyRole ,Usr_ShowFormsLogoutAndRole ,NULL},
@ -2343,19 +1685,19 @@ const struct Act_Actions Act_Actions[Act_NUM_ACTIONS] =
[ActReqEdiMyNet ] = {1172,-1,TabUnk,ActReqEdiRecSha ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Rec_ShowMySharedRecordAndMore ,NULL},
[ActChgMyNet ] = {1173,-1,TabUnk,ActReqEdiRecSha ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Net_UpdateMyWebsAndSocialNets ,NULL},
[ActChgThe ] = { 841,-1,TabUnk,ActReqEdiSet ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_1ST_TAB,The_ChangeTheme ,Set_EditSettings ,NULL},
[ActChgThe ] = { 841,-1,TabUnk,ActReqEdiSet ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_1ST_TAB,The_ChangeTheme ,Set_EditSettings ,NULL},
[ActReqChgLan ] = { 992,-1,TabUnk,ActReqEdiSet ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Lan_AskChangeLanguage ,NULL},
[ActChgLan ] = { 654,-1,TabUnk,ActReqEdiSet ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_1ST_TAB,Lan_ChangeLanguage ,Set_EditSettings ,NULL},
[ActChg1stDay ] = {1484,-1,TabUnk,ActReqEdiSet ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_1ST_TAB,Cal_ChangeFirstDayOfWeek ,Set_EditSettings ,NULL},
[ActChgDatFmt ] = {1638,-1,TabUnk,ActReqEdiSet ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_1ST_TAB,Dat_ChangeDateFormat ,Set_EditSettings ,NULL},
[ActChgCol ] = { 674,-1,TabUnk,ActReqEdiSet ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_1ST_TAB,Set_ChangeSideCols ,Set_EditSettings ,NULL},
[ActChgIco ] = {1092,-1,TabUnk,ActReqEdiSet ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_1ST_TAB,Ico_ChangeIconSet ,Set_EditSettings ,NULL},
[ActChgMnu ] = {1243,-1,TabUnk,ActReqEdiSet ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_1ST_TAB,Mnu_ChangeMenu ,Set_EditSettings ,NULL},
[ActChgLan ] = { 654,-1,TabUnk,ActReqEdiSet ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_1ST_TAB,Lan_ChangeLanguage ,Set_EditSettings ,NULL},
[ActChg1stDay ] = {1484,-1,TabUnk,ActReqEdiSet ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_1ST_TAB,Cal_ChangeFirstDayOfWeek ,Set_EditSettings ,NULL},
[ActChgDatFmt ] = {1638,-1,TabUnk,ActReqEdiSet ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_1ST_TAB,Dat_ChangeDateFormat ,Set_EditSettings ,NULL},
[ActChgCol ] = { 674,-1,TabUnk,ActReqEdiSet ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_1ST_TAB,Set_ChangeSideCols ,Set_EditSettings ,NULL},
[ActChgIco ] = {1092,-1,TabUnk,ActReqEdiSet ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_1ST_TAB,Ico_ChangeIconSet ,Set_EditSettings ,NULL},
[ActChgMnu ] = {1243,-1,TabUnk,ActReqEdiSet ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_1ST_TAB,Mnu_ChangeMenu ,Set_EditSettings ,NULL},
[ActChgPriPho ] = { 774,-1,TabUnk,ActReqEdiSet ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Pho_ChangePhotoVisibility ,NULL},
[ActChgBasPriPrf ] = {1404,-1,TabUnk,ActReqEdiSet ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prf_ChangeBasicProfileVis ,NULL},
[ActChgExtPriPrf ] = {1765,-1,TabUnk,ActReqEdiSet ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Prf_ChangeExtendedProfileVis ,NULL},
[ActChgCooPrf ] = {1764,-1,TabUnk,ActReqEdiSet ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,NULL ,Coo_ChangeMyPrefsCookies ,NULL},
[ActChgNtfPrf ] = { 775,-1,TabUnk,ActReqEdiSet ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,Ntf_ChangeNotifyEvents ,Set_EditSettings ,NULL},
[ActChgNtfPrf ] = { 775,-1,TabUnk,ActReqEdiSet ,0x3F8,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,0x3C6,Act_CONT_NORM,Act_BRW_1ST_TAB,Ntf_ChangeNotifyEvents ,Set_EditSettings ,NULL},
[ActPrnUsrQR ] = {1022,-1,TabUnk,ActFrmMyAcc ,0x3F8,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,0x3C7,Act_CONT_NORM,Act_BRW_NEW_TAB,NULL ,Usr_PrintUsrQRCode ,NULL},
@ -2412,7 +1754,7 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
ActLstStdAll, // #42
-1, // #43 (obsolete action)
ActEdiSylLec, // #44
ActEdiCrsTT, // #45
ActEdiCrsTT, // #45
-1, // #46 (obsolete action)
-1, // #47 (obsolete action)
ActChgTut, // #48
@ -2420,7 +1762,7 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
-1, // #50 (obsolete action)
ActSeeChtRms, // #51
ActCht, // #52
ActChgCrsTT, // #53
ActChgCrsTT, // #53
ActSeeFAQ, // #54
-1, // #55 (obsolete action)
-1, // #56 (obsolete action)
@ -2452,7 +1794,7 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
-1, // #82 (obsolete action)
-1, // #83 (obsolete action)
ActSeeUseGbl, // #84
ActSeeAllExaAnn, // #85
ActSeeAllExaAnn, // #85
-1, // #86 (obsolete action)
ActRemAllStdCrs, // #87
ActReqRemAllStdCrs, // #88
@ -2519,7 +1861,7 @@ Act_Action_t Act_FromActCodToAction[1 + Act_MAX_ACTION_COD] = // Do not reuse un
-1, // #149 (obsolete action)
ActFrmCreWrkUsr, // #150
-1, // #151 (obsolete action)
ActPrnCrsTT, // #152
ActPrnCrsTT, // #152
ActRcvFilBrfCla, // #153
-1, // #154 (obsolete action)
ActRemFilBrf, // #155

View File

@ -271,7 +271,7 @@ static void Ctr_ListCentres (void)
Hlp_INSTITUTION_Centres,Box_NOT_CLOSABLE);
Str_FreeString ();
if (Gbl.Hierarchy.Ins.Ctrs.Num) // There are centres in the current institution
if (Gbl.Hierarchy.Ctrs.Num) // There are centres in the current institution
{
/***** Begin table *****/
HTM_TABLE_BeginWideMarginPadding (2);
@ -279,9 +279,9 @@ static void Ctr_ListCentres (void)
/***** Write all the centres and their nuber of teachers *****/
for (NumCtr = 0;
NumCtr < Gbl.Hierarchy.Ins.Ctrs.Num;
NumCtr < Gbl.Hierarchy.Ctrs.Num;
NumCtr++)
Ctr_ListOneCentreForSeeing (&(Gbl.Hierarchy.Ins.Ctrs.Lst[NumCtr]),NumCtr + 1);
Ctr_ListOneCentreForSeeing (&(Gbl.Hierarchy.Ctrs.Lst[NumCtr]),NumCtr + 1);
/***** End table *****/
HTM_TABLE_End ();
@ -293,7 +293,7 @@ static void Ctr_ListCentres (void)
if (Ctr_CheckIfICanCreateCentres ())
{
Frm_StartForm (ActEdiCtr);
Btn_PutConfirmButton (Gbl.Hierarchy.Ins.Ctrs.Num ? Txt_Create_another_centre :
Btn_PutConfirmButton (Gbl.Hierarchy.Ctrs.Num ? Txt_Create_another_centre :
Txt_Create_centre);
Frm_EndForm ();
}
@ -438,11 +438,11 @@ static void Ctr_ListOneCentreForSeeing (struct Centre *Ctr,unsigned NumCtr)
static void Ctr_GetParamCtrOrder (void)
{
Gbl.Hierarchy.Ins.Ctrs.SelectedOrder = (Ctr_Order_t)
Par_GetParToUnsignedLong ("Order",
0,
Ctr_NUM_ORDERS - 1,
(unsigned long) Ctr_ORDER_DEFAULT);
Gbl.Hierarchy.Ctrs.SelectedOrder = (Ctr_Order_t)
Par_GetParToUnsignedLong ("Order",
0,
Ctr_NUM_ORDERS - 1,
(unsigned long) Ctr_ORDER_DEFAULT);
}
/*****************************************************************************/
@ -471,7 +471,7 @@ static void Ctr_EditCentresInternal (void)
Plc_GetListPlaces ();
/***** Get list of centres *****/
Gbl.Hierarchy.Ins.Ctrs.SelectedOrder = Ctr_ORDER_BY_CENTRE;
Gbl.Hierarchy.Ctrs.SelectedOrder = Ctr_ORDER_BY_CENTRE;
Ctr_GetFullListOfCentres (Gbl.Hierarchy.Ins.InsCod);
/***** Write menu to select country and institution *****/
@ -488,7 +488,7 @@ static void Ctr_EditCentresInternal (void)
Ctr_PutFormToCreateCentre ();
/***** List current centres *****/
if (Gbl.Hierarchy.Ins.Ctrs.Num)
if (Gbl.Hierarchy.Ctrs.Num)
Ctr_ListCentresForEdition ();
/***** End box *****/
@ -560,19 +560,19 @@ void Ctr_GetBasicListOfCentres (long InsCod)
if (NumRows) // Centres found...
{
// NumRows should be equal to Deg->NumCourses
Gbl.Hierarchy.Ins.Ctrs.Num = (unsigned) NumRows;
Gbl.Hierarchy.Ctrs.Num = (unsigned) NumRows;
/***** Create list with courses in degree *****/
if ((Gbl.Hierarchy.Ins.Ctrs.Lst = (struct Centre *) calloc (NumRows,
if ((Gbl.Hierarchy.Ctrs.Lst = (struct Centre *) calloc (NumRows,
sizeof (struct Centre))) == NULL)
Lay_NotEnoughMemoryExit ();
/***** Get the centres *****/
for (NumCtr = 0;
NumCtr < Gbl.Hierarchy.Ins.Ctrs.Num;
NumCtr < Gbl.Hierarchy.Ctrs.Num;
NumCtr++)
{
Ctr = &(Gbl.Hierarchy.Ins.Ctrs.Lst[NumCtr]);
Ctr = &(Gbl.Hierarchy.Ctrs.Lst[NumCtr]);
/* Get centre data */
row = mysql_fetch_row (mysql_res);
@ -580,14 +580,10 @@ void Ctr_GetBasicListOfCentres (long InsCod)
/* Reset number of users who claim to belong to this centre */
Ctr->NumUsrsWhoClaimToBelongToCtr.Valid = false;
/* Reset other fields */
Ctr->Degs.Num = 0;
Ctr->Degs.Lst = NULL;
}
}
else
Gbl.Hierarchy.Ins.Ctrs.Num = 0;
Gbl.Hierarchy.Ctrs.Num = 0;
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
@ -648,24 +644,24 @@ void Ctr_GetFullListOfCentres (long InsCod)
" (SELECT DISTINCT CtrCod FROM usr_data))"
" ORDER BY %s",
InsCod,InsCod,
OrderBySubQuery[Gbl.Hierarchy.Ins.Ctrs.SelectedOrder]);
OrderBySubQuery[Gbl.Hierarchy.Ctrs.SelectedOrder]);
if (NumRows) // Centres found...
{
// NumRows should be equal to Deg->NumCourses
Gbl.Hierarchy.Ins.Ctrs.Num = (unsigned) NumRows;
Gbl.Hierarchy.Ctrs.Num = (unsigned) NumRows;
/***** Create list with courses in degree *****/
if ((Gbl.Hierarchy.Ins.Ctrs.Lst = (struct Centre *) calloc (NumRows,
if ((Gbl.Hierarchy.Ctrs.Lst = (struct Centre *) calloc (NumRows,
sizeof (struct Centre))) == NULL)
Lay_NotEnoughMemoryExit ();
/***** Get the centres *****/
for (NumCtr = 0;
NumCtr < Gbl.Hierarchy.Ins.Ctrs.Num;
NumCtr < Gbl.Hierarchy.Ctrs.Num;
NumCtr++)
{
Ctr = &(Gbl.Hierarchy.Ins.Ctrs.Lst[NumCtr]);
Ctr = &(Gbl.Hierarchy.Ctrs.Lst[NumCtr]);
/* Get centre data */
row = mysql_fetch_row (mysql_res);
@ -675,14 +671,10 @@ void Ctr_GetFullListOfCentres (long InsCod)
Ctr->NumUsrsWhoClaimToBelongToCtr.Valid = false;
if (sscanf (row[11],"%u",&(Ctr->NumUsrsWhoClaimToBelongToCtr.NumUsrs)) == 1)
Ctr->NumUsrsWhoClaimToBelongToCtr.Valid = true;
/* Reset other fields */
Ctr->Degs.Num = 0;
Ctr->Degs.Lst = NULL;
}
}
else
Gbl.Hierarchy.Ins.Ctrs.Num = 0;
Gbl.Hierarchy.Ctrs.Num = 0;
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
@ -707,8 +699,6 @@ bool Ctr_GetDataOfCentreByCod (struct Centre *Ctr)
Ctr->ShrtName[0] = '\0';
Ctr->FullName[0] = '\0';
Ctr->WWW[0] = '\0';
Ctr->Degs.Num = 0;
Ctr->Degs.Lst = NULL;
Ctr->NumUsrsWhoClaimToBelongToCtr.Valid = false;
/***** Check if centre code is correct *****/
@ -857,12 +847,12 @@ void Ctr_GetShortNameOfCentreByCod (struct Centre *Ctr)
void Ctr_FreeListCentres (void)
{
if (Gbl.Hierarchy.Ins.Ctrs.Lst)
if (Gbl.Hierarchy.Ctrs.Lst)
{
/***** Free memory used by the list of courses in degree *****/
free (Gbl.Hierarchy.Ins.Ctrs.Lst);
Gbl.Hierarchy.Ins.Ctrs.Lst = NULL;
Gbl.Hierarchy.Ins.Ctrs.Num = 0;
free (Gbl.Hierarchy.Ctrs.Lst);
Gbl.Hierarchy.Ctrs.Lst = NULL;
Gbl.Hierarchy.Ctrs.Num = 0;
}
}
@ -958,10 +948,10 @@ static void Ctr_ListCentresForEdition (void)
/***** Write all the centres *****/
for (NumCtr = 0;
NumCtr < Gbl.Hierarchy.Ins.Ctrs.Num;
NumCtr < Gbl.Hierarchy.Ctrs.Num;
NumCtr++)
{
Ctr = &Gbl.Hierarchy.Ins.Ctrs.Lst[NumCtr];
Ctr = &Gbl.Hierarchy.Ctrs.Lst[NumCtr];
ICanEdit = Ctr_CheckIfICanEditACentre (Ctr);
NumUsrsInCrssOfCtr = Usr_GetNumUsrsInCrssOfCtr (Rol_UNK,Ctr->CtrCod); // Here Rol_UNK means "all users"
@ -1734,13 +1724,13 @@ static void Ctr_PutHeadCentresForSeeing (bool OrderSelectable)
Order == Ctr_ORDER_BY_CENTRE ? "BT_LINK LM TIT_TBL" :
"BT_LINK RM TIT_TBL",
NULL);
if (Order == Gbl.Hierarchy.Ins.Ctrs.SelectedOrder)
if (Order == Gbl.Hierarchy.Ctrs.SelectedOrder)
HTM_U_Begin ();
}
HTM_Txt (Txt_CENTRES_ORDER[Order]);
if (OrderSelectable)
{
if (Order == Gbl.Hierarchy.Ins.Ctrs.SelectedOrder)
if (Order == Gbl.Hierarchy.Ctrs.SelectedOrder)
HTM_U_End ();
HTM_BUTTON_End ();
Frm_EndForm ();
@ -2122,8 +2112,6 @@ static void Ctr_EditingCentreConstructor (void)
Ctr_EditingCtr->ShrtName[0] = '\0';
Ctr_EditingCtr->FullName[0] = '\0';
Ctr_EditingCtr->WWW[0] = '\0';
Ctr_EditingCtr->Degs.Num = 0;
Ctr_EditingCtr->Degs.Lst = NULL;
}
static void Ctr_EditingCentreDestructor (void)

View File

@ -71,7 +71,6 @@ struct Centre
char ShrtName[Hie_MAX_BYTES_SHRT_NAME + 1];
char FullName[Hie_MAX_BYTES_FULL_NAME + 1];
char WWW[Cns_MAX_BYTES_WWW + 1];
struct ListDegrees Degs; // List of degrees in this centre
struct
{
bool Valid;
@ -87,6 +86,13 @@ typedef enum
} Ctr_Order_t;
#define Ctr_ORDER_DEFAULT Ctr_ORDER_BY_CENTRE
struct ListCentres
{
unsigned Num; // Number of centres
struct Centre *Lst; // List of centres
Ctr_Order_t SelectedOrder; // Order of centres
};
/*****************************************************************************/
/****************************** Public prototypes ****************************/
/*****************************************************************************/

View File

@ -591,11 +591,11 @@ static void CtrCfg_Institution (bool PrintView,bool PutForm)
"id=\"OthInsCod\" name=\"OthInsCod\""
" class=\"INPUT_SHORT_NAME\"");
for (NumIns = 0;
NumIns < Gbl.Hierarchy.Cty.Inss.Num;
NumIns < Gbl.Hierarchy.Inss.Num;
NumIns++)
HTM_OPTION (HTM_Type_LONG,&Gbl.Hierarchy.Cty.Inss.Lst[NumIns].InsCod,
Gbl.Hierarchy.Cty.Inss.Lst[NumIns].InsCod == Gbl.Hierarchy.Ins.InsCod,false,
"%s",Gbl.Hierarchy.Cty.Inss.Lst[NumIns].ShrtName);
HTM_OPTION (HTM_Type_LONG,&Gbl.Hierarchy.Inss.Lst[NumIns].InsCod,
Gbl.Hierarchy.Inss.Lst[NumIns].InsCod == Gbl.Hierarchy.Ins.InsCod,false,
"%s",Gbl.Hierarchy.Inss.Lst[NumIns].ShrtName);
HTM_SELECT_End ();
Frm_EndForm ();

View File

@ -492,7 +492,7 @@ enscript -2 --landscape --color --file-align=2 --highlight --line-numbers -o - *
En OpenSWAD:
ps2pdf source.ps destination.pdf
*/
#define Log_PLATFORM_VERSION "SWAD 19.112.26 (2020-01-08)"
#define Log_PLATFORM_VERSION "SWAD 19.113 (2020-01-08)"
#define CSS_FILE "swad19.112.css"
#define JS_FILE "swad19.91.1.js"
/*
@ -501,6 +501,9 @@ ps2pdf source.ps destination.pdf
// TODO: No se puede entrar con DNI '1' suponiendo que no tenga password ¿por qué?
// TODO: Mapas más estrechos en móvil
Version 19.113: Jan 08, 2020 Code refactoring related to hierarchy.
Changing action descriptions from database to swad-core. Not finished. (278076 lines)
Version 19.112.27:Jan 08, 2020 Changing action descriptions from database to swad-core. Not finished. (278715 lines)
Version 19.112.26:Jan 08, 2020 Fixed bug in list of centres. (278755 lines)
Version 19.112.25:Jan 07, 2020 Changing action descriptions from database to swad-core. Not finished. (278670 lines)
Version 19.112.24:Jan 07, 2020 Fixed bug in edition of institutions. (278815 lines)

View File

@ -235,9 +235,9 @@ void Cty_ListCountries2 (void)
/***** Write all the countries and their number of users and institutions *****/
for (NumCty = 0;
NumCty < Gbl.Hierarchy.Sys.Ctys.Num;
NumCty < Gbl.Hierarchy.Ctys.Num;
NumCty++)
Cty_ListOneCountryForSeeing (&Gbl.Hierarchy.Sys.Ctys.Lst[NumCty],NumCty + 1);
Cty_ListOneCountryForSeeing (&Gbl.Hierarchy.Ctys.Lst[NumCty],NumCty + 1);
/***** Separation row *****/
HTM_TR_Begin (NULL);
@ -361,13 +361,13 @@ static void Cty_PutHeadCountriesForSeeing (bool OrderSelectable)
Frm_StartForm (ActSeeCty);
Par_PutHiddenParamUnsigned (NULL,"Order",(unsigned) Order);
HTM_BUTTON_SUBMIT_Begin (Txt_COUNTRIES_HELP_ORDER[Order],"BT_LINK TIT_TBL",NULL);
if (Order == Gbl.Hierarchy.Sys.Ctys.SelectedOrder)
if (Order == Gbl.Hierarchy.Ctys.SelectedOrder)
HTM_U_Begin ();
}
HTM_Txt (Txt_COUNTRIES_ORDER[Order]);
if (OrderSelectable)
{
if (Order == Gbl.Hierarchy.Sys.Ctys.SelectedOrder)
if (Order == Gbl.Hierarchy.Ctys.SelectedOrder)
HTM_U_End ();
HTM_BUTTON_End ();
Frm_EndForm ();
@ -589,17 +589,17 @@ void Cty_WriteScriptGoogleGeochart (void)
/***** Write all the countries and their number of users and institutions *****/
for (NumCty = 0;
NumCty < Gbl.Hierarchy.Sys.Ctys.Num;
NumCty < Gbl.Hierarchy.Ctys.Num;
NumCty++)
{
NumUsrsWhoClaimToBelongToCty = Usr_GetNumUsrsWhoClaimToBelongToCty (&Gbl.Hierarchy.Sys.Ctys.Lst[NumCty]);
NumUsrsWhoClaimToBelongToCty = Usr_GetNumUsrsWhoClaimToBelongToCty (&Gbl.Hierarchy.Ctys.Lst[NumCty]);
if (NumUsrsWhoClaimToBelongToCty)
{
/* Write data of this country */
HTM_TxtF (" ['%s', %u, %u],\n",
Gbl.Hierarchy.Sys.Ctys.Lst[NumCty].Alpha2,
Gbl.Hierarchy.Ctys.Lst[NumCty].Alpha2,
NumUsrsWhoClaimToBelongToCty,
Gbl.Hierarchy.Sys.Ctys.Lst[NumCty].Inss.Num);
Ins_GetNumInssInCty (Gbl.Hierarchy.Ctys.Lst[NumCty].CtyCod));
if (NumUsrsWhoClaimToBelongToCty > MaxUsrsInCountry)
MaxUsrsInCountry = NumUsrsWhoClaimToBelongToCty;
NumCtysWithUsrs++;
@ -628,11 +628,11 @@ void Cty_WriteScriptGoogleGeochart (void)
static void Cty_GetParamCtyOrder (void)
{
Gbl.Hierarchy.Sys.Ctys.SelectedOrder = (Cty_Order_t)
Par_GetParToUnsignedLong ("Order",
0,
Cty_NUM_ORDERS - 1,
(unsigned long) Cty_ORDER_DEFAULT);
Gbl.Hierarchy.Ctys.SelectedOrder = (Cty_Order_t)
Par_GetParToUnsignedLong ("Order",
0,
Cty_NUM_ORDERS - 1,
(unsigned long) Cty_ORDER_DEFAULT);
}
/*****************************************************************************/
@ -657,7 +657,7 @@ static void Cty_EditCountriesInternal (void)
extern const char *Txt_Countries;
/***** Get list of countries *****/
Gbl.Hierarchy.Sys.Ctys.SelectedOrder = Cty_ORDER_BY_COUNTRY;
Gbl.Hierarchy.Ctys.SelectedOrder = Cty_ORDER_BY_COUNTRY;
Cty_GetFullListOfCountries ();
/***** Write menu to select country *****/
@ -671,7 +671,7 @@ static void Cty_EditCountriesInternal (void)
Cty_PutFormToCreateCountry ();
/***** Forms to edit current countries *****/
if (Gbl.Hierarchy.Sys.Ctys.Num)
if (Gbl.Hierarchy.Ctys.Num)
Cty_ListCountriesForEdition ();
/***** End box *****/
@ -730,19 +730,19 @@ void Cty_GetBasicListOfCountries (void)
Lan_STR_LANG_ID[Gbl.Prefs.Language]);
if (NumRows) // Countries found...
{
Gbl.Hierarchy.Sys.Ctys.Num = (unsigned) NumRows;
Gbl.Hierarchy.Ctys.Num = (unsigned) NumRows;
/***** Create list with countries *****/
if ((Gbl.Hierarchy.Sys.Ctys.Lst = (struct Country *)
if ((Gbl.Hierarchy.Ctys.Lst = (struct Country *)
calloc (NumRows,sizeof (struct Country))) == NULL)
Lay_NotEnoughMemoryExit ();
/***** Get the countries *****/
for (NumCty = 0;
NumCty < Gbl.Hierarchy.Sys.Ctys.Num;
NumCty < Gbl.Hierarchy.Ctys.Num;
NumCty++)
{
Cty = &(Gbl.Hierarchy.Sys.Ctys.Lst[NumCty]);
Cty = &(Gbl.Hierarchy.Ctys.Lst[NumCty]);
/* Get next country */
row = mysql_fetch_row (mysql_res);
@ -769,14 +769,10 @@ void Cty_GetBasicListOfCountries (void)
/* Reset number of users who claim to belong to country */
Cty->NumUsrsWhoClaimToBelongToCty.Valid = false;
/* Reset other fields */
Cty->Inss.Num = 0;
Cty->Inss.Lst = NULL;
}
}
else
Gbl.Hierarchy.Sys.Ctys.Num = 0;
Gbl.Hierarchy.Ctys.Num = 0;
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
@ -843,7 +839,7 @@ void Cty_GetFullListOfCountries (void)
}
/* Build order subquery */
if (asprintf (&OrderBySubQuery,OrderBySubQueryFmt[Gbl.Hierarchy.Sys.Ctys.SelectedOrder],
if (asprintf (&OrderBySubQuery,OrderBySubQueryFmt[Gbl.Hierarchy.Ctys.SelectedOrder],
Lan_STR_LANG_ID[Gbl.Prefs.Language]) < 0)
Lay_NotEnoughMemoryExit ();
@ -868,19 +864,19 @@ void Cty_GetFullListOfCountries (void)
if (NumRows) // Countries found...
{
Gbl.Hierarchy.Sys.Ctys.Num = (unsigned) NumRows;
Gbl.Hierarchy.Ctys.Num = (unsigned) NumRows;
/***** Create list with countries *****/
if ((Gbl.Hierarchy.Sys.Ctys.Lst = (struct Country *)
if ((Gbl.Hierarchy.Ctys.Lst = (struct Country *)
calloc (NumRows,sizeof (struct Country))) == NULL)
Lay_NotEnoughMemoryExit ();
/***** Get the countries *****/
for (NumCty = 0;
NumCty < Gbl.Hierarchy.Sys.Ctys.Num;
NumCty < Gbl.Hierarchy.Ctys.Num;
NumCty++)
{
Cty = &(Gbl.Hierarchy.Sys.Ctys.Lst[NumCty]);
Cty = &(Gbl.Hierarchy.Ctys.Lst[NumCty]);
/* Get next country */
row = mysql_fetch_row (mysql_res);
@ -909,14 +905,10 @@ void Cty_GetFullListOfCountries (void)
if (sscanf (row[1 + Lan_NUM_LANGUAGES * 2 + 1],"%u",
&(Cty->NumUsrsWhoClaimToBelongToCty.NumUsrs)) == 1)
Cty->NumUsrsWhoClaimToBelongToCty.Valid = true;
/* Reset other fields */
Cty->Inss.Num = 0;
Cty->Inss.Lst = NULL;
}
}
else
Gbl.Hierarchy.Sys.Ctys.Num = 0;
Gbl.Hierarchy.Ctys.Num = 0;
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
@ -1032,9 +1024,6 @@ bool Cty_GetDataOfCountryByCod (struct Country *Cty)
Cty->Name[Lan][0] = '\0';
Cty->WWW[Lan][0] = '\0';
}
Cty->Inss.Num = 0;
Cty->Inss.Lst = NULL;
Cty->Inss.SelectedOrder = Ins_ORDER_DEFAULT;
Cty->NumUsrsWhoClaimToBelongToCty.Valid = false;
/***** Check if country code is correct *****/
@ -1154,12 +1143,12 @@ void Cty_GetCountryName (long CtyCod,Lan_Language_t Language,
void Cty_FreeListCountries (void)
{
if (Gbl.Hierarchy.Sys.Ctys.Lst)
if (Gbl.Hierarchy.Ctys.Lst)
{
/***** Free memory used by the list of courses in institution *****/
free (Gbl.Hierarchy.Sys.Ctys.Lst);
Gbl.Hierarchy.Sys.Ctys.Lst = NULL;
Gbl.Hierarchy.Sys.Ctys.Num = 0;
free (Gbl.Hierarchy.Ctys.Lst);
Gbl.Hierarchy.Ctys.Lst = NULL;
Gbl.Hierarchy.Ctys.Num = 0;
}
}
@ -1181,10 +1170,10 @@ static void Cty_ListCountriesForEdition (void)
/***** Write all countries *****/
for (NumCty = 0;
NumCty < Gbl.Hierarchy.Sys.Ctys.Num;
NumCty < Gbl.Hierarchy.Ctys.Num;
NumCty++)
{
Cty = &Gbl.Hierarchy.Sys.Ctys.Lst[NumCty];
Cty = &Gbl.Hierarchy.Ctys.Lst[NumCty];
NumInssInCty = Ins_GetNumInssInCty (Cty->CtyCod);
HTM_TR_Begin (NULL);
@ -2059,9 +2048,6 @@ static void Cty_EditingCountryConstructor (void)
Cty_EditingCty->Name[Lan][0] = '\0';
Cty_EditingCty->WWW [Lan][0] = '\0';
}
Cty_EditingCty->Inss.Num = 0;
Cty_EditingCty->Inss.Lst = NULL;
Cty_EditingCty->Inss.SelectedOrder = Ins_ORDER_DEFAULT;
Cty_EditingCty->NumUsrsWhoClaimToBelongToCty.Valid = false;
}

View File

@ -51,12 +51,6 @@ struct Country
char Alpha2[2 + 1];
char Name[1 + Lan_NUM_LANGUAGES][Cty_MAX_BYTES_NAME + 1];
char WWW [1 + Lan_NUM_LANGUAGES][Cns_MAX_BYTES_WWW + 1];
struct
{
unsigned Num; // Number of institutions in this country
struct Instit *Lst; // List of institutions in this country
Ins_Order_t SelectedOrder;
} Inss;
struct
{
bool Valid;
@ -72,6 +66,13 @@ typedef enum
} Cty_Order_t;
#define Cty_ORDER_DEFAULT Cty_ORDER_BY_NUM_USRS
struct ListCountries
{
unsigned Num; // Number of countries
struct Country *Lst; // List of countries
Cty_Order_t SelectedOrder; // Order of countries
};
/*****************************************************************************/
/***************************** Public prototypes *****************************/
/*****************************************************************************/

View File

@ -676,7 +676,7 @@ static void Crs_GetListCrssInCurrentDeg (Crs_WhatCourses_t WhatCourses)
if (NumCrss) // Courses found...
{
/***** Create list with courses in degree *****/
if ((Gbl.Hierarchy.Deg.Crss.Lst = (struct Course *) calloc ((size_t) NumCrss,
if ((Gbl.Hierarchy.Crss.Lst = (struct Course *) calloc ((size_t) NumCrss,
sizeof (struct Course))) == NULL)
Lay_NotEnoughMemoryExit ();
@ -685,7 +685,7 @@ static void Crs_GetListCrssInCurrentDeg (Crs_WhatCourses_t WhatCourses)
NumCrs < NumCrss;
NumCrs++)
{
Crs = &Gbl.Hierarchy.Deg.Crss.Lst[NumCrs];
Crs = &Gbl.Hierarchy.Crss.Lst[NumCrs];
/* Get next course */
row = mysql_fetch_row (mysql_res);
@ -693,7 +693,7 @@ static void Crs_GetListCrssInCurrentDeg (Crs_WhatCourses_t WhatCourses)
}
}
Gbl.Hierarchy.Deg.Crss.Num = NumCrss;
Gbl.Hierarchy.Crss.Num = NumCrss;
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
@ -705,11 +705,11 @@ static void Crs_GetListCrssInCurrentDeg (Crs_WhatCourses_t WhatCourses)
void Crs_FreeListCoursesInCurrentDegree (void)
{
if (Gbl.Hierarchy.Deg.Crss.Lst)
if (Gbl.Hierarchy.Crss.Lst)
{
/***** Free memory used by the list of courses in degree *****/
free (Gbl.Hierarchy.Deg.Crss.Lst);
Gbl.Hierarchy.Deg.Crss.Lst = NULL;
free (Gbl.Hierarchy.Crss.Lst);
Gbl.Hierarchy.Crss.Lst = NULL;
}
}
@ -805,7 +805,7 @@ static void Crs_ListCourses (void)
Hlp_DEGREE_Courses,Box_NOT_CLOSABLE);
Str_FreeString ();
if (Gbl.Hierarchy.Deg.Crss.Num) // There are courses in the current degree
if (Gbl.Hierarchy.Crss.Num) // There are courses in the current degree
{
/***** Begin table *****/
HTM_TABLE_BeginWideMarginPadding (2);
@ -829,7 +829,7 @@ static void Crs_ListCourses (void)
if (Crs_CheckIfICanCreateCourses ())
{
Frm_StartForm (ActEdiCrs);
Btn_PutConfirmButton (Gbl.Hierarchy.Deg.Crss.Num ? Txt_Create_another_course :
Btn_PutConfirmButton (Gbl.Hierarchy.Crss.Num ? Txt_Create_another_course :
Txt_Create_course);
Frm_EndForm ();
}
@ -893,10 +893,10 @@ static bool Crs_ListCoursesOfAYearForSeeing (unsigned Year)
/***** Write all the courses of this year *****/
for (NumCrs = 0;
NumCrs < Gbl.Hierarchy.Deg.Crss.Num;
NumCrs < Gbl.Hierarchy.Crss.Num;
NumCrs++)
{
Crs = &(Gbl.Hierarchy.Deg.Crss.Lst[NumCrs]);
Crs = &(Gbl.Hierarchy.Crss.Lst[NumCrs]);
if (Crs->Year == Year) // The year of the course is this?
{
ThisYearHasCourses = true;
@ -1020,7 +1020,7 @@ static void Crs_EditCoursesInternal (void)
Crs_PutFormToCreateCourse ();
/***** Forms to edit current courses *****/
if (Gbl.Hierarchy.Deg.Crss.Num)
if (Gbl.Hierarchy.Crss.Num)
Crs_ListCoursesForEdition ();
/***** End box *****/
@ -1030,7 +1030,7 @@ static void Crs_EditCoursesInternal (void)
Crs_FreeListCoursesInCurrentDegree ();
/***** Free list of degrees in this centre *****/
Deg_FreeListDegs (&Gbl.Hierarchy.Ctr.Degs);
Deg_FreeListDegs (&Gbl.Hierarchy.Degs);
}
/*****************************************************************************/
@ -1105,10 +1105,10 @@ static void Crs_ListCoursesOfAYearForEdition (unsigned Year)
/***** List courses of a given year *****/
for (NumCrs = 0;
NumCrs < Gbl.Hierarchy.Deg.Crss.Num;
NumCrs < Gbl.Hierarchy.Crss.Num;
NumCrs++)
{
Crs = &(Gbl.Hierarchy.Deg.Crss.Lst[NumCrs]);
Crs = &(Gbl.Hierarchy.Crss.Lst[NumCrs]);
if (Crs->Year == Year)
{
ICanEdit = Crs_CheckIfICanEdit (Crs);

View File

@ -87,6 +87,12 @@ struct Course
char FullName[Hie_MAX_BYTES_FULL_NAME + 1]; // Full name of course
};
struct ListCourses
{
unsigned Num; // Number of courses
struct Course *Lst; // List of courses
};
/*****************************************************************************/
/***************************** Public prototypes *****************************/
/*****************************************************************************/

View File

@ -237,16 +237,16 @@ static void CrsCfg_Degree (bool PrintView,bool PutForm)
"id=\"OthDegCod\" name=\"OthDegCod\""
" class=\"INPUT_SHORT_NAME\"");
for (NumDeg = 0;
NumDeg < Gbl.Hierarchy.Ctr.Degs.Num;
NumDeg < Gbl.Hierarchy.Degs.Num;
NumDeg++)
HTM_OPTION (HTM_Type_LONG,&Gbl.Hierarchy.Ctr.Degs.Lst[NumDeg].DegCod,
Gbl.Hierarchy.Ctr.Degs.Lst[NumDeg].DegCod == Gbl.Hierarchy.Deg.DegCod,false,
"%s",Gbl.Hierarchy.Ctr.Degs.Lst[NumDeg].ShrtName);
HTM_OPTION (HTM_Type_LONG,&Gbl.Hierarchy.Degs.Lst[NumDeg].DegCod,
Gbl.Hierarchy.Degs.Lst[NumDeg].DegCod == Gbl.Hierarchy.Deg.DegCod,false,
"%s",Gbl.Hierarchy.Degs.Lst[NumDeg].ShrtName);
HTM_SELECT_End ();
Frm_EndForm ();
/* Free list of degrees of the current centre */
Deg_FreeListDegs (&Gbl.Hierarchy.Ctr.Degs);
Deg_FreeListDegs (&Gbl.Hierarchy.Degs);
}
else // I can not move course to another degree
{

View File

@ -319,7 +319,7 @@ void Deg_ShowDegsOfCurrentCtr (void)
Deg_ListDegrees ();
/***** Free list of degrees and centres *****/
Deg_FreeListDegs (&Gbl.Hierarchy.Ctr.Degs);
Deg_FreeListDegs (&Gbl.Hierarchy.Degs);
Ctr_FreeListCentres ();
}
@ -350,10 +350,10 @@ static void Deg_ListDegreesForEdition (void)
/***** List the degrees *****/
for (NumDeg = 0;
NumDeg < Gbl.Hierarchy.Ctr.Degs.Num;
NumDeg < Gbl.Hierarchy.Degs.Num;
NumDeg++)
{
Deg = &(Gbl.Hierarchy.Ctr.Degs.Lst[NumDeg]);
Deg = &(Gbl.Hierarchy.Degs.Lst[NumDeg]);
NumCrss = Crs_GetNumCrssInDeg (Deg->DegCod);
@ -770,7 +770,7 @@ static void Deg_ListDegrees (void)
Hlp_CENTRE_Degrees,Box_NOT_CLOSABLE);
Str_FreeString ();
if (Gbl.Hierarchy.Ctr.Degs.Num) // There are degrees in the current centre
if (Gbl.Hierarchy.Degs.Num) // There are degrees in the current centre
{
/***** Write heading *****/
HTM_TABLE_BeginWideMarginPadding (2);
@ -778,9 +778,9 @@ static void Deg_ListDegrees (void)
/***** List the degrees *****/
for (NumDeg = 0;
NumDeg < Gbl.Hierarchy.Ctr.Degs.Num;
NumDeg < Gbl.Hierarchy.Degs.Num;
NumDeg++)
Deg_ListOneDegreeForSeeing (&(Gbl.Hierarchy.Ctr.Degs.Lst[NumDeg]),NumDeg + 1);
Deg_ListOneDegreeForSeeing (&(Gbl.Hierarchy.Degs.Lst[NumDeg]),NumDeg + 1);
/***** End table *****/
HTM_TABLE_End ();
@ -792,7 +792,7 @@ static void Deg_ListDegrees (void)
if (Deg_CheckIfICanCreateDegrees ())
{
Frm_StartForm (ActEdiDeg);
Btn_PutConfirmButton (Gbl.Hierarchy.Ctr.Degs.Num ? Txt_Create_another_degree :
Btn_PutConfirmButton (Gbl.Hierarchy.Degs.Num ? Txt_Create_another_degree :
Txt_Create_degree);
Frm_EndForm ();
}
@ -959,7 +959,7 @@ static void Deg_EditDegreesInternal (void)
Deg_PutFormToCreateDegree ();
/***** Forms to edit current degrees *****/
if (Gbl.Hierarchy.Ctr.Degs.Num)
if (Gbl.Hierarchy.Degs.Num)
Deg_ListDegreesForEdition ();
}
else // No degree types
@ -979,7 +979,7 @@ static void Deg_EditDegreesInternal (void)
DT_FreeListDegreeTypes ();
/***** Free list of degrees in the current centre *****/
Deg_FreeListDegs (&Gbl.Hierarchy.Ctr.Degs);
Deg_FreeListDegs (&Gbl.Hierarchy.Degs);
}
/*****************************************************************************/
@ -1080,19 +1080,19 @@ void Deg_GetListDegsInCurrentCtr (void)
/***** Count number of rows in result *****/
if (NumRows) // Degrees found...
{
Gbl.Hierarchy.Ctr.Degs.Num = (unsigned) NumRows;
Gbl.Hierarchy.Degs.Num = (unsigned) NumRows;
/***** Create list with degrees of this centre *****/
if ((Gbl.Hierarchy.Ctr.Degs.Lst = (struct Degree *) calloc (Gbl.Hierarchy.Ctr.Degs.Num,
if ((Gbl.Hierarchy.Degs.Lst = (struct Degree *) calloc (Gbl.Hierarchy.Degs.Num,
sizeof (struct Degree))) == NULL)
Lay_NotEnoughMemoryExit ();
/***** Get the degrees of this centre *****/
for (NumDeg = 0;
NumDeg < Gbl.Hierarchy.Ctr.Degs.Num;
NumDeg < Gbl.Hierarchy.Degs.Num;
NumDeg++)
{
Deg = &Gbl.Hierarchy.Ctr.Degs.Lst[NumDeg];
Deg = &Gbl.Hierarchy.Degs.Lst[NumDeg];
/* Get next degree */
row = mysql_fetch_row (mysql_res);
@ -1100,7 +1100,7 @@ void Deg_GetListDegsInCurrentCtr (void)
}
}
else
Gbl.Hierarchy.Ctr.Degs.Num = 0;
Gbl.Hierarchy.Degs.Num = 0;
/***** Free structure that stores the query result *****/
DB_FreeMySQLResult (&mysql_res);
@ -1294,8 +1294,6 @@ bool Deg_GetDataOfDegreeByCod (struct Degree *Deg)
Deg->ShrtName[0] = '\0';
Deg->FullName[0] = '\0';
Deg->WWW[0] = '\0';
Deg->Crss.Num = 0;
Deg->Crss.Lst = NULL;
/***** Check if degree code is correct *****/
if (Deg->DegCod > 0)
@ -2061,8 +2059,6 @@ static void Deg_EditingDegreeConstructor (void)
Deg_EditingDeg->ShrtName[0] = '\0';
Deg_EditingDeg->FullName[0] = '\0';
Deg_EditingDeg->WWW[0] = '\0';
Deg_EditingDeg->Crss.Num = 0;
Deg_EditingDeg->Crss.Lst = NULL;
}
static void Deg_EditingDegreeDestructor (void)

View File

@ -76,11 +76,6 @@ struct Degree
char ShrtName[Hie_MAX_BYTES_SHRT_NAME + 1]; // Short name of degree
char FullName[Hie_MAX_BYTES_FULL_NAME + 1]; // Full name of degree
char WWW[Cns_MAX_BYTES_WWW + 1];
struct
{
unsigned Num; // Number of courses in this degree
struct Course *Lst; // List of courses in this degree
} Crss;
};
struct ListDegrees

View File

@ -231,11 +231,11 @@ static void DegCfg_Centre (bool PrintView,bool PutForm)
"id=\"OthCtrCod\" name=\"OthCtrCod\""
" class=\"INPUT_SHORT_NAME\"");
for (NumCtr = 0;
NumCtr < Gbl.Hierarchy.Ins.Ctrs.Num;
NumCtr < Gbl.Hierarchy.Ctrs.Num;
NumCtr++)
HTM_OPTION (HTM_Type_LONG,&Gbl.Hierarchy.Ins.Ctrs.Lst[NumCtr].CtrCod,
Gbl.Hierarchy.Ins.Ctrs.Lst[NumCtr].CtrCod == Gbl.Hierarchy.Ctr.CtrCod,false,
"%s",Gbl.Hierarchy.Ins.Ctrs.Lst[NumCtr].ShrtName);
HTM_OPTION (HTM_Type_LONG,&Gbl.Hierarchy.Ctrs.Lst[NumCtr].CtrCod,
Gbl.Hierarchy.Ctrs.Lst[NumCtr].CtrCod == Gbl.Hierarchy.Ctr.CtrCod,false,
"%s",Gbl.Hierarchy.Ctrs.Lst[NumCtr].ShrtName);
HTM_SELECT_End ();
Frm_EndForm ();

View File

@ -541,11 +541,11 @@ static void Dpt_ListDepartmentsForEdition (void)
HTM_OPTION (HTM_Type_STRING,"0",Dpt->InsCod == 0,false,
"%s",Txt_Another_institution);
for (NumIns = 0;
NumIns < Gbl.Hierarchy.Cty.Inss.Num;
NumIns < Gbl.Hierarchy.Inss.Num;
NumIns++)
HTM_OPTION (HTM_Type_LONG,&Gbl.Hierarchy.Cty.Inss.Lst[NumIns].InsCod,
Gbl.Hierarchy.Cty.Inss.Lst[NumIns].InsCod == Dpt->InsCod,false,
"%s",Gbl.Hierarchy.Cty.Inss.Lst[NumIns].ShrtName);
HTM_OPTION (HTM_Type_LONG,&Gbl.Hierarchy.Inss.Lst[NumIns].InsCod,
Gbl.Hierarchy.Inss.Lst[NumIns].InsCod == Dpt->InsCod,false,
"%s",Gbl.Hierarchy.Inss.Lst[NumIns].ShrtName);
HTM_SELECT_End ();
Frm_EndForm ();
HTM_TD_End ();
@ -910,11 +910,11 @@ static void Dpt_PutFormToCreateDepartment (void)
HTM_OPTION (HTM_Type_STRING,"0",Dpt_EditingDpt->InsCod == 0,false,
"%s",Txt_Another_institution);
for (NumIns = 0;
NumIns < Gbl.Hierarchy.Cty.Inss.Num;
NumIns < Gbl.Hierarchy.Inss.Num;
NumIns++)
HTM_OPTION (HTM_Type_LONG,&Gbl.Hierarchy.Cty.Inss.Lst[NumIns].InsCod,
Gbl.Hierarchy.Cty.Inss.Lst[NumIns].InsCod == Dpt_EditingDpt->InsCod,false,
"%s",Gbl.Hierarchy.Cty.Inss.Lst[NumIns].ShrtName);
HTM_OPTION (HTM_Type_LONG,&Gbl.Hierarchy.Inss.Lst[NumIns].InsCod,
Gbl.Hierarchy.Inss.Lst[NumIns].InsCod == Dpt_EditingDpt->InsCod,false,
"%s",Gbl.Hierarchy.Inss.Lst[NumIns].ShrtName);
HTM_SELECT_End ();
HTM_TD_End ();

View File

@ -27,6 +27,7 @@
/********************************** Headers **********************************/
/*****************************************************************************/
#include "swad_course.h"
#include "swad_notification.h"
#include "swad_user.h"

View File

@ -29,6 +29,7 @@
#include <linux/limits.h> // For PATH_MAX
#include "swad_course.h"
#include "swad_group.h"
#include "swad_notification.h"

View File

@ -217,29 +217,33 @@ void Gbl_InitializeGlobals (void)
/***** Reset current hierarchy *****/
Hie_ResetHierarchy ();
Gbl.Hierarchy.Sys.Ctys.Num = 0;
Gbl.Hierarchy.Sys.Ctys.Lst = NULL;
Gbl.Hierarchy.Sys.Ctys.SelectedOrder = Cty_ORDER_DEFAULT;
Gbl.Hierarchy.Ctys.Num = 0;
Gbl.Hierarchy.Ctys.Lst = NULL;
Gbl.Hierarchy.Ctys.SelectedOrder = Cty_ORDER_DEFAULT;
Gbl.Hierarchy.Cty.Inss.Num = 0;
Gbl.Hierarchy.Cty.Inss.Lst = NULL;
Gbl.Hierarchy.Cty.Inss.SelectedOrder = Ins_ORDER_DEFAULT;
Gbl.Hierarchy.Inss.Num = 0;
Gbl.Hierarchy.Inss.Lst = NULL;
Gbl.Hierarchy.Inss.SelectedOrder = Ins_ORDER_DEFAULT;
Gbl.Hierarchy.Ins.ShrtName[0] = '\0';
Gbl.Hierarchy.Ins.FullName[0] = '\0';
Gbl.Hierarchy.Ins.WWW[0] = '\0';
Gbl.Hierarchy.Ins.Ctrs.Num = 0;
Gbl.Hierarchy.Ins.Ctrs.Lst = NULL;
Gbl.Hierarchy.Ins.Ctrs.SelectedOrder = Ctr_ORDER_DEFAULT;
Gbl.Hierarchy.Ctrs.Num = 0;
Gbl.Hierarchy.Ctrs.Lst = NULL;
Gbl.Hierarchy.Ctrs.SelectedOrder = Ctr_ORDER_DEFAULT;
Gbl.Hierarchy.Ctr.ShrtName[0] = '\0';
Gbl.Hierarchy.Ctr.FullName[0] = '\0';
Gbl.Hierarchy.Ctr.Degs.Num = 0;
Gbl.Hierarchy.Ctr.Degs.Lst = NULL;
Gbl.Hierarchy.Deg.ShrtName[0] = Gbl.Hierarchy.Deg.FullName[0] = '\0';
Gbl.Hierarchy.Degs.Num = 0;
Gbl.Hierarchy.Degs.Lst = NULL;
Gbl.Hierarchy.Crs.ShrtName[0] = Gbl.Hierarchy.Crs.FullName[0] = '\0';
Gbl.Hierarchy.Deg.ShrtName[0] =
Gbl.Hierarchy.Deg.FullName[0] = '\0';
Gbl.Hierarchy.Crs.ShrtName[0] =
Gbl.Hierarchy.Crs.FullName[0] = '\0';
Gbl.Dpts.Num = 0;
Gbl.Dpts.Lst = NULL;
@ -469,7 +473,7 @@ void Gbl_Cleanup (void)
Grp_FreeListGrpTypesAndGrps ();
Grp_FreeListCodSelectedGrps ();
Crs_FreeListCoursesInCurrentDegree ();
Deg_FreeListDegs (&Gbl.Hierarchy.Ctr.Degs);
Deg_FreeListDegs (&Gbl.Hierarchy.Degs);
DT_FreeListDegreeTypes ();
Ins_FreeListInstitutions ();
Ctr_FreeListCentres ();

View File

@ -77,7 +77,6 @@
#include "swad_session.h"
#include "swad_survey.h"
#include "swad_syllabus.h"
#include "swad_system.h"
#include "swad_test.h"
#include "swad_timeline.h"
#include "swad_timetable.h"
@ -213,11 +212,15 @@ struct Globals
{
Hie_Level_t Level; // Current level in the hierarchy: system, country, institution, centre, degree or course
long Cod; // Code of the current country, institution, centre, degree or course
struct System Sys; // Top level of the hierarchy (system or platform)
struct ListCountries Ctys;// List of countries
struct Country Cty; // Current country
struct ListInstits Inss; // List of institutions in current country
struct Instit Ins; // Current institution
struct ListCentres Ctrs; // List of centres in current institution
struct Centre Ctr; // Current centre
struct ListDegrees Degs; // List of degrees in current centre
struct Degree Deg; // Current degree
struct ListCourses Crss; // List of courses in current degree
struct Course Crs; // Current course. Aditional info about course is stored in Gbl.Crs.
} Hierarchy;
struct

View File

@ -300,7 +300,7 @@ static void Ins_ListInstitutions (void)
Hlp_COUNTRY_Institutions,Box_NOT_CLOSABLE);
Str_FreeString ();
if (Gbl.Hierarchy.Cty.Inss.Num) // There are institutions in the current country
if (Gbl.Hierarchy.Inss.Num) // There are institutions in the current country
{
/***** Begin table *****/
HTM_TABLE_BeginWideMarginPadding (2);
@ -308,9 +308,9 @@ static void Ins_ListInstitutions (void)
/***** Write all the institutions and their nuber of users *****/
for (NumIns = 0;
NumIns < Gbl.Hierarchy.Cty.Inss.Num;
NumIns < Gbl.Hierarchy.Inss.Num;
NumIns++)
Ins_ListOneInstitutionForSeeing (&(Gbl.Hierarchy.Cty.Inss.Lst[NumIns]),NumIns + 1);
Ins_ListOneInstitutionForSeeing (&(Gbl.Hierarchy.Inss.Lst[NumIns]),NumIns + 1);
/***** End table *****/
HTM_TABLE_End ();
@ -322,7 +322,7 @@ static void Ins_ListInstitutions (void)
if (Ins_CheckIfICanCreateInstitutions ())
{
Frm_StartForm (ActEdiIns);
Btn_PutConfirmButton (Gbl.Hierarchy.Cty.Inss.Num ? Txt_Create_another_institution :
Btn_PutConfirmButton (Gbl.Hierarchy.Inss.Num ? Txt_Create_another_institution :
Txt_Create_institution);
Frm_EndForm ();
}
@ -481,13 +481,13 @@ static void Ins_PutHeadInstitutionsForSeeing (bool OrderSelectable)
Frm_StartForm (ActSeeIns);
Par_PutHiddenParamUnsigned (NULL,"Order",(unsigned) Order);
HTM_BUTTON_SUBMIT_Begin (Txt_INSTITUTIONS_HELP_ORDER[Order],ClassButton[Order],NULL);
if (Order == Gbl.Hierarchy.Cty.Inss.SelectedOrder)
if (Order == Gbl.Hierarchy.Inss.SelectedOrder)
HTM_U_Begin ();
}
HTM_Txt (Txt_INSTITUTIONS_ORDER[Order]);
if (OrderSelectable)
{
if (Order == Gbl.Hierarchy.Cty.Inss.SelectedOrder)
if (Order == Gbl.Hierarchy.Inss.SelectedOrder)
HTM_U_End ();
HTM_BUTTON_End ();
Frm_EndForm ();
@ -515,11 +515,11 @@ static void Ins_PutHeadInstitutionsForSeeing (bool OrderSelectable)
static void Ins_GetParamInsOrder (void)
{
Gbl.Hierarchy.Cty.Inss.SelectedOrder = (Ins_Order_t)
Par_GetParToUnsignedLong ("Order",
0,
Ins_NUM_ORDERS - 1,
(unsigned long) Ins_ORDER_DEFAULT);
Gbl.Hierarchy.Inss.SelectedOrder = (Ins_Order_t)
Par_GetParToUnsignedLong ("Order",
0,
Ins_NUM_ORDERS - 1,
(unsigned long) Ins_ORDER_DEFAULT);
}
/*****************************************************************************/
@ -560,7 +560,7 @@ static void Ins_EditInstitutionsInternal (void)
Ins_PutFormToCreateInstitution ();
/***** Forms to edit current institutions *****/
if (Gbl.Hierarchy.Cty.Inss.Num)
if (Gbl.Hierarchy.Inss.Num)
Ins_ListInstitutionsForEdition ();
/***** End box *****/
@ -626,19 +626,19 @@ void Ins_GetBasicListOfInstitutions (long CtyCod)
if (NumRows) // Institutions found...
{
// NumRows should be equal to Deg->NumCourses
Gbl.Hierarchy.Cty.Inss.Num = (unsigned) NumRows;
Gbl.Hierarchy.Inss.Num = (unsigned) NumRows;
/***** Create list with institutions *****/
if ((Gbl.Hierarchy.Cty.Inss.Lst = (struct Instit *)
if ((Gbl.Hierarchy.Inss.Lst = (struct Instit *)
calloc (NumRows,sizeof (struct Instit))) == NULL)
Lay_NotEnoughMemoryExit ();
/***** Get the institutions *****/
for (NumIns = 0;
NumIns < Gbl.Hierarchy.Cty.Inss.Num;
NumIns < Gbl.Hierarchy.Inss.Num;
NumIns++)
{
Ins = &(Gbl.Hierarchy.Cty.Inss.Lst[NumIns]);
Ins = &(Gbl.Hierarchy.Inss.Lst[NumIns]);
/* Get institution data */
row = mysql_fetch_row (mysql_res);
@ -646,17 +646,12 @@ void Ins_GetBasicListOfInstitutions (long CtyCod)
/* Reset number of users who claim to belong to this institution */
Ins->NumUsrsWhoClaimToBelongToIns.Valid = false;
/* Reset other fields */
Ins->Ctrs.Num = 0;
Ins->Ctrs.Lst = NULL;
Ins->Ctrs.SelectedOrder = Ctr_ORDER_DEFAULT;
}
}
else
{
Gbl.Hierarchy.Cty.Inss.Num = 0;
Gbl.Hierarchy.Cty.Inss.Lst = NULL;
Gbl.Hierarchy.Inss.Num = 0;
Gbl.Hierarchy.Inss.Lst = NULL;
}
/***** Free structure that stores the query result *****/
@ -710,24 +705,24 @@ void Ins_GetFullListOfInstitutions (long CtyCod)
" AND InsCod NOT IN"
" (SELECT DISTINCT InsCod FROM usr_data))"
" ORDER BY %s",
CtyCod,CtyCod,OrderBySubQuery[Gbl.Hierarchy.Cty.Inss.SelectedOrder]);
CtyCod,CtyCod,OrderBySubQuery[Gbl.Hierarchy.Inss.SelectedOrder]);
if (NumRows) // Institutions found...
{
// NumRows should be equal to Deg->NumCourses
Gbl.Hierarchy.Cty.Inss.Num = (unsigned) NumRows;
Gbl.Hierarchy.Inss.Num = (unsigned) NumRows;
/***** Create list with institutions *****/
if ((Gbl.Hierarchy.Cty.Inss.Lst = (struct Instit *)
if ((Gbl.Hierarchy.Inss.Lst = (struct Instit *)
calloc (NumRows,sizeof (struct Instit))) == NULL)
Lay_NotEnoughMemoryExit ();
/***** Get the institutions *****/
for (NumIns = 0;
NumIns < Gbl.Hierarchy.Cty.Inss.Num;
NumIns < Gbl.Hierarchy.Inss.Num;
NumIns++)
{
Ins = &(Gbl.Hierarchy.Cty.Inss.Lst[NumIns]);
Ins = &(Gbl.Hierarchy.Inss.Lst[NumIns]);
/* Get institution data */
row = mysql_fetch_row (mysql_res);
@ -737,17 +732,12 @@ void Ins_GetFullListOfInstitutions (long CtyCod)
Ins->NumUsrsWhoClaimToBelongToIns.Valid = false;
if (sscanf (row[7],"%u",&(Ins->NumUsrsWhoClaimToBelongToIns.NumUsrs)) == 1)
Ins->NumUsrsWhoClaimToBelongToIns.Valid = true;
/* Reset other fields */
Ins->Ctrs.Num = 0;
Ins->Ctrs.Lst = NULL;
Ins->Ctrs.SelectedOrder = Ctr_ORDER_DEFAULT;
}
}
else
{
Gbl.Hierarchy.Cty.Inss.Num = 0;
Gbl.Hierarchy.Cty.Inss.Lst = NULL;
Gbl.Hierarchy.Inss.Num = 0;
Gbl.Hierarchy.Inss.Lst = NULL;
}
/***** Free structure that stores the query result *****/
@ -789,9 +779,6 @@ bool Ins_GetDataOfInstitutionByCod (struct Instit *Ins)
Ins->ShrtName[0] =
Ins->FullName[0] =
Ins->WWW[0] = '\0';
Ins->Ctrs.Num = 0;
Ins->Ctrs.Lst = NULL;
Ins->Ctrs.SelectedOrder = Ctr_ORDER_DEFAULT;
Ins->NumUsrsWhoClaimToBelongToIns.Valid = false;
/***** Check if institution code is correct *****/
@ -991,12 +978,12 @@ static void Ins_GetShrtNameAndCtyOfInstitution (struct Instit *Ins,
void Ins_FreeListInstitutions (void)
{
if (Gbl.Hierarchy.Cty.Inss.Lst)
if (Gbl.Hierarchy.Inss.Lst)
{
/***** Free memory used by the list of institutions *****/
free (Gbl.Hierarchy.Cty.Inss.Lst);
Gbl.Hierarchy.Cty.Inss.Num = 0;
Gbl.Hierarchy.Cty.Inss.Lst = NULL;
free (Gbl.Hierarchy.Inss.Lst);
Gbl.Hierarchy.Inss.Num = 0;
Gbl.Hierarchy.Inss.Lst = NULL;
}
}
@ -1092,10 +1079,10 @@ static void Ins_ListInstitutionsForEdition (void)
/***** Write all the institutions *****/
for (NumIns = 0;
NumIns < Gbl.Hierarchy.Cty.Inss.Num;
NumIns < Gbl.Hierarchy.Inss.Num;
NumIns++)
{
Ins = &Gbl.Hierarchy.Cty.Inss.Lst[NumIns];
Ins = &Gbl.Hierarchy.Inss.Lst[NumIns];
ICanEdit = Ins_CheckIfICanEdit (Ins);
NumCtrss = Ctr_GetNumCtrsInIns (Ins->InsCod);
@ -2092,9 +2079,6 @@ static void Ins_EditingInstitutionConstructor (void)
Ins_EditingIns->ShrtName[0] = '\0';
Ins_EditingIns->FullName[0] = '\0';
Ins_EditingIns->WWW[0] = '\0';
Ins_EditingIns->Ctrs.Num = 0;
Ins_EditingIns->Ctrs.Lst = NULL;
Ins_EditingIns->Ctrs.SelectedOrder = Ctr_ORDER_DEFAULT;
}
static void Ins_EditingInstitutionDestructor (void)

View File

@ -65,12 +65,6 @@ struct Instit
char ShrtName[Hie_MAX_BYTES_SHRT_NAME + 1];
char FullName[Hie_MAX_BYTES_FULL_NAME + 1];
char WWW[Cns_MAX_BYTES_WWW + 1];
struct
{
unsigned Num; // Number of centres
struct Centre *Lst; // List of centres
Ctr_Order_t SelectedOrder;
} Ctrs;
struct
{
bool Valid;
@ -86,6 +80,13 @@ typedef enum
} Ins_Order_t;
#define Ins_ORDER_DEFAULT Ins_ORDER_BY_NUM_USRS
struct ListInstits
{
unsigned Num; // Number of institutions
struct Instit *Lst; // List of institutions
Ins_Order_t SelectedOrder; // Order of institutions
};
/*****************************************************************************/
/***************************** Public prototypes *****************************/
/*****************************************************************************/

View File

@ -384,11 +384,11 @@ static void InsCfg_Country (bool PrintView,bool PutForm)
"id=\"OthCtyCod\" name=\"OthCtyCod\""
" class=\"INPUT_SHORT_NAME\"");
for (NumCty = 0;
NumCty < Gbl.Hierarchy.Sys.Ctys.Num;
NumCty < Gbl.Hierarchy.Ctys.Num;
NumCty++)
HTM_OPTION (HTM_Type_LONG,&Gbl.Hierarchy.Sys.Ctys.Lst[NumCty].CtyCod,
Gbl.Hierarchy.Sys.Ctys.Lst[NumCty].CtyCod == Gbl.Hierarchy.Cty.CtyCod,false,
"%s",Gbl.Hierarchy.Sys.Ctys.Lst[NumCty].Name[Gbl.Prefs.Language]);
HTM_OPTION (HTM_Type_LONG,&Gbl.Hierarchy.Ctys.Lst[NumCty].CtyCod,
Gbl.Hierarchy.Ctys.Lst[NumCty].CtyCod == Gbl.Hierarchy.Cty.CtyCod,false,
"%s",Gbl.Hierarchy.Ctys.Lst[NumCty].Name[Gbl.Prefs.Language]);
HTM_SELECT_End ();
Frm_EndForm ();

View File

@ -3216,7 +3216,7 @@ static void Rec_ShowCountry (struct UsrData *UsrDat,bool PutForm)
unsigned NumCty;
/***** If list of countries is empty, try to get it *****/
if (!Gbl.Hierarchy.Sys.Ctys.Num)
if (!Gbl.Hierarchy.Ctys.Num)
Cty_GetBasicListOfCountries ();
/***** Selector of country *****/
@ -3242,11 +3242,11 @@ static void Rec_ShowCountry (struct UsrData *UsrDat,bool PutForm)
HTM_OPTION (HTM_Type_STRING,"0",UsrDat->CtyCod == 0,false,
"%s",Txt_Another_country);
for (NumCty = 0;
NumCty < Gbl.Hierarchy.Sys.Ctys.Num;
NumCty < Gbl.Hierarchy.Ctys.Num;
NumCty++)
HTM_OPTION (HTM_Type_LONG,&Gbl.Hierarchy.Sys.Ctys.Lst[NumCty].CtyCod,
Gbl.Hierarchy.Sys.Ctys.Lst[NumCty].CtyCod == UsrDat->CtyCod,false,
"%s",Gbl.Hierarchy.Sys.Ctys.Lst[NumCty].Name[Gbl.Prefs.Language]);
HTM_OPTION (HTM_Type_LONG,&Gbl.Hierarchy.Ctys.Lst[NumCty].CtyCod,
Gbl.Hierarchy.Ctys.Lst[NumCty].CtyCod == UsrDat->CtyCod,false,
"%s",Gbl.Hierarchy.Ctys.Lst[NumCty].Name[Gbl.Prefs.Language]);
HTM_SELECT_End ();
HTM_TD_End ();
@ -3951,7 +3951,7 @@ static void Rec_ShowFormMyInsCtrDpt (bool IAmATeacher)
HTM_TD_Begin ("class=\"REC_C2_BOT LM\"");
/* If list of countries is empty, try to get it */
if (!Gbl.Hierarchy.Sys.Ctys.Num)
if (!Gbl.Hierarchy.Ctys.Num)
Cty_GetBasicListOfCountries ();
/* Begin form to select the country of my institution */
@ -3963,11 +3963,11 @@ static void Rec_ShowFormMyInsCtrDpt (bool IAmATeacher)
Gbl.Usrs.Me.UsrDat.InsCtyCod <= 0,true,
NULL);
for (NumCty = 0;
NumCty < Gbl.Hierarchy.Sys.Ctys.Num;
NumCty < Gbl.Hierarchy.Ctys.Num;
NumCty++)
HTM_OPTION (HTM_Type_LONG,&Gbl.Hierarchy.Sys.Ctys.Lst[NumCty].CtyCod,
Gbl.Hierarchy.Sys.Ctys.Lst[NumCty].CtyCod == Gbl.Usrs.Me.UsrDat.InsCtyCod,false,
"%s",Gbl.Hierarchy.Sys.Ctys.Lst[NumCty].Name[Gbl.Prefs.Language]);
HTM_OPTION (HTM_Type_LONG,&Gbl.Hierarchy.Ctys.Lst[NumCty].CtyCod,
Gbl.Hierarchy.Ctys.Lst[NumCty].CtyCod == Gbl.Usrs.Me.UsrDat.InsCtyCod,false,
"%s",Gbl.Hierarchy.Ctys.Lst[NumCty].Name[Gbl.Prefs.Language]);
HTM_SELECT_End ();
Frm_EndForm ();
HTM_TD_End ();
@ -4002,11 +4002,11 @@ static void Rec_ShowFormMyInsCtrDpt (bool IAmATeacher)
Gbl.Usrs.Me.UsrDat.InsCod == 0,false,
"%s",Txt_Another_institution);
for (NumIns = 0;
NumIns < Gbl.Hierarchy.Cty.Inss.Num;
NumIns < Gbl.Hierarchy.Inss.Num;
NumIns++)
HTM_OPTION (HTM_Type_LONG,&Gbl.Hierarchy.Cty.Inss.Lst[NumIns].InsCod,
Gbl.Hierarchy.Cty.Inss.Lst[NumIns].InsCod == Gbl.Usrs.Me.UsrDat.InsCod,false,
"%s",Gbl.Hierarchy.Cty.Inss.Lst[NumIns].FullName);
HTM_OPTION (HTM_Type_LONG,&Gbl.Hierarchy.Inss.Lst[NumIns].InsCod,
Gbl.Hierarchy.Inss.Lst[NumIns].InsCod == Gbl.Usrs.Me.UsrDat.InsCod,false,
"%s",Gbl.Hierarchy.Inss.Lst[NumIns].FullName);
HTM_SELECT_End ();
Frm_EndForm ();
HTM_TD_End ();
@ -4043,11 +4043,11 @@ static void Rec_ShowFormMyInsCtrDpt (bool IAmATeacher)
Gbl.Usrs.Me.UsrDat.Tch.CtrCod == 0,false,
Txt_Another_centre);
for (NumCtr = 0;
NumCtr < Gbl.Hierarchy.Ins.Ctrs.Num;
NumCtr < Gbl.Hierarchy.Ctrs.Num;
NumCtr++)
HTM_OPTION (HTM_Type_LONG,&Gbl.Hierarchy.Ins.Ctrs.Lst[NumCtr].CtrCod,
Gbl.Hierarchy.Ins.Ctrs.Lst[NumCtr].CtrCod == Gbl.Usrs.Me.UsrDat.Tch.CtrCod,false,
Gbl.Hierarchy.Ins.Ctrs.Lst[NumCtr].FullName);
HTM_OPTION (HTM_Type_LONG,&Gbl.Hierarchy.Ctrs.Lst[NumCtr].CtrCod,
Gbl.Hierarchy.Ctrs.Lst[NumCtr].CtrCod == Gbl.Usrs.Me.UsrDat.Tch.CtrCod,false,
Gbl.Hierarchy.Ctrs.Lst[NumCtr].FullName);
HTM_SELECT_End ();
Frm_EndForm ();
HTM_TD_End ();

View File

@ -1,48 +0,0 @@
// swad_system.h: top level of the hierarchy (system > countries > institutions > centres > degrees > courses)
#ifndef _SWAD_SYS
#define _SWAD_SYS
/*
SWAD (Shared Workspace At a Distance in Spanish),
is a web platform developed at the University of Granada (Spain),
and used to support university teaching.
This file is part of SWAD core.
Copyright (C) 1999-2020 Antonio Cañas Vargas
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*****************************************************************************/
/********************************* Headers ***********************************/
/*****************************************************************************/
/*****************************************************************************/
/************************** Public types and constants ***********************/
/*****************************************************************************/
struct System
{
struct
{
unsigned Num; // Number of countries
struct Country *Lst; // List of countries
Cty_Order_t SelectedOrder;
} Ctys;
};
/*****************************************************************************/
/***************************** Public prototypes *****************************/
/*****************************************************************************/
#endif

File diff suppressed because it is too large Load Diff