Compare commits
828 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| fb1a72d5c2 | |||
| a99a407be6 | |||
| fa797f3a40 | |||
| 8ad0149fa3 | |||
| 1f52eab1c2 | |||
| a4f0dd0725 | |||
| 4861848c62 | |||
| 32e87fb8cc | |||
| a1a2744faa | |||
| 3c818366d0 | |||
| 06d179ba03 | |||
| 22931115b8 | |||
| 0450d2ad6b | |||
| 1dc7d28efd | |||
| 1d474809f0 | |||
| 84bf26c960 | |||
| 30728be868 | |||
| 43a542fab8 | |||
| 39346f4e00 | |||
| c90543941f | |||
| 59061d0628 | |||
| fd7b7b623c | |||
| 43f5d63d99 | |||
| 38756f1b65 | |||
| 95fffd7239 | |||
| d8ef3b94ae | |||
| 75feff1154 | |||
| 4ef4057d19 | |||
| cd78b6a4fd | |||
| b3b7f01ea7 | |||
| 321f304e32 | |||
| 6be96928e0 | |||
| 8b42c7b7f9 | |||
| 619f7e2c16 | |||
| 2de0a3307c | |||
| 7fbff7de54 | |||
| e65ecb0fbf | |||
| a1e444d9f7 | |||
| f60acaa422 | |||
| 7635eb8620 | |||
| b50197a1ee | |||
| 6ff056d87c | |||
| e260bf1c12 | |||
| d45bbc5ab0 | |||
| ec909cb3e5 | |||
| 0b46cf2a3a | |||
| d70d3c3ed5 | |||
| 078e601224 | |||
| ea1738cd2e | |||
| 1b5540ffd1 | |||
| 6d0b28c36c | |||
| 06d0d206dc | |||
| 5bcf0ab5c1 | |||
| 6955865507 | |||
| e15c4f35c4 | |||
| 0260923ace | |||
| 5a5731d75c | |||
| 9ea07e769d | |||
| 3ab9b23c56 | |||
| 3f19182952 | |||
| fa6cbbc1c6 | |||
| f818027ce2 | |||
| 89d5a70f5f | |||
| 585259ad63 | |||
| 284f2e43ec | |||
| c73b015097 | |||
| 4d0279952d | |||
| 0c01d3bdda | |||
| 8470c445c1 | |||
| ae3526d98e | |||
| 3645f5bad3 | |||
| 75d7097d0d | |||
| e4e1020939 | |||
| 613ac4ffae | |||
| d52d91b293 | |||
| a8b0a0d431 | |||
| 9c0ef1c8c8 | |||
| 3e31f4e2e2 | |||
| 56f31bce4f | |||
| 023bf01579 | |||
| 157decabd5 | |||
| a9d90c6ec9 | |||
| 5c2f9d14ac | |||
| f68037cf68 | |||
| 98daf5d749 | |||
| b571bf84a3 | |||
| c8a43d77e5 | |||
| 829facda7c | |||
| 7f43d9852e | |||
| 3af8b37abe | |||
| 0e3cf9d774 | |||
| 86b4781cb4 | |||
| 843d264f26 | |||
| d3a7d918c2 | |||
| e45607b491 | |||
| ebad4013c8 | |||
| c1eea3935a | |||
| 8693848fe2 | |||
| 72ae20b946 | |||
| 7b8a8bc587 | |||
| cb46a969f8 | |||
| f01f112873 | |||
| 232866f6c3 | |||
| a96dff44c3 | |||
| a447229f96 | |||
| ec34bda1fc | |||
| 1899c6567a | |||
| 6ec6c2d156 | |||
| a8bf60a0ab | |||
| 249de4f532 | |||
| 9652995f7d | |||
| f6641be6b7 | |||
| 726d8b5805 | |||
| 04ea70175b | |||
| 4497e89c9f | |||
| 4fc304ca82 | |||
| 8fd3d38509 | |||
| 6e6f33e6f2 | |||
| 5104726b9f | |||
| 97e2fee8d2 | |||
| a9456360f9 | |||
| 376a031f4c | |||
| 2c450e82d9 | |||
| 7658e24915 | |||
| 60ec12e055 | |||
| be074bc3e6 | |||
| 0259eda698 | |||
| cfdfc85ddc | |||
| 6fa56c54f3 | |||
| c14c54c22a | |||
| ae4b11cbfd | |||
| f452e874bc | |||
| 21d1ce8edd | |||
| 45d22afdcc | |||
| 7f33aa0cd4 | |||
| df489b8217 | |||
| f19e9ea7e7 | |||
| 48b31fcc65 | |||
| 6a4fc5046f | |||
| 947d915a8f | |||
| d37502617e | |||
| a22772f8e3 | |||
| 0b2f6d13cf | |||
| 767e292319 | |||
| 2c6041eb5a | |||
| 94e5a9c78f | |||
| 4b4b981562 | |||
| b74bd9ce19 | |||
| 2519a70a19 | |||
| 5ed379d713 | |||
| 5fbb72ba43 | |||
| 7c0be404c8 | |||
| e724611042 | |||
| 5a66d54c05 | |||
| 58b037a501 | |||
| 71dbb2abb0 | |||
| fdebc24f38 | |||
| 761ed63243 | |||
| 378464df6a | |||
| 8720c8d50c | |||
| f7f5109386 | |||
| 71092feb39 | |||
| e216127ee6 | |||
| 9aafb499a7 | |||
| e410c5e2e8 | |||
| 2277a1409c | |||
| 8ef47e0880 | |||
| 1eae77d4f6 | |||
| f1efb1f1c6 | |||
| 89fea782d9 | |||
| d3401c2db5 | |||
| da1aa1b461 | |||
| 2e47a8968e | |||
| 3b9e6de01d | |||
| c313ffa5db | |||
| 1b09c97190 | |||
| d9aff3e8ba | |||
| f238441d45 | |||
| 12e5b3c2b1 | |||
| b7515bca14 | |||
| 9f94e60e36 | |||
| 9ec94a8623 | |||
| e188ec9b1f | |||
| 0165dea2c6 | |||
| a3a940c7fb | |||
| 0227d32dff | |||
| 2fa9af0d78 | |||
| 24f32e4836 | |||
| 9e6ab88530 | |||
| de9eaaac1d | |||
| 9a72d21147 | |||
| a9673e7550 | |||
| 8a3df96e52 | |||
| 3e3a8001b2 | |||
| ae7805aec3 | |||
| 4912fa485e | |||
| 575447dd68 | |||
| 071b220cbb | |||
| 282aeac984 | |||
| af49230f9a | |||
| dae85a4750 | |||
| f622567f6c | |||
| a8c857d3c2 | |||
| 3bd4380e4a | |||
| 9e3e85eb05 | |||
| 91cf2fb230 | |||
| 8acecdb821 | |||
| e29a752173 | |||
| a0001e3a6d | |||
| edbbeb02f2 | |||
| d8e68c5e51 | |||
| c82a4d6d36 | |||
| 9d8453becd | |||
| 52f79e8fd4 | |||
| 3bc52bdb1e | |||
| 8c239c8315 | |||
| 57fead9527 | |||
| 5394e9c99b | |||
| 1dbbbb3118 | |||
| 9cf8933ec3 | |||
| 9b0f6ae71d | |||
| 32993fef61 | |||
| 9cd0ada241 | |||
| 009d136f72 | |||
| 719ef5f313 | |||
| df5039c5ca | |||
| a18c40a892 | |||
| 3281b7d075 | |||
| ea7a090955 | |||
| 788376bb52 | |||
| 1c496238c3 | |||
| cd3f0da747 | |||
| d8720eebc3 | |||
| b7f1aeee3f | |||
| 9c53d3286c | |||
| fc418ee754 | |||
| 8a3043d26d | |||
| 973342ab16 | |||
| 15b10f5cab | |||
| c00bb02c52 | |||
| afccfe8752 | |||
| 78e4c3dd6c | |||
| b4af3c2f48 | |||
| b3f9b5c1c2 | |||
| 81ee42cb0f | |||
| f7fe32525a | |||
| dad0965802 | |||
| 10e2074684 | |||
| 419a0bb0a8 | |||
| 485726e71f | |||
| bc1f84e618 | |||
| fc144c4992 | |||
| 902590a7d1 | |||
| d7a7b5b5db | |||
| 35decbd8be | |||
| 284060cc7e | |||
| 20a37a126e | |||
| 1b6fbd596c | |||
| 17b39b6c95 | |||
| a1cac4a086 | |||
| 09f187c0db | |||
| 1e0a4f87fc | |||
| 9fb8e5ed17 | |||
| ffd9b01913 | |||
| 3c582678cf | |||
| c63af80f85 | |||
| 09bd9bb66b | |||
| 244c10cf84 | |||
| f4959dc939 | |||
| e7a84ec034 | |||
| 00e53e7c36 | |||
| cdf10a35ab | |||
| 561bb4feac | |||
| eaf134b1bb | |||
| f035daedca | |||
| 4e3ee63c2e | |||
| d58e4f8a04 | |||
| 4afc877819 | |||
| 86f4390922 | |||
| cddc532c21 | |||
| cd4858ed49 | |||
| 609618521b | |||
| 123f94ad3a | |||
| 5da4f6bf37 | |||
| 57ba54429f | |||
| 84ef448820 | |||
| 80e2ce03fb | |||
| 812d7e4a29 | |||
| 4c74467eae | |||
| f10bf825df | |||
| 3676309617 | |||
| 8bcbbf13e3 | |||
| 81e7672216 | |||
| 183185d12b | |||
| bdea788034 | |||
| 5c3a0f7cf6 | |||
| 13d1518108 | |||
| a24948b64f | |||
| c6d0697e7a | |||
| 82dd519e4f | |||
| 08da658c0b | |||
| e6fb20e1b4 | |||
| c9bd758adb | |||
| 1bc1ee7884 | |||
| 05318aa55a | |||
| 87577fc045 | |||
| f08799bc80 | |||
| 0f1f94408a | |||
| 61231d5b66 | |||
| d8793bf35c | |||
| d88d4d9309 | |||
| 911812794c | |||
| e29818bf9c | |||
| 8ec981d1eb | |||
| 52a257bb99 | |||
| 4955f652fa | |||
| 39eda5c5e8 | |||
| 3e93268a0a | |||
| a61217d94e | |||
| 7dcc760e18 | |||
| acb6697543 | |||
| 77d6f641ba | |||
| 2cc1083e86 | |||
| 50219aacc1 | |||
| b84d9721c0 | |||
| f466b19ca6 | |||
| 1e1ac99513 | |||
| 6a1596099d | |||
| d827e21645 | |||
| dab8f5a24d | |||
| 7ecfb0c038 | |||
| f5a13d3f08 | |||
| 6317484ca7 | |||
| bd90f02488 | |||
| 3ce0e8274f | |||
| bd2cf8f046 | |||
| 2dd1350d64 | |||
| 55a30b97ad | |||
| e2ea245646 | |||
| 9b2fb1535b | |||
| 8960cc3780 | |||
| 541411b819 | |||
| 0c9a031f46 | |||
| c109bb608a | |||
| cc9232e04f | |||
| 5914b10e9c | |||
| 830f83030c | |||
| 9c08fcb1a3 | |||
| d421c0df1a | |||
| e4f0ab116b | |||
| ead0918c36 | |||
| 73ba657df4 | |||
| 7d11d206b0 | |||
| b19040a294 | |||
| 48026c58cb | |||
| 6172a24c6e | |||
| b5a1d81585 | |||
| ee2c3b4de9 | |||
| 62154f84d7 | |||
| ad8c93de3e | |||
| 88cd5d6f9f | |||
| f733b58e83 | |||
| 3f4df7071b | |||
| fc35fab7ec | |||
| 66be99b9b6 | |||
| c19838ded3 | |||
| f5e90caea6 | |||
| 8bc93dfa68 | |||
| 9ede45bcc1 | |||
| 8f716e31b3 | |||
| 1c0d156bd4 | |||
| 8b1f05f897 | |||
| 348355c4b8 | |||
| 753f1af690 | |||
| 53ab66c884 | |||
| aaba34cc52 | |||
| 326a83e109 | |||
| 182e92853e | |||
| dcd74d318f | |||
| 19874f6151 | |||
| b5bbd35f96 | |||
| c2dd7cadf8 | |||
| 801ec7da79 | |||
| 8ffb888712 | |||
| 7a16844405 | |||
| 11e8c61f48 | |||
| 38d5b701af | |||
| 9201c4146f | |||
| b15b35f6e6 | |||
| 5cdfc06bd3 | |||
| 653d21470d | |||
| 53be4b873f | |||
| 18425af78f | |||
| 795a0d8c34 | |||
| c545000a26 | |||
| 0b5657c765 | |||
| ec354d2a91 | |||
| ea7dee0d8a | |||
| 19fc43f5eb | |||
| d985ae5bdd | |||
| ad4dd3d4b8 | |||
| 0e7b1d7ac7 | |||
| 9d3ea5340d | |||
| 513a01bfaf | |||
| 4ee3d4ac06 | |||
| 696f45ea73 | |||
| 3866b318aa | |||
| da4c604c9d | |||
| 348375da21 | |||
| 337b664176 | |||
| 297b1bd905 | |||
| ff1f958c13 | |||
| 3bdb864d50 | |||
| 192f479e2b | |||
| 24644d6a56 | |||
| 231836a596 | |||
| f9fbfb4659 | |||
| 9b00e4cf72 | |||
| 0bf87d3181 | |||
| 5b77a01ea4 | |||
| f0a7c95b24 | |||
| adec76796a | |||
| d8b440ec76 | |||
| 19ff614093 | |||
| 917a1974a3 | |||
| 2c54796fcb | |||
| fab42b82f3 | |||
| 6886a6fc5b | |||
| 240e3cde63 | |||
| d6751efc2b | |||
| f09a285a6a | |||
| 5480a9bee0 | |||
| 3dd1cc23b6 | |||
| edf174b46a | |||
| 15d0d20614 | |||
| 33a50fa858 | |||
| e9bbfc15fc | |||
| 066f42726a | |||
| e2a93751ff | |||
| b06d0196b4 | |||
| 54ccc96b58 | |||
| ef10728a74 | |||
| 0960421191 | |||
| 7cdd2a596f | |||
| a2f89145fd | |||
| d810bd41cb | |||
| f6f75237a9 | |||
| 5402e5dec3 | |||
| 14a62bfcd5 | |||
| 3a4cd9d998 | |||
| 32fd8433d9 | |||
| f9cd1321ac | |||
| 2718918af5 | |||
| 5c578b2bc2 | |||
| 2357b57391 | |||
| bbf1f5d397 | |||
| 8ef0bbf6c3 | |||
| da70138cfa | |||
| 84f7bcc8ee | |||
| 362c2fd638 | |||
| 440d212f5c | |||
| c7c6c2ea0b | |||
| bc63c4bac3 | |||
| 89edf6b390 | |||
| 5d7a6597c1 | |||
| b13cfe12a6 | |||
| a4495be67a | |||
| 0f7cac279c | |||
| eff26434e0 | |||
| 74fe60674c | |||
| e8e05625ec | |||
| 1040d76e82 | |||
| 4531718527 | |||
| d56eaba132 | |||
| a8c20a1629 | |||
| 12ef3b787b | |||
| 4aeab730e9 | |||
| 18a742f9c6 | |||
| 822d3bfdc4 | |||
| b620f6843b | |||
| 6351bf91c9 | |||
| fffe36691f | |||
| 8327b31057 | |||
| 3080f36495 | |||
| 4bb30981a0 | |||
| 423ffdeda2 | |||
| 3f12881e16 | |||
| 4ca8d4783b | |||
| fee8ca9ee9 | |||
| e22ebd9267 | |||
| 81b65d5a10 | |||
| 272871028e | |||
| 48e8c9562e | |||
| 5f118ae0dd | |||
| 2456a9fbf6 | |||
| 5dc9e87812 | |||
| 2143ce3083 | |||
| 94a7364394 | |||
| dc1b9006e5 | |||
| e6c83418a4 | |||
| 7b6c589a50 | |||
| 745c14145b | |||
| b86e99c98d | |||
| 7bead1ecf8 | |||
| 14400b8274 | |||
| 8f8ac09b6d | |||
| 1e1a04a695 | |||
| 55e677148c | |||
| 2fc775008e | |||
| b204171348 | |||
| 0ee781c85a | |||
| 9af0972fd1 | |||
| 447f9047cd | |||
| d61edeec07 | |||
| 5987855a0a | |||
| 86668a76ec | |||
| 855165f531 | |||
| ee766268a3 | |||
| 0a0c56807c | |||
| 3c4d4cd8e7 | |||
| 3d5690d8b0 | |||
| 2aaed68eee | |||
| ca477ee66a | |||
| d535f143ac | |||
| eec943ef26 | |||
| 24fcdd14c0 | |||
| dd08b0d166 | |||
| 3d365baa65 | |||
| 70a892eb51 | |||
| 6ec0b677e7 | |||
| 224a2b4c05 | |||
| ac9bdaadc1 | |||
| 98b4d4d6a8 | |||
| 914a7bcad3 | |||
| 75ad2e9487 | |||
| 6117074c05 | |||
| 02d62036db | |||
| bb19f33228 | |||
| 6b06e02c33 | |||
| 6a66541391 | |||
| 3f62782cd9 | |||
| c848b76045 | |||
| d75825e75b | |||
| 64d92486a5 | |||
| c049c12abf | |||
| fef4937cb1 | |||
| 375a0ea8de | |||
| d4f098178a | |||
| 268ab771b6 | |||
| cb94fd11d5 | |||
| 8ec2d86edf | |||
| ce422c25d6 | |||
| e4af9c32ff | |||
| 94d52f8f02 | |||
| 46b5cf7cb7 | |||
| 856683e596 | |||
| d4d2a5bc3e | |||
| fbda575645 | |||
| 572badbdce | |||
| bcde80f2b3 | |||
| 6b63e3d905 | |||
| 39cbc2bf7b | |||
| 33f0ea4178 | |||
| 992d6a3a44 | |||
| ea0d8cea76 | |||
| 1b6cc50342 | |||
| 3d2e01f6c8 | |||
| 4ae8c9aca1 | |||
| e1088a97ec | |||
| 80006e6017 | |||
| b9f4f2227c | |||
| 509f5d23e0 | |||
| ffd7d3d7c2 | |||
| eb0208d591 | |||
| a32090a4c1 | |||
| 7b66125271 | |||
| 98632cd3c8 | |||
| 0a60ef6e45 | |||
| 49ebbad5fa | |||
| e873787168 | |||
| fb4990ca39 | |||
| 7032c917e3 | |||
| a4a6aafe48 | |||
| 718647bcb1 | |||
| 14a60a077b | |||
| 14e0fcb120 | |||
| 64422b601f | |||
| 8419513e13 | |||
| f990f10f77 | |||
| 4ab16d477d | |||
| 2e633ad500 | |||
| 00ba27c582 | |||
| 6ca5cf268b | |||
| b9bdd0c7b6 | |||
| 594c911aad | |||
| cfca034aed | |||
| 2c669a7383 | |||
| ca72bce30c | |||
| c8f1d1ca37 | |||
| f18c648ae7 | |||
| 2da3d6983b | |||
| 2a02ff39c6 | |||
| 0a69834d90 | |||
| a8fdaa5c38 | |||
| 1387c879d5 | |||
| dfa4dd740a | |||
| 164c865fc7 | |||
| 1dfae875f2 | |||
| ff5d1865c4 | |||
| 29177c6a0d | |||
| 4454213c7b | |||
| e340d9f14b | |||
| d36d45416f | |||
| 3fc2c3c266 | |||
| 008537d5c3 | |||
| f65b8599b5 | |||
| 80161aad61 | |||
| dc77f7b55c | |||
| c83afe4ec2 | |||
| 8aa18dddc8 | |||
| d0f5c048e2 | |||
| 498ce7e832 | |||
| f329c16428 | |||
| 3398e99d5d | |||
| 158210e49f | |||
| 85fb025135 | |||
| 4fbf8bd7b3 | |||
| 1762e9204c | |||
| 5f57a74789 | |||
| f009e194ec | |||
| 9f686c8a69 | |||
| c630b0ba86 | |||
| 38c1666070 | |||
| debad50603 | |||
| a234a89cc8 | |||
| 8583655bf9 | |||
| 1796aa9fcc | |||
| 7c1376125d | |||
| 1c66afe8f1 | |||
| 2989d4cc7c | |||
| f0db2fe9c3 | |||
| 5679493192 | |||
| d6bddd46c6 | |||
| 7ac61104a3 | |||
| 987e0d3be5 | |||
| 7980ea00c3 | |||
| 02cc013abf | |||
| 01b91ac459 | |||
| 4f70e2756a | |||
| f6965dc685 | |||
| 86218462fc | |||
| 383df89595 | |||
| dc7dd83b88 | |||
| a901d8fd4c | |||
| ea8e7f9936 | |||
| 0d2b4325ec | |||
| b1d70beafa | |||
| 3827e2d359 | |||
| 58d079df96 | |||
| b139f7ae4b | |||
| 0e448ae3c0 | |||
| 79fc4a6726 | |||
| 0d3b042fec | |||
| 2864912fe0 | |||
| 5b3a7e59a8 | |||
| 7b0d235253 | |||
| 22c633e8b7 | |||
| 664f80662e | |||
| ac63de90c6 | |||
| 5f4a37b5b2 | |||
| 666ebd7bcf | |||
| 9b4f94bd92 | |||
| a88c450679 | |||
| 6a973240af | |||
| 3e3c6eec08 | |||
| 8de4f2e23e | |||
| 9d3089562a | |||
| 77ec0e627e | |||
| abf39fb332 | |||
| 2877856383 | |||
| f03e81eb03 | |||
| 75e59b1a22 | |||
| e2eb506371 | |||
| 9f811896b8 | |||
| a12743a49b | |||
| e8131aa214 | |||
| faafe84561 | |||
| df8ac6d2e6 | |||
| c98d228b96 | |||
| 9180b308f4 | |||
| 586e08ac32 | |||
| 13ad4e12e1 | |||
| f83a24b87b | |||
| bf08108c94 | |||
| f610ac5e18 | |||
| bfd5c5d7f6 | |||
| 5decc6f064 | |||
| f598a45f2e | |||
| eb9b7f1a3e | |||
| 4508fdd282 | |||
| 6a2f9ca922 | |||
| a565cb2f8e | |||
| bf9cdc2b90 | |||
| 19660487d0 | |||
| 5ab3937c6e | |||
| 22fa4da34f | |||
| 0ee1574512 | |||
| b02b2f70d7 | |||
| 0679583490 | |||
| 5ba8b19939 | |||
| 4d21686218 | |||
| 79cd394c82 | |||
| 18e2de4313 | |||
| 0eeec1a96f | |||
| 4e2cbb28e5 | |||
| 5a521aa30f | |||
| 01b9db69e2 | |||
| 91bfeb65ea | |||
| 16ae471c30 | |||
| e22b34ec32 | |||
| 7025366210 | |||
| e133c32ff3 | |||
| 84e6ee9c38 | |||
| 4c831b7078 | |||
| cd79115069 | |||
| cd1e684b2c | |||
| d67514acb8 | |||
| 0d4537c796 | |||
| fdb76e639f | |||
| e59fded4ef | |||
| 8529d9b6d8 | |||
| c23339e968 | |||
| 5fc3c306f4 | |||
| 207793f82f | |||
| 2b64c31597 | |||
| f7abe85cc0 | |||
| 5cd1517bc3 | |||
| 7ecefcb090 | |||
| 7a23b4d63c | |||
| 00c5890a15 | |||
| 45cd0cfde8 | |||
| 0a861d4506 | |||
| dcd2895639 | |||
| b88378acb9 | |||
| 06bbfff66e | |||
| da4714358a | |||
| 48e2bf159a | |||
| 48b358ba56 | |||
| 029d0a28bd | |||
| c26ac7924f | |||
| 51034f13f8 | |||
| a1ecd20a19 | |||
| a7ea2d7dcc | |||
| 915db857b8 | |||
| 6c05439a08 | |||
| b5c240e397 | |||
| e8e814e5c7 | |||
| 0fc2503718 | |||
| f5c2ff517f | |||
| 74948bb2e7 | |||
| ec7a860ff5 | |||
| 0f69811d98 | |||
| 0b038e2d43 | |||
| 02f0217c20 | |||
| 105a8f399f | |||
| c071606525 | |||
| dfa8b0f06a | |||
| 8953a3b44f | |||
| 6223b2eb1e | |||
| f4f18fb00c | |||
| 98830278dc | |||
| 2928e3d2d6 | |||
| ea07be815b | |||
| 10d7f1525d | |||
| d51d6583a7 | |||
| 6703e4af2d | |||
| 530c61afe7 | |||
| 58c98fa207 | |||
| beb6c6cdb7 | |||
| 964f6d4f17 | |||
| 905c6f3261 | |||
| e1210ad3c3 | |||
| 2492b30859 | |||
| 8e9f9bec69 | |||
| 47c8660050 | |||
| 8860ceb4d2 | |||
| a45c1d139a | |||
| ecdb04ca06 | |||
| 0f7fcc8377 | |||
| 4b8df782c6 | |||
| 3ad4a1097b | |||
| 21c2f2ef29 | |||
| c58f4f10b3 | |||
| 9978506b11 | |||
| 980b1e04bc | |||
| 0fc71cc508 | |||
| 9a0d8fd2b3 | |||
| d2b00aae1d | |||
| 2a94a64a06 | |||
| d7a5c75f30 | |||
| 54ac3dd31a | |||
| be029bdf25 | |||
| b573d77752 | |||
| db5219aacd | |||
| 9a2539db21 | |||
| dd241f341a | |||
| fe2bc06329 | |||
| 58643a8110 | |||
| 1a10d9049f | |||
| 4221b8647c | |||
| 8fd49aa444 | |||
| d91f79789a | |||
| 5eeebefba9 | |||
| 87cb44ac9f | |||
| 644600315c | |||
| 905fdcaa31 | |||
| a97a4a87bd | |||
| c3d36a923f | |||
| 3cfe476b39 | |||
| 146a1735ac | |||
| 8dc6117433 | |||
| 08f72e477c | |||
| d1c93d9605 | |||
| eede7619ef | |||
| bf6f63ae00 | |||
| 2f1dff3561 | |||
| d0b4e8226f | |||
| 889d2b5ead |
+339
@@ -0,0 +1,339 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Lesser General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 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 General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License.
|
||||
+17
-6
@@ -3,6 +3,8 @@
|
||||
|
||||
require_once('../config.php');
|
||||
|
||||
$installing = optional_param('installing', 0, PARAM_BOOL);
|
||||
|
||||
$focus = '';
|
||||
|
||||
if ($site = get_site()) { // If false then this is a new installation
|
||||
@@ -46,7 +48,10 @@
|
||||
$value = implode(',',$value);
|
||||
}
|
||||
}
|
||||
unset($conf);
|
||||
if ($name == "locale") {
|
||||
$value = trim($value);
|
||||
}
|
||||
$conf = new object();
|
||||
$conf->name = $name;
|
||||
$conf->value = $value;
|
||||
if ($current = get_record('config', 'name', $name)) {
|
||||
@@ -60,8 +65,16 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
redirect('index.php', get_string('changessaved'), 1);
|
||||
exit;
|
||||
if ($installing) {
|
||||
print_header();
|
||||
notify(get_string('changessaved'), 'notifysuccess');
|
||||
print_continue('index.php');
|
||||
exit;
|
||||
} else {
|
||||
// the following redirect was randomly breaking upgrades because it did double redirects,
|
||||
// we must not use it during install/upgrade
|
||||
redirect('index.php', get_string('changessaved'), 1);
|
||||
}
|
||||
|
||||
} else {
|
||||
foreach ($err as $key => $value) {
|
||||
@@ -74,9 +87,6 @@
|
||||
|
||||
if (empty($config)) {
|
||||
$config = $CFG;
|
||||
if (!$config->locale = get_field('config', 'value', 'name', 'locale')) {
|
||||
$config->locale = $CFG->lang;
|
||||
}
|
||||
}
|
||||
|
||||
$sesskey = !empty($USER->id) ? $USER->sesskey : '';
|
||||
@@ -143,6 +153,7 @@
|
||||
|
||||
}
|
||||
echo '<center>';
|
||||
echo '<input type="hidden" name="installing" value="'.$installing.'" />';
|
||||
echo '<input type="hidden" name="sesskey" value="'.$sesskey.'" />';
|
||||
echo '<input type="submit" value="'.get_string('savechanges').'" />';
|
||||
echo '</center>';
|
||||
|
||||
+13
-4
@@ -69,7 +69,7 @@ class configvar {
|
||||
|
||||
/// debug
|
||||
unset($options);
|
||||
$options[7] = $strno;
|
||||
$options[5] = $strno;
|
||||
$options[15] = $stryes;
|
||||
|
||||
$misc['debug'] = new configvar (get_string('configdebug', 'admin'),
|
||||
@@ -312,10 +312,10 @@ class configvarrss extends configvar {
|
||||
/// language menu
|
||||
$interface['langcache'] = new configvar ( get_string('configlangcache', 'admin'),
|
||||
choose_from_menu($noyesoptions, 'langcache', $config->langcache, '', '', '', true) );
|
||||
|
||||
|
||||
/// locale
|
||||
$interface['locale'] = new configvar ( get_string('configlocale', 'admin'),
|
||||
'<input name="locale" type="text" size="10" value="'.s($config->locale).'" alt="locale" />' );
|
||||
'<input name="locale" type="text" size="15" value="'.s($config->locale).'" alt="locale" />' );
|
||||
|
||||
/// docroot
|
||||
$interface['docroot'] = new configvar ( get_string('configdocroot', 'admin'),
|
||||
@@ -450,6 +450,9 @@ class configvarrss extends configvar {
|
||||
$security['notifyloginthreshold'] = new configvar (get_string('confignotifyloginthreshold', 'admin'),
|
||||
choose_from_menu($options, 'notifyloginthreshold', $config->notifyloginthreshold, '', '', '', true) );
|
||||
|
||||
$security['protectusernames'] = new configvar (get_string('configprotectusernames', 'admin'),
|
||||
choose_from_menu($noyesoptions, 'protectusernames', $config->protectusernames, '', '', '', true) );
|
||||
|
||||
/// secureforms
|
||||
$security['secureforms'] = new configvar (get_string('configsecureforms', 'admin'),
|
||||
choose_from_menu ($noyesoptions, 'secureforms', $config->secureforms, '', '', '', true) );
|
||||
@@ -458,6 +461,9 @@ class configvarrss extends configvar {
|
||||
$security['loginhttps'] = new configvar (get_string('configloginhttps', 'admin'),
|
||||
choose_from_menu ($noyesoptions, 'loginhttps', $config->loginhttps, '', '', '', true) );
|
||||
|
||||
/// profilesforenrolledusersonly
|
||||
$security['profilesforenrolledusersonly'] = new configvar (get_string('configprofilesforenrolledusersonly', 'admin'), choose_from_menu ($noyesoptions, 'profilesforenrolledusersonly', $CFG->profilesforenrolledusersonly, '', '', '', true) );
|
||||
|
||||
/// runclamonupload
|
||||
$security['runclamonupload'] = new configvar (get_string('configrunclamonupload', 'admin'),
|
||||
choose_from_menu($noyesoptions, 'runclamonupload', $config->runclamonupload, '', '', '', true) );
|
||||
@@ -591,6 +597,7 @@ class configvarrss extends configvar {
|
||||
}
|
||||
|
||||
/// enable stats
|
||||
if (empty($CFG->disablestatsprocessing)) {
|
||||
$stats['enablestats'] = new configvar (get_string('configenablestats','admin'),
|
||||
choose_from_menu($noyesoptions, 'enablestats', $config->enablestats, '', '', '', true) );
|
||||
|
||||
@@ -636,7 +643,7 @@ class configvarrss extends configvar {
|
||||
|
||||
$stats['statsuserthreshold'] = new configvar (get_string('configstatsuserthreshold','admin'),
|
||||
'<input type="text" name="statsuserthreshold" size="4" value="'.$config->statsuserthreshold.'" />');
|
||||
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -649,6 +656,8 @@ class configvarrss extends configvar {
|
||||
$configvars['permissions'] = $permissions;
|
||||
$configvars['requestedcourse'] = $reqcourse;
|
||||
$configvars['misc'] = $misc;
|
||||
if (empty($CFG->disablestatsprocessing)) {
|
||||
$configvars['stats'] = $stats;
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
+16
-12
@@ -141,11 +141,13 @@
|
||||
|
||||
/// Delete users who haven't confirmed within required period
|
||||
|
||||
$oneweek = $timenow - ($CFG->deleteunconfirmed * 3600);
|
||||
if ($users = get_users_unconfirmed($oneweek)) {
|
||||
foreach ($users as $user) {
|
||||
if (delete_records('user', 'id', $user->id)) {
|
||||
mtrace("Deleted unconfirmed user for ".fullname($user, true)." ($user->id)");
|
||||
if (!empty($CFG->deleteunconfirmed)) {
|
||||
$oneweek = $timenow - ($CFG->deleteunconfirmed * 3600);
|
||||
if ($users = get_users_unconfirmed($oneweek)) {
|
||||
foreach ($users as $user) {
|
||||
if (delete_records('user', 'id', $user->id)) {
|
||||
mtrace("Deleted unconfirmed user for ".fullname($user, true)." ($user->id)");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -155,11 +157,13 @@
|
||||
|
||||
/// Delete users who haven't completed profile within required period
|
||||
|
||||
$oneweek = $timenow - ($CFG->deleteunconfirmed * 3600);
|
||||
if ($users = get_users_not_fully_set_up($oneweek)) {
|
||||
foreach ($users as $user) {
|
||||
if (delete_records('user', 'id', $user->id)) {
|
||||
mtrace("Deleted not fully setup user $user->username ($user->id)");
|
||||
if (!empty($CFG->deleteunconfirmed)) {
|
||||
$oneweek = $timenow - ($CFG->deleteunconfirmed * 3600);
|
||||
if ($users = get_users_not_fully_set_up($oneweek)) {
|
||||
foreach ($users as $user) {
|
||||
if (delete_records('user', 'id', $user->id)) {
|
||||
mtrace("Deleted not fully setup user $user->username ($user->id)");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -274,10 +278,10 @@
|
||||
unset($enrol);
|
||||
}
|
||||
|
||||
if (!empty($CFG->enablestats)) {
|
||||
if (!empty($CFG->enablestats) and empty($CFG->disablestatsprocessing)) {
|
||||
|
||||
// check we're not before our runtime
|
||||
$timetocheck = strtotime("$CFG->statsruntimestarthour:$CFG->statsruntimestartminute today");
|
||||
$timetocheck = strtotime("today $CFG->statsruntimestarthour:$CFG->statsruntimestartminute");
|
||||
|
||||
if (time() > $timetocheck) {
|
||||
$time = 60*60*20; // set it to 20 here for first run... (overridden by $CFG)
|
||||
|
||||
+1
-1
@@ -43,7 +43,7 @@ function delete_subdirectories($rootdir) {
|
||||
|
||||
$dir = opendir($rootdir);
|
||||
|
||||
while ($file = readdir($dir)) {
|
||||
while (false !== ($file = readdir($dir))) {
|
||||
if ($file != '.' and $file != '..') {
|
||||
$fullfile = $rootdir .'/'. $file;
|
||||
if (filetype($fullfile) == 'dir') {
|
||||
|
||||
@@ -43,10 +43,12 @@
|
||||
<BYPASS function="bypass_mysql416_reqs" message="mysql416bypassed" />
|
||||
</VENDOR>
|
||||
<VENDOR name="postgres" version="7.4" />
|
||||
<VENDOR name="mssql" version="8.0" />
|
||||
<VENDOR name="mssql" version="9.0" />
|
||||
<VENDOR name="oracle" version="9.0" />
|
||||
</DATABASE>
|
||||
<PHP version="4.3.0" level="required" />
|
||||
<PHP version="4.3.0" level="required">
|
||||
<RESTRICT function="restrict_php50_version" message="php50restricted" />
|
||||
</PHP>
|
||||
<PHP_EXTENSIONS>
|
||||
<PHP_EXTENSION name="iconv" level="optional">
|
||||
<FEEDBACK>
|
||||
|
||||
+7
-12
@@ -222,7 +222,7 @@
|
||||
/// If any new configurations were found then send to the config page to check
|
||||
|
||||
if (!empty($configchange)) {
|
||||
redirect("config.php");
|
||||
redirect("config.php?installing=1");
|
||||
}
|
||||
|
||||
/// Find and check all main modules and load them up or upgrade them if necessary
|
||||
@@ -258,7 +258,7 @@
|
||||
|
||||
/// Define the unique site ID code if it isn't already
|
||||
if (empty($CFG->siteidentifier)) { // Unique site identification code
|
||||
set_config('siteidentifier', random_string(32));
|
||||
set_config('siteidentifier', random_string(32).$_SERVER['HTTP_HOST']);
|
||||
}
|
||||
|
||||
/// Check if the guest user exists. If not, create one.
|
||||
@@ -319,10 +319,13 @@
|
||||
print_spacer(10,10);
|
||||
}
|
||||
|
||||
if (ini_get_bool('register_globals') && !ini_get_bool('magic_quotes_gpc')) {
|
||||
print_simple_box(get_string('globalsquoteswarning', 'admin'), 'center', '60%');
|
||||
if (ini_get_bool('register_globals')) {
|
||||
print_simple_box(get_string('globalswarning', 'admin'), 'center', '60%');
|
||||
}
|
||||
|
||||
if (is_dataroot_insecure()) {
|
||||
print_simple_box(get_string('datarootsecuritywarning', 'admin', $CFG->dataroot), 'center', '60%');
|
||||
}
|
||||
|
||||
/// If no recently cron run
|
||||
$lastcron = get_field_sql('SELECT max(lastcron) FROM ' . $CFG->prefix . 'modules');
|
||||
@@ -475,14 +478,6 @@ epository').'</a></strong>',
|
||||
|
||||
print_simple_box_end();
|
||||
|
||||
|
||||
if (optional_param('dbmigrate')) { // ??? Is this actually used?
|
||||
print_simple_box_start('center','60%');
|
||||
require_once($CFG->dirroot.'/admin/utfdbmigrate.php');
|
||||
db_migrate2utf8();
|
||||
print_simple_box_end();
|
||||
}
|
||||
|
||||
|
||||
print_footer($site);
|
||||
|
||||
|
||||
+1
-1
@@ -177,7 +177,7 @@
|
||||
$settings = "";
|
||||
}
|
||||
|
||||
$count = count_records("$module->name");
|
||||
$count = count_records_select("$module->name",'course<>0');
|
||||
|
||||
if ($module->visible) {
|
||||
$visible = "<a href=\"modules.php?hide=$module->name&sesskey=$USER->sesskey\" title=\"$strhide\">".
|
||||
|
||||
+1
-1
@@ -26,7 +26,7 @@
|
||||
}
|
||||
|
||||
if (empty($CFG->siteidentifier)) { // Unique site identification code
|
||||
set_config('siteidentifier', random_string(32));
|
||||
set_config('siteidentifier', random_string(32).$_SERVER['HTTP_HOST']);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -78,7 +78,11 @@
|
||||
error(get_string('statsnodata'),$CFG->wwwroot.'/'.$CFG->admin.'/report/courseoverview/index.php');
|
||||
}
|
||||
|
||||
echo '<center><img src="'.$CFG->wwwroot.'/'.$CFG->admin.'/report/courseoverview/reportsgraph.php?time='.$time.'&report='.$report.'&numcourses='.$numcourses.'" /></center>';
|
||||
if (empty($CFG->gdversion)) {
|
||||
echo "<center>(".get_string("gdneed").")</center>";
|
||||
} else {
|
||||
echo '<center><img src="'.$CFG->wwwroot.'/'.$CFG->admin.'/report/courseoverview/reportsgraph.php?time='.$time.'&report='.$report.'&numcourses='.$numcourses.'" /></center>';
|
||||
}
|
||||
|
||||
$table = new object();
|
||||
$table->align = array('left','center','center','center');
|
||||
|
||||
Executable
+397
@@ -0,0 +1,397 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Spam Cleaner
|
||||
*
|
||||
* Helps an admin to clean up spam in Moodle
|
||||
*
|
||||
* @version $Id$
|
||||
* @authors Dongsheng Cai, Martin Dougiamas, Amr Hourani
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
|
||||
*/
|
||||
|
||||
// Configuration
|
||||
|
||||
// List of known spammy keywords, please add more here
|
||||
|
||||
$autokeywords = array(
|
||||
"<img",
|
||||
"fuck",
|
||||
"casino",
|
||||
"porn",
|
||||
"xxx",
|
||||
"cialis",
|
||||
"viagra",
|
||||
"poker",
|
||||
"warcraft"
|
||||
);
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
require_once('../../../config.php');
|
||||
require_once($CFG->libdir.'/adminlib.php');
|
||||
function delete_user($user) {
|
||||
$updateuser = new object();
|
||||
$updateuser->id = $user->id;
|
||||
$updateuser->deleted = 1;
|
||||
$updateuser->username = addslashes("$user->email.".time());
|
||||
$updateuser->email = '';
|
||||
$updateuser->idnumber = '';
|
||||
$updateuser->timemodified = time();
|
||||
if (update_record('user', $updateuser)) {
|
||||
role_unassign(0, $user->id);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
$keyword = optional_param('keyword', '', PARAM_RAW);
|
||||
$autodetect = optional_param('autodetect', '', PARAM_RAW);
|
||||
$del = optional_param('del', '', PARAM_RAW);
|
||||
$delall = optional_param('delall', '', PARAM_RAW);
|
||||
$ignore = optional_param('ignore', '', PARAM_RAW);
|
||||
$reset = optional_param('reset', '', PARAM_RAW);
|
||||
$id = optional_param('id', '', PARAM_INT);
|
||||
|
||||
require_login();
|
||||
|
||||
// Implement some AJAX calls
|
||||
|
||||
// Delete one user
|
||||
if (!empty($del) && confirm_sesskey() && ($id != $USER->id)) {
|
||||
if (isset($SESSION->users_result[$id])) {
|
||||
$user = $SESSION->users_result[$id];
|
||||
if (delete_user($user)) {
|
||||
unset($SESSION->users_result[$id]);
|
||||
echo 1;
|
||||
} else {
|
||||
echo 0;
|
||||
}
|
||||
} else {
|
||||
echo 0;
|
||||
}
|
||||
exit;
|
||||
}
|
||||
|
||||
// Delete lots of users
|
||||
if (!empty($delall) && confirm_sesskey()) {
|
||||
if (!empty($SESSION->users_result)) {
|
||||
foreach ($SESSION->users_result as $userid => $user) {
|
||||
if ($userid != $USER->id) {
|
||||
if (delete_user($user)) {
|
||||
unset($SESSION->users_result[$userid]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
echo 1;
|
||||
exit;
|
||||
}
|
||||
|
||||
if (!empty($ignore)) {
|
||||
unset($SESSION->users_result[$id]);
|
||||
echo 1;
|
||||
exit;
|
||||
}
|
||||
|
||||
$strspamcleaner = get_string('spamcleaner', 'admin');
|
||||
$strnav = '<a href="'.$CFG->wwwroot.'/'.$CFG->admin.'/index.php">'.get_string('administration').'</a> -> <a href="'.$CFG->wwwroot.'/'.$CFG->admin.'/report.php">'. get_string('reports') .'</a> -> '.$strspamcleaner;
|
||||
// Print headers and things
|
||||
print_header($strspamcleaner, $strspamcleaner, $strnav);
|
||||
|
||||
print_spamcleaner_javascript();
|
||||
|
||||
print_simple_box(get_string('spamcleanerintro', 'report_spamcleaner'));
|
||||
|
||||
?>
|
||||
|
||||
<div class="mdl-align">
|
||||
|
||||
<form method="post" action="index.php">
|
||||
<div>
|
||||
<input type="text" name="keyword" id="keyword_el" value="<?php p($keyword) ?>" />
|
||||
<input type="hidden" name="sesskey" value="<?php echo sesskey();?>" />
|
||||
<input type="submit" value="<?php echo get_string('spamsearch', 'report_spamcleaner')?>" />
|
||||
</div>
|
||||
</form>
|
||||
<p><?php echo get_string('spameg', 'report_spamcleaner');?></p>
|
||||
|
||||
<hr />
|
||||
|
||||
<form method="post" action="index.php">
|
||||
<div>
|
||||
<input type="submit" name="autodetect" value="<?php echo get_string('spamauto', 'report_spamcleaner');?>" />
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<?php
|
||||
|
||||
echo '<div id="result" class="mdl-align">';
|
||||
|
||||
// Print list of resulting profiles
|
||||
|
||||
if (!empty($keyword)) { // Use the keyword(s) supplied by the user
|
||||
$keywords = explode(',', $keyword);
|
||||
foreach ($keywords as $key => $keyword) {
|
||||
$keywords[$key] = trim($keyword);
|
||||
}
|
||||
search_spammers($keywords);
|
||||
|
||||
} else if (!empty($autodetect)) { // Use the inbuilt keyword list to detect users
|
||||
search_spammers($autokeywords);
|
||||
}
|
||||
|
||||
echo '</div>';
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
/// Functions
|
||||
|
||||
|
||||
function search_spammers($keywords) {
|
||||
|
||||
global $CFG, $USER, $DB;
|
||||
|
||||
if (!is_array($keywords)) {
|
||||
$keywords = array($keywords); // Make it into an array
|
||||
}
|
||||
|
||||
$like = sql_ilike();
|
||||
|
||||
$keywordfull = array();
|
||||
foreach ($keywords as $keyword) {
|
||||
$keyword = addslashes($keyword); // Just to be safe
|
||||
$keywordfull[] = " description $like '%$keyword%' ";
|
||||
$keywordfull2[] = " p.summary $like '%$keyword%' ";
|
||||
}
|
||||
$conditions = '( '.implode(' OR ', $keywordfull).' )';
|
||||
$conditions2 = '( '.implode(' OR ', $keywordfull2).' )';
|
||||
|
||||
$sql = "SELECT * FROM {$CFG->prefix}user WHERE deleted = 0 AND id <> {$USER->id} AND $conditions"; // Exclude oneself
|
||||
$sql2= "SELECT u.*, p.summary FROM {$CFG->prefix}user AS u, {$CFG->prefix}post AS p WHERE $conditions2 AND u.deleted = 0 AND u.id=p.userid AND u.id <> {$USER->id}";
|
||||
$spamusers_desc = get_recordset_sql($sql);
|
||||
$spamusers_blog = get_recordset_sql($sql2);
|
||||
|
||||
$keywordlist = implode(', ', $keywords);
|
||||
print_simple_box(get_string('spamresult', 'report_spamcleaner').s($keywordlist)).' ...';
|
||||
|
||||
print_user_list(array($spamusers_desc, $spamusers_blog), $keywords);
|
||||
|
||||
}
|
||||
|
||||
function print_user_list($users_rs, $keywords) {
|
||||
global $CFG, $SESSION;
|
||||
|
||||
// reset session everytime this function is called
|
||||
$SESSION->users_result = array();
|
||||
$count = 0;
|
||||
|
||||
foreach ($users_rs as $key=>$rs) {
|
||||
while(!$rs->EOF) {
|
||||
$user = (object)$rs->fields;
|
||||
if (!$count) {
|
||||
echo '<table border="1" width="100%" id="data-grid"><tr><th> </th><th>'.get_string('user','admin').'</th><th>'.get_string('spamdesc', 'report_spamcleaner').'</th><th>'.get_string('spamoperation', 'report_spamcleaner').'</th></tr>';
|
||||
}
|
||||
$rs->MoveNext();
|
||||
$count++;
|
||||
filter_user($user, $keywords, $count);
|
||||
}
|
||||
}
|
||||
|
||||
if (!$count) {
|
||||
echo get_string('spamcannotfinduser', 'report_spamcleaner');
|
||||
|
||||
} else {
|
||||
echo '</table>';
|
||||
echo '<div class="mld-align">
|
||||
<button id="removeall_btn">'.get_string('spamdeleteall', 'report_spamcleaner').'</button>
|
||||
</div>';
|
||||
}
|
||||
}
|
||||
function filter_user($user, $keywords, $count) {
|
||||
global $CFG;
|
||||
$image_search = false;
|
||||
if (in_array('<img', $keywords)) {
|
||||
$image_search = true;
|
||||
}
|
||||
if (isset($user->summary)) {
|
||||
$user->description = '<h3>'.get_string('spamfromblog', 'report_spamcleaner').'</h3>'.$user->summary;
|
||||
unset($user->summary);
|
||||
}
|
||||
if (preg_match('#<img.*src=[\"\']('.$CFG->pixpath.')#', $user->description, $matches)
|
||||
&& $image_search) {
|
||||
$result = false;
|
||||
foreach ($keywords as $keyword) {
|
||||
if (preg_match('#'.$keyword.'#', $user->description)
|
||||
&& ($keyword != '<img')) {
|
||||
$result = true;
|
||||
}
|
||||
}
|
||||
if ($result) {
|
||||
echo print_user_entry($user, $keywords, $count);
|
||||
} else {
|
||||
unset($user);
|
||||
}
|
||||
} else {
|
||||
echo print_user_entry($user, $keywords, $count);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function print_user_entry($user, $keywords, $count) {
|
||||
|
||||
global $SESSION, $CFG;
|
||||
|
||||
$smalluserobject = new object; // All we need to delete them later
|
||||
$smalluserobject->id = $user->id;
|
||||
$smalluserobject->email = $user->email;
|
||||
$smalluserobject->auth = $user->auth;
|
||||
$smalluserobject->firstname = $user->firstname;
|
||||
$smalluserobject->lastname = $user->lastname;
|
||||
|
||||
if (empty($SESSION->users_result[$user->id])) {
|
||||
$SESSION->users_result[$user->id] = $smalluserobject;
|
||||
$html = '<tr valign="top" id="row-'.$user->id.'" class="result-row">';
|
||||
$html .= '<td width="10">'.$count.'</td>';
|
||||
$html .= '<td width="30%" align="left"><a href="'.$CFG->wwwroot."/user/view.php?course=1&id=".$user->id.'" title="'.s($user->username).'">'.fullname($user).'</a>';
|
||||
|
||||
$html .= "<ul>";
|
||||
$profile_set = array('city'=>true, 'country'=>true, 'email'=>true);
|
||||
foreach ($profile_set as $key=>$value) {
|
||||
if (isset($user->$key)){
|
||||
$html .= '<li>'.$user->$key.'</li>';
|
||||
}
|
||||
}
|
||||
$html .= "</ul>";
|
||||
$html .= '</td>';
|
||||
|
||||
foreach ($keywords as $keyword) {
|
||||
$user->description = highlight($keyword, $user->description);
|
||||
}
|
||||
|
||||
$html .= '<td align="left">'.format_text($user->description, FORMAT_MOODLE).'</td>';
|
||||
$html .= '<td width="100px" align="center">';
|
||||
$html .= '<button onclick="del_user(this,'.$user->id.')">'.get_string('deleteuser', 'admin').'</button><br />';
|
||||
$html .= '<button onclick="ignore_user(this,'.$user->id.')">'.get_string('ignore', 'admin').'</button>';
|
||||
$html .= '</td>';
|
||||
$html .= '</tr>';
|
||||
return $html;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
function print_spamcleaner_javascript() {
|
||||
global $CFG;
|
||||
|
||||
$sesskey = sesskey();
|
||||
|
||||
?>
|
||||
<script type="text/javascript" src="<?php echo $CFG->wwwroot;?>/lib/yui/yahoo-dom-event/yahoo-dom-event.js"></script>
|
||||
<script type="text/javascript" src="<?php echo $CFG->wwwroot;?>/lib/yui/connection/connection-min.js"></script>
|
||||
<script type="text/javascript">
|
||||
//<![CDATA[
|
||||
var service_url = '<?php echo $CFG->wwwroot;?>/admin/report/spamcleaner/index.php';
|
||||
function ajax(url, callback)
|
||||
{
|
||||
method = 'POST';
|
||||
if (window.XMLHttpRequest) {
|
||||
var req = new XMLHttpRequest();
|
||||
} else {
|
||||
var MSXML = ['MSXML2.XMLHTTP.6.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
|
||||
for(var n = 0; n < MSXML.length; n ++) {
|
||||
try {
|
||||
var req = new ActiveXObject(MSXML[n]);
|
||||
break;
|
||||
} catch(e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
with(req) {
|
||||
try {
|
||||
open(method, url, true);
|
||||
setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
|
||||
send(null);
|
||||
} catch(e) {
|
||||
alert(e);
|
||||
}
|
||||
onreadystatechange = function()
|
||||
{
|
||||
if (req.readyState == 4)
|
||||
{
|
||||
callback(req.responseText, req.status);
|
||||
delete(req);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
var row = null;
|
||||
function delall_cb (text) {
|
||||
if(text){
|
||||
window.location.href=window.location.href;
|
||||
}
|
||||
}
|
||||
function init() {
|
||||
var remove_all = document.getElementById('removeall_btn');
|
||||
if(remove_all){
|
||||
remove_all.onclick = function(){
|
||||
var yes = confirm('<?php echo get_string('spamdeleteallconfirm', 'report_spamcleaner');?>');
|
||||
if(yes){
|
||||
ajax(service_url + '?delall=yes&sesskey=<?php echo $sesskey;?>', delall_cb);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
function del_cb (text) {
|
||||
if(row) {
|
||||
if(text){
|
||||
while(row.tagName != 'TR') {
|
||||
row = row.parentNode;
|
||||
}
|
||||
row.parentNode.removeChild(row);
|
||||
row = null;
|
||||
} else {
|
||||
alert('<?php echo get_string('spamcannotdelete', 'report_spamcleaner');?>');
|
||||
}
|
||||
}
|
||||
}
|
||||
function ignore_cb (text) {
|
||||
if(row) {
|
||||
if(text){
|
||||
while(row.tagName != 'TR') {
|
||||
row = row.parentNode;
|
||||
}
|
||||
row.parentNode.removeChild(row);
|
||||
row = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
function del_user(obj, id) {
|
||||
var yes = confirm('<?php echo get_string('spamdeleteconfirm', 'report_spamcleaner');?>');
|
||||
if(yes){
|
||||
row = obj;
|
||||
ajax(service_url + '?del=yes&sesskey=<?php echo $sesskey;?>&id='+id, del_cb);
|
||||
}
|
||||
}
|
||||
function ignore_user(obj, id) {
|
||||
row = obj;
|
||||
ajax(service_url + '?ignore=yes&sesskey=<?php echo $sesskey;?>&id='+id, ignore_cb);
|
||||
}
|
||||
window.onload = function(){
|
||||
init();
|
||||
}
|
||||
//]]>
|
||||
</script>
|
||||
|
||||
<?php
|
||||
}
|
||||
|
||||
print_footer();
|
||||
?>
|
||||
@@ -0,0 +1,318 @@
|
||||
<?php
|
||||
if (!defined('MOODLE_INTERNAL')) {
|
||||
die('Direct access to this script is forbidden.'); /// It must be included from a Moodle page
|
||||
}
|
||||
|
||||
$keyword = optional_param('keyword', '', PARAM_RAW);
|
||||
$autodetect = optional_param('autodetect', '', PARAM_RAW);
|
||||
$reset = optional_param('reset', '', PARAM_RAW);
|
||||
$id = optional_param('id', '', PARAM_INT);
|
||||
|
||||
// List of known spammy keywords, please add more here
|
||||
|
||||
$autokeywords = array(
|
||||
"<img",
|
||||
"fuck",
|
||||
"casino",
|
||||
"porn",
|
||||
"xxx",
|
||||
"cialis",
|
||||
"viagra",
|
||||
"poker",
|
||||
"warcraft"
|
||||
);
|
||||
|
||||
// Print headers and things
|
||||
|
||||
print_heading(get_string('spamcleaner', 'admin'));
|
||||
print_spamcleaner_javascript();
|
||||
|
||||
print_simple_box(get_string('spamcleanerintro', 'report_spamcleaner'));
|
||||
|
||||
?>
|
||||
|
||||
<div class="mdl-align">
|
||||
|
||||
<form method="post" action="report.php">
|
||||
<div>
|
||||
<input type="text" name="keyword" id="keyword_el" value="<?php p($keyword) ?>" />
|
||||
<input type="hidden" name="sesskey" value="<?php echo sesskey();?>" />
|
||||
<input type="submit" value="<?php echo get_string('spamsearch', 'report_spamcleaner')?>" />
|
||||
</div>
|
||||
</form>
|
||||
<p><?php echo get_string('spameg', 'report_spamcleaner');?></p>
|
||||
|
||||
<hr />
|
||||
|
||||
<form method="post" action="report.php">
|
||||
<div>
|
||||
<input type="submit" name="autodetect" value="<?php echo get_string('spamauto', 'report_spamcleaner');?>" />
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<?php
|
||||
|
||||
echo '<div id="result" class="mdl-align">';
|
||||
|
||||
// Print list of resulting profiles
|
||||
|
||||
if (!empty($keyword)) { // Use the keyword(s) supplied by the user
|
||||
$keywords = explode(',', $keyword);
|
||||
foreach ($keywords as $key => $keyword) {
|
||||
$keywords[$key] = trim($keyword);
|
||||
}
|
||||
search_spammers($keywords);
|
||||
|
||||
} else if (!empty($autodetect)) { // Use the inbuilt keyword list to detect users
|
||||
search_spammers($autokeywords);
|
||||
}
|
||||
|
||||
echo '</div>';
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
/// Functions
|
||||
|
||||
|
||||
function search_spammers($keywords) {
|
||||
|
||||
global $CFG, $USER, $DB;
|
||||
|
||||
if (!is_array($keywords)) {
|
||||
$keywords = array($keywords); // Make it into an array
|
||||
}
|
||||
|
||||
$like = sql_ilike();
|
||||
|
||||
$keywordfull = array();
|
||||
foreach ($keywords as $keyword) {
|
||||
$keyword = addslashes($keyword); // Just to be safe
|
||||
$keywordfull[] = " description $like '%$keyword%' ";
|
||||
$keywordfull2[] = " p.summary $like '%$keyword%' ";
|
||||
}
|
||||
$conditions = '( '.implode(' OR ', $keywordfull).' )';
|
||||
$conditions2 = '( '.implode(' OR ', $keywordfull2).' )';
|
||||
|
||||
$sql = "SELECT * FROM {$CFG->prefix}user WHERE deleted = 0 AND id <> {$USER->id} AND $conditions"; // Exclude oneself
|
||||
$sql2= "SELECT u.*, p.summary FROM {$CFG->prefix}user AS u, {$CFG->prefix}post AS p WHERE $conditions2 AND u.deleted = 0 AND u.id=p.userid AND u.id <> {$USER->id}";
|
||||
$spamusers_desc = get_recordset_sql($sql);
|
||||
$spamusers_blog = get_recordset_sql($sql2);
|
||||
|
||||
$keywordlist = implode(', ', $keywords);
|
||||
print_simple_box(get_string('spamresult', 'report_spamcleaner').s($keywordlist)).' ...';
|
||||
|
||||
print_user_list(array($spamusers_desc, $spamusers_blog), $keywords);
|
||||
|
||||
}
|
||||
|
||||
function print_user_list($users_rs, $keywords) {
|
||||
global $CFG, $SESSION;
|
||||
|
||||
// reset session everytime this function is called
|
||||
$SESSION->users_result = array();
|
||||
$count = 0;
|
||||
|
||||
foreach ($users_rs as $key=>$rs) {
|
||||
while(!$rs->EOF) {
|
||||
$user = (object)$rs->fields;
|
||||
if (!$count) {
|
||||
echo '<table border="1" width="100%" id="data-grid"><tr><th> </th><th>'.get_string('user','admin').'</th><th>'.get_string('spamdesc', 'report_spamcleaner').'</th><th>'.get_string('spamoperation', 'report_spamcleaner').'</th></tr>';
|
||||
}
|
||||
$rs->MoveNext();
|
||||
$count++;
|
||||
filter_user($user, $keywords, $count);
|
||||
}
|
||||
}
|
||||
|
||||
if (!$count) {
|
||||
echo get_string('spamcannotfinduser', 'report_spamcleaner');
|
||||
|
||||
} else {
|
||||
echo '</table>';
|
||||
echo '<div class="mld-align">
|
||||
<button id="removeall_btn">'.get_string('spamdeleteall', 'report_spamcleaner').'</button>
|
||||
</div>';
|
||||
}
|
||||
}
|
||||
function filter_user($user, $keywords, $count) {
|
||||
global $CFG;
|
||||
$image_search = false;
|
||||
if (in_array('<img', $keywords)) {
|
||||
$image_search = true;
|
||||
}
|
||||
if (isset($user->summary)) {
|
||||
$user->description = '<h3>'.get_string('spamfromblog', 'report_spamcleaner').'</h3>'.$user->summary;
|
||||
unset($user->summary);
|
||||
}
|
||||
if (preg_match('#<img.*src=[\"\']('.$CFG->pixpath.')#', $user->description, $matches)
|
||||
&& $image_search) {
|
||||
$result = false;
|
||||
foreach ($keywords as $keyword) {
|
||||
if (preg_match('#'.$keyword.'#', $user->description)
|
||||
&& ($keyword != '<img')) {
|
||||
$result = true;
|
||||
}
|
||||
}
|
||||
if ($result) {
|
||||
echo print_user_entry($user, $keywords, $count);
|
||||
} else {
|
||||
unset($user);
|
||||
}
|
||||
} else {
|
||||
echo print_user_entry($user, $keywords, $count);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function print_user_entry($user, $keywords, $count) {
|
||||
|
||||
global $SESSION, $CFG;
|
||||
|
||||
$smalluserobject = new object; // All we need to delete them later
|
||||
$smalluserobject->id = $user->id;
|
||||
$smalluserobject->email = $user->email;
|
||||
$smalluserobject->auth = $user->auth;
|
||||
$smalluserobject->firstname = $user->firstname;
|
||||
$smalluserobject->lastname = $user->lastname;
|
||||
|
||||
if (empty($SESSION->users_result[$user->id])) {
|
||||
$SESSION->users_result[$user->id] = $smalluserobject;
|
||||
$html = '<tr valign="top" id="row-'.$user->id.'" class="result-row">';
|
||||
$html .= '<td width="10">'.$count.'</td>';
|
||||
$html .= '<td width="30%" align="left"><a href="'.$CFG->wwwroot."/user/view.php?course=1&id=".$user->id.'" title="'.s($user->username).'">'.fullname($user).'</a>';
|
||||
|
||||
$html .= "<ul>";
|
||||
$profile_set = array('city'=>true, 'country'=>true, 'email'=>true);
|
||||
foreach ($profile_set as $key=>$value) {
|
||||
if (isset($user->$key)){
|
||||
$html .= '<li>'.$user->$key.'</li>';
|
||||
}
|
||||
}
|
||||
$html .= "</ul>";
|
||||
$html .= '</td>';
|
||||
|
||||
foreach ($keywords as $keyword) {
|
||||
$user->description = highlight($keyword, $user->description);
|
||||
}
|
||||
|
||||
$html .= '<td align="left">'.format_text($user->description, FORMAT_MOODLE).'</td>';
|
||||
$html .= '<td width="100px" align="center">';
|
||||
$html .= '<button onclick="del_user(this,'.$user->id.')">'.get_string('deleteuser', 'admin').'</button><br />';
|
||||
$html .= '<button onclick="ignore_user(this,'.$user->id.')">'.get_string('ignore', 'admin').'</button>';
|
||||
$html .= '</td>';
|
||||
$html .= '</tr>';
|
||||
return $html;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
function print_spamcleaner_javascript() {
|
||||
global $CFG;
|
||||
|
||||
$sesskey = sesskey();
|
||||
|
||||
?>
|
||||
<script type="text/javascript">
|
||||
//<![CDATA[
|
||||
var service_url = '<?php echo $CFG->wwwroot;?>/admin/report/spamcleaner/index.php';
|
||||
function ajax(url, callback)
|
||||
{
|
||||
method = 'POST';
|
||||
if (window.XMLHttpRequest) {
|
||||
var req = new XMLHttpRequest();
|
||||
} else {
|
||||
var MSXML = ['MSXML2.XMLHTTP.6.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
|
||||
for(var n = 0; n < MSXML.length; n ++) {
|
||||
try {
|
||||
var req = new ActiveXObject(MSXML[n]);
|
||||
break;
|
||||
} catch(e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
with(req) {
|
||||
try {
|
||||
open(method, url, true);
|
||||
setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
|
||||
send(null);
|
||||
} catch(e) {
|
||||
alert(e);
|
||||
}
|
||||
onreadystatechange = function()
|
||||
{
|
||||
if (req.readyState == 4)
|
||||
{
|
||||
callback(req.responseText, req.status);
|
||||
delete(req);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
var row = null;
|
||||
function delall_cb (text) {
|
||||
if(text){
|
||||
window.location.href=window.location.href;
|
||||
}
|
||||
}
|
||||
function init() {
|
||||
var remove_all = document.getElementById('removeall_btn');
|
||||
if(remove_all){
|
||||
remove_all.onclick = function(){
|
||||
var yes = confirm('<?php echo get_string('spamdeleteallconfirm', 'report_spamcleaner');?>');
|
||||
if(yes){
|
||||
ajax(service_url + '?delall=yes&sesskey=<?php echo $sesskey;?>', delall_cb);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
function del_cb (text) {
|
||||
if(row) {
|
||||
if(text){
|
||||
while(row.tagName != 'TR') {
|
||||
row = row.parentNode;
|
||||
}
|
||||
row.parentNode.removeChild(row);
|
||||
row = null;
|
||||
} else {
|
||||
alert('<?php echo get_string('spamcannotdelete', 'report_spamcleaner');?>');
|
||||
}
|
||||
}
|
||||
}
|
||||
function ignore_cb (text) {
|
||||
if(row) {
|
||||
if(text){
|
||||
while(row.tagName != 'TR') {
|
||||
row = row.parentNode;
|
||||
}
|
||||
row.parentNode.removeChild(row);
|
||||
row = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
function del_user(obj, id) {
|
||||
var yes = confirm('<?php echo get_string('spamdeleteconfirm', 'report_spamcleaner');?>');
|
||||
if(yes){
|
||||
row = obj;
|
||||
ajax(service_url + '?del=yes&sesskey=<?php echo $sesskey;?>&id='+id, del_cb);
|
||||
}
|
||||
}
|
||||
function ignore_user(obj, id) {
|
||||
row = obj;
|
||||
ajax(service_url + '?ignore=yes&sesskey=<?php echo $sesskey;?>&id='+id, ignore_cb);
|
||||
}
|
||||
window.onload = function(){
|
||||
init();
|
||||
}
|
||||
//]]>
|
||||
</script>
|
||||
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
require_once('../config.php');
|
||||
require_once($CFG->dirroot.'/mod/forum/lib.php');
|
||||
require_once($CFG->libdir.'/adminlib.php');
|
||||
|
||||
$confirm = optional_param('confirm', 0, PARAM_BOOL);
|
||||
|
||||
|
||||
@@ -264,7 +264,6 @@ if ($um->preprocess_files() && confirm_sesskey()) {
|
||||
//This can be used to obtain a list of userids for existing users
|
||||
notify("$user->id ".get_string('usernotaddedregistered', 'error', $username));
|
||||
$userserrors++;
|
||||
continue;
|
||||
}
|
||||
|
||||
} else { // new user
|
||||
|
||||
+1
-1
@@ -158,7 +158,7 @@
|
||||
$updateuser = new object();
|
||||
$updateuser->id = $user->id;
|
||||
$updateuser->deleted = "1";
|
||||
$updateuser->username = "$user->email.".time(); // Remember it just in case
|
||||
$updateuser->username = addslashes("$user->email.".time()); // Remember it just in case
|
||||
$updateuser->email = ""; // Clear this field to free it up
|
||||
$updateuser->idnumber = ""; // Clear this field to free it up
|
||||
$updateuser->timemodified = time();
|
||||
|
||||
+14
-7
@@ -13,7 +13,7 @@
|
||||
|
||||
$customlang = array();
|
||||
|
||||
$enc = array('af' => 'iso-8859-1', 'ar' => 'windows-1256', 'be' => 'windows-1251', 'bg' => 'windows-1251', 'bs' => 'windows-1250', 'ca' => 'iso-8859-1', 'cs' => 'iso-8859-2', 'da' => 'iso-8859-1', 'de' => 'iso-8859-1', 'de_du' => 'iso-8859-1', 'de_utf8' => 'utf-8', 'el' => 'windows-1253', 'en' => 'iso-8859-1', 'en_ja' => 'euc-jp', 'en_us' => 'iso-8859-1', 'en_utf8' => 'utf-8', 'es' => 'iso-8859-1', 'es_ar' => 'iso-8859-1', 'es_es' => 'iso-8859-1', 'es_mx' => 'iso-8859-1', 'et' => 'iso-8859-1', 'eu' => 'iso-8859-1', 'fa' => 'windows-1256', 'fa_utf8' => 'utf-8', 'fi' => 'iso-8859-1', 'fil' => 'iso-8859-15', 'fr' => 'iso-8859-1', 'fr_ca' => 'iso-8859-15', 'ga' => 'iso-8859-1', 'gl' => 'iso-8859-1', 'he' => 'ISO-8859-8-I', 'he_utf8' => 'utf-8', 'hi' => 'iso-8859-1', 'hr' => 'windows-1250', 'hr_utf8' => 'utf-8', 'hu' => 'iso-8859-2', 'id' => 'iso-8859-1', 'it' => 'iso-8859-1', 'ja' => 'EUC-JP', 'ja_utf8' => 'UTF-8', 'ka_utf8' => 'UTF-8', 'km_utf8' => 'UTF-8', 'kn_utf8' => 'utf-8', 'ko' => 'EUC-KR', 'ko_utf8' => 'UTF-8', 'lt' => 'windows-1257', 'lv' => 'ISO-8859-4', 'mi_nt' => 'iso-8859-1', 'mi_tn_utf8' => 'utf-8', 'ms' => 'iso-8859-1', 'nl' => 'iso-8859-1', 'nn' => 'iso-8859-1', 'no' => 'iso-8859-1', 'no_gr' => 'iso-8859-1', 'pl' => 'iso-8859-2', 'pt' => 'iso-8859-1', 'pt_br' => 'iso-8859-1', 'ro' => 'iso-8859-2', 'ru' => 'windows-1251', 'sk' => 'iso-8859-2', 'sl' => 'iso-8859-2', 'sl_utf8' => 'utf-8', 'so' => 'iso-8859-1', 'sq' => 'iso-8859-1', 'sr_utf8' => 'utf-8', 'sv' => 'iso-8859-1', 'th' => 'TIS-620', 'th_utf8' => 'UTF-8', 'tl' => 'iso-8859-15', 'tl_utf8' => 'UTF-8', 'tr' => 'iso-8859-9', 'uk' => 'windows-1251', 'vi_utf8' => 'UTF-8', 'zh_cn' => 'GB18030', 'zh_cn_utf8' => 'UTF-8', 'zh_tw' => 'Big5', 'zh_tw_utf8' => 'UTF-8');
|
||||
$enc = array('af' => 'iso-8859-1', 'ar' => 'windows-1256', 'be' => 'windows-1251', 'bg' => 'windows-1251', 'bs' => 'windows-1250', 'ca' => 'iso-8859-1', 'cs' => 'iso-8859-2', 'da' => 'iso-8859-1', 'de' => 'iso-8859-1', 'de_du' => 'iso-8859-1', 'de_utf8' => 'utf-8', 'el' => 'windows-1253', 'en' => 'iso-8859-1', 'en_ja' => 'euc-jp', 'en_us' => 'iso-8859-1', 'en_utf8' => 'utf-8', 'es' => 'iso-8859-1', 'es_ar' => 'iso-8859-1', 'es_es' => 'iso-8859-1', 'es_mx' => 'iso-8859-1', 'et' => 'iso-8859-1', 'eu' => 'iso-8859-1', 'fa' => 'windows-1256', 'fa_utf8' => 'utf-8', 'fi' => 'iso-8859-1', 'fil' => 'iso-8859-15', 'fr' => 'iso-8859-1', 'fr_ca' => 'iso-8859-15', 'ga' => 'iso-8859-1', 'gl' => 'iso-8859-1', 'he' => 'ISO-8859-8-I', 'he_utf8' => 'utf-8', 'hi' => 'iso-8859-1', 'hr' => 'windows-1250', 'hr_utf8' => 'utf-8', 'hu' => 'iso-8859-2', 'id' => 'iso-8859-1', 'is' => 'iso-8859-1', 'it' => 'iso-8859-1', 'ja' => 'EUC-JP', 'ja_utf8' => 'UTF-8', 'ka_utf8' => 'UTF-8', 'km_utf8' => 'UTF-8', 'kn_utf8' => 'utf-8', 'ko' => 'EUC-KR', 'ko_utf8' => 'UTF-8', 'lt' => 'windows-1257', 'lv' => 'ISO-8859-4', 'mi_nt' => 'iso-8859-1', 'mi_tn_utf8' => 'utf-8', 'ms' => 'iso-8859-1', 'nl' => 'iso-8859-1', 'nn' => 'iso-8859-1', 'no' => 'iso-8859-1', 'no_gr' => 'iso-8859-1', 'pl' => 'iso-8859-2', 'pt' => 'iso-8859-1', 'pt_br' => 'iso-8859-1', 'ro' => 'iso-8859-2', 'ru' => 'windows-1251', 'sk' => 'iso-8859-2', 'sl' => 'iso-8859-2', 'sl_utf8' => 'utf-8', 'so' => 'iso-8859-1', 'sq' => 'iso-8859-1', 'sr_utf8' => 'utf-8', 'sv' => 'iso-8859-1', 'th' => 'TIS-620', 'th_utf8' => 'UTF-8', 'tl' => 'iso-8859-15', 'tl_utf8' => 'UTF-8', 'tr' => 'iso-8859-9', 'uk' => 'windows-1251', 'vi_utf8' => 'UTF-8', 'zh_cn' => 'GB18030', 'zh_cn_utf8' => 'UTF-8', 'zh_tw' => 'Big5', 'zh_tw_utf8' => 'UTF-8');
|
||||
|
||||
/**************************************
|
||||
* Custom lang pack handling *
|
||||
@@ -87,7 +87,10 @@
|
||||
print_simple_box_end();
|
||||
db_migrate2utf8();
|
||||
print_heading('db unicode migration has been completed!');
|
||||
unlink($filename); //no longer in maintenance mode
|
||||
if (!get_config('', 'migrate_maintmode')) { // already in maint mode
|
||||
unlink($filename); //no longer in maintenance mode
|
||||
}
|
||||
delete_records('config', 'name', 'migrate_maintmode');
|
||||
@require_logout();
|
||||
print_continue($CFG->wwwroot.'/'.$CFG->admin.'/langimport.php');
|
||||
}
|
||||
@@ -115,12 +118,16 @@
|
||||
//put the site in maintenance mode
|
||||
check_dir_exists($CFG->dataroot.'/'.SITEID, true);
|
||||
|
||||
if (touch($filename)) {
|
||||
$file = fopen($filename, 'w');
|
||||
fwrite($file, get_string('maintinprogress','admin'));
|
||||
fclose($file);
|
||||
if (file_exists($filename)) {
|
||||
set_config('migrate_maintmode', 1); // already in maintenance mode
|
||||
} else {
|
||||
notify (get_string('maintfileopenerror','admin'));
|
||||
if (touch($filename)) {
|
||||
$file = fopen($filename, 'w');
|
||||
fwrite($file, get_string('maintinprogress','admin'));
|
||||
fclose($file);
|
||||
} else {
|
||||
notify (get_string('maintfileopenerror','admin'));
|
||||
}
|
||||
}
|
||||
//print second confirmation box
|
||||
echo '<form name="migratefrom" action="utfdbmigrate.php" method="POST">';
|
||||
|
||||
+1
-1
@@ -211,7 +211,7 @@ function auth_sync_users ($do_updates=0) {
|
||||
$updatekeys = array();
|
||||
foreach ($all_keys as $key) {
|
||||
if (preg_match('/^field_updatelocal_(.+)$/',$key, $match)) {
|
||||
if ($pcfg->{$match[0]}) { // if it has a true value
|
||||
if ($pcfg->{$key} === 'onlogin') {
|
||||
array_push($updatekeys, $match[1]); // the actual key name
|
||||
}
|
||||
}
|
||||
|
||||
+5
-3
@@ -16,7 +16,8 @@
|
||||
/* */
|
||||
/* This program is free software. You can redistribute it and/or modify */
|
||||
/* it under the terms of the GNU General Public License as published by */
|
||||
/* the Free Software Foundation; either version 2 of the License. */
|
||||
/* the Free Software Foundation; either version 2 of the License or any */
|
||||
/* later version. */
|
||||
/************************************************************************/
|
||||
/* Author: Torsten Anderson, torsten.anderson@skeria.skelleftea.se
|
||||
*/
|
||||
@@ -111,7 +112,8 @@ class fcFPP
|
||||
$this->_user = $userid;
|
||||
$this->_pwd = $passwd;
|
||||
return TRUE;
|
||||
} elseif (preg_match ("/^\Sorry/",$line)){ //Denied access but a valid user and password
|
||||
} elseif (strpos($line, 'You are not allowed')){ // Denied access but a valid user and password
|
||||
// "Sorry. You are not allowed to login with the FPP interface"
|
||||
return TRUE;
|
||||
} else { //Invalid user or password
|
||||
return FALSE;
|
||||
@@ -215,4 +217,4 @@ class fcFPP
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
?>
|
||||
|
||||
+1
-1
@@ -711,7 +711,7 @@ function auth_ldap_bulk_insert($users){
|
||||
// bulk insert -- superfast with $bulk_insert_records
|
||||
$sql = 'INSERT INTO '.$CFG->prefix.'extuser (idnumber) VALUES ';
|
||||
// make those values safe
|
||||
array_map('addslashes', $users);
|
||||
$users = array_map('addslashes', $users);
|
||||
// join and quote the whole lot
|
||||
$sql = $sql . '(\'' . join('\'),(\'', $users) . '\')';
|
||||
print "+ " . count($users) . " users\n";
|
||||
|
||||
+14
-2
@@ -1,6 +1,7 @@
|
||||
<?PHP // $Id$
|
||||
//CHANGELOG:
|
||||
//28.10.2004 SHIBBOLETH Authentication functions v.0.1
|
||||
//2005-2006 Various extensions and fixes by Lukas Haemmerle
|
||||
//Distributed under GPL (c)Markus Hagman 2004-
|
||||
|
||||
function auth_user_login($username, $password) {
|
||||
@@ -41,9 +42,9 @@ function auth_get_userinfo($username) {
|
||||
|
||||
foreach ($attrmap as $key=>$value) {
|
||||
if (!empty($CFG->unicodedb)) {
|
||||
$result[$key]=$_SERVER[$value];
|
||||
$result[$key]=get_first_string($_SERVER[$value]);
|
||||
} else {
|
||||
$result[$key]=utf8_decode($_SERVER[$value]);
|
||||
$result[$key]=utf8_decode(get_first_string($_SERVER[$value]));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,4 +85,15 @@ function auth_shib_attributes(){
|
||||
|
||||
return $moodleattributes;
|
||||
}
|
||||
|
||||
|
||||
function get_first_string($string){
|
||||
// Cleans and returns first of potential many values (multi-valued attributes)
|
||||
|
||||
$list = split( ';', $string);
|
||||
$clean_string = rtrim($list[0]);
|
||||
|
||||
return $clean_string;
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
+8
-8
@@ -17,13 +17,7 @@
|
||||
|
||||
if (!empty($id)) {
|
||||
if (!isteacheredit($id)) {
|
||||
if (empty($to)) {
|
||||
error("You need to be a teacher or admin user to use this page.", "$CFG->wwwroot/login/index.php");
|
||||
} else {
|
||||
if (!isteacheredit($to)) {
|
||||
error("You need to be a teacher or admin user to use this page.", "$CFG->wwwroot/login/index.php");
|
||||
}
|
||||
}
|
||||
error("You need to be a teacher or admin user to use this page.", "$CFG->wwwroot/login/index.php");
|
||||
}
|
||||
} else {
|
||||
if (!isadmin()) {
|
||||
@@ -31,6 +25,12 @@
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($to)) {
|
||||
if (!isteacheredit($to)) {
|
||||
error("You need to be a teacher or admin user to use this page.", "$CFG->wwwroot/login/index.php");
|
||||
}
|
||||
}
|
||||
|
||||
//Check site
|
||||
if (!$site = get_site()) {
|
||||
error("Site not found!");
|
||||
@@ -128,7 +128,7 @@
|
||||
}
|
||||
print_simple_box_end();
|
||||
|
||||
//Print footer
|
||||
//Print footer
|
||||
print_footer();
|
||||
|
||||
?>
|
||||
|
||||
@@ -408,8 +408,8 @@ function schedule_backup_course_configure($course,$starttime = 0) {
|
||||
if (empty($preferences->mods[$mod->modname]->instances)) {
|
||||
$preferences->mods[$mod->modname]->instances = array(); // avoid warnings
|
||||
}
|
||||
$preferences->mods[$mod->modname]->instances[$mod->instance]->backup = $preferences->mods[$modname]->backup;
|
||||
$preferences->mods[$mod->modname]->instances[$mod->instance]->userinfo = $preferences->mods[$modname]->userinfo;
|
||||
$preferences->mods[$mod->modname]->instances[$mod->instance]->backup = $preferences->mods[$mod->modname]->backup;
|
||||
$preferences->mods[$mod->modname]->instances[$mod->instance]->userinfo = $preferences->mods[$mod->modname]->userinfo;
|
||||
// there isn't really a nice way to do this...
|
||||
$preferences->mods[$mod->modname]->instances[$mod->instance]->name = get_field($mod->modname,'name','id',$mod->instance);
|
||||
}
|
||||
@@ -772,7 +772,9 @@ function schedule_backup_course_delete_old_files($preferences,$starttime=0) {
|
||||
$dirtocheck = $CFG->dataroot."/".$preferences->backup_course."/backupdata";
|
||||
}
|
||||
schedule_backup_log($starttime,$preferences->backup_course," checking $dirtocheck");
|
||||
mtrace(" Keeping backup files in $dirtocheck");
|
||||
if ($CFG->debug > 7) {
|
||||
mtrace(" Keeping backup files in $dirtocheck");
|
||||
}
|
||||
|
||||
//Get all the files in $dirtocheck
|
||||
$files = get_directory_list($dirtocheck,"",false);
|
||||
|
||||
@@ -521,7 +521,8 @@
|
||||
fwrite ($bf,full_tag("INCLUDED",4,false,$included));
|
||||
fwrite ($bf,full_tag("USERINFO",4,false,$userinfo));
|
||||
|
||||
if (is_array($preferences->mods[$element->name]->instances)
|
||||
if (isset($preferences->mods[$element->name]->instances)
|
||||
&& is_array($preferences->mods[$element->name]->instances)
|
||||
&& count($preferences->mods[$element->name]->instances)) {
|
||||
fwrite ($bf, start_tag("INSTANCES",4,true));
|
||||
foreach ($preferences->mods[$element->name]->instances as $id => $object) {
|
||||
@@ -1239,7 +1240,8 @@
|
||||
//See if it is a valid module to backup
|
||||
if ($log->module == "course" or
|
||||
$log->module == "user" or
|
||||
$preferences->mods[$log->module]->backup == 1) {
|
||||
(array_key_exists($log->module, $preferences->mods) and $preferences->mods[$log->module]->backup == 1)) {
|
||||
// logs with 'upload' in module field are ignored, there is no restore code anyway
|
||||
//Begin log tag
|
||||
fwrite ($bf,start_tag("LOG",3,true));
|
||||
|
||||
@@ -1661,7 +1663,8 @@
|
||||
|
||||
require_once($CFG->dirroot.'/mod/'.$module.'/backuplib.php');
|
||||
|
||||
if (is_array($preferences->mods[$module]->instances)) {
|
||||
if (isset($preferences->mods[$module]->instances)
|
||||
&& is_array($preferences->mods[$module]->instances)) {
|
||||
$onemodbackup = $module.'_backup_one_mod';
|
||||
if (function_exists($onemodbackup)) {
|
||||
foreach ($preferences->mods[$module]->instances as $instance => $object) {
|
||||
|
||||
@@ -9,7 +9,7 @@ require_once($CFG->dirroot.'/backup/bb/xsl_emulate_xslt.inc');
|
||||
|
||||
function get_subdirs($directory){
|
||||
$opendirectory = opendir( $directory );
|
||||
while($filename = readdir($opendirectory)) {
|
||||
while(false !== ($filename = readdir($opendirectory))) {
|
||||
if (is_dir($directory.$filename) and $filename != ".." and $filename != "."){
|
||||
$subdirs[] = $filename;
|
||||
}
|
||||
|
||||
+7
-17
@@ -51,24 +51,14 @@ function backup_upgrade($oldversion=0) {
|
||||
}
|
||||
|
||||
if ($oldversion < 2006042801) {
|
||||
modify_database('', 'ALTER TABLE prefix_backup_log
|
||||
ALTER COLUMN "time" TYPE integer,
|
||||
ALTER COLUMN "time" SET DEFAULT 0,
|
||||
ALTER COLUMN laststarttime TYPE integer,
|
||||
ALTER COLUMN laststarttime SET DEFAULT 0,
|
||||
ALTER COLUMN courseid TYPE integer,
|
||||
ALTER COLUMN courseid SET DEFAULT 0');
|
||||
|
||||
modify_database('', 'ALTER TABLE mdl_backup_courses
|
||||
ALTER COLUMN lastendtime TYPE integer,
|
||||
ALTER COLUMN lastendtime SET DEFAULT 0,
|
||||
ALTER COLUMN laststarttime TYPE integer,
|
||||
ALTER COLUMN laststarttime SET DEFAULT 0,
|
||||
ALTER COLUMN courseid TYPE integer,
|
||||
ALTER COLUMN courseid SET DEFAULT 0,
|
||||
ALTER COLUMN nextstarttime TYPE integer,
|
||||
ALTER COLUMN nextstarttime SET DEFAULT 0');
|
||||
table_column('backup_log', 'time', 'time', 'integer', '', '', '0');
|
||||
table_column('backup_log', 'laststarttime', 'laststarttime', 'integer', '', '', '0');
|
||||
table_column('backup_log', 'courseid', 'courseid', 'integer', '', '', '0');
|
||||
|
||||
table_column('backup_courses', 'lastendtime', 'lastendtime', 'integer', '', '', '0');
|
||||
table_column('backup_courses', 'laststarttime', 'laststarttime', 'integer', '', '', '0');
|
||||
table_column('backup_courses', 'courseid', 'courseid', 'integer', '', '', '0');
|
||||
table_column('backup_courses', 'nextstarttime', 'nextstarttime', 'integer', '', '', '0');
|
||||
}
|
||||
|
||||
//Finally, return result
|
||||
|
||||
+6
-4
@@ -118,7 +118,7 @@
|
||||
}
|
||||
|
||||
// Loop through all directory entries, and construct two temporary arrays containing files and sub directories
|
||||
while($entry = readdir($handle)) {
|
||||
while(false !== ($entry = readdir($handle))) {
|
||||
if (is_dir($dir. $slash .$entry) && $entry != ".." && $entry != "." && $entry != $excludeddir) {
|
||||
$dir_subdirs[] = $dir. $slash .$entry;
|
||||
}
|
||||
@@ -195,7 +195,7 @@
|
||||
$results = null;
|
||||
|
||||
$dir = opendir($rootdir);
|
||||
while ($file=readdir($dir)) {
|
||||
while (false !== ($file=readdir($dir))) {
|
||||
if ($file=="." || $file=="..") {
|
||||
continue;
|
||||
}
|
||||
@@ -214,7 +214,7 @@
|
||||
$results = "";
|
||||
|
||||
$dir = opendir($rootdir);
|
||||
while ($file=readdir($dir)) {
|
||||
while (false !== ($file=readdir($dir))) {
|
||||
if ($file=="." || $file=="..") {
|
||||
continue;
|
||||
}
|
||||
@@ -293,13 +293,15 @@
|
||||
|
||||
global $CFG;
|
||||
|
||||
$status = true; // Initialize this, next code will change its value if needed
|
||||
|
||||
if (!is_dir($to_file)) {
|
||||
//echo "<br />Creating ".$to_file; //Debug
|
||||
umask(0000);
|
||||
$status = mkdir($to_file,$CFG->directorypermissions);
|
||||
}
|
||||
$dir = opendir($from_file);
|
||||
while ($file=readdir($dir)) {
|
||||
while (false !== ($file=readdir($dir))) {
|
||||
if ($file=="." || $file=="..") {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -53,6 +53,15 @@
|
||||
print_simple_box(get_string("restorefinished"),"center");
|
||||
} else {
|
||||
print_simple_box(get_string("importdatafinished"),"center");
|
||||
$file = $CFG->dataroot . '/'
|
||||
. $SESSION->import_preferences->backup_course
|
||||
. '/backupdata/' . $SESSION->import_preferences->backup_name;
|
||||
if (is_readable($file)) {
|
||||
unlink($file);
|
||||
}
|
||||
else {
|
||||
error_log("import course data: couldn't unlink $file");
|
||||
}
|
||||
unset($SESSION->restore);
|
||||
}
|
||||
print_continue("$CFG->wwwroot/course/view.php?id=".$restore->course_id);
|
||||
|
||||
+35
-26
@@ -1077,7 +1077,7 @@
|
||||
if (!$preferencescount) {
|
||||
$continue = false;
|
||||
if (!defined('RESTORE_SILENTLY')) {
|
||||
echo '<li>'.get_string('backupwithoutgradebook','grade').'</li>';
|
||||
echo '<li>'.get_string('backupwithoutgradebook','grades').'</li>';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1088,7 +1088,7 @@
|
||||
if ($pref_rec->value == 0) {
|
||||
$continue = false;
|
||||
if (!defined('RESTORE_SILENTLY')) {
|
||||
echo '<li>'.get_string('respectingcurrentdata','grade').'</li>';
|
||||
echo '<li>'.get_string('respectingcurrentdata','grades').'</li>';
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1382,6 +1382,19 @@
|
||||
$user->lang = 'mi_nt';
|
||||
}
|
||||
|
||||
//Country list updates - MDL-13060
|
||||
//Any user whose country code has been deleted or modified needs to be assigned a valid one.
|
||||
$country_update_map = array(
|
||||
'ZR' => 'CD',
|
||||
'TP' => 'TL',
|
||||
'FX' => 'FR',
|
||||
'KO' => 'RS',
|
||||
'CS' => 'RS',
|
||||
'WA' => 'GB');
|
||||
if (array_key_exists($user->country, $country_update_map)) {
|
||||
$user->country = $country_update_map[$user->country];
|
||||
}
|
||||
|
||||
//Check if it's admin and coursecreator
|
||||
$is_admin = !empty($user->roles['admin']);
|
||||
$is_coursecreator = !empty($user->roles['coursecreator']);
|
||||
@@ -1858,14 +1871,7 @@
|
||||
foreach ($info as $category) {
|
||||
//Skip empty categories (some backups can contain them)
|
||||
if (!empty($category->id)) {
|
||||
$catrestore = "restore_question_categories";
|
||||
if (function_exists($catrestore)) {
|
||||
//print_object ($category); //Debug
|
||||
$status = $catrestore($category,$restore);
|
||||
} else {
|
||||
//Something was wrong. Function should exist.
|
||||
$status = false;
|
||||
}
|
||||
$status = restore_question_categories($category,$restore);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2203,19 +2209,6 @@
|
||||
//Assign it to admin
|
||||
$eve->userid = $adminid;
|
||||
}
|
||||
|
||||
//We must recode the repeatid if the event has it
|
||||
if (!empty($eve->repeatid)) {
|
||||
$repeat_rec = backup_getid($restore->backup_unique_code,"event_repeatid",$eve->repeatid);
|
||||
if ($repeat_rec) { //Exists, so use it...
|
||||
$eve->repeatid = $repeat_rec->new_id;
|
||||
} else { //Doesn't exists, calculate the next and save it
|
||||
$oldrepeatid = $eve->repeatid;
|
||||
$max_rec = get_record_sql('SELECT 1, MAX(repeatid) AS repeatid FROM '.$CFG->prefix.'event');
|
||||
$eve->repeatid = empty($max_rec) ? 1 : $max_rec->repeatid + 1;
|
||||
backup_putid($restore->backup_unique_code,"event_repeatid", $oldrepeatid, $eve->repeatid);
|
||||
}
|
||||
}
|
||||
|
||||
//We have to recode the groupid field
|
||||
$group = backup_getid($restore->backup_unique_code,"groups",$eve->groupid);
|
||||
@@ -2228,6 +2221,22 @@
|
||||
|
||||
//The structure is equal to the db, so insert the event
|
||||
$newid = insert_record ("event",$eve);
|
||||
|
||||
//We must recode the repeatid if the event has it
|
||||
//The repeatid now refers to the id of the original event. (see Bug#5956)
|
||||
if ($newid && !empty($eve->repeatid)) {
|
||||
$repeat_rec = backup_getid($restore->backup_unique_code,"event_repeatid",$eve->repeatid);
|
||||
if ($repeat_rec) { //Exists, so use it...
|
||||
$eve->repeatid = $repeat_rec->new_id;
|
||||
} else { //Doesn't exists, calculate the next and save it
|
||||
$oldrepeatid = $eve->repeatid;
|
||||
$eve->repeatid = $newid;
|
||||
backup_putid($restore->backup_unique_code,"event_repeatid", $oldrepeatid, $eve->repeatid);
|
||||
}
|
||||
$eve->id = $newid;
|
||||
// update the record to contain the correct repeatid
|
||||
update_record('event',$eve);
|
||||
}
|
||||
} else {
|
||||
//get current event id
|
||||
$newid = $eve_db->id;
|
||||
@@ -4843,7 +4852,7 @@
|
||||
}
|
||||
|
||||
function restore_execute(&$restore,$info,$course_header,&$errorstr) {
|
||||
global $CFG;
|
||||
global $CFG, $USER;
|
||||
$status = true;
|
||||
//Checks for the required files/functions to restore every module
|
||||
//and include them
|
||||
@@ -5306,9 +5315,9 @@
|
||||
}
|
||||
if (!$status = restore_decode_content_links($restore)) {
|
||||
if (!defined('RESTORE_SILENTLY')) {
|
||||
notify("Could not refresh events for activities!");
|
||||
notify("Could not decode content links!");
|
||||
} else {
|
||||
$errorstr = "Could not refresh events for activities!";
|
||||
$errorstr = "Could not decode content links!";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
+4
-2
@@ -5,6 +5,8 @@
|
||||
// database (backup_version) to determine whether upgrades should
|
||||
// be performed (see db/backup_*.php)
|
||||
|
||||
$backup_version = 2006053000; // The current version is a date (YYYYMMDDXX)
|
||||
$backup_version = 2006082300; // The current version is a date (YYYYMMDDXX)
|
||||
|
||||
$backup_release = "1.6"; // User-friendly version number
|
||||
$backup_release = "1.6.2"; // User-friendly version number
|
||||
|
||||
?>
|
||||
|
||||
-1232
File diff suppressed because it is too large
Load Diff
@@ -71,13 +71,13 @@ class block_blog_tags extends block_base {
|
||||
|
||||
$timewithin = $this->config->timewithin * 24 * 60 * 60; /// convert to seconds
|
||||
|
||||
$sql = 'SELECT t.*, COUNT(DISTINCT bt.id) as ct ';
|
||||
$sql = 'SELECT t.id, t.type, t.text, COUNT(DISTINCT bt.id) as ct ';
|
||||
$sql .= "FROM {$CFG->prefix}tags as t, {$CFG->prefix}blog_tag_instance as bt, {$CFG->prefix}post as p ";
|
||||
$sql .= 'WHERE t.id = bt.tagid ';
|
||||
$sql .= 'AND p.id = bt.entryid ';
|
||||
$sql .= 'AND (p.publishstate = "site" or p.publishstate="public") ';
|
||||
$sql .= 'AND (p.publishstate = \'site\' or p.publishstate=\'public\') ';
|
||||
$sql .= "AND bt.timemodified > {$timewithin} ";
|
||||
$sql .= 'GROUP BY bt.tagid ';
|
||||
$sql .= 'GROUP BY t.id, t.type, t.text ';
|
||||
$sql .= 'ORDER BY ct DESC, t.text ASC ';
|
||||
$sql .= "LIMIT {$this->config->numberoftags} ";
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ class block_html extends block_base {
|
||||
}
|
||||
|
||||
function specialization() {
|
||||
$this->title = isset($this->config->title) ? $this->config->title : get_string('newhtmlblock', 'block_html');
|
||||
$this->title = isset($this->config->title) ? format_string($this->config->title) : get_string('newhtmlblock', 'block_html');
|
||||
}
|
||||
|
||||
function instance_allow_multiple() {
|
||||
@@ -24,8 +24,13 @@ class block_html extends block_base {
|
||||
return $this->content;
|
||||
}
|
||||
|
||||
$filteropt = new stdClass;
|
||||
$filteropt->noclean = true;
|
||||
if (!empty($this->instance->pinned) or $this->instance->pagetype === 'course-view') {
|
||||
// fancy html allowed only on course page and in pinned blocks for security reasons
|
||||
$filteropt = new stdClass;
|
||||
$filteropt->noclean = true;
|
||||
} else {
|
||||
$filteropt = null;
|
||||
}
|
||||
|
||||
$this->content = new stdClass;
|
||||
$this->content->text = isset($this->config->text) ? format_text($this->config->text, FORMAT_HTML, $filteropt) : '';
|
||||
|
||||
@@ -1,12 +1,19 @@
|
||||
<?php $usehtmleditor = can_use_html_editor(); ?>
|
||||
<?php
|
||||
$usehtmleditor = can_use_html_editor();
|
||||
|
||||
$text = isset($this->config->text) ? $this->config->text : '';
|
||||
if (empty($this->instance->pinned) and $this->instance->pagetype !== 'course-view') {
|
||||
$text = clean_text($text, FORMAT_HTML);
|
||||
}
|
||||
?>
|
||||
<table cellpadding="9" cellspacing="0">
|
||||
<tr valign="top">
|
||||
<td align="right"><?php print_string('configtitle', 'block_html'); ?>:</td>
|
||||
<td><input type="text" name="title" size="30" value="<?php echo isset($this->config->title)?$this->config->title:''; ?>" /> (<?php print_string('leaveblanktohide', 'block_html'); ?>)</td>
|
||||
<td><input type="text" name="title" size="30" value="<?php echo isset($this->config->title)?p($this->config->title):''; ?>" /> (<?php print_string('leaveblanktohide', 'block_html'); ?>)</td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td align="right"><?php print_string('configcontent', 'block_html'); ?>:</td>
|
||||
<td><?php print_textarea($usehtmleditor, 25, 50, 0, 0, 'text', isset($this->config->text)?$this->config->text:'') ?></td>
|
||||
<td><?php print_textarea($usehtmleditor, 25, 50, 0, 0, 'text', $text) ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="3" align="center">
|
||||
|
||||
@@ -52,7 +52,7 @@ class block_login extends block_base {
|
||||
$this->content->text .= '<table align="center" cellpadding="2" cellspacing="0" class="logintable">';
|
||||
|
||||
$this->content->text .= '<tr><td class="c0 r0" align="right">'.get_string('username').':</td>';
|
||||
$this->content->text .= '<td class="c1 r0"><input type="text" name="username" size="10" value="'.$username.'" /></td></tr>';
|
||||
$this->content->text .= '<td class="c1 r0"><input type="text" name="username" size="10" value="'.s($username).'" /></td></tr>';
|
||||
|
||||
$this->content->text .= '<tr><td class="c0 r1" align="right">'.get_string('password').':</td>';
|
||||
$this->content->text .= '<td class="c1 r1"><input type="password" name="password" size="10" value="" /></td></tr>';
|
||||
|
||||
@@ -118,7 +118,7 @@ class block_online_users extends block_base {
|
||||
$this->content->text .= '<a href="'.$CFG->wwwroot.'/user/view.php?id='.$user->id.'&course='.$COURSE->id.'" title="'.$timeago.'">'.$user->fullname.'</a>';
|
||||
if (!empty($USER->id) and ($USER->id != $user->id) and !empty($CFG->messaging) and !isguest()) { // Only when logged in
|
||||
$this->content->text .= "\n".' <a title="'.get_string('messageselectadd').'" target="message_'.$user->id.'" href="'.$CFG->wwwroot.'/message/discussion.php?id='.$user->id.'" onclick="return openpopup(\'/message/discussion.php?id='.$user->id.'\', \'message_'.$user->id.'\', \'menubar=0,location=0,scrollbars,status,resizable,width=400,height=500\', 0);">'
|
||||
.'<img class="icon message" src="'.$CFG->pixpath.'/t/message.gif" alt="'. get_string('messageselectadd') .'" /></a>';
|
||||
.'<img class="messageicon" src="'.$CFG->pixpath.'/t/message.gif" alt="'. get_string('messageselectadd') .'" /></a>';
|
||||
}
|
||||
$this->content->text .= "</li>\n";
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ class block_participants extends block_list {
|
||||
}
|
||||
|
||||
function get_content() {
|
||||
global $USER, $CFG;
|
||||
global $USER, $CFG, $COURSE;
|
||||
|
||||
if ($this->content !== NULL) {
|
||||
return $this->content;
|
||||
@@ -27,13 +27,14 @@ class block_participants extends block_list {
|
||||
$this->instance->pageid = SITEID;
|
||||
}
|
||||
|
||||
if ($this->instance->pageid != SITEID ||
|
||||
/// MDL-13252 Always get the course page id or else the id may be incorrect in the user/index.php
|
||||
if ($COURSE->id != SITEID ||
|
||||
$CFG->showsiteparticipantslist > 1 ||
|
||||
($CFG->showsiteparticipantslist == 1 && isteacherinanycourse()) ||
|
||||
isteacher(SITEID)) {
|
||||
|
||||
$this->content->items[] = '<a title="'.get_string('listofallpeople').'" href="'.
|
||||
$CFG->wwwroot.'/user/index.php?id='.$this->instance->pageid.'">'.get_string('participants').'</a>';
|
||||
$CFG->wwwroot.'/user/index.php?id='.$COURSE->id.'">'.get_string('participants').'</a>';
|
||||
$this->content->icons[] = '<img src="'.$CFG->pixpath.'/i/users.gif" height="16" width="16" alt="" />';
|
||||
}
|
||||
|
||||
|
||||
@@ -123,7 +123,7 @@
|
||||
$numids = count($rssidarray);
|
||||
$count = 0;
|
||||
foreach ($rssidarray as $rssid) {
|
||||
$output .= $this->get_rss_by_id($rssid, $display_description, $shownumentries, ($numids > 1) ? true : false);
|
||||
$output .= clean_text($this->get_rss_by_id($rssid, $display_description, $shownumentries, ($numids > 1) ? true : false), FORMAT_HTML);
|
||||
if ($numids > 1 && $count != $numids -1 && !empty($rssfeedstring)) {
|
||||
$output .= '<hr width="80%" />';
|
||||
}
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
<?php // $Id$
|
||||
|
||||
if (!defined('MOODLE_INTERNAL')) {
|
||||
die('Direct access to this script is forbidden.'); /// It must be included from a Moodle page
|
||||
}
|
||||
|
||||
/**
|
||||
* Definition of blog page type.
|
||||
*/
|
||||
|
||||
+6
-6
@@ -115,8 +115,8 @@ if ($editid) { // User is editing a post
|
||||
$blogEntry = get_record('post','id',$editid);
|
||||
|
||||
//using an unformatted entry body here so that extra formatting information is not stored in the db
|
||||
$post->body = stripslashes_safe($blogEntry->summary);
|
||||
$post->etitle = stripslashes_safe($blogEntry->subject);
|
||||
$post->body = $blogEntry->summary;
|
||||
$post->etitle = $blogEntry->subject;
|
||||
$post->postid = $editid;
|
||||
$post->userid = $blogEntry->userid;
|
||||
$post->format = $blogEntry->format;
|
||||
@@ -194,8 +194,8 @@ function do_save($post) {
|
||||
|
||||
/// Write a blog entry into database
|
||||
$blogEntry = new object;
|
||||
$blogEntry->subject = addslashes($post->etitle);
|
||||
$blogEntry->summary = addslashes($post->body);
|
||||
$blogEntry->subject = $post->etitle;
|
||||
$blogEntry->summary = $post->body;
|
||||
$blogEntry->module = 'blog';
|
||||
$blogEntry->userid = $USER->id;
|
||||
$blogEntry->format = $post->format;
|
||||
@@ -267,8 +267,8 @@ function do_update($post) {
|
||||
// echo "id id ".$post->postid;
|
||||
// print_object($blogentry); //debug
|
||||
|
||||
$blogEntry->subject = addslashes($post->etitle);
|
||||
$blogEntry->summary = addslashes($post->body);
|
||||
$blogEntry->subject = $post->etitle;
|
||||
$blogEntry->summary = $post->body;
|
||||
if ($blogEntry->summary == '<br />') {
|
||||
$blogEntry->summary = '';
|
||||
}
|
||||
|
||||
+4
-4
@@ -110,10 +110,10 @@ if ($ME == $CFG->wwwroot.'/blog/edit.php') { /// We are in edit mode, print the
|
||||
|
||||
case 'course':
|
||||
if ($tagid || !empty($tag)) {
|
||||
print_header_simple("$course->shortname: $blogstring", $course->fullname,
|
||||
print_header("$course->shortname: $blogstring", $course->fullname,
|
||||
'<a href="index.php?filtertype=course&filterselect='.$filterselect.'">'. "$blogstring</a> -> $tagstring: $taginstance->text",'','',true,$PAGE->get_extra_header_string());
|
||||
} else {
|
||||
print_header_simple("$course->shortname: $blogstring", $course->fullname,
|
||||
print_header("$course->shortname: $blogstring", $course->fullname,
|
||||
$blogstring,'','',true,$PAGE->get_extra_header_string());
|
||||
}
|
||||
break;
|
||||
@@ -123,11 +123,11 @@ if ($ME == $CFG->wwwroot.'/blog/edit.php') { /// We are in edit mode, print the
|
||||
$thisgroup = get_record('groups', 'id', $filterselect);
|
||||
|
||||
if ($tagid || !empty($tag)) {
|
||||
print_header_simple("$course->shortname: $blogstring", $course->fullname,
|
||||
print_header("$course->shortname: $blogstring", $course->fullname,
|
||||
'<a href="'.$CFG->wwwroot.'/user/index.php?id='.$course->id.'&group='.$filterselect.'">'.$thisgroup->name.'</a> ->
|
||||
<a href="index.php?filtertype=group&filterselect='.$filterselect.'">'. "$blogstring</a> -> $tagstring: $taginstance->text",'','',true,$PAGE->get_extra_header_string());
|
||||
} else {
|
||||
print_header_simple("$course->shortname: $blogstring", $course->fullname,
|
||||
print_header("$course->shortname: $blogstring", $course->fullname,
|
||||
'<a href="'.$CFG->wwwroot.'/user/index.php?id='.$course->id.'&group='.$filterselect.'">'.$thisgroup->name."</a> ->
|
||||
$blogstring",'','',true,$PAGE->get_extra_header_string());
|
||||
|
||||
|
||||
+1
-1
@@ -20,7 +20,7 @@ $limit = optional_param('limit', 0, PARAM_INT);
|
||||
$start = optional_param('formstart', 0, PARAM_INT);
|
||||
$userid = optional_param('userid',0,PARAM_INT);
|
||||
$courseid = optional_param('courseid',SITEID,PARAM_INT);
|
||||
$tag = s(urldecode(optional_param('tag', '', PARAM_NOTAGS)));
|
||||
$tag = optional_param('tag', '', PARAM_NOTAGS);
|
||||
$tagid = optional_param('tagid', 0, PARAM_INT);
|
||||
$postid = optional_param('postid',0,PARAM_INT);
|
||||
$filtertype = optional_param('filtertype', '', PARAM_ALPHA);
|
||||
|
||||
+7
-4
@@ -119,6 +119,9 @@
|
||||
blog_print_entry($blogEntry, 'list', $filtertype, $filterselect); //print this entry.
|
||||
$count++;
|
||||
}
|
||||
|
||||
print_paging_bar(get_viewable_entry_count($userid, $postid, $limit, $start,$filtertype, $filterselect, $tagid, $tag, $sort='lastmodified DESC'), $blogpage, $bloglimit, get_baseurl($filtertype, $filterselect), 'blogpage');
|
||||
|
||||
if (!$count) {
|
||||
print '<br /><center>'. get_string('noentriesyet', 'blog') .'</center><br />';
|
||||
|
||||
@@ -151,10 +154,10 @@
|
||||
|
||||
global $USER, $CFG, $course, $ME;
|
||||
|
||||
$template['body'] = get_formatted_entry_body(stripslashes_safe($blogEntry->summary), $blogEntry->format);
|
||||
$template['title'] = '<a name="'. $blogEntry->subject .'"></a>';
|
||||
$template['body'] = get_formatted_entry_body($blogEntry->summary, $blogEntry->format);
|
||||
$template['title'] = '<a name="'. s($blogEntry->subject, true) .'"></a>';
|
||||
//enclose the title in nolink tags so that moodle formatting doesn't autolink the text
|
||||
$template['title'] .= '<span class="nolink">'. stripslashes_safe($blogEntry->subject);
|
||||
$template['title'] .= '<span class="nolink">'. strip_tags(format_string($blogEntry->subject, true));
|
||||
$template['title'] .= '</span>';
|
||||
$template['userid'] = $blogEntry->userid;
|
||||
$template['author'] = fullname(get_record('user','id',$blogEntry->userid));
|
||||
@@ -339,7 +342,7 @@
|
||||
if ($format) {
|
||||
return format_text($body, $format);
|
||||
}
|
||||
return stripslashes_safe($body);
|
||||
return $body;
|
||||
}
|
||||
|
||||
/// Main filter function
|
||||
|
||||
+12
-11
@@ -9,14 +9,14 @@
|
||||
// Copyright (C) 2003-2004 Greek School Network www.sch.gr //
|
||||
// //
|
||||
// Designed by: //
|
||||
// Avgoustos Tsinakos (tsinakos@uom.gr) //
|
||||
// Jon Papaioannou (pj@uom.gr) //
|
||||
// Avgoustos Tsinakos (tsinakos@teikav.edu.gr) //
|
||||
// Jon Papaioannou (pj@moodle.org) //
|
||||
// //
|
||||
// Programming and development: //
|
||||
// Jon Papaioannou (pj@uom.gr) //
|
||||
// Jon Papaioannou (pj@moodle.org) //
|
||||
// //
|
||||
// For bugs, suggestions, etc contact: //
|
||||
// Jon Papaioannou (pj@uom.gr) //
|
||||
// Jon Papaioannou (pj@moodle.org) //
|
||||
// //
|
||||
// The current module was developed at the University of Macedonia //
|
||||
// (www.uom.gr) under the funding of the Greek School Network (www.sch.gr) //
|
||||
@@ -205,13 +205,14 @@
|
||||
if (count($err) == 0) {
|
||||
$form->timemodified = time();
|
||||
|
||||
if ($form->repeat) {
|
||||
$fetch = get_record_sql('SELECT 1, MAX(repeatid) AS repeatid FROM '.$CFG->prefix.'event');
|
||||
$form->repeatid = empty($fetch) ? 1 : $fetch->repeatid + 1;
|
||||
}
|
||||
|
||||
/// Get the event id for the log record.
|
||||
$eventid = insert_record('event', $form, true);
|
||||
|
||||
/// Use the event id as the repeatid to link repeat entries together
|
||||
if ($form->repeat) {
|
||||
$form->repeatid = $form->id = $eventid;
|
||||
update_record('event', $form); // update the row, to set its repeatid
|
||||
}
|
||||
|
||||
/// Log the event entry.
|
||||
add_to_log($form->courseid, 'calendar', 'add', 'event.php?action=edit&id='.$eventid, stripslashes($form->name));
|
||||
@@ -262,7 +263,7 @@
|
||||
}
|
||||
|
||||
print_header($site->shortname.': '.$strcalendar.': '.$title, $strcalendar, $nav.' -> '.$title,
|
||||
$focus, '', true, '', user_login_string($site));
|
||||
'eventform.name', '', true, 'new.name', user_login_string($site));
|
||||
|
||||
echo calendar_overlib_html();
|
||||
|
||||
@@ -378,7 +379,7 @@
|
||||
$form->timestart = make_timestamp($cal_y, $cal_m, 1, 0, 0, 0);
|
||||
}
|
||||
}
|
||||
if($form->timestart < 0) {
|
||||
if(!isset($form->timestart) or $form->timestart < 0) {
|
||||
$form->timestart = time();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<form method="post" action="event.php" name="edit">
|
||||
<form method="post" action="event.php" name="eventform">
|
||||
<table cellpadding="5" cellspacing="0">
|
||||
<tr>
|
||||
<td style="vertical-align: top; text-align: right;">
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
// The following is a hack to fix bug 1488
|
||||
$course = get_record('course', 'id', ($form->courseid) ? $form->courseid : $site->id);
|
||||
?>
|
||||
<form method="post" action="event.php" name="new">
|
||||
<form method="post" action="event.php" name="eventform">
|
||||
<table cellpadding="5">
|
||||
<tr>
|
||||
<td style="vertical-align: top; text-align: right;">
|
||||
|
||||
+12
-7
@@ -9,14 +9,14 @@
|
||||
// Copyright (C) 2003-2004 Greek School Network www.sch.gr //
|
||||
// //
|
||||
// Designed by: //
|
||||
// Avgoustos Tsinakos (tsinakos@uom.gr) //
|
||||
// Jon Papaioannou (pj@uom.gr) //
|
||||
// Avgoustos Tsinakos (tsinakos@teikav.edu.gr) //
|
||||
// Jon Papaioannou (pj@moodle.org) //
|
||||
// //
|
||||
// Programming and development: //
|
||||
// Jon Papaioannou (pj@uom.gr) //
|
||||
// Jon Papaioannou (pj@moodle.org) //
|
||||
// //
|
||||
// For bugs, suggestions, etc contact: //
|
||||
// Jon Papaioannou (pj@uom.gr) //
|
||||
// Jon Papaioannou (pj@moodle.org) //
|
||||
// //
|
||||
// The current module was developed at the University of Macedonia //
|
||||
// (www.uom.gr) under the funding of the Greek School Network (www.sch.gr) //
|
||||
@@ -242,7 +242,7 @@ function calendar_get_mini($courses, $groups, $users, $cal_month = false, $cal_y
|
||||
$popupicon = $CFG->pixpath.'/c/user.gif';
|
||||
$popupalt = '';
|
||||
}
|
||||
$popupcontent .= '<div><img height="16" width="16" src="'.$popupicon.'" style="vertical-align: middle; margin-right: 4px;" alt="'.$popupalt.'" /><a href="'.$dayhref.'">'.format_string($event->name,true).'</a></div>';
|
||||
$popupcontent .= '<div><img height="16" width="16" src="'.$popupicon.'" style="vertical-align: middle; margin-right: 4px;" alt="'.$popupalt.'" /><a href="'.$dayhref.'#event_'.$event->id.'">'.format_string($event->name,true).'</a></div>';
|
||||
}
|
||||
|
||||
//Accessibility: functionality moved to calendar_get_popup.
|
||||
@@ -338,6 +338,7 @@ function calendar_get_popup($is_today, $event_timestart, $popupcontent='') {
|
||||
$popupcaption .= get_string('eventsfor', 'calendar', userdate($event_timestart, get_string('strftimedayshort')));
|
||||
}
|
||||
$popupcontent = str_replace("'", "\'", htmlspecialchars($popupcontent));
|
||||
$popupcaption = str_replace("'", "\'", htmlspecialchars($popupcaption));
|
||||
$popup = 'onmouseover="return overlib(\''.$popupcontent.'\', CAPTION, \''.$popupcaption.'\');" onmouseout="return nd();"';
|
||||
return $popup;
|
||||
}
|
||||
@@ -455,7 +456,7 @@ function calendar_print_event($event) {
|
||||
static $strftimetime;
|
||||
|
||||
$event = calendar_add_event_metadata($event);
|
||||
echo '<table class="event" cellspacing="0">';
|
||||
echo '<a name="event_'.$event->id.'"></a><table class="event" cellspacing="0">';
|
||||
echo '<tr><td class="picture">';
|
||||
if (!empty($event->icon)) {
|
||||
echo $event->icon;
|
||||
@@ -868,7 +869,7 @@ function calendar_get_sideblock_upcoming($events, $linkhref = NULL) {
|
||||
if(!empty($linkhref)) {
|
||||
$ed = usergetdate($events[$i]->timestart);
|
||||
$href = calendar_get_link_href(CALENDAR_URL.$linkhref, $ed['mday'], $ed['mon'], $ed['year']);
|
||||
$content .= '<a href="'.$href.'">'.$events[$i]->name.'</a>';
|
||||
$content .= '<a href="'.$href.'#event_'.$events[$i]->id.'">'.$events[$i]->name.'</a>';
|
||||
}
|
||||
else {
|
||||
$content .= $events[$i]->name;
|
||||
@@ -1093,6 +1094,10 @@ function calendar_set_filters(&$courses, &$group, &$user, $courseeventsfrom = NU
|
||||
else {
|
||||
$courses = false;
|
||||
}
|
||||
//BUG 6130 clean $courses array as SESSION has bad entries.
|
||||
foreach ($courses as $index => $value) {
|
||||
if (empty($value)) unset($courses[$index]);
|
||||
}
|
||||
|
||||
if($SESSION->cal_show_user || $ignorefilters) {
|
||||
// This doesn't work for arrays yet (maybe someday it will)
|
||||
|
||||
+4
-4
@@ -9,14 +9,14 @@
|
||||
// Copyright (C) 2003-2004 Greek School Network www.sch.gr //
|
||||
// //
|
||||
// Designed by: //
|
||||
// Avgoustos Tsinakos (tsinakos@uom.gr) //
|
||||
// Jon Papaioannou (pj@uom.gr) //
|
||||
// Avgoustos Tsinakos (tsinakos@teikav.edu.gr) //
|
||||
// Jon Papaioannou (pj@moodle.org) //
|
||||
// //
|
||||
// Programming and development: //
|
||||
// Jon Papaioannou (pj@uom.gr) //
|
||||
// Jon Papaioannou (pj@moodle.org) //
|
||||
// //
|
||||
// For bugs, suggestions, etc contact: //
|
||||
// Jon Papaioannou (pj@uom.gr) //
|
||||
// Jon Papaioannou (pj@moodle.org) //
|
||||
// //
|
||||
// The current module was developed at the University of Macedonia //
|
||||
// (www.uom.gr) under the funding of the Greek School Network (www.sch.gr) //
|
||||
|
||||
+23
-13
@@ -9,14 +9,14 @@
|
||||
// Copyright (C) 2003-2004 Greek School Network www.sch.gr //
|
||||
// //
|
||||
// Designed by: //
|
||||
// Avgoustos Tsinakos (tsinakos@uom.gr) //
|
||||
// Jon Papaioannou (pj@uom.gr) //
|
||||
// Avgoustos Tsinakos (tsinakos@teikav.edu.gr) //
|
||||
// Jon Papaioannou (pj@moodle.org) //
|
||||
// //
|
||||
// Programming and development: //
|
||||
// Jon Papaioannou (pj@uom.gr) //
|
||||
// Jon Papaioannou (pj@moodle.org) //
|
||||
// //
|
||||
// For bugs, suggestions, etc contact: //
|
||||
// Jon Papaioannou (pj@uom.gr) //
|
||||
// Jon Papaioannou (pj@moodle.org) //
|
||||
// //
|
||||
// The current module was developed at the University of Macedonia //
|
||||
// (www.uom.gr) under the funding of the Greek School Network (www.sch.gr) //
|
||||
@@ -44,8 +44,8 @@
|
||||
require_once($CFG->dirroot.'/course/lib.php');
|
||||
require_once($CFG->dirroot.'/calendar/lib.php');
|
||||
|
||||
$course = optional_param('course', 0);
|
||||
$view = optional_param('view', 'upcoming');
|
||||
$courseid = optional_param('course', 0, PARAM_INT);
|
||||
$view = optional_param('view', 'upcoming', PARAM_ALPHA);
|
||||
$day = optional_param('cal_d', 0, PARAM_INT);
|
||||
$mon = optional_param('cal_m', 0, PARAM_INT);
|
||||
$yr = optional_param('cal_y', 0, PARAM_INT);
|
||||
@@ -54,7 +54,9 @@
|
||||
redirect($CFG->wwwroot.'/'.$CFG->admin.'/index.php');
|
||||
}
|
||||
|
||||
if ($CFG->forcelogin) {
|
||||
if ($courseid) {
|
||||
require_login($courseid);
|
||||
} else if ($CFG->forcelogin) {
|
||||
require_login();
|
||||
}
|
||||
|
||||
@@ -87,8 +89,8 @@
|
||||
}
|
||||
|
||||
// If a course has been supplied in the URL, change the filters to show that one
|
||||
if (!empty($course)) {
|
||||
if ($course = get_record('course', 'id', $course)) {
|
||||
if (!empty($courseid)) {
|
||||
if ($course = get_record('course', 'id', $courseid)) {
|
||||
if ($course->id == SITEID) {
|
||||
// If coming from the home page, show all courses
|
||||
$SESSION->cal_courses_shown = calendar_get_default_courses(true);
|
||||
@@ -100,6 +102,8 @@
|
||||
calendar_set_referring_course($SESSION->cal_courses_shown);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$course = null;
|
||||
}
|
||||
|
||||
if (empty($USER->id) or isguest()) {
|
||||
@@ -302,9 +306,15 @@ function calendar_show_month_detailed($m, $y, $courses, $groups, $users) {
|
||||
list($d, $m, $y) = array($date['mday'], $date['mon'], $date['year']); // This is what we want to display
|
||||
$display->maxdays = calendar_days_in_month($m, $y);
|
||||
|
||||
// We 'll keep these values as GMT here, and offset them when the time comes to query the db
|
||||
$display->tstart = gmmktime(0, 0, 0, $m, 1, $y); // This is GMT
|
||||
$display->tend = gmmktime(23, 59, 59, $m, $display->maxdays, $y); // GMT
|
||||
if (get_user_timezone_offset() < 99) {
|
||||
// We 'll keep these values as GMT here, and offset them when the time comes to query the db
|
||||
$display->tstart = gmmktime(0, 0, 0, $m, 1, $y); // This is GMT
|
||||
$display->tend = gmmktime(23, 59, 59, $m, $display->maxdays, $y); // GMT
|
||||
} else {
|
||||
// no timezone info specified
|
||||
$display->tstart = mktime(0, 0, 0, $m, 1, $y);
|
||||
$display->tend = mktime(23, 59, 59, $m, $display->maxdays, $y);
|
||||
}
|
||||
|
||||
$startwday = gmdate('w', $display->tstart); // $display->tstart is already GMT, so don't use date(): messes with server's TZ
|
||||
|
||||
@@ -440,7 +450,7 @@ function calendar_show_month_detailed($m, $y, $courses, $groups, $users) {
|
||||
if(isset($eventsbyday[$day])) {
|
||||
echo '<ul class="events-new">';
|
||||
foreach($eventsbyday[$day] as $eventindex) {
|
||||
echo '<li><a href="'.$dayhref.'">'.format_string($events[$eventindex]->name,true).'</a></li>';
|
||||
echo '<li><a href="'.$dayhref.'#event_'.$events[$eventindex]->id.'">'.format_string($events[$eventindex]->name, true).'</a></li>';
|
||||
}
|
||||
echo '</ul>';
|
||||
}
|
||||
|
||||
@@ -139,6 +139,9 @@ $CFG->admin = 'admin';
|
||||
// Useful for webhost operators who have alternate methods of backups
|
||||
// $CFG->disablescheduledbackups = true;
|
||||
//
|
||||
// Prevent stats processing and hide the GUI
|
||||
// $CFG->disablestatsprocessing = true;
|
||||
//
|
||||
// Restrict certain usernames from doing things that may mess up a site
|
||||
// This is especially useful for demonstration teacher accounts
|
||||
// $CFG->restrictusers = 'teacher,fred,jim';
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@
|
||||
|
||||
$id = required_param('id', PARAM_INT); // Category id
|
||||
$page = optional_param('page', 0, PARAM_INT); // which page to show
|
||||
$perpage = optional_param('perpage', 20, PARAM_INT); // how many per page
|
||||
$perpage = optional_param('perpage', $CFG->coursesperpage, PARAM_INT); // how many per page
|
||||
$edit = optional_param('edit', -1, PARAM_BOOL);
|
||||
$hide = optional_param('hide', 0, PARAM_INT);
|
||||
$show = optional_param('show', 0, PARAM_INT);
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
$strsummaryof = get_string('summaryof', '', " $sectionname $form->section");
|
||||
}
|
||||
|
||||
print_header_simple($stredit, '', $stredit);
|
||||
print_header_simple($stredit, '', $stredit, 'theform.summary' );
|
||||
|
||||
print_heading($strsummaryof);
|
||||
print_simple_box_start('center');
|
||||
|
||||
+9
-8
@@ -60,13 +60,13 @@
|
||||
/// moved here to fix bug 5734
|
||||
if ($course->metacourse) {
|
||||
print_header_simple();
|
||||
notice(get_string('coursenotaccessible'), $CFG->wwwroot);
|
||||
notice(get_string('coursenotaccessible'), "$CFG->wwwroot/index.php");
|
||||
}
|
||||
|
||||
/// Users can't enroll to site course
|
||||
if (!$course->category) {
|
||||
print_header_simple();
|
||||
notice(get_string('enrollfirst'), $CFG->wwwroot);
|
||||
notice(get_string('enrollfirst'), "$CFG->wwwroot/index.php");
|
||||
}
|
||||
|
||||
/// Double check just in case they are enrolled to start in the future
|
||||
@@ -75,22 +75,23 @@
|
||||
if ($course->enrolperiod and $student->timestart and ($student->timestart >= time())) {
|
||||
$message = get_string('enrolmentnotyet', '', userdate($student->timestart));
|
||||
print_header();
|
||||
notice($message, $CFG->wwwroot);
|
||||
notice($message, "$CFG->wwwroot/index.php");
|
||||
}
|
||||
}
|
||||
|
||||
/// Check if the course is enrollable
|
||||
if (!method_exists($enrol, 'print_entry')) {
|
||||
print_header_simple();
|
||||
notice(get_string('enrolmentnointernal'), $CFG->wwwroot);
|
||||
notice(get_string('enrolmentnointernal'), "$CFG->wwwroot/index.php");
|
||||
}
|
||||
|
||||
if (!$course->enrollable ||
|
||||
if (!$loginasguest and ($USER->username != 'guest') and(
|
||||
!$course->enrollable ||
|
||||
($course->enrollable == 2 && $course->enrolstartdate > 0 && $course->enrolstartdate > time()) ||
|
||||
($course->enrollable == 2 && $course->enrolenddate > 0 && $course->enrolenddate <= time())
|
||||
) {
|
||||
print_header_simple();
|
||||
notice(get_string('notenrollable'), $CFG->wwwroot);
|
||||
)) {
|
||||
print_header($course->shortname, $course->fullname, $course->shortname );
|
||||
notice(get_string('notenrollable'), "$CFG->wwwroot/index.php");
|
||||
}
|
||||
|
||||
/// Check the submitted enrollment key if there is one
|
||||
|
||||
@@ -56,6 +56,9 @@
|
||||
}
|
||||
|
||||
echo "<center>";
|
||||
if (isloggedin() and !isguest() and !isadmin() and !iscreator()) { // Print link to request a new course
|
||||
print_single_button("request.php", NULL, get_string("courserequest"), "get");
|
||||
}
|
||||
if (iscreator()) { // Print link to create a new course
|
||||
print_single_button("edit.php", NULL, get_string("addnewcourse"), "get");
|
||||
}
|
||||
|
||||
@@ -10,6 +10,10 @@
|
||||
|
||||
$jump = optional_param('jump', '', PARAM_RAW);
|
||||
|
||||
if (!confirm_sesskey()) {
|
||||
print_error('confirmsesskeybad');
|
||||
}
|
||||
|
||||
if (strpos($jump, $CFG->wwwroot) === 0) { // Anything on this site
|
||||
redirect(urldecode($jump));
|
||||
} else if (preg_match('/^[a-z]+\.php\?/', $jump)) {
|
||||
|
||||
+40
-21
@@ -246,19 +246,50 @@ function make_log_url($module, $url) {
|
||||
case 'message':
|
||||
case 'calendar':
|
||||
case 'blog':
|
||||
return "/$module/$url";
|
||||
if (strpos($url, '../') === 0) {
|
||||
$url = ltrim($url, '.');
|
||||
} else {
|
||||
$url = "/course/$url";
|
||||
}
|
||||
break;
|
||||
$url = "/$module/$url";
|
||||
break;
|
||||
case 'upload':
|
||||
return $url;
|
||||
$url = $url;
|
||||
break;
|
||||
case 'library':
|
||||
case '':
|
||||
return '/';
|
||||
$url = '/';
|
||||
break;
|
||||
default:
|
||||
return "/mod/$module/$url";
|
||||
$url = "/mod/$module/$url";
|
||||
break;
|
||||
}
|
||||
|
||||
//now let's sanitise urls - there might be some ugly nasties:-(
|
||||
$parts = explode('?', $url);
|
||||
$script = array_shift($parts);
|
||||
if (strpos($script, 'http') === 0) {
|
||||
$script = clean_param($script, PARAM_URL);
|
||||
} else {
|
||||
$script = clean_param($script, PARAM_PATH);
|
||||
}
|
||||
|
||||
$query = '';
|
||||
if ($parts) {
|
||||
$query = implode('', $parts);
|
||||
$query = str_replace('&', '&', $query); // both & and & are stored in db :-|
|
||||
$parts = explode('&', $query);
|
||||
$eq = urlencode('=');
|
||||
foreach ($parts as $key=>$part) {
|
||||
$part = urlencode(urldecode($part));
|
||||
$part = str_replace($eq, '=', $part);
|
||||
$parts[$key] = $part;
|
||||
}
|
||||
$query = '?'.implode('&', $parts);
|
||||
}
|
||||
|
||||
return $script.$query;
|
||||
}
|
||||
|
||||
function print_log($course, $user=0, $date=0, $order="l.time ASC", $page=0, $perpage=100,
|
||||
@@ -406,10 +437,6 @@ function print_log($course, $user=0, $date=0, $order="l.time ASC", $page=0, $per
|
||||
//Filter log->info
|
||||
$log->info = format_string($log->info);
|
||||
|
||||
$log->url = strip_tags(urldecode($log->url)); // Some XSS protection
|
||||
$log->info = strip_tags(urldecode($log->info)); // Some XSS protection
|
||||
$log->url = str_replace('&', '&', $log->url); /// XHTML compatibility
|
||||
|
||||
echo '<tr class="r'.$row.'">';
|
||||
if ($course->id == SITEID) {
|
||||
echo "<td class=\"r$row c0\" nowrap=\"nowrap\">\n";
|
||||
@@ -1202,14 +1229,14 @@ function print_courses($category, $width="100%", $hidesitecourse = false) {
|
||||
$categories = get_categories(0); // Parent = 0 ie top-level categories only
|
||||
if (count($categories) == 1) {
|
||||
$category = array_shift($categories);
|
||||
$courses = get_courses($category->id, 'c.sortorder ASC', 'c.id,c.category,c.sortorder,c.visible,c.fullname,c.shortname,c.password,c.summary,c.teacher,c.cost,c.currency,c.enrol');
|
||||
$courses = get_courses($category->id, 'c.sortorder ASC', 'c.id,c.category,c.sortorder,c.visible,c.fullname,c.shortname,c.password,c.summary,c.teacher,c.cost,c.currency,c.enrol,c.guest');
|
||||
} else {
|
||||
$courses = get_courses('all', 'c.sortorder ASC', 'c.id,c.category,c.sortorder,c.visible,c.fullname,c.shortname,c.password,c.summary,c.teacher,c.cost,c.currency,c.enrol');
|
||||
$courses = get_courses('all', 'c.sortorder ASC', 'c.id,c.category,c.sortorder,c.visible,c.fullname,c.shortname,c.password,c.summary,c.teacher,c.cost,c.currency,c.enrol,c.guest');
|
||||
}
|
||||
unset($categories);
|
||||
} else {
|
||||
$categories = get_categories($category->id); // sub categories
|
||||
$courses = get_courses($category->id, 'c.sortorder ASC', 'c.id,c.category,c.sortorder,c.visible,c.fullname,c.shortname,c.password,c.summary,c.teacher,c.cost,c.currency,c.enrol');
|
||||
$courses = get_courses($category->id, 'c.sortorder ASC', 'c.id,c.category,c.sortorder,c.visible,c.fullname,c.shortname,c.password,c.summary,c.teacher,c.cost,c.currency,c.enrol,c.guest');
|
||||
}
|
||||
|
||||
if ($courses) {
|
||||
@@ -1847,7 +1874,7 @@ function move_courses ($courseids, $categoryid) {
|
||||
// figure out a sortorder that we can use in the destination category
|
||||
$sortorder = get_field_sql('SELECT MIN(sortorder)-1 AS min
|
||||
FROM ' . $CFG->prefix . 'course WHERE category=' . $categoryid);
|
||||
if ($sortorder === false) {
|
||||
if (is_null($sortorder) || $sortorder === false) {
|
||||
// the category is empty
|
||||
// rather than let the db default to 0
|
||||
// set it to > 100 and avoid extra work in fix_coursesortorder()
|
||||
@@ -1858,16 +1885,8 @@ function move_courses ($courseids, $categoryid) {
|
||||
|
||||
$course->category = $categoryid;
|
||||
$course->sortorder = $sortorder;
|
||||
$course->fullname = addslashes($course->fullname);
|
||||
$course->shortname = addslashes($course->shortname);
|
||||
$course->summary = addslashes($course->summary);
|
||||
$course->password = addslashes($course->password);
|
||||
$course->teacher = addslashes($course->teacher);
|
||||
$course->teachers = addslashes($course->teachers);
|
||||
$course->student = addslashes($course->student);
|
||||
$course->students = addslashes($course->students);
|
||||
|
||||
if (!update_record('course', $course)) {
|
||||
if (!update_record('course', addslashes_object($course))) {
|
||||
notify("An error occurred - course not moved!");
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -503,7 +503,7 @@
|
||||
$form->sesskey = !empty($USER->id) ? $USER->sesskey : '';
|
||||
|
||||
$sectionname = get_string("name$course->format");
|
||||
$fullmodulename = strtolower(get_string("modulename", $module->name));
|
||||
$fullmodulename = get_string("modulename", $module->name);
|
||||
|
||||
if ($form->section && $course->format != 'site') {
|
||||
$heading->what = $fullmodulename;
|
||||
@@ -563,7 +563,7 @@
|
||||
$form->sesskey = !empty($USER->id) ? $USER->sesskey : '';
|
||||
|
||||
$sectionname = get_string("name$course->format");
|
||||
$fullmodulename = strtolower(get_string("modulename", $module->name));
|
||||
$fullmodulename = get_string("modulename", $module->name);
|
||||
|
||||
if ($form->section) {
|
||||
$heading->what = $fullmodulename;
|
||||
@@ -638,7 +638,7 @@
|
||||
$strmodulenameplural = get_string("modulenameplural", $module->name);
|
||||
|
||||
if ($module->name == "label") {
|
||||
$focuscursor = "";
|
||||
$focuscursor = "form.content";
|
||||
} else {
|
||||
$focuscursor = "form.name";
|
||||
}
|
||||
|
||||
+7
-6
@@ -25,6 +25,7 @@
|
||||
add_to_log($course->id, "course", "recent", "recent.php?id=$course->id", "$course->id");
|
||||
|
||||
$strrecentactivity = get_string("recentactivity");
|
||||
$meta = '<meta name="robots" content="none" />'; // prevent duplicate content in search engines MDL-7299
|
||||
|
||||
$loggedinas = user_login_string($course, $USER);
|
||||
|
||||
@@ -42,13 +43,13 @@
|
||||
if ($date)
|
||||
$dateinfo = userdate($date, get_string("strftimedaydate"));
|
||||
|
||||
if ($course->category) {
|
||||
if ($course->id != SITEID) {
|
||||
print_header("$course->shortname: $strrecentactivity", "$course->fullname",
|
||||
"<a href=\"view.php?id=$course->id\">$course->shortname</a> ->
|
||||
<a href=\"recent.php?id=$course->id\">$strrecentactivity</a> -> $userinfo, $dateinfo", "");
|
||||
<a href=\"recent.php?id=$course->id\">$strrecentactivity</a> -> $userinfo, $dateinfo", "", $meta);
|
||||
} else {
|
||||
print_header("$course->shortname: $strrecentactivity", "$course->fullname",
|
||||
"<a href=\"recent.php?id=$course->id\">$strrecentactivity</a> -> $userinfo, $dateinfo", "");
|
||||
"<a href=\"recent.php?id=$course->id\">$strrecentactivity</a> -> $userinfo, $dateinfo", "", $meta);
|
||||
}
|
||||
|
||||
print_heading("$course->fullname: $userinfo, $dateinfo (".usertimezone().")", '', 3);
|
||||
@@ -67,12 +68,12 @@
|
||||
}
|
||||
}
|
||||
|
||||
if ($course->category) {
|
||||
if ($course->id != SITEID) {
|
||||
print_header("$course->shortname: $strrecentactivity", "$course->fullname",
|
||||
"<a href=\"view.php?id=$course->id\">$course->shortname</a> -> $strrecentactivity", "");
|
||||
"<a href=\"view.php?id=$course->id\">$course->shortname</a> -> $strrecentactivity", "", $meta);
|
||||
} else {
|
||||
print_header("$course->shortname: $strrecentactivity", "$course->fullname",
|
||||
"$strrecentactivity", "");
|
||||
"$strrecentactivity", "", $meta);
|
||||
}
|
||||
|
||||
print_heading(get_string("activitysince", "", userdate($date)));
|
||||
|
||||
@@ -155,7 +155,7 @@
|
||||
$postfun = $module->name.'_get_post_actions';
|
||||
|
||||
if (!function_exists($viewfun) || !function_exists($postfun)) {
|
||||
error(get_string('modulemisssingcode','error',$module->name),$baseurl);
|
||||
error(get_string('modulemissingcode','error',$module->name),$baseurl);
|
||||
}
|
||||
|
||||
$viewnames = $viewfun();
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
<?php
|
||||
|
||||
if (!defined('MOODLE_INTERNAL')) {
|
||||
die('Direct access to this script is forbidden.'); /// It must be included from a Moodle page
|
||||
}
|
||||
|
||||
$courses = get_courses('all','c.shortname','c.id,c.shortname,c.fullname');
|
||||
$courseoptions = array();
|
||||
|
||||
@@ -139,4 +143,4 @@
|
||||
print_table($table);
|
||||
}
|
||||
|
||||
?>
|
||||
?>
|
||||
|
||||
+1
-1
@@ -219,7 +219,7 @@
|
||||
|
||||
if ($perpage != 99999 && $totalcount > $perpage) {
|
||||
echo "<center><p>";
|
||||
echo "<a href=\"search.php?search=$encoededsearch&perpage=99999\">".get_string("showall", "", $totalcount)."</a>";
|
||||
echo "<a href=\"search.php?search=$encodedsearch&perpage=99999\">".get_string("showall", "", $totalcount)."</a>";
|
||||
echo "</p></center>";
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@
|
||||
}
|
||||
|
||||
if (!empty($sub)) {
|
||||
$sub = "#$sub";
|
||||
$sub = '#'.s($sub);
|
||||
} else {
|
||||
$sub = "";
|
||||
}
|
||||
|
||||
+1
-1
@@ -114,7 +114,7 @@
|
||||
by creating a file in the data directory called .htaccess, containing this line:
|
||||
<blockquote>
|
||||
|
||||
<pre>deny from all</pre>
|
||||
<pre>deny from all<br />AllowOverride None</pre>
|
||||
</blockquote>
|
||||
<p>To make sure that Moodle can save uploaded files in this directory, check that
|
||||
the web server software (eg Apache) has permission to write
|
||||
|
||||
@@ -10,13 +10,14 @@ define('AN_ERROR', '3');
|
||||
define('AN_DELIM', '|');
|
||||
define('AN_ENCAP', '"');
|
||||
|
||||
require_once('const.php');
|
||||
require_once($CFG->dirroot.'/enrol/authorize/const.php');
|
||||
require_once($CFG->dirroot.'/enrol/authorize/enrol.php');
|
||||
|
||||
/**
|
||||
* Gets settlement date and time
|
||||
*
|
||||
* @param int $time Processed time, usually now.
|
||||
* @return int Settlement date
|
||||
* @param int $time Time processed, usually now.
|
||||
* @return int Settlement date and time
|
||||
*/
|
||||
function authorize_getsettletime($time)
|
||||
{
|
||||
@@ -54,10 +55,6 @@ function authorize_expired(&$order)
|
||||
{
|
||||
static $timediff30;
|
||||
|
||||
if (empty($timediff30)) {
|
||||
$timediff30 = authorize_getsettletime(time()) - (30 * 24 * 3600);
|
||||
}
|
||||
|
||||
if ($order->status == AN_STATUS_EXPIRE) {
|
||||
return true;
|
||||
}
|
||||
@@ -65,28 +62,32 @@ function authorize_expired(&$order)
|
||||
return false;
|
||||
}
|
||||
|
||||
$exp = (authorize_getsettletime($order->timecreated) < $timediff30);
|
||||
if (empty($timediff30)) {
|
||||
$timediff30 = authorize_getsettletime(time()) - (30 * 24 * 3600);
|
||||
}
|
||||
|
||||
if ($exp) {
|
||||
$isexpired = (authorize_getsettletime($order->timecreated) < $timediff30);
|
||||
if ($isexpired) {
|
||||
$order->status = AN_STATUS_EXPIRE;
|
||||
update_record('enrol_authorize', $order);
|
||||
}
|
||||
|
||||
return $exp;
|
||||
return $isexpired;
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs an action on authorize.net
|
||||
* Performs an action on authorize.net and updates/inserts records. If record update fails,
|
||||
* sends email to admin.
|
||||
*
|
||||
* @param object &$order Which transaction data will be sent. See enrol_authorize table.
|
||||
* @param string &$message Information about error messages.
|
||||
* @param object &$extra Extra transaction data.
|
||||
* @param string &$message Information about error message if this function returns false.
|
||||
* @param object &$extra Extra data that used for refunding and credit card information.
|
||||
* @param int $action Which action will be performed. See AN_ACTION_*
|
||||
* @return bool true, transaction was successful, false otherwise.
|
||||
* @param string $cctype Used internally to configure credit types automatically.
|
||||
* @return bool true Transaction was successful, false otherwise. Use $message for reason.
|
||||
* @author Ethem Evlice <ethem a.t evlice d.o.t com>
|
||||
* @uses $CFG
|
||||
*/
|
||||
function authorize_action(&$order, &$message, &$extra, $action=AN_ACTION_NONE)
|
||||
function authorize_action(&$order, &$message, &$extra, $action=AN_ACTION_NONE, $cctype=NULL)
|
||||
{
|
||||
global $CFG;
|
||||
static $conststring;
|
||||
@@ -94,37 +95,34 @@ function authorize_action(&$order, &$message, &$extra, $action=AN_ACTION_NONE)
|
||||
$test = !empty($CFG->an_test);
|
||||
|
||||
if (!isset($conststring)) {
|
||||
$consdata = array(
|
||||
$mconfig = get_config('enrol/authorize');
|
||||
$constdata = array(
|
||||
'x_version' => '3.1',
|
||||
'x_delim_data' => 'True',
|
||||
'x_delim_char' => AN_DELIM,
|
||||
'x_encap_char' => AN_ENCAP,
|
||||
'x_relay_response' => 'FALSE',
|
||||
'x_method' => 'CC',
|
||||
'x_login' => $CFG->an_login,
|
||||
'x_login' => rc4decrypt($mconfig->an_login),
|
||||
'x_test_request' => $test ? 'TRUE' : 'FALSE'
|
||||
);
|
||||
$str = '';
|
||||
foreach($consdata as $ky => $vl) {
|
||||
foreach($constdata as $ky => $vl) {
|
||||
$str .= $ky . '=' . urlencode($vl) . '&';
|
||||
}
|
||||
$str .= (!empty($CFG->an_tran_key)) ?
|
||||
'x_tran_key=' . urlencode($CFG->an_tran_key):
|
||||
'x_password=' . urlencode($CFG->an_password);
|
||||
$str .= (!empty($mconfig->an_tran_key)) ?
|
||||
'x_tran_key=' . urlencode(rc4decrypt($mconfig->an_tran_key)):
|
||||
'x_password=' . urlencode(rc4decrypt($mconfig->an_password));
|
||||
|
||||
$conststring = $str;
|
||||
}
|
||||
|
||||
$action = intval($action);
|
||||
|
||||
if (empty($order) || empty($order->id)) {
|
||||
if (empty($order) or empty($order->id)) {
|
||||
$message = "Check order->id!";
|
||||
return false;
|
||||
}
|
||||
elseif ($action <= AN_ACTION_NONE || $action > AN_ACTION_VOID) {
|
||||
$message = "No action taken!";
|
||||
return false;
|
||||
}
|
||||
|
||||
$poststring = $conststring;
|
||||
|
||||
@@ -180,11 +178,10 @@ function authorize_action(&$order, &$message, &$extra, $action=AN_ACTION_NONE)
|
||||
return false;
|
||||
}
|
||||
if (empty($extra)) {
|
||||
$message = "need extra fields for CREDIT!";
|
||||
$message = "Need extra fields to REFUND!";
|
||||
return false;
|
||||
}
|
||||
$total = floatval($extra->sum) + floatval($extra->amount);
|
||||
unset($extra->sum); // this is not used in refunds table.
|
||||
if (($extra->amount == 0) || ($total > $order->amount)) {
|
||||
$message = "Can be credited up to original amount.";
|
||||
return false;
|
||||
@@ -198,20 +195,8 @@ function authorize_action(&$order, &$message, &$extra, $action=AN_ACTION_NONE)
|
||||
|
||||
case AN_ACTION_VOID:
|
||||
{
|
||||
if ($order->status == AN_STATUS_AUTH) {
|
||||
if (authorize_expired($order)) {
|
||||
$message = "Authorized transaction must be voided within 30 days. EXPIRED!";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
elseif ($order->status == AN_STATUS_AUTHCAPTURE or $order->status == AN_STATUS_CREDIT) {
|
||||
if (authorize_settled($order)) {
|
||||
$message = "Settled transaction cannot be voided. Check Cut-Off time!";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else {
|
||||
$message = "Order status must be authorized, auth/captured or refunded!";
|
||||
if (authorize_expired($order) || authorize_settled($order)) {
|
||||
$message = "The transaction cannot be voided due to the fact that it is expired or settled.";
|
||||
return false;
|
||||
}
|
||||
$poststring .= '&x_type=VOID&x_trans_id=' . urlencode($order->transid);
|
||||
@@ -219,7 +204,7 @@ function authorize_action(&$order, &$message, &$extra, $action=AN_ACTION_NONE)
|
||||
}
|
||||
|
||||
default: {
|
||||
$message = "Missing action? $action";
|
||||
$message = "Invalid action: $action";
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -229,6 +214,7 @@ function authorize_action(&$order, &$message, &$extra, $action=AN_ACTION_NONE)
|
||||
$referer = "Referer: $CFG->an_referer\r\n";
|
||||
}
|
||||
|
||||
$errno = 0; $errstr = '';
|
||||
$host = $test ? 'certification.authorize.net' : 'secure.authorize.net';
|
||||
$fp = fsockopen("ssl://$host", 443, $errno, $errstr, 60);
|
||||
if (!$fp) {
|
||||
@@ -236,6 +222,12 @@ function authorize_action(&$order, &$message, &$extra, $action=AN_ACTION_NONE)
|
||||
return false;
|
||||
}
|
||||
|
||||
// critical section
|
||||
@ignore_user_abort(true);
|
||||
if (intval(ini_get('max_execution_time')) > 0) {
|
||||
@set_time_limit(300);
|
||||
}
|
||||
|
||||
fwrite($fp, "POST /gateway/transact.dll HTTP/1.0\r\n" .
|
||||
"Host: $host\r\n" . $referer .
|
||||
"Content-type: application/x-www-form-urlencoded\r\n" .
|
||||
@@ -284,11 +276,15 @@ function authorize_action(&$order, &$message, &$extra, $action=AN_ACTION_NONE)
|
||||
$order->transid = $transid;
|
||||
if ($action == AN_ACTION_AUTH_ONLY) {
|
||||
$order->status = AN_STATUS_AUTH;
|
||||
// dont't update settletime
|
||||
// don't update order->settletime
|
||||
} else {
|
||||
$order->status = AN_STATUS_AUTHCAPTURE;
|
||||
$order->settletime = authorize_getsettletime(time());
|
||||
}
|
||||
if (! update_record('enrol_authorize', $order)) {
|
||||
enrolment_plugin_authorize::email_to_admin("Error while trying to update data " .
|
||||
"in table enrol_authorize. Please edit manually this record: ID=$order->id.", $order);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case AN_ACTION_CREDIT:
|
||||
@@ -298,30 +294,47 @@ function authorize_action(&$order, &$message, &$extra, $action=AN_ACTION_NONE)
|
||||
$extra->status = AN_STATUS_CREDIT;
|
||||
$extra->transid = $transid;
|
||||
$extra->settletime = authorize_getsettletime(time());
|
||||
unset($extra->sum); // this is not used in refunds table.
|
||||
if (! $extra->id = insert_record('enrol_authorize_refunds', $extra)) {
|
||||
enrolment_plugin_authorize::email_to_admin("Error while trying to insert data " .
|
||||
"into table enrol_authorize_refunds. Please add manually this record:", $extra);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case AN_ACTION_VOID:
|
||||
{
|
||||
$tableupdate = ($order->status == AN_STATUS_CREDIT) ? 'enrol_authorize_refunds' : 'enrol_authorize';
|
||||
$order->status = AN_STATUS_VOID;
|
||||
// dont't update settletime
|
||||
// don't update order->settletime
|
||||
if (! update_record($tableupdate, $order)) {
|
||||
enrolment_plugin_authorize::email_to_admin("Error while trying to update data " .
|
||||
"in table $tableupdate. Please edit manually this record: ID=$order->id.", $order);
|
||||
}
|
||||
break;
|
||||
}
|
||||
default: return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$reason = "reason" . $response[2];
|
||||
$message = get_string($reason, "enrol_authorize");
|
||||
if ($message == '[[' . $reason . ']]') {
|
||||
$reasonno = $response[2];
|
||||
$reasonstr = "reason" . $reasonno;
|
||||
$message = get_string($reasonstr, "enrol_authorize");
|
||||
if ($message == '[[' . $reasonstr . ']]') {
|
||||
$message = isset($response[3]) ? $response[3] : 'unknown error';
|
||||
}
|
||||
if (!empty($CFG->an_avs)) {
|
||||
if (! (empty($CFG->an_avs) or $response[5] == "P")) { // P = AVS not applicable
|
||||
$avs = "avs" . strtolower($response[5]);
|
||||
$stravs = get_string($avs, "enrol_authorize");
|
||||
$message .= "<br />" . get_string("avsresult", "enrol_authorize", $stravs);
|
||||
}
|
||||
if (!$test && !empty($cctype) && ($reasonno == 17 or $reasonno == 28)) {
|
||||
$ccaccepts = enrolment_plugin_authorize::get_list_of_creditcards();
|
||||
unset($ccaccepts[$cctype]);
|
||||
set_config('an_acceptccs', implode(',', array_keys($ccaccepts)));
|
||||
enrolment_plugin_authorize::email_to_admin("$message: ($cctype)" .
|
||||
"This is new config(an_acceptccs):", $ccaccepts);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
+20
-16
@@ -9,6 +9,7 @@ if (!isset($frm->enrol_mailadmins)) $frm->enrol_mailadmins = '';
|
||||
if (!isset($frm->an_login)) $frm->an_login = '';
|
||||
if (!isset($frm->an_tran_key)) $frm->an_tran_key = '';
|
||||
if (!isset($frm->an_password)) $frm->an_password = '';
|
||||
if (!isset($frm->delete_current)) $frm->delete_current = '';
|
||||
if (!isset($frm->an_referer)) $frm->an_referer = 'http://';
|
||||
if (!isset($frm->an_avs)) $frm->an_avs = '';
|
||||
if (!isset($frm->an_test)) $frm->an_test = '';
|
||||
@@ -31,7 +32,7 @@ if (!isset($frm->an_cutoff_hour)) {
|
||||
}
|
||||
|
||||
if (!isset($frm->acceptccs)) {
|
||||
$frm->acceptccs = array_keys(get_list_of_creditcards());
|
||||
$frm->acceptccs = array_keys(enrolment_plugin_authorize::get_list_of_creditcards());
|
||||
$CFG->an_acceptccs = implode(',', $frm->acceptccs);
|
||||
}
|
||||
|
||||
@@ -48,7 +49,7 @@ if (!isset($frm->acceptccs)) {
|
||||
<tr valign="top">
|
||||
<td align="right">enrol_cost:</td>
|
||||
<td><input type="text" size="5" name="enrol_cost" value="<?php p($frm->enrol_cost) ?>" /></td>
|
||||
<td><?php print_string("costdefault") ?></td>
|
||||
<td><?php print_string("costdefault") ?>. <?php print_string("costdefaultdesc", "enrol_authorize") ?></td>
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
@@ -78,32 +79,35 @@ if (!isset($frm->acceptccs)) {
|
||||
<tr valign="top"><td colspan="3"><h4><?php print_string("adminauthorizesettings", "enrol_authorize") ?></h4></td></tr>
|
||||
|
||||
<tr valign="top">
|
||||
<td align="right">an_login:</td>
|
||||
<td><input type="text" name="an_login" value="<?php p($frm->an_login) ?>" /></td>
|
||||
<td><?php print_string("anlogin", "enrol_authorize") ?></td>
|
||||
<td align="right"> </td>
|
||||
<td><?php print_string("logininfo", "enrol_authorize") ?></td>
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
<td align="right"># </td>
|
||||
<td colspan="2"><?php print_string("chooseone", "enrol_authorize") ?></td>
|
||||
<td align="right">an_login:<br /><?php echo (isset($mconfig->an_login)) ? '<font color=green>'.get_string('ok').'</font>' : ''; ?></td>
|
||||
<td><?php print_string("anlogin", "enrol_authorize") ?><br /><input type="text" name="an_login" size="26" value="" /><sup>*</sup></td>
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
<td align="right">an_tran_key:</td>
|
||||
<td><input type="text" name="an_tran_key" value="<?php p($frm->an_tran_key) ?>" /></td>
|
||||
<td><?php print_string("antrankey", "enrol_authorize") ?></td>
|
||||
<td align="right">an_tran_key:<br /><?php echo (isset($mconfig->an_tran_key)) ? '<font color=green>'.get_string('ok').'</font>' : ''; ?></td>
|
||||
<td><?php print_string("antrankey", "enrol_authorize") ?><br /><input type="text" name="an_tran_key" size="26" value="" /><sup>#1</sup></td>
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
<td align="right">an_password:</td>
|
||||
<td><input type="text" name="an_password" value="<?php p($frm->an_password) ?>" /></td>
|
||||
<td><?php print_string("anpassword", "enrol_authorize") ?></td>
|
||||
<td align="right">an_password:<br /><?php echo (isset($mconfig->an_password)) ? '<font color=green>'.get_string('ok').'</font>' : ''; ?></td>
|
||||
<td><?php print_string("anpassword", "enrol_authorize") ?><br /><input type="text" name="an_password" size="26" value="" /><sup>#2</sup></td>
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
<td align="right">delete_current:</td>
|
||||
<td><?php print_checkbox('delete_current', '1', !empty($frm->delete_current)) ?> <br />
|
||||
<?php print_string("deletecheck", "moodle", get_string('oldpassword')) ?><br /><hr size="1" width="100%" noshade /></td>
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
<td align="right">an_referer:</td>
|
||||
<td><input type="text" name="an_referer" value="<?php p($frm->an_referer) ?>" /></td>
|
||||
<td><?php print_string("anreferer", "enrol_authorize") ?></td>
|
||||
<td><input type="text" name="an_referer" size="35" value="<?php p($frm->an_referer) ?>" /><br />
|
||||
<?php print_string("anreferer", "enrol_authorize") ?></td>
|
||||
</tr>
|
||||
|
||||
<tr valign="top">
|
||||
@@ -127,7 +131,7 @@ if (!isset($frm->acceptccs)) {
|
||||
<tr valign="top">
|
||||
<td align="right">an_acceptccs:</td>
|
||||
<td><?php
|
||||
$allccs = get_list_of_creditcards(true);
|
||||
$allccs = enrolment_plugin_authorize::get_list_of_creditcards(true);
|
||||
foreach ($allccs as $key => $val) {
|
||||
print_checkbox('acceptccs[]', $key, stristr($CFG->an_acceptccs, $key) !== false, $val); echo "<br />\n";
|
||||
}
|
||||
|
||||
@@ -108,6 +108,27 @@ function enrol_authorize_upgrade($oldversion=0) {
|
||||
delete_records('config_plugins', 'name', 'an_nextmail');
|
||||
}
|
||||
|
||||
if ($oldversion < 2006021531) { // Don't show authorize.net login info at config page
|
||||
if (isset($CFG->an_login)) {
|
||||
if (!empty($CFG->an_login)) {
|
||||
set_config('an_login', rc4encrypt($CFG->an_login), 'enrol/authorize');
|
||||
}
|
||||
delete_records('config', 'name', 'an_login');
|
||||
}
|
||||
if (isset($CFG->an_tran_key)) {
|
||||
if (!empty($CFG->an_tran_key)) {
|
||||
set_config('an_tran_key', rc4encrypt($CFG->an_tran_key), 'enrol/authorize');
|
||||
}
|
||||
delete_records('config', 'name', 'an_tran_key');
|
||||
}
|
||||
if (isset($CFG->an_password)) {
|
||||
if (!empty($CFG->an_password)) {
|
||||
set_config('an_password', rc4encrypt($CFG->an_password), 'enrol/authorize');
|
||||
}
|
||||
delete_records('config', 'name', 'an_password');
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
@@ -119,6 +119,27 @@ function enrol_authorize_upgrade($oldversion=0) {
|
||||
delete_records('config_plugins', 'name', 'an_nextmail');
|
||||
}
|
||||
|
||||
if ($oldversion < 2006021531) { // Don't show authorize.net login info at config page
|
||||
if (isset($CFG->an_login)) {
|
||||
if (!empty($CFG->an_login)) {
|
||||
set_config('an_login', rc4encrypt($CFG->an_login), 'enrol/authorize');
|
||||
}
|
||||
delete_records('config', 'name', 'an_login');
|
||||
}
|
||||
if (isset($CFG->an_tran_key)) {
|
||||
if (!empty($CFG->an_tran_key)) {
|
||||
set_config('an_tran_key', rc4encrypt($CFG->an_tran_key), 'enrol/authorize');
|
||||
}
|
||||
delete_records('config', 'name', 'an_tran_key');
|
||||
}
|
||||
if (isset($CFG->an_password)) {
|
||||
if (!empty($CFG->an_password)) {
|
||||
set_config('an_password', rc4encrypt($CFG->an_password), 'enrol/authorize');
|
||||
}
|
||||
delete_records('config', 'name', 'an_password');
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<?php // $Id$
|
||||
|
||||
$this->prevent_double_paid($course);
|
||||
enrolment_plugin_authorize::prevent_double_paid($course);
|
||||
$formvars = array('password', 'ccaddress', 'cccity', 'ccstate', 'cccountry', 'cczip',
|
||||
'ccfirstname', 'cclastname', 'cc', 'ccexpiremm', 'ccexpireyyyy', 'cctype', 'cvv');
|
||||
'firstname', 'lastname', 'cc', 'ccexpiremm', 'ccexpireyyyy', 'cctype', 'cvv');
|
||||
|
||||
foreach ($formvars as $var) {
|
||||
if (!isset($form->$var)) {
|
||||
@@ -10,9 +10,9 @@ foreach ($formvars as $var) {
|
||||
}
|
||||
}
|
||||
|
||||
$curcost = $this->get_course_cost($course);
|
||||
$userfirstname = empty($form->ccfirstname) ? $USER->firstname : $form->ccfirstname;
|
||||
$userlastname = empty($form->cclastname) ? $USER->lastname : $form->cclastname;
|
||||
$curcost = enrolment_plugin_authorize::get_course_cost($course);
|
||||
$userfirstname = empty($form->firstname) ? $USER->firstname : $form->firstname;
|
||||
$userlastname = empty($form->lastname) ? $USER->lastname : $form->lastname;
|
||||
$useraddress = empty($form->ccaddress) ? $USER->address : $form->ccaddress;
|
||||
$usercity = empty($form->cccity) ? $USER->city : $form->cccity;
|
||||
$usercountry = empty($form->cccountry) ? $USER->country : $form->cccountry;
|
||||
@@ -37,8 +37,8 @@ $usercountry = empty($form->cccountry) ? $USER->country : $form->cccountry;
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="right"><?php print_string("nameoncard", "enrol_authorize") ?>: </td>
|
||||
<td align="left"><input type="text" name="ccfirstname" size="8" value="<?php p($userfirstname) ?>" />
|
||||
<input type="text" name="cclastname" size="8" value="<?php p($userlastname) ?>" />
|
||||
<td align="left"><input type="text" name="firstname" size="8" value="<?php p($userfirstname) ?>" />
|
||||
<input type="text" name="lastname" size="8" value="<?php p($userlastname) ?>" />
|
||||
<?php if (!empty($this->ccerrors['ccfirstlast'])) { formerr($this->ccerrors['ccfirstlast']); } ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -60,7 +60,7 @@ $usercountry = empty($form->cccountry) ? $USER->country : $form->cccountry;
|
||||
<tr>
|
||||
<td align="right"><?php print_string("cctype", "enrol_authorize") ?>: </td>
|
||||
<td align="left"><?php
|
||||
choose_from_menu(get_list_of_creditcards(), 'cctype', $form->cctype);
|
||||
choose_from_menu(enrolment_plugin_authorize::get_list_of_creditcards(), 'cctype', $form->cctype);
|
||||
if (!empty($this->ccerrors['cctype'])) { formerr($this->ccerrors['cctype']); }
|
||||
?>
|
||||
</td>
|
||||
|
||||
+215
-198
@@ -1,44 +1,8 @@
|
||||
<?php // $Id$
|
||||
<?php // $Id$
|
||||
|
||||
require_once($CFG->dirroot.'/enrol/enrol.class.php');
|
||||
require_once($CFG->dirroot.'/enrol/authorize/const.php');
|
||||
|
||||
/**
|
||||
* get_list_of_creditcards
|
||||
*
|
||||
* @param bool $getall
|
||||
* @return array
|
||||
*/
|
||||
function get_list_of_creditcards($getall = false)
|
||||
{
|
||||
global $CFG;
|
||||
|
||||
$alltypes = array(
|
||||
'mcd' => 'Master Card',
|
||||
'vis' => 'Visa',
|
||||
'amx' => 'American Express',
|
||||
'dsc' => 'Discover',
|
||||
'dnc' => 'Diners Club',
|
||||
'jcb' => 'JCB',
|
||||
'swi' => 'Switch',
|
||||
'dlt' => 'Delta',
|
||||
'enr' => 'EnRoute'
|
||||
);
|
||||
|
||||
if ($getall || empty($CFG->an_acceptccs)) {
|
||||
return $alltypes;
|
||||
}
|
||||
|
||||
$ret = array();
|
||||
$ccs = explode(',', $CFG->an_acceptccs);
|
||||
|
||||
foreach ($ccs as $key) {
|
||||
$ret[$key] = $alltypes[$key];
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* enrolment_plugin_authorize
|
||||
*
|
||||
@@ -100,7 +64,7 @@ class enrolment_plugin_authorize
|
||||
function print_entry($course) {
|
||||
global $CFG, $USER, $form;
|
||||
|
||||
$zerocost = $this->zero_cost($course);
|
||||
$zerocost = enrolment_plugin_authorize::zero_cost($course);
|
||||
if ($zerocost) {
|
||||
$manual = enrolment_factory::factory('manual');
|
||||
if (!empty($this->errormsg)) {
|
||||
@@ -110,9 +74,7 @@ class enrolment_plugin_authorize
|
||||
return;
|
||||
}
|
||||
|
||||
httpsrequired();
|
||||
|
||||
if (empty($_SERVER['HTTPS']) || $_SERVER['HTTPS'] == 'off') {
|
||||
if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] != 443) { // MDL-9836
|
||||
if (empty($CFG->loginhttps)) {
|
||||
error(get_string('httpsrequired', 'enrol_authorize'));
|
||||
} else {
|
||||
@@ -122,6 +84,8 @@ class enrolment_plugin_authorize
|
||||
}
|
||||
}
|
||||
|
||||
httpsrequired();
|
||||
|
||||
$strcourses = get_string('courses');
|
||||
$strloginto = get_string('loginto', '', $course->shortname);
|
||||
|
||||
@@ -132,17 +96,18 @@ class enrolment_plugin_authorize
|
||||
print_heading(get_string('choosemethod', 'enrol_authorize'), 'center');
|
||||
}
|
||||
|
||||
print_simple_box_start('center');
|
||||
if (isguest()) {
|
||||
$curcost = $this->get_course_cost($course);
|
||||
echo '<div align="center"><p>'.get_string('paymentrequired').'</p>';
|
||||
$curcost = enrolment_plugin_authorize::get_course_cost($course);
|
||||
echo '<div align="center">';
|
||||
echo '<p>'.get_string('paymentrequired').'</p>';
|
||||
echo '<p><b>'.get_string('cost').": $curcost[currency] $curcost[cost]".'</b></p>';
|
||||
echo '<p><a href="'.$CFG->httpswwwroot.'/login/">'.get_string('loginsite').'</a></p>';
|
||||
echo '</div>';
|
||||
} else {
|
||||
print_simple_box_start('center');
|
||||
include($CFG->dirroot.'/enrol/authorize/enrol.html');
|
||||
print_simple_box_end();
|
||||
}
|
||||
print_simple_box_end();
|
||||
|
||||
if ($course->password) {
|
||||
$password = '';
|
||||
@@ -162,7 +127,8 @@ class enrolment_plugin_authorize
|
||||
* @access public
|
||||
*/
|
||||
function check_entry($form, $course) {
|
||||
if ($this->zero_cost($course) or (!empty($course->password) and !empty($form->password))) {
|
||||
if (enrolment_plugin_authorize::zero_cost($course) or
|
||||
(!empty($course->password) and !empty($form->password))) {
|
||||
$manual = enrolment_factory::factory('manual');
|
||||
$manual->check_entry($form, $course);
|
||||
if (!empty($manual->errormsg)) {
|
||||
@@ -187,17 +153,17 @@ class enrolment_plugin_authorize
|
||||
global $CFG, $USER, $SESSION;
|
||||
require_once('authorizenetlib.php');
|
||||
|
||||
$this->prevent_double_paid($course);
|
||||
enrolment_plugin_authorize::prevent_double_paid($course);
|
||||
|
||||
$useripno = getremoteaddr();
|
||||
$curcost = $this->get_course_cost($course);
|
||||
$curcost = enrolment_plugin_authorize::get_course_cost($course);
|
||||
$exp_date = sprintf("%02d", $form->ccexpiremm) . $form->ccexpireyyyy;
|
||||
|
||||
// NEW ORDER
|
||||
$timenow = time();
|
||||
$order = new stdClass();
|
||||
$order->cclastfour = substr($form->cc, -4);
|
||||
$order->ccname = $form->ccfirstname . " " . $form->cclastname;
|
||||
$order->ccname = $form->firstname . " " . $form->lastname;
|
||||
$order->courseid = $course->id;
|
||||
$order->userid = $USER->id;
|
||||
$order->status = AN_STATUS_NONE; // it will be changed...
|
||||
@@ -208,7 +174,7 @@ class enrolment_plugin_authorize
|
||||
$order->currency = $curcost['currency'];
|
||||
$order->id = insert_record("enrol_authorize", $order);
|
||||
if (!$order->id) {
|
||||
$this->email_to_admin("Error while trying to insert new data", $order);
|
||||
enrolment_plugin_authorize::email_to_admin("Error while trying to insert new data", $order);
|
||||
$this->ccerrors['header'] = "Insert record error. Admin has been notified!";
|
||||
return;
|
||||
}
|
||||
@@ -219,8 +185,8 @@ class enrolment_plugin_authorize
|
||||
$extra->x_exp_date = $exp_date;
|
||||
$extra->x_currency_code = $curcost['currency'];
|
||||
$extra->x_amount = $curcost['cost'];
|
||||
$extra->x_first_name = $form->ccfirstname;
|
||||
$extra->x_last_name = $form->cclastname;
|
||||
$extra->x_first_name = $form->firstname;
|
||||
$extra->x_last_name = $form->lastname;
|
||||
$extra->x_country = $form->cccountry;
|
||||
$extra->x_address = $form->ccaddress;
|
||||
$extra->x_state = $form->ccstate;
|
||||
@@ -240,9 +206,9 @@ class enrolment_plugin_authorize
|
||||
$message = '';
|
||||
$an_review = !empty($CFG->an_review);
|
||||
$action = $an_review ? AN_ACTION_AUTH_ONLY : AN_ACTION_AUTH_CAPTURE;
|
||||
$success = authorize_action($order, $message, $extra, $action);
|
||||
$success = authorize_action($order, $message, $extra, $action, $form->cctype);
|
||||
if (!$success) {
|
||||
$this->email_to_admin($message, $order);
|
||||
enrolment_plugin_authorize::email_to_admin($message, $order);
|
||||
$this->ccerrors['header'] = $message;
|
||||
return;
|
||||
}
|
||||
@@ -261,43 +227,31 @@ class enrolment_plugin_authorize
|
||||
return;
|
||||
}
|
||||
|
||||
if ($an_review) { // review enabled, inform admin and redirect to main page.
|
||||
if (update_record("enrol_authorize", $order)) {
|
||||
$a = new stdClass;
|
||||
$a->url = "$CFG->wwwroot/enrol/authorize/index.php?order=$order->id";
|
||||
$a->orderid = $order->id;
|
||||
$a->transid = $order->transid;
|
||||
$a->amount = "$order->currency $order->amount";
|
||||
$a->expireon = userdate(authorize_getsettletime($timenow + (30 * 3600 * 24)));
|
||||
$a->captureon = userdate(authorize_getsettletime($timenow + (intval($CFG->an_capture_day) * 3600 * 24)));
|
||||
$a->course = $course->fullname;
|
||||
$a->user = fullname($USER);
|
||||
$a->acstatus = ($CFG->an_capture_day > 0) ? get_string('yes') : get_string('no');
|
||||
$emailmessage = get_string('adminneworder', 'enrol_authorize', $a);
|
||||
$a = new stdClass;
|
||||
$a->course = $course->shortname;
|
||||
$a->orderid = $order->id;
|
||||
$emailsubject = get_string('adminnewordersubject', 'enrol_authorize', $a);
|
||||
$admins = get_admins();
|
||||
foreach ($admins as $admin) {
|
||||
email_to_user($admin, $USER, $emailsubject, $emailmessage);
|
||||
}
|
||||
}
|
||||
else {
|
||||
$this->email_to_admin("Error while trying to update data. Please edit manually this record: " .
|
||||
"ID=$order->id in enrol_authorize table.", $order);
|
||||
if ($an_review) { // review enabled, inform admin and redirect user to main page.
|
||||
$a = new stdClass;
|
||||
$a->url = "$CFG->wwwroot/enrol/authorize/index.php?order=$order->id";
|
||||
$a->orderid = $order->id;
|
||||
$a->transid = $order->transid;
|
||||
$a->amount = "$order->currency $order->amount";
|
||||
$a->expireon = userdate(authorize_getsettletime($timenow + (30 * 3600 * 24)));
|
||||
$a->captureon = userdate(authorize_getsettletime($timenow + (intval($CFG->an_capture_day) * 3600 * 24)));
|
||||
$a->course = $course->fullname;
|
||||
$a->user = fullname($USER);
|
||||
$a->acstatus = ($CFG->an_capture_day > 0) ? get_string('yes') : get_string('no');
|
||||
$emailmessage = get_string('adminneworder', 'enrol_authorize', $a);
|
||||
$a = new stdClass;
|
||||
$a->course = $course->shortname;
|
||||
$a->orderid = $order->id;
|
||||
$emailsubject = get_string('adminnewordersubject', 'enrol_authorize', $a);
|
||||
$admins = get_admins();
|
||||
foreach ($admins as $admin) {
|
||||
email_to_user($admin, $USER, $emailsubject, $emailmessage);
|
||||
}
|
||||
redirect($CFG->wwwroot, get_string("reviewnotify", "enrol_authorize"), '30');
|
||||
return;
|
||||
}
|
||||
|
||||
// credit card captured, ENROL student...
|
||||
if (!update_record("enrol_authorize", $order)) {
|
||||
$this->email_to_admin("Error while trying to update data. Please edit manually this record: " .
|
||||
"ID=$order->id in enrol_authorize table.", $order);
|
||||
// no error occured??? enrol student??? return??? Database busy???
|
||||
}
|
||||
|
||||
// Credit card captured, ENROL student now...
|
||||
if ($course->enrolperiod) {
|
||||
$timestart = $timenow;
|
||||
$timeend = $timestart + $course->enrolperiod;
|
||||
@@ -338,7 +292,8 @@ class enrolment_plugin_authorize
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$this->email_to_admin("Error while trying to enrol ".fullname($USER)." in '$course->fullname'", $order);
|
||||
enrolment_plugin_authorize::email_to_admin("Error while trying to enrol " .
|
||||
fullname($USER) . " in '$course->fullname'", $order);
|
||||
}
|
||||
|
||||
if ($SESSION->wantsurl) {
|
||||
@@ -379,7 +334,7 @@ class enrolment_plugin_authorize
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($form->ccfirstname) || empty($form->cclastname)) {
|
||||
if (empty($form->firstname) || empty($form->lastname)) {
|
||||
$this->ccerrors['ccfirstlast'] = get_string('missingfullname');
|
||||
}
|
||||
|
||||
@@ -387,7 +342,8 @@ class enrolment_plugin_authorize
|
||||
$this->ccerrors['cvv'] = get_string('missingcvv', 'enrol_authorize');
|
||||
}
|
||||
|
||||
if (empty($form->cctype) || !in_array($form->cctype, array_keys(get_list_of_creditcards()))) {
|
||||
if (empty($form->cctype) or
|
||||
!in_array($form->cctype, array_keys(enrolment_plugin_authorize::get_list_of_creditcards()))) {
|
||||
$this->ccerrors['cctype'] = get_string('missingcctype', 'enrol_authorize');
|
||||
}
|
||||
|
||||
@@ -414,45 +370,6 @@ class enrolment_plugin_authorize
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* zero_cost
|
||||
*
|
||||
* @param unknown_type $course
|
||||
* @return number
|
||||
* @access private
|
||||
*/
|
||||
function zero_cost($course) {
|
||||
$curcost = $this->get_course_cost($course);
|
||||
return (abs($curcost['cost']) < 0.01);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* get_course_cost
|
||||
*
|
||||
* @param object $course
|
||||
* @return array
|
||||
* @access private
|
||||
*/
|
||||
function get_course_cost($course)
|
||||
{
|
||||
global $CFG;
|
||||
|
||||
$cost = (float)0;
|
||||
$currency = (!empty($course->currency))
|
||||
? $course->currency :( empty($CFG->enrol_currency)
|
||||
? 'USD' : $CFG->enrol_currency );
|
||||
|
||||
if (!empty($course->cost)) {
|
||||
$cost = (float)(((float)$course->cost) < 0) ? $CFG->enrol_cost : $course->cost;
|
||||
}
|
||||
|
||||
$cost = format_float($cost, 2);
|
||||
$ret = array('cost' => $cost, 'currency' => $currency);
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Gets access icons.
|
||||
@@ -465,7 +382,7 @@ class enrolment_plugin_authorize
|
||||
|
||||
$manual = enrolment_factory::factory('manual');
|
||||
$str = $manual->get_access_icons($course);
|
||||
$curcost = $this->get_course_cost($course);
|
||||
$curcost = enrolment_plugin_authorize::get_course_cost($course);
|
||||
|
||||
if (abs($curcost['cost']) > 0.00) {
|
||||
$strrequirespayment = get_string("requirespayment");
|
||||
@@ -497,21 +414,31 @@ class enrolment_plugin_authorize
|
||||
function config_form($frm)
|
||||
{
|
||||
global $CFG;
|
||||
$mconfig = get_config('enrol/authorize');
|
||||
|
||||
if (!$this->check_openssl_loaded()) {
|
||||
if (! enrolment_plugin_authorize::check_openssl_loaded()) {
|
||||
notify('PHP must be compiled with SSL support (--with-openssl)');
|
||||
}
|
||||
|
||||
if (empty($CFG->loginhttps) and substr($CFG->wwwroot, 0, 5) !== 'https') {
|
||||
notify('loginhttps must be ON');
|
||||
$a = new stdClass;
|
||||
$a->url = "$CFG->wwwroot/$CFG->admin/config.php#configsectionsecurity";
|
||||
notice(get_string('adminconfighttps', 'enrol_authorize', $a));
|
||||
}
|
||||
elseif (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] != 443) { // MDL-9836
|
||||
$wwwsroot = qualified_me();
|
||||
$wwwsroot = str_replace('http:', 'https:', $wwwsroot);
|
||||
$a = new stdClass;
|
||||
$a->url = $wwwsroot;
|
||||
notice(get_string('adminconfighttpsgo', 'enrol_authorize', $a));
|
||||
}
|
||||
|
||||
if (!empty($frm->an_review)) {
|
||||
$captureday = intval($frm->an_capture_day);
|
||||
$emailexpired = intval($frm->an_emailexpired);
|
||||
if ($captureday > 0 || $emailexpired > 0) {
|
||||
$mconfig = get_config('enrol/authorize');
|
||||
if ((time() - intval($mconfig->an_lastcron) > 3600 * 24)) {
|
||||
$lastcron = get_field_sql('SELECT max(lastcron) FROM ' . $CFG->prefix . 'modules');
|
||||
if ((time() - intval($lastcron) > 3600 * 24)) {
|
||||
notify(get_string('admincronsetup', 'enrol_authorize'));
|
||||
}
|
||||
}
|
||||
@@ -525,10 +452,10 @@ class enrolment_plugin_authorize
|
||||
}
|
||||
|
||||
if (data_submitted()) {
|
||||
if (empty($frm->an_login)) {
|
||||
if (empty($mconfig->an_login)) {
|
||||
notify("an_login required");
|
||||
}
|
||||
if (empty($frm->an_tran_key) && empty($frm->an_password)) {
|
||||
if (empty($mconfig->an_tran_key) && empty($mconfig->an_password)) {
|
||||
notify("an_tran_key or an_password required");
|
||||
}
|
||||
}
|
||||
@@ -547,9 +474,12 @@ class enrolment_plugin_authorize
|
||||
function process_config($config)
|
||||
{
|
||||
global $CFG;
|
||||
$mconfig = get_config('enrol/authorize');
|
||||
|
||||
// site settings
|
||||
set_config('enrol_cost', optional_param('enrol_cost', 5, PARAM_INT));
|
||||
if (($cost = optional_param('enrol_cost', 5, PARAM_INT)) > 0) {
|
||||
set_config('enrol_cost', $cost);
|
||||
}
|
||||
set_config('enrol_currency', optional_param('enrol_currency', 'USD', PARAM_ALPHA));
|
||||
set_config('enrol_mailstudents', optional_param('enrol_mailstudents', 0, PARAM_BOOL));
|
||||
set_config('enrol_mailteachers', optional_param('enrol_mailteachers', 0, PARAM_BOOL));
|
||||
@@ -561,7 +491,9 @@ class enrolment_plugin_authorize
|
||||
set_config('an_teachermanagepay', optional_param('an_teachermanagepay', 0, PARAM_BOOL));
|
||||
set_config('an_referer', optional_param('an_referer', 'http://', PARAM_URL));
|
||||
|
||||
$acceptccs = optional_param('acceptccs', array_keys(get_list_of_creditcards()), PARAM_ALPHA);
|
||||
$acceptccs = optional_param('acceptccs',
|
||||
array_keys(enrolment_plugin_authorize::get_list_of_creditcards()),
|
||||
PARAM_ALPHA);
|
||||
set_config('an_acceptccs', implode(',', $acceptccs));
|
||||
|
||||
$cutoff_hour = optional_param('an_cutoff_hour', 0, PARAM_INT);
|
||||
@@ -577,12 +509,12 @@ class enrolment_plugin_authorize
|
||||
|
||||
$captureday = ($captureday > 29) ? 29 : (($captureday < 0) ? 0 : $captureday);
|
||||
$emailexpired = ($emailexpired > 5) ? 5 : (($emailexpired < 0) ? 0 : $emailexpired);
|
||||
$mconfig = get_config('enrol/authorize');
|
||||
|
||||
if ((!empty($reviewval)) &&
|
||||
($captureday > 0 || $emailexpired > 0) &&
|
||||
(time() - intval($mconfig->an_lastcron) > 3600 * 24)) {
|
||||
return false;
|
||||
if (!empty($reviewval) && ($captureday > 0 || $emailexpired > 0)) {
|
||||
$lastcron = get_field_sql('SELECT max(lastcron) FROM ' . $CFG->prefix . 'modules');
|
||||
if (time() - intval($lastcron) > 3600 * 24) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
set_config('an_review', $reviewval);
|
||||
@@ -591,32 +523,89 @@ class enrolment_plugin_authorize
|
||||
set_config('an_emailexpiredteacher', $emailexpiredteacher);
|
||||
set_config('an_sorttype', $sorttype);
|
||||
|
||||
// required fields
|
||||
$loginval = optional_param('an_login', '');
|
||||
$tranval = optional_param('an_tran_key', '');
|
||||
$passwordval = optional_param('an_password', '');
|
||||
|
||||
if ((empty($CFG->loginhttps) and substr($CFG->wwwroot, 0, 5) !== 'https') ||
|
||||
!$this->check_openssl_loaded() ||
|
||||
empty($loginval) ||
|
||||
(empty($tranval) and empty($passwordval))) {
|
||||
// https and openssl library is required
|
||||
if ((substr($CFG->wwwroot, 0, 5) !== 'https' and empty($CFG->loginhttps)) or
|
||||
!enrolment_plugin_authorize::check_openssl_loaded()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
set_config('an_login', $loginval);
|
||||
set_config('an_password', $passwordval);
|
||||
set_config('an_tran_key', $tranval);
|
||||
// REQUIRED fields;
|
||||
// an_login
|
||||
$loginval = optional_param('an_login', '');
|
||||
if (empty($loginval) && empty($mconfig->an_login)) {
|
||||
return false;
|
||||
}
|
||||
$loginval = !empty($loginval) ? rc4encrypt($loginval) : strval($mconfig->an_login);
|
||||
set_config('an_login', $loginval, 'enrol/authorize');
|
||||
|
||||
// an_tran_key, an_password
|
||||
$tranval = optional_param('an_tran_key', '');
|
||||
$tranval = !empty($tranval) ? rc4encrypt($tranval) : (isset($mconfig->an_tran_key)?$mconfig->an_tran_key:'');
|
||||
$passwordval = optional_param('an_password', '');
|
||||
$passwordval = !empty($passwordval) ? rc4encrypt($passwordval) :(isset($mconfig->an_password)?$mconfig->an_password:'');
|
||||
$deletecurrent = optional_param('delete_current', '0', PARAM_BOOL);
|
||||
if (!empty($deletecurrent) and !empty($tranval)) {
|
||||
delete_records('config_plugins', 'name', 'an_password', 'plugin', 'enrol/authorize');
|
||||
$passwordval = '';
|
||||
}
|
||||
elseif (!empty($passwordval)) {
|
||||
set_config('an_password', $passwordval, 'enrol/authorize');
|
||||
}
|
||||
if (empty($tranval) and empty($passwordval)) {
|
||||
return false;
|
||||
}
|
||||
if (!empty($tranval)) {
|
||||
set_config('an_tran_key', $tranval, 'enrol/authorize');
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* zero_cost (static method)
|
||||
*
|
||||
* @param unknown_type $course
|
||||
* @return number
|
||||
* @static
|
||||
*/
|
||||
function zero_cost($course) {
|
||||
$curcost = enrolment_plugin_authorize::get_course_cost($course);
|
||||
return (abs($curcost['cost']) < 0.01);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* email_to_admin
|
||||
* get_course_cost (static method)
|
||||
*
|
||||
* @param object $course
|
||||
* @return array
|
||||
* @static
|
||||
*/
|
||||
function get_course_cost($course)
|
||||
{
|
||||
global $CFG;
|
||||
|
||||
$cost = (float)0;
|
||||
$currency = (!empty($course->currency))
|
||||
? $course->currency :( empty($CFG->enrol_currency)
|
||||
? 'USD' : $CFG->enrol_currency );
|
||||
|
||||
if (!empty($course->cost)) {
|
||||
$cost = (float)(((float)$course->cost) < 0) ? $CFG->enrol_cost : $course->cost;
|
||||
}
|
||||
|
||||
$cost = format_float($cost, 2);
|
||||
$ret = array('cost' => $cost, 'currency' => $currency);
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* email_to_admin (static method)
|
||||
*
|
||||
* @param string $subject
|
||||
* @param mixed $data
|
||||
* @access private
|
||||
* @static
|
||||
*/
|
||||
function email_to_admin($subject, $data)
|
||||
{
|
||||
@@ -625,19 +614,16 @@ class enrolment_plugin_authorize
|
||||
$admin = get_admin();
|
||||
$data = (array)$data;
|
||||
|
||||
$message = "$SITE->fullname: Transaction failed.\n\n$subject\n\n";
|
||||
foreach ($data as $key => $value) {
|
||||
$message .= "$key => $value\n";
|
||||
}
|
||||
email_to_user($admin, $admin, "Authorize.net ERROR: ".$subject, $message);
|
||||
$message = "$SITE->fullname: Transaction failed.\n\n$subject\n\n";
|
||||
$message .= print_r($data, true);
|
||||
email_to_user($admin, $admin, "$SITE->fullname: Authorize.net ERROR", $message);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* prevent_double_paid
|
||||
* prevent_double_paid (static method)
|
||||
*
|
||||
* @param object $course
|
||||
* @access private
|
||||
* @static
|
||||
*/
|
||||
function prevent_double_paid($course)
|
||||
{
|
||||
@@ -654,22 +640,56 @@ class enrolment_plugin_authorize
|
||||
}
|
||||
if (isset($SESSION->ccpaid)) {
|
||||
unset($SESSION->ccpaid);
|
||||
redirect($CFG->wwwroot . '/login/logout.php');
|
||||
redirect($CFG->wwwroot . '/login/logout.php?sesskey='.sesskey());
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* check_openssl_loaded
|
||||
* check_openssl_loaded (static method)
|
||||
*
|
||||
* @return bool
|
||||
* @access private
|
||||
* @static
|
||||
*/
|
||||
function check_openssl_loaded() {
|
||||
return extension_loaded('openssl');
|
||||
}
|
||||
|
||||
/**
|
||||
* get_list_of_creditcards (static method)
|
||||
*
|
||||
* @param bool $getall
|
||||
* @return array
|
||||
* @static
|
||||
*/
|
||||
function get_list_of_creditcards($getall = false)
|
||||
{
|
||||
global $CFG;
|
||||
|
||||
$alltypes = array(
|
||||
'mcd' => 'Master Card',
|
||||
'vis' => 'Visa',
|
||||
'amx' => 'American Express',
|
||||
'dsc' => 'Discover',
|
||||
'dnc' => 'Diners Club',
|
||||
'jcb' => 'JCB',
|
||||
'swi' => 'Switch',
|
||||
'dlt' => 'Delta',
|
||||
'enr' => 'EnRoute'
|
||||
);
|
||||
|
||||
if ($getall or empty($CFG->an_acceptccs)) {
|
||||
return $alltypes;
|
||||
}
|
||||
|
||||
$ret = array();
|
||||
$ccs = explode(',', $CFG->an_acceptccs);
|
||||
foreach ($ccs as $key) {
|
||||
$ret[$key] = $alltypes[$key];
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This function is run by admin/cron.php every time if admin has enabled this plugin.
|
||||
@@ -692,23 +712,22 @@ class enrolment_plugin_authorize
|
||||
$timediff30 = $settlementtime - (30 * $oneday);
|
||||
|
||||
$mconfig = get_config('enrol/authorize');
|
||||
set_config('an_lastcron', $timenow, 'enrol/authorize');
|
||||
|
||||
mtrace("Processing authorize cron...");
|
||||
|
||||
if (intval($mconfig->an_dailysettlement) < $settlementtime) {
|
||||
set_config('an_dailysettlement', $settlementtime, 'enrol/authorize');
|
||||
mtrace(" daily cron: some cleanups and sending email to admins the count of pending orders expiring", "...");
|
||||
mtrace(" daily cron; some cleanups and sending email to admins the count of pending orders expiring", ": ");
|
||||
$this->cron_daily();
|
||||
mtrace("done", "\n");
|
||||
mtrace("done");
|
||||
}
|
||||
|
||||
mtrace(" scheduled capture", ": ");
|
||||
if (empty($CFG->an_review) or
|
||||
(!empty($CFG->an_test)) or
|
||||
(intval($CFG->an_capture_day) < 1) or
|
||||
(!$this->check_openssl_loaded())) {
|
||||
mtrace("disabled", "\n");
|
||||
(!enrolment_plugin_authorize::check_openssl_loaded())) {
|
||||
mtrace("disabled");
|
||||
return; // order review disabled or test mode or manual capture or openssl wasn't loaded.
|
||||
}
|
||||
|
||||
@@ -716,11 +735,11 @@ class enrolment_plugin_authorize
|
||||
$sql = "SELECT E.*, C.fullname, C.enrolperiod " .
|
||||
"FROM {$CFG->prefix}enrol_authorize E " .
|
||||
"INNER JOIN {$CFG->prefix}course C ON C.id = E.courseid " .
|
||||
"WHERE (status = '" .AN_STATUS_AUTH. "') " .
|
||||
"WHERE (E.status = '" .AN_STATUS_AUTH. "') " .
|
||||
" AND (E.timecreated < '$timediffcnf') AND (E.timecreated > '$timediff30')";
|
||||
|
||||
if (!$orders = get_records_sql($sql)) {
|
||||
mtrace("no pending orders", "\n");
|
||||
mtrace("no pending orders");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -730,11 +749,12 @@ class enrolment_plugin_authorize
|
||||
|
||||
$ordercount = count((array)$orders);
|
||||
if (($ordercount * $eachconn) + intval($mconfig->an_lastcron) > $timenow) {
|
||||
mtrace("blocked", "\n");
|
||||
mtrace("blocked");
|
||||
return;
|
||||
}
|
||||
set_config('an_lastcron', $timenow, 'enrol/authorize');
|
||||
|
||||
mtrace($ordercount ." orders are processing", "\n");
|
||||
mtrace(" $ordercount orders are being processed now", ": ");
|
||||
|
||||
$faults = '';
|
||||
$sendem = array();
|
||||
@@ -747,10 +767,6 @@ class enrolment_plugin_authorize
|
||||
$extra = NULL;
|
||||
$success = authorize_action($order, $message, $extra, AN_ACTION_PRIOR_AUTH_CAPTURE);
|
||||
if ($success) {
|
||||
if (!update_record("enrol_authorize", $order)) {
|
||||
$this->email_to_admin("Error while trying to update data. Please edit manually this record: " .
|
||||
"ID=$order->id in enrol_authorize table.", $order);
|
||||
}
|
||||
$timestart = $timeend = 0;
|
||||
if ($order->enrolperiod) {
|
||||
$timestart = $timenow;
|
||||
@@ -775,6 +791,8 @@ class enrolment_plugin_authorize
|
||||
}
|
||||
}
|
||||
|
||||
mtrace("processed");
|
||||
|
||||
$timenow = time();
|
||||
$elapsed = $timenow - $elapsed;
|
||||
$eachconn = ceil($elapsed / $ordercount);
|
||||
@@ -796,32 +814,30 @@ class enrolment_plugin_authorize
|
||||
}
|
||||
|
||||
mtrace(" sending welcome messages to students", ": ");
|
||||
$select = "SELECT E.id, E.courseid, E.userid, C.fullname " .
|
||||
"FROM {$CFG->prefix}enrol_authorize E " .
|
||||
"INNER JOIN {$CFG->prefix}course C ON C.id = E.courseid " .
|
||||
"WHERE E.id IN(" . implode(',', $sendem) . ") " .
|
||||
"ORDER BY E.userid";
|
||||
$select = "SELECT e.id, e.courseid, e.userid, c.fullname
|
||||
FROM {$CFG->prefix}enrol_authorize e
|
||||
INNER JOIN {$CFG->prefix}course c ON c.id = e.courseid
|
||||
WHERE e.id IN(" . implode(',', $sendem) . ")
|
||||
ORDER BY e.userid";
|
||||
|
||||
$emailinfo = get_records_sql($select);
|
||||
$emailcount = count($emailinfo);
|
||||
for($i = 0; $i < $emailcount; ) {
|
||||
$ei = reset($emailinfo);
|
||||
while ($ei !== false) {
|
||||
$usercourses = array();
|
||||
$lastuserid = $emailinfo[$i]->userid;
|
||||
for ($j=$i; $j < $emailcount and $emailinfo[$j]->userid == $lastuserid; $j++) {
|
||||
$usercourses[] = $emailinfo[$j]->fullname;
|
||||
$lastuserid = $ei->userid;
|
||||
for ($current = $ei; $current !== false && $current->userid == $lastuserid; $current = next($emailinfo)) {
|
||||
$usercourses[] = $current->fullname;
|
||||
}
|
||||
$ei = $current;
|
||||
$a = new stdClass;
|
||||
$a->courses = implode("\n", $usercourses);
|
||||
$a->profileurl = "$CFG->wwwroot/user/view.php?id=$lastuserid";
|
||||
$a->paymenturl = "$CFG->wwwroot/enrol/authorize/index.php?user=$lastuserid";
|
||||
$emailmessage = get_string('welcometocoursesemail', 'enrol_authorize', $a);
|
||||
$user = get_record('user', 'id', $lastuserid);
|
||||
email_to_user($user,
|
||||
$adminuser,
|
||||
get_string("enrolmentnew", '', $SITE->shortname),
|
||||
$emailmessage);
|
||||
$i = $j;
|
||||
@email_to_user($user, $adminuser, get_string("enrolmentnew", '', $SITE->shortname), $emailmessage);
|
||||
}
|
||||
mtrace("sent", "\n");
|
||||
mtrace("sent");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -887,11 +903,12 @@ class enrolment_plugin_authorize
|
||||
}
|
||||
|
||||
$sorttype = empty($CFG->an_sorttype) ? 'ttl' : $CFG->an_sorttype;
|
||||
$where = "(E.status='". AN_STATUS_AUTH ."') AND (E.timecreated<'$timediffem') AND (E.timecreated>'$timediff30')";
|
||||
$sql = "SELECT E.courseid, E.currency, C.fullname, C.shortname, " .
|
||||
"COUNT(E.courseid) AS cnt, SUM(E.amount) as ttl " .
|
||||
"FROM {$CFG->prefix}enrol_authorize E " .
|
||||
"INNER JOIN {$CFG->prefix}course C ON C.id = E.courseid " .
|
||||
"WHERE $select GROUP BY E.courseid ORDER BY $sorttype DESC";
|
||||
"WHERE $where GROUP BY E.courseid ORDER BY $sorttype DESC";
|
||||
|
||||
$courseinfos = get_records_sql($sql);
|
||||
foreach($courseinfos as $courseinfo) {
|
||||
|
||||
@@ -9,6 +9,11 @@
|
||||
$courseid = optional_param('course', SITEID, PARAM_INT);
|
||||
$userid = optional_param('user', 0, PARAM_INT);
|
||||
|
||||
/// Get course
|
||||
if (!$course = get_record('course', 'id', $courseid)) {
|
||||
error('Could not find that course');
|
||||
}
|
||||
|
||||
/// Only site users can access to this page
|
||||
require_login(); // Don't use $courseid! User may want to see old orders.
|
||||
|
||||
@@ -17,7 +22,7 @@
|
||||
}
|
||||
|
||||
/// Load strings. All strings should be defined here. locallib.php uses these strings.
|
||||
$strs = get_strings(array('status','action','time','course','confirm','yes','no','all','none','error'));
|
||||
$strs = get_strings(array('status','action','time','course','confirm','no','all','none','error'));
|
||||
$authstrs = get_strings(array('orderid','nameoncard','void','capture','refund','delete',
|
||||
'authcaptured','authorizedpendingcapture','capturedpendingsettle','capturedsettled',
|
||||
'settled','refunded','cancelled','expired','tested','new',
|
||||
@@ -25,11 +30,7 @@
|
||||
|
||||
/// Print header
|
||||
$strpaymentmanagement = get_string('paymentmanagement', 'enrol_authorize');
|
||||
if (!$course = get_record('course', 'id', $courseid)) {
|
||||
error('Could not find that course');
|
||||
}
|
||||
print_header_simple("$strpaymentmanagement", "", "<a href=\"index.php\">$strpaymentmanagement</a>");
|
||||
|
||||
print_header_simple($strpaymentmanagement, "", "<a href=\"index.php\">$strpaymentmanagement</a>");
|
||||
|
||||
/// If orderid is empty, user wants to see all orders
|
||||
if (empty($orderid)) {
|
||||
|
||||
@@ -1,54 +0,0 @@
|
||||
<?PHP // $Id$
|
||||
|
||||
/**
|
||||
* backup_authorize_info
|
||||
*
|
||||
* @param resource $bf
|
||||
* @param object $prefs
|
||||
* @return bool
|
||||
*/
|
||||
function backup_authorize_info($bf, $prefs)
|
||||
{
|
||||
global $CFG;
|
||||
|
||||
$status = true;
|
||||
|
||||
if ($orders = get_records("enrol_authorize", "courseid", $prefs->backup_course))
|
||||
{
|
||||
fwrite($bf, start_tag("AUTHORIZEORDERS", 2 ,true));
|
||||
foreach ($orders as $order) {
|
||||
fwrite($bf, start_tag("ORDER", 3, true));
|
||||
fwrite($bf, full_tag("ID", 4, false, $order->id));
|
||||
fwrite($bf, full_tag("CCLASTFOUR", 4, false, $order->cclastfour));
|
||||
fwrite($bf, full_tag("CCNAME", 4, false, $order->ccname));
|
||||
fwrite($bf, full_tag("COURSEID", 4, false, $order->courseid));
|
||||
fwrite($bf, full_tag("USERID", 4, false, $order->userid));
|
||||
fwrite($bf, full_tag("TRANSID", 4, false, $order->transid));
|
||||
fwrite($bf, full_tag("STATUS", 4, false, $order->status));
|
||||
fwrite($bf, full_tag("TIMECREATED", 4, false, $order->timecreated));
|
||||
fwrite($bf, full_tag("SETTLETIME", 4, false, $order->settletime));
|
||||
fwrite($bf, full_tag("AMOUNT", 4, false, $order->amount));
|
||||
fwrite($bf, full_tag("CURRENCY", 4, false, $order->currency));
|
||||
if ($refunds = get_records("enrol_authorize_refunds", "orderid", $order->id)) {
|
||||
fwrite($bf, start_tag("REFUNDS",4, true));
|
||||
foreach ($refunds as $refund) {
|
||||
fwrite($bf, start_tag("REFUND", 5, true));
|
||||
fwrite($bf, full_tag("ID", 6, false, $refund->id));
|
||||
fwrite($bf, full_tag("ORDERID", 6, false, $refund->orderid));
|
||||
fwrite($bf, full_tag("STATUS", 6, false, $refund->status));
|
||||
fwrite($bf, full_tag("AMOUNT", 6, false, $refund->amount));
|
||||
fwrite($bf, full_tag("TRANSID", 6, false, $refund->transid));
|
||||
fwrite($bf, full_tag("SETTLETIME", 6, false, $refund->settletime));
|
||||
fwrite($bf, end_tag("REFUND", 5, true));
|
||||
}
|
||||
$status = fwrite($bf, end_tag("REFUNDS", 4, true));
|
||||
}
|
||||
fwrite ($bf, end_tag("ORDER", 3, true));
|
||||
}
|
||||
$status = fwrite($bf, end_tag("AUTHORIZEORDERS", 2, true));
|
||||
}
|
||||
return $status;
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
@@ -18,7 +18,7 @@ define('ORDER_VOID', 'void');
|
||||
*/
|
||||
function authorize_print_orders()
|
||||
{
|
||||
global $CFG, $USER;
|
||||
global $CFG, $USER, $SITE;
|
||||
global $strs, $authstrs;
|
||||
global $courseid, $userid;
|
||||
require_once($CFG->libdir.'/tablelib.php');
|
||||
@@ -40,21 +40,19 @@ function authorize_print_orders()
|
||||
AN_STATUS_TEST => $authstrs->tested
|
||||
);
|
||||
|
||||
if ($courses = get_courses('all', 'c.sortorder ASC', 'c.id,c.fullname,c.enrol')) {
|
||||
$popupcrs = array();
|
||||
foreach ($courses as $crs) {
|
||||
if ($crs->enrol == 'authorize' || (empty($crs->enrol) && $CFG->enrol == 'authorize')) {
|
||||
$popupcrs[intval($crs->id)] = $crs->fullname;
|
||||
}
|
||||
}
|
||||
if (!empty($popupcrs)) {
|
||||
print_simple_box_start('center', '100%');
|
||||
echo "$strs->status: ";
|
||||
echo popup_form($baseurl.'&course='.$courseid.'&status=',$statusmenu,'statusmenu',$status,'','','',true);
|
||||
echo " $strs->course: ";
|
||||
echo popup_form($baseurl.'&status='.$status.'&course=',$popupcrs,'coursesmenu',$courseid,'','','',true);
|
||||
print_simple_box_end();
|
||||
}
|
||||
$sql = "SELECT c.id, c.fullname FROM {$CFG->prefix}course c INNER JOIN {$CFG->prefix}enrol_authorize e ON c.id = e.courseid ";
|
||||
if ($userid > 0) {
|
||||
$sql .= "WHERE (e.userid='$userid') ";
|
||||
}
|
||||
$sql .= "ORDER BY c.sortorder, c.fullname";
|
||||
if ($popupcrs = get_records_sql_menu($sql)) {
|
||||
$popupcrs = array($SITE->id => $SITE->fullname) + $popupcrs;
|
||||
print_simple_box_start('center', '100%');
|
||||
echo "$strs->status: ";
|
||||
echo popup_form($baseurl.'&course='.$courseid.'&status=',$statusmenu,'statusmenu',$status,'','','',true);
|
||||
echo " $strs->course: ";
|
||||
echo popup_form($baseurl.'&status='.$status.'&course=',$popupcrs,'coursesmenu',$courseid,'','','',true);
|
||||
print_simple_box_end();
|
||||
}
|
||||
|
||||
$table = new flexible_table('enrol-authorize');
|
||||
@@ -66,7 +64,7 @@ function authorize_print_orders()
|
||||
|
||||
$table->define_columns(array('id', 'timecreated', 'userid', 'status', ''));
|
||||
$table->define_headers(array($authstrs->orderid, $strs->time, $authstrs->nameoncard, $strs->status, $strs->action));
|
||||
$table->define_baseurl($baseurl."&status=$status");
|
||||
$table->define_baseurl($baseurl."&status=$status&course=$courseid");
|
||||
|
||||
$table->sortable(true, 'id', SORT_DESC);
|
||||
$table->pageable(true);
|
||||
@@ -101,10 +99,10 @@ function authorize_print_orders()
|
||||
}
|
||||
|
||||
if ($userid > 0) {
|
||||
$where .= "AND (userid = '" . $userid . "') ";
|
||||
$where .= "AND (E.userid = '" . $userid . "') ";
|
||||
}
|
||||
if ($courseid != SITEID) {
|
||||
$where .= "AND (courseid = '" . $courseid . "') ";
|
||||
$where .= "AND (E.courseid = '" . $courseid . "') ";
|
||||
}
|
||||
|
||||
if ($sort = $table->get_sql_sort()) {
|
||||
@@ -217,14 +215,14 @@ function authorize_print_order_details($orderno)
|
||||
if (empty($confirm)) {
|
||||
$strcaptureyes = get_string('captureyes', 'enrol_authorize');
|
||||
$table->data[] = array("<b>$strs->confirm:</b>",
|
||||
"$strcaptureyes<br /><a href='index.php?order=$orderno&sesskey=$USER->sesskey&".ORDER_CAPTURE."=y&confirm=1'>$strs->yes</a>
|
||||
<a href='index.php?order=$orderno'>$strs->no</a>");
|
||||
"$strcaptureyes <br />
|
||||
<input type='hidden' name='confirm' value='1'><input type='submit' name='". ORDER_CAPTURE ."' value='$authstrs->capture' />
|
||||
<a href='index.php?order=$orderno'>$strs->no</a>");
|
||||
}
|
||||
else {
|
||||
$message = '';
|
||||
$extra = NULL;
|
||||
$success = authorize_action($order, $message, $extra, AN_ACTION_PRIOR_AUTH_CAPTURE);
|
||||
update_record("enrol_authorize", $order); // May be expired.
|
||||
if (!$success) {
|
||||
$table->data[] = array("<b><font color='red'>$strs->error:</font></b>", $message);
|
||||
}
|
||||
@@ -301,17 +299,8 @@ function authorize_print_order_details($orderno)
|
||||
$success = authorize_action($order, $message, $extra, AN_ACTION_CREDIT);
|
||||
if ($success) {
|
||||
if (empty($CFG->an_test)) {
|
||||
$extra->id = insert_record("enrol_authorize_refunds", $extra);
|
||||
if (empty($extra->id)) {
|
||||
$emailsubject = "Authorize.net: insert record error";
|
||||
$emailmessage = "Error while trying to insert new data to enrol_authorize_refunds table:\n";
|
||||
$data = (array)$extra;
|
||||
foreach ($data as $key => $value) {
|
||||
$emailmessage .= "$key => $value\n";
|
||||
}
|
||||
$adminuser = get_admin();
|
||||
email_to_user($adminuser, $adminuser, $emailsubject, $emailmessage);
|
||||
$table->data[] = array("<b><font color=red>$strs->error:</font></b>", $emailmessage);
|
||||
$table->data[] = array("<b><font color=red>$strs->error:</font></b>", 'insert record error');
|
||||
}
|
||||
else {
|
||||
if (!empty($unenrol)) {
|
||||
@@ -333,27 +322,25 @@ function authorize_print_order_details($orderno)
|
||||
print_table($table);
|
||||
}
|
||||
elseif (!empty($cmdvoid) and confirm_sesskey()) { // VOID
|
||||
if (!in_array(ORDER_VOID, $status->actions)) {
|
||||
$a = new stdClass;
|
||||
$a->action = $authstrs->void;
|
||||
error(get_string('youcantdo', 'enrol_authorize', $a));
|
||||
}
|
||||
|
||||
$suborderno = optional_param('suborder', 0, PARAM_INT);
|
||||
if (empty($suborderno)) { // cancel original transaction.
|
||||
if (!in_array(ORDER_VOID, $status->actions)) {
|
||||
$a = new stdClass;
|
||||
$a->action = $authstrs->void;
|
||||
error(get_string('youcantdo', 'enrol_authorize', $a));
|
||||
}
|
||||
if (empty($confirm)) {
|
||||
$strvoidyes = get_string('voidyes', 'enrol_authorize');
|
||||
$table->data[] = array("<b>$strs->confirm:</b>",
|
||||
"$strvoidyes<br /><input type='hidden' name='".ORDER_VOID."' value='y'>
|
||||
<input type='hidden' name='confirm' value='1'>
|
||||
<input type='submit' value='$strs->yes'>
|
||||
<input type='submit' value='$authstrs->void'>
|
||||
<a href='index.php?order=$orderno'>$strs->no</a>");
|
||||
}
|
||||
else {
|
||||
$extra = NULL;
|
||||
$message = '';
|
||||
$success = authorize_action($order, $message, $extra, AN_ACTION_VOID);
|
||||
update_record("enrol_authorize", $order); // May be expired.
|
||||
if ($success) {
|
||||
if (empty($CFG->an_test)) {
|
||||
redirect("index.php?order=$orderno");
|
||||
@@ -369,14 +356,22 @@ function authorize_print_order_details($orderno)
|
||||
}
|
||||
}
|
||||
else { // cancel refunded transaction
|
||||
$suborder = get_record('enrol_authorize_refunds',
|
||||
'id', $suborderno,
|
||||
'orderid', $orderno,
|
||||
'status', AN_STATUS_CREDIT);
|
||||
$sql = "SELECT R.*, E.courseid FROM {$CFG->prefix}enrol_authorize_refunds R " .
|
||||
"INNER JOIN {$CFG->prefix}enrol_authorize E ON R.orderid = E.id " .
|
||||
"WHERE R.id = '$suborderno' AND R.orderid = '$orderno' AND R.status = '" .AN_STATUS_CREDIT. "'";
|
||||
|
||||
$suborder = get_record_sql($sql);
|
||||
if (!$suborder) { // not found
|
||||
error("Transaction can not be voided because of already been voided.");
|
||||
}
|
||||
else {
|
||||
$refundedstatus = authorize_get_status_action($suborder);
|
||||
if (!in_array(ORDER_VOID, $refundedstatus->actions)) {
|
||||
$a = new stdClass;
|
||||
$a->action = $authstrs->void;
|
||||
error(get_string('youcantdo', 'enrol_authorize', $a));
|
||||
}
|
||||
unset($suborder->courseid);
|
||||
if (empty($confirm)) {
|
||||
$a = new stdClass;
|
||||
$a->transid = $suborder->transid;
|
||||
@@ -388,14 +383,13 @@ function authorize_print_order_details($orderno)
|
||||
"$strsubvoidyes<br /><input type='hidden' name='".ORDER_VOID."' value='y'>
|
||||
<input type='hidden' name='confirm' value='1'>
|
||||
<input type='hidden' name='suborder' value='$suborderno'>
|
||||
<input type='submit' value='$strs->yes'>
|
||||
<input type='submit' value='$authstrs->void'>
|
||||
<a href='index.php?order=$orderno'>$strs->no</a>");
|
||||
}
|
||||
else {
|
||||
$message = '';
|
||||
$extra = NULL;
|
||||
$success = authorize_action($suborder, $message, $extra, AN_ACTION_VOID);
|
||||
update_record("enrol_authorize_refunds", $suborder); // May be expired.
|
||||
if ($success) {
|
||||
if (empty($CFG->an_test)) {
|
||||
if (!empty($unenrol)) {
|
||||
@@ -428,7 +422,7 @@ function authorize_print_order_details($orderno)
|
||||
$table->data[] = array("<b>$strs->confirm:</b>",
|
||||
"<input type='hidden' name='".ORDER_DELETE."' value='y'>
|
||||
<input type='hidden' name='confirm' value='1'>
|
||||
<input type='submit' value='$strs->yes'>
|
||||
<input type='submit' value='$authstrs->delete'>
|
||||
<a href='index.php?order=$orderno'>$strs->no</a>");
|
||||
}
|
||||
else {
|
||||
@@ -454,15 +448,21 @@ function authorize_print_order_details($orderno)
|
||||
print_table($table);
|
||||
if ($settled) { // show refunds.
|
||||
$t2 = new stdClass;
|
||||
$t2->size = array('15%', '15%', '20%', '35%', '15%');
|
||||
$t2->size = array('45%', '15%', '20%', '10%', '10%');
|
||||
$t2->align = array('right', 'right', 'right', 'right', 'right');
|
||||
$t2->head = array($authstrs->transid,
|
||||
$authstrs->amount,
|
||||
$t2->head = array($authstrs->settlementdate,
|
||||
$authstrs->transid,
|
||||
$strs->status,
|
||||
$authstrs->settlementdate,
|
||||
$strs->action);
|
||||
$refunds = get_records('enrol_authorize_refunds', 'orderid', $orderno);
|
||||
$strs->action,
|
||||
$authstrs->amount);
|
||||
|
||||
$sql = "SELECT R.*, E.courseid FROM {$CFG->prefix}enrol_authorize_refunds R " .
|
||||
"INNER JOIN {$CFG->prefix}enrol_authorize E ON R.orderid = E.id " .
|
||||
"WHERE R.orderid = '$orderno'";
|
||||
|
||||
$refunds = get_records_sql($sql);
|
||||
if ($refunds) {
|
||||
$sumrefund = floatval(0.0);
|
||||
foreach ($refunds as $rf) {
|
||||
$substatus = authorize_get_status_action($rf);
|
||||
$subactions = ' ';
|
||||
@@ -475,12 +475,36 @@ function authorize_print_order_details($orderno)
|
||||
"<a href='index.php?$vl=y&sesskey=$USER->sesskey&order=$orderno&suborder=$rf->id'>{$authstrs->$vl}</a> ";
|
||||
}
|
||||
}
|
||||
$t2->data[] = array($rf->transid,
|
||||
$rf->amount,
|
||||
$authstrs->{$substatus->status},
|
||||
userdate($rf->settletime),
|
||||
$subactions);
|
||||
$sign = '';
|
||||
$color = '';
|
||||
switch ($substatus->status) {
|
||||
case 'cancelled':
|
||||
$color = 'black';
|
||||
break;
|
||||
|
||||
case 'refunded':
|
||||
$sign = '-';
|
||||
$color = 'red';
|
||||
$sumrefund += floatval($rf->amount);
|
||||
break;
|
||||
|
||||
case 'settled':
|
||||
default:
|
||||
$sign = '-';
|
||||
$color = 'green';
|
||||
$sumrefund += floatval($rf->amount);
|
||||
break;
|
||||
}
|
||||
|
||||
$t2->data[] = array(
|
||||
userdate($rf->settletime),
|
||||
$rf->transid,
|
||||
$authstrs->{$substatus->status},
|
||||
$subactions,
|
||||
"<font color='$color'>" . format_float($sign . $rf->amount, 2) . "</font>"
|
||||
);
|
||||
}
|
||||
$t2->data[] = array('','',get_string('total'),$order->currency,format_float('-'.$sumrefund, 2));
|
||||
}
|
||||
else {
|
||||
$t2->data[] = array('','',get_string('noreturns', 'enrol_authorize'),'','');
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?PHP // $Id$
|
||||
|
||||
$plugin->version = 2006021501;
|
||||
$plugin->version = 2006021531;
|
||||
$plugin->requires = 2005072200;
|
||||
|
||||
?>
|
||||
|
||||
@@ -41,7 +41,13 @@ function get_student_courses(&$user) {
|
||||
if (isset($user->student[$course->id])) { /// We have it already
|
||||
unset($user->student[$course->id]); /// Remove from old list
|
||||
} else {
|
||||
enrol_student($user->id, $course->id, 0, 0, 'database'); /// Enrol the student
|
||||
if ($course->enrolperiod) {
|
||||
$timestart = time();
|
||||
$timeend = time() + $course->enrolperiod;
|
||||
} else {
|
||||
$timestart = $timeend = 0;
|
||||
}
|
||||
enrol_student($user->id, $course->id, $timestart, $timeend, 'database');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -204,14 +210,15 @@ function sync_enrolments($type='student') {
|
||||
$sql = "SELECT u.id AS userid, e.id AS enrolmentid" .
|
||||
" FROM {$CFG->prefix}user u " .
|
||||
" LEFT OUTER JOIN {$CFG->prefix}user_students e ON (u.id = e.userid AND e.course='{$course->id}')" .
|
||||
" WHERE u.{$CFG->enrol_localuserfield} = '$member'";
|
||||
" WHERE u.{$CFG->enrol_localuserfield} = '$member'" .
|
||||
" AND (u.deleted IS NULL OR u.deleted=0)";
|
||||
|
||||
$ers = $db->Execute($sql);
|
||||
if (!$ers) {
|
||||
trigger_error($db->ErrorMsg() .' STATEMENT: '. $sql);
|
||||
return false;
|
||||
}
|
||||
if ( $ers->RecordCount() != 1 ) { // if this returns empty, it means we don't have the student record.
|
||||
if ( $ers->RecordCount() == 0 ) { // if this returns empty, it means we don't have the student record.
|
||||
// should not happen -- but skip it anyway
|
||||
trigger_error('weird! no user record entry?');
|
||||
continue;
|
||||
|
||||
+15
-4
@@ -81,6 +81,9 @@ function get_user_courses(&$user, $type) {
|
||||
}
|
||||
}
|
||||
|
||||
/// Add it to new list
|
||||
$newenrolments[$course_obj->id] = 'ldap';
|
||||
|
||||
// deal with enrolment in the moodle db
|
||||
if (!empty($course_obj)) { // does course exist now?
|
||||
if(isset($user->{$type}[$course_obj->id]) && $user->{$type}[$course_obj->id] == 'ldap'){
|
||||
@@ -105,18 +108,26 @@ function get_user_courses(&$user, $type) {
|
||||
// array, those are old enrolments that we want to remove (or are they?)
|
||||
if(!empty($user->{$type})){
|
||||
foreach ($user->{$type} as $courseid => $value){
|
||||
if($value == 'ldap'){ // this was a legacy
|
||||
if($value === 'ldap'){ // this was a legacy
|
||||
if ($type === 'student') { // enrol
|
||||
unenrol_student($user->id, $courseid);
|
||||
} else if ($type === 'teacher') {
|
||||
remove_teacher($user->id, $courseid);
|
||||
}
|
||||
unset($user->{$type}[$course_obj->id]);
|
||||
} else {
|
||||
// This one is from a non-database
|
||||
// enrolment. Add it to the newenrolments
|
||||
// array, so we don't loose it.
|
||||
$newenrolments[$courseid] = $value;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/// Overwrite the old array with the new one
|
||||
$user->{$type} = $newenrolments;
|
||||
|
||||
@ldap_close($ldap_connection);
|
||||
return true;
|
||||
}
|
||||
@@ -574,8 +585,8 @@ function create_course ($course_ext,$skip_fix_course_sortorder=0){
|
||||
|
||||
// override with required ext data
|
||||
$course->idnumber = $course_ext[$CFG->enrol_ldap_course_idnumber][0];
|
||||
$course->fullname = $course_ext[$CFG->enrol_ldap_course_fullname][0];
|
||||
$course->shortname = $course_ext[$CFG->enrol_ldap_course_shortname][0];
|
||||
$course->fullname = addslashes($course_ext[$CFG->enrol_ldap_course_fullname][0]);
|
||||
$course->shortname = addslashes($course_ext[$CFG->enrol_ldap_course_shortname][0]);
|
||||
if ( empty($course->idnumber)
|
||||
|| empty($course->fullname)
|
||||
|| empty($course->shortname) ) {
|
||||
@@ -586,7 +597,7 @@ function create_course ($course_ext,$skip_fix_course_sortorder=0){
|
||||
}
|
||||
|
||||
if(!empty($CFG->enrol_ldap_course_summary)){ // optional
|
||||
$course->summary = $course_ext[$CFG->enrol_ldap_course_summary][0];
|
||||
$course->summary = addslashes($course_ext[$CFG->enrol_ldap_course_summary][0]);
|
||||
}
|
||||
if(!empty($CFG->enrol_ldap_category)){ // optional ... but ensure it is set!
|
||||
$course->category = $CFG->enrol_ldap_category;
|
||||
|
||||
@@ -54,11 +54,12 @@
|
||||
}
|
||||
|
||||
// security: only editing teachers can access backups
|
||||
if ((!isteacheredit($course->id))
|
||||
and (count($args) >= 2)
|
||||
and (strtolower($args[1]) == 'backupdata')) {
|
||||
|
||||
error('Access not allowed');
|
||||
if ((count($args) >= 2) and (strtolower($args[1]) == 'backupdata')) {
|
||||
if (!isteacheredit($course->id)) {
|
||||
error('Access not allowed');
|
||||
} else {
|
||||
$lifetime = 0; //disable browser caching for backups
|
||||
}
|
||||
}
|
||||
|
||||
if (is_dir($pathname)) {
|
||||
@@ -93,6 +94,7 @@
|
||||
and (strtolower($args[1]) == 'moddata')
|
||||
and ((strtolower($args[2]) == 'forum')
|
||||
or (strtolower($args[2]) == 'assignment')
|
||||
or (strtolower($args[2]) == 'data')
|
||||
or (strtolower($args[2]) == 'glossary')
|
||||
or (strtolower($args[2]) == 'wiki')
|
||||
or (strtolower($args[2]) == 'exercise')
|
||||
|
||||
+3
-2
@@ -16,7 +16,7 @@
|
||||
$action = optional_param('action', '', PARAM_ACTION);
|
||||
$name = optional_param('name', '', PARAM_FILE);
|
||||
$oldname = optional_param('oldname', '', PARAM_FILE);
|
||||
$choose = optional_param('choose', '', PARAM_CLEAN);
|
||||
$choose = optional_param('choose', '', PARAM_FILE); //in fact it is always 'formname.inputname'
|
||||
$userfile= optional_param('userfile','',PARAM_FILE);
|
||||
$save = optional_param('save', 0, PARAM_BOOL);
|
||||
$text = optional_param('text', '', PARAM_RAW);
|
||||
@@ -167,7 +167,7 @@
|
||||
// um will take care of error reporting.
|
||||
displaydir($wdir);
|
||||
} else {
|
||||
$upload_max_filesize = get_max_upload_file_size($CFG->maxbytes, $course->maxbytes);
|
||||
$upload_max_filesize = get_max_upload_file_size($CFG->maxbytes);
|
||||
$filesize = display_size($upload_max_filesize);
|
||||
|
||||
$struploadafile = get_string("uploadafile");
|
||||
@@ -385,6 +385,7 @@
|
||||
html_header($course, $wdir);
|
||||
if (($text != '') and confirm_sesskey()) {
|
||||
$fileptr = fopen($basedir.'/'.$file,"w");
|
||||
$text = preg_replace('/\x0D/', '', $text); // http://moodle.org/mod/forum/discuss.php?d=38860
|
||||
fputs($fileptr, stripslashes($text));
|
||||
fclose($fileptr);
|
||||
displaydir($wdir);
|
||||
|
||||
@@ -8,12 +8,20 @@
|
||||
|
||||
global $CFG;
|
||||
|
||||
// Trivial-cache - keyed on $cachedcourseid
|
||||
static $activitylist;
|
||||
static $cachedcourseid;
|
||||
|
||||
if (empty($courseid)) {
|
||||
$courseid = SITEID;
|
||||
}
|
||||
|
||||
// Initialise/invalidate our trivial cache if dealing with a different course
|
||||
if (!isset($cachedcourseid) || $cachedcourseid !== (int)$courseid) {
|
||||
$activitylist = array();
|
||||
}
|
||||
$cachedcourseid = (int)$courseid;
|
||||
|
||||
/// It may be cached
|
||||
|
||||
if (empty($activitylist)) {
|
||||
|
||||
@@ -7,6 +7,16 @@
|
||||
|
||||
require_once("../../config.php");
|
||||
|
||||
if (empty($CFG->textfilters)) {
|
||||
error ('Filter not enabled!');
|
||||
} else {
|
||||
$filters = explode(',', $CFG->textfilters);
|
||||
if (array_search('filter/algebra', $filters) === FALSE) {
|
||||
error ('Filter not enabled!');
|
||||
}
|
||||
}
|
||||
|
||||
require_once($CFG->dirroot.'/filter/tex/lib.php');
|
||||
|
||||
$CFG->texfilterdir = "filter/tex";
|
||||
$CFG->algebrafilterdir = "filter/algebra";
|
||||
@@ -15,6 +25,9 @@
|
||||
$CFG->algebrafilterdirwin = "filter\\algebra";
|
||||
}
|
||||
|
||||
if (!isadmin()) {
|
||||
die('Only for admins, sorry.');
|
||||
}
|
||||
|
||||
$query = urldecode($_SERVER['QUERY_STRING']);
|
||||
error_reporting(E_ALL);
|
||||
@@ -76,7 +89,7 @@
|
||||
}
|
||||
|
||||
function algebra2tex($algebra) {
|
||||
Global $CFG;
|
||||
global $CFG;
|
||||
$algebra = str_replace('<','<',$algebra);
|
||||
$algebra = str_replace('>','>',$algebra);
|
||||
$algebra = str_replace('<>','#',$algebra);
|
||||
@@ -91,9 +104,9 @@ function algebra2tex($algebra) {
|
||||
$algebra = str_replace('epsilon','zepslon',$algebra);
|
||||
$algebra = str_replace('upsilon','zupslon',$algebra);
|
||||
$algebra = preg_replace('!\r\n?!',' ',$algebra);
|
||||
$algebra = escapeshellarg($algebra);
|
||||
|
||||
if ( (PHP_OS == "WINNT") || (PHP_OS == "WIN32") || (PHP_OS == "Windows") ) {
|
||||
$algebra = "\"". str_replace('"','\"',$algebra) . "\"";
|
||||
$cmd = "cd $CFG->dirroot\\$CFG->algebrafilterdirwin & algebra2tex.pl x/2";
|
||||
$test = `$cmd`;
|
||||
if ($test != '\frac{x}{2}') {
|
||||
@@ -109,7 +122,6 @@ function algebra2tex($algebra) {
|
||||
}
|
||||
$cmd = "cd $CFG->dirroot\\$CFG->algebrafilterdirwin & algebra2tex.pl $algebra";
|
||||
} else {
|
||||
$algebra = escapeshellarg($algebra);
|
||||
$cmd = "cd $CFG->dirroot/$CFG->algebrafilterdir; ./algebra2tex.pl x/2";
|
||||
$test = `$cmd`;
|
||||
if ($test != '\frac{x}{2}') {
|
||||
@@ -198,66 +210,67 @@ function outputText($texexp) {
|
||||
}
|
||||
|
||||
function tex2image($texexp, $md5, $return=false) {
|
||||
global $CFG;
|
||||
$error_message1 = "Your system is not configured to run mimeTeX. ";
|
||||
$error_message1 .= "You need to download the appropriate<br /> executable ";
|
||||
$error_message1 .= "from <a href=\"http://moodle.org/download/mimetex/\">";
|
||||
$error_message1 .= "http://moodle.org/download/mimetex/</a>, or obtain the ";
|
||||
$error_message1 .= "C source<br /> from <a href=\"http://www.forkosh.com/mimetex.zip\">";
|
||||
$error_message1 .= "http://www.forkosh.com/mimetex.zip</a>, compile it and ";
|
||||
$error_message1 .= "put the executable into your<br /> moodle/filter/tex/ directory. ";
|
||||
$error_message1 .= "You also need to edit your moodle/filter/algebra/pix.php file<br />";
|
||||
$error_message1 .= ' by adding the line<br /><pre> case "' . PHP_OS . "\":\n";
|
||||
$error_message1 .= " \$cmd = \"\\\\\"\$CFG->dirroot/\$CFG->texfilterdir/";
|
||||
$error_message1 .= 'mimetex.' . strtolower(PHP_OS) . "\\\\\" -e \\\\\"\$pathname\\\\\" \". escapeshellarg(\$texexp);";
|
||||
$error_message1 .= "</pre>You also need to add this to your algebradebug.php file.";
|
||||
global $CFG;
|
||||
$error_message1 = "Your system is not configured to run mimeTeX. ";
|
||||
$error_message1 .= "You need to download the appropriate<br /> executable ";
|
||||
$error_message1 .= "from <a href=\"http://moodle.org/download/mimetex/\">";
|
||||
$error_message1 .= "http://moodle.org/download/mimetex/</a>, or obtain the ";
|
||||
$error_message1 .= "C source<br /> from <a href=\"http://www.forkosh.com/mimetex.zip\">";
|
||||
$error_message1 .= "http://www.forkosh.com/mimetex.zip</a>, compile it and ";
|
||||
$error_message1 .= "put the executable into your<br /> moodle/filter/tex/ directory. ";
|
||||
$error_message1 .= "You also need to edit your moodle/filter/algebra/pix.php file<br />";
|
||||
$error_message1 .= ' by adding the line<br /><pre> case "' . PHP_OS . "\":\n";
|
||||
$error_message1 .= " \$cmd = \"\\\\\"\$CFG->dirroot/\$CFG->texfilterdir/";
|
||||
$error_message1 .= 'mimetex.' . strtolower(PHP_OS) . "\\\\\" -e \\\\\"\$pathname\\\\\" \". escapeshellarg(\$texexp);";
|
||||
$error_message1 .= "</pre>You also need to add this to your algebradebug.php file.";
|
||||
|
||||
if ($texexp) {
|
||||
$texexp = '\Large ' . $texexp;
|
||||
$lifetime = 86400;
|
||||
$image = $md5 . ".gif";
|
||||
$filetype = 'image/gif';
|
||||
if (!file_exists("$CFG->dataroot/$CFG->algebraimagedir")) {
|
||||
make_upload_directory($CFG->algebraimagedir);
|
||||
}
|
||||
$pathname = "$CFG->dataroot/$CFG->algebraimagedir/$image";
|
||||
if (file_exists($pathname)) {
|
||||
unlink($pathname);
|
||||
}
|
||||
$commandpath = "";
|
||||
$cmd = "";
|
||||
switch (PHP_OS) {
|
||||
case "Linux":
|
||||
$commandpath="$CFG->dirroot/$CFG->texfilterdir/mimetex.linux";
|
||||
$cmd = "\"$CFG->dirroot/$CFG->texfilterdir/mimetex.linux\" -e \"$pathname\" ". escapeshellarg($texexp);
|
||||
break;
|
||||
case "WINNT":
|
||||
case "WIN32":
|
||||
case "Windows":
|
||||
$commandpath="$CFG->dirroot/$CFG->texfilterdir/mimetex.exe";
|
||||
$texexp = str_replace('"','\"',$texexp);
|
||||
$cmd = str_replace(' ','^ ',$commandpath);
|
||||
$cmd .= " ++ -e \"$pathname\" \"$texexp\"";
|
||||
break;
|
||||
case "Darwin":
|
||||
$commandpath="$CFG->dirroot/$CFG->texfilterdir/mimetex.darwin";
|
||||
$cmd = "\"$CFG->dirroot/$CFG->texfilterdir/mimetex.darwin\" -e \"$pathname\" ". escapeshellarg($texexp);
|
||||
break;
|
||||
}
|
||||
if (!$cmd) {
|
||||
if (is_executable("$CFG->dirroot/$CFG->texfilterdir/mimetex")) { /// Use the custom binary
|
||||
$commandpath="$CFG->dirroot/$CFG->texfilterdir/mimetex";
|
||||
$cmd = "$CFG->dirroot/$CFG->texfilterdir/mimetex -e $pathname ". escapeshellarg($texexp);
|
||||
} else {
|
||||
error($error_message1);
|
||||
}
|
||||
}
|
||||
system($cmd, $status);
|
||||
}
|
||||
if ($return) {
|
||||
return $image;
|
||||
}
|
||||
if ($texexp && file_exists($pathname)) {
|
||||
if ($texexp) {
|
||||
$texexp = '\Large ' . $texexp;
|
||||
$lifetime = 86400;
|
||||
$image = $md5 . ".gif";
|
||||
$filetype = 'image/gif';
|
||||
if (!file_exists("$CFG->dataroot/$CFG->algebraimagedir")) {
|
||||
make_upload_directory($CFG->algebraimagedir);
|
||||
}
|
||||
$pathname = "$CFG->dataroot/$CFG->algebraimagedir/$image";
|
||||
if (file_exists($pathname)) {
|
||||
unlink($pathname);
|
||||
}
|
||||
$commandpath = "";
|
||||
$cmd = "";
|
||||
$texexp = tex_sanitize_formula($texexp);
|
||||
$texexp = escapeshellarg($texexp);
|
||||
switch (PHP_OS) {
|
||||
case "Linux":
|
||||
$commandpath="$CFG->dirroot/$CFG->texfilterdir/mimetex.linux";
|
||||
$cmd = "\"$CFG->dirroot/$CFG->texfilterdir/mimetex.linux\" -e \"$pathname\" $texexp";
|
||||
break;
|
||||
case "WINNT":
|
||||
case "WIN32":
|
||||
case "Windows":
|
||||
$commandpath="$CFG->dirroot/$CFG->texfilterdir/mimetex.exe";
|
||||
$cmd = str_replace(' ','^ ',$commandpath);
|
||||
$cmd .= " ++ -e \"$pathname\" $texexp";
|
||||
break;
|
||||
case "Darwin":
|
||||
$commandpath="$CFG->dirroot/$CFG->texfilterdir/mimetex.darwin";
|
||||
$cmd = "\"$CFG->dirroot/$CFG->texfilterdir/mimetex.darwin\" -e \"$pathname\" $texexp";
|
||||
break;
|
||||
}
|
||||
if (!$cmd) {
|
||||
if (is_executable("$CFG->dirroot/$CFG->texfilterdir/mimetex")) { /// Use the custom binary
|
||||
$commandpath="$CFG->dirroot/$CFG->texfilterdir/mimetex";
|
||||
$cmd = "$CFG->dirroot/$CFG->texfilterdir/mimetex -e $pathname $texexp";
|
||||
} else {
|
||||
error($error_message1);
|
||||
}
|
||||
}
|
||||
system($cmd, $status);
|
||||
}
|
||||
if ($return) {
|
||||
return $image;
|
||||
}
|
||||
if ($texexp && file_exists($pathname)) {
|
||||
$lastmodified = filemtime($pathname);
|
||||
header("Last-Modified: " . gmdate("D, d M Y H:i:s", $lastmodified) . " GMT");
|
||||
header("Expires: " . gmdate("D, d M Y H:i:s", time() + $lifetime) . " GMT");
|
||||
@@ -267,7 +280,7 @@ function tex2image($texexp, $md5, $return=false) {
|
||||
header("Content-length: ".filesize($pathname));
|
||||
header("Content-type: $filetype");
|
||||
readfile("$pathname");
|
||||
} else {
|
||||
} else {
|
||||
$ecmd = "$cmd 2>&1";
|
||||
echo `$ecmd` . "<br />\n";
|
||||
echo "The shell command<br />$cmd<br />returned status = $status<br />\n";
|
||||
@@ -293,7 +306,7 @@ function tex2image($texexp, $md5, $return=false) {
|
||||
echo "mimetex executable $commandpath not found!<br />";
|
||||
}
|
||||
echo "Image not found!";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function slasharguments($texexp, $md5) {
|
||||
|
||||
@@ -163,11 +163,10 @@ function algebra_filter ($courseid, $text) {
|
||||
$algebra = str_replace('epsilon','zepslon',$algebra);
|
||||
$algebra = str_replace('upsilon','zupslon',$algebra);
|
||||
$algebra = preg_replace('!\r\n?!',' ',$algebra);
|
||||
$algebra = escapeshellarg($algebra);
|
||||
if ( (PHP_OS == "WINNT") || (PHP_OS == "WIN32") || (PHP_OS == "Windows") ) {
|
||||
$algebra = "\"". str_replace('"','\"',$algebra) . "\"";
|
||||
$cmd = "cd $CFG->dirroot\\$CFG->algebrafilterdirwin & algebra2tex.pl $algebra";
|
||||
} else {
|
||||
$algebra = escapeshellarg($algebra);
|
||||
$cmd = "cd $CFG->dirroot/$CFG->algebrafilterdir; ./algebra2tex.pl $algebra";
|
||||
}
|
||||
$texexp = `$cmd`;
|
||||
|
||||
+17
-5
@@ -6,7 +6,18 @@
|
||||
$nomoodlecookie = true; // Because it interferes with caching
|
||||
|
||||
require_once('../../config.php');
|
||||
|
||||
if (empty($CFG->textfilters)) {
|
||||
error ('Filter not enabled!');
|
||||
} else {
|
||||
$filters = explode(',', $CFG->textfilters);
|
||||
if (array_search('filter/algebra', $filters) === FALSE) {
|
||||
error ('Filter not enabled!');
|
||||
}
|
||||
}
|
||||
|
||||
require_once($CFG->libdir.'/filelib.php');
|
||||
require_once($CFG->dirroot.'/filter/tex/lib.php');
|
||||
|
||||
$CFG->texfilterdir = 'filter/tex';
|
||||
$CFG->algebrafilterdir = 'filter/algebra';
|
||||
@@ -41,25 +52,26 @@
|
||||
$texexp = str_replace('>','>',$texexp);
|
||||
$texexp = preg_replace('!\r\n?!',' ',$texexp);
|
||||
$texexp = '\Large ' . $texexp;
|
||||
$texexp = tex_sanitize_formula($texexp);
|
||||
$texexp = escapeshellarg($texexp);
|
||||
|
||||
if ((PHP_OS == "WINNT") || (PHP_OS == "WIN32") || (PHP_OS == "Windows")) {
|
||||
$texexp = str_replace('"','\"',$texexp);
|
||||
$cmd = "$CFG->dirroot/$CFG->texfilterdir/mimetex.exe";
|
||||
$cmd = str_replace(' ','^ ',$cmd);
|
||||
$cmd .= " ++ -e \"$pathname\" -- \"$texexp\"";
|
||||
$cmd .= " ++ -e \"$pathname\" -- $texexp";
|
||||
} else if (is_executable("$CFG->dirroot/$CFG->texfilterdir/mimetex")) { /// Use the custom binary
|
||||
|
||||
$cmd = "$CFG->dirroot/$CFG->texfilterdir/mimetex -e $pathname -- ". escapeshellarg($texexp);
|
||||
$cmd = "$CFG->dirroot/$CFG->texfilterdir/mimetex -e $pathname -- $texexp";
|
||||
|
||||
} else { /// Auto-detect the right TeX binary
|
||||
switch (PHP_OS) {
|
||||
|
||||
case "Linux":
|
||||
$cmd = "\"$CFG->dirroot/$CFG->texfilterdir/mimetex.linux\" -e \"$pathname\" -- ". escapeshellarg($texexp);
|
||||
$cmd = "\"$CFG->dirroot/$CFG->texfilterdir/mimetex.linux\" -e \"$pathname\" -- $texexp";
|
||||
break;
|
||||
|
||||
case "Darwin":
|
||||
$cmd = "\"$CFG->dirroot/$CFG->texfilterdir/mimetex.darwin\" -e \"$pathname\" -- ". escapeshellarg($texexp);
|
||||
$cmd = "\"$CFG->dirroot/$CFG->texfilterdir/mimetex.darwin\" -e \"$pathname\" -- $texexp";
|
||||
break;
|
||||
|
||||
default: /// Nothing was found, so tell them how to fix it.
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
set_config( 'filter_mediaplugin_ignore_swf','' );
|
||||
}
|
||||
else {
|
||||
set_config( 'filter_mediaplugin_enable_swf', 1 );
|
||||
set_config( 'filter_mediaplugin_enable_swf', 0 ); //disable swf embedding by default for now
|
||||
}
|
||||
}
|
||||
if (!isset($CFG->filter_mediaplugin_enable_mov) or $forcereset) {
|
||||
|
||||
@@ -194,7 +194,7 @@ function mediaplugin_filter($courseid, $text) {
|
||||
$replace .= '<param name="controls" value="imagewindow" />';
|
||||
$replace .= '<param name="console" value="video" />';
|
||||
$replace .= '<param name="loop" value="true" />';
|
||||
$replace .= '<embed src="\\2.rm" width=240" height="180" loop="true" type="audio/x-pn-realaudio-plugin" controls="imagewindow" console="video" autostart="true">';
|
||||
$replace .= '<embed src="\\2.ram" width=240" height="180" loop="true" type="audio/x-pn-realaudio-plugin" controls="imagewindow" console="video" autostart="true">';
|
||||
$replace .= '</embed>';
|
||||
$replace .= '</object><br />';
|
||||
|
||||
@@ -203,7 +203,7 @@ function mediaplugin_filter($courseid, $text) {
|
||||
$replace .= '<param name="autostart" value="true" />';
|
||||
$replace .= '<param name="controls" value="ControlPanel" />';
|
||||
$replace .= '<param name="console" value="video" />';
|
||||
$replace .= '<embed src="\\2.rm" width="240" height="30" controls="ControlPanel" type="audio/x-pn-realaudio-plugin" console="video" autostart="true">';
|
||||
$replace .= '<embed src="\\2.ram" width="240" height="30" controls="ControlPanel" type="audio/x-pn-realaudio-plugin" console="video" autostart="true">';
|
||||
$replace .= '</embed>';
|
||||
$replace .= '</object></p>';
|
||||
|
||||
@@ -219,7 +219,7 @@ function mediaplugin_filter($courseid, $text) {
|
||||
$replace .= '<param name="controls" value="imagewindow" />';
|
||||
$replace .= '<param name="console" value="video" />';
|
||||
$replace .= '<param name="loop" value="true" />';
|
||||
$replace .= '<embed src="\\2.rm" width=240" height="180" loop="true" type="audio/x-pn-realaudio-plugin" controls="imagewindow" console="video" autostart="true">';
|
||||
$replace .= '<embed src="\\2.rpm" width=240" height="180" loop="true" type="audio/x-pn-realaudio-plugin" controls="imagewindow" console="video" autostart="true">';
|
||||
$replace .= '</embed>';
|
||||
$replace .= '</object><br />';
|
||||
|
||||
@@ -228,7 +228,7 @@ function mediaplugin_filter($courseid, $text) {
|
||||
$replace .= '<param name="autostart" value="true" />';
|
||||
$replace .= '<param name="controls" value="ControlPanel" />';
|
||||
$replace .= '<param name="console" value="video" />';
|
||||
$replace .= '<embed src="\\2.rm" width="240" height="30" controls="ControlPanel" type="audio/x-pn-realaudio-plugin" console="video" autostart="true">';
|
||||
$replace .= '<embed src="\\2.rpm" width="240" height="30" controls="ControlPanel" type="audio/x-pn-realaudio-plugin" console="video" autostart="true">';
|
||||
$replace .= '</embed>';
|
||||
$replace .= '</object></p>';
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
$txt = new Object;
|
||||
$txt->mediapluginmp3 = get_string( 'mediapluginmp3','admin' );
|
||||
$txt->mediapluginswf = get_string( 'mediapluginswf','admin' );
|
||||
$txt->mediapluginswfnote = get_string( 'mediapluginswfnote','admin' );
|
||||
$txt->mediapluginmov = get_string( 'mediapluginmov','admin' );
|
||||
$txt->mediapluginwmv = get_string( 'mediapluginwmv','admin' );
|
||||
$txt->mediapluginmpg = get_string( 'mediapluginmpg','admin' );
|
||||
@@ -25,41 +26,49 @@
|
||||
<td align="right"><?php echo $txt->mediapluginmp3 ?></td>
|
||||
<td><?php choose_from_menu( $yesno,'filter_mediaplugin_enable_mp3',
|
||||
$CFG->filter_mediaplugin_enable_mp3 ); ?></td>
|
||||
<td />
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td align="right"><?php echo $txt->mediapluginswf?></td>
|
||||
<td><?php choose_from_menu( $yesno,'filter_mediaplugin_enable_swf',
|
||||
$CFG->filter_mediaplugin_enable_swf ); ?></td>
|
||||
<td><?php echo $txt->mediapluginswfnote ?></td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td align="right"><?php echo $txt->mediapluginmov ?></td>
|
||||
<td><?php choose_from_menu( $yesno,'filter_mediaplugin_enable_mov',
|
||||
$CFG->filter_mediaplugin_enable_mov ); ?></td>
|
||||
<td />
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td align="right"><?php echo $txt->mediapluginwmv ?></td>
|
||||
<td><?php choose_from_menu( $yesno,'filter_mediaplugin_enable_wmv',
|
||||
$CFG->filter_mediaplugin_enable_wmv ); ?></td>
|
||||
<td />
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td align="right"><?php echo $txt->mediapluginmpg ?></td>
|
||||
<td><?php choose_from_menu( $yesno,'filter_mediaplugin_enable_mpg',
|
||||
$CFG->filter_mediaplugin_enable_mpg ); ?></td>
|
||||
<td />
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td align="right"><?php echo $txt->mediapluginavi ?></td>
|
||||
<td><?php choose_from_menu( $yesno,'filter_mediaplugin_enable_avi',
|
||||
$CFG->filter_mediaplugin_enable_avi ); ?></td>
|
||||
<td />
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td align="right"><?php echo $txt->mediapluginflv ?></td>
|
||||
<td><?php choose_from_menu( $yesno,'filter_mediaplugin_enable_flv',
|
||||
$CFG->filter_mediaplugin_enable_flv ); ?></td>
|
||||
<td />
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td align="right"><?php echo $txt->mediapluginram ?></td>
|
||||
<td><?php choose_from_menu( $yesno,'filter_mediaplugin_enable_ram',
|
||||
$CFG->filter_mediaplugin_enable_ram ); ?></td>
|
||||
<td />
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td align="right"><?php echo $txt->mediapluginrpm ?></td>
|
||||
@@ -70,5 +79,6 @@
|
||||
<td align="right"><?php echo $txt->mediapluginrm ?></td>
|
||||
<td><?php choose_from_menu( $yesno,'filter_mediaplugin_enable_rm',
|
||||
$CFG->filter_mediaplugin_enable_rm ); ?></td>
|
||||
<td />
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
The FLV player is by Jeroen Wijering - www.jeroenwijering.com
|
||||
and included in Moodle by his permission under the GPL.
|
||||
and included in Moodle by his permission under the GNU GPL version 2 or later.
|
||||
|
||||
Thanks, Jeroen!
|
||||
|
||||
Binary file not shown.
Binary file not shown.
+114
-89
@@ -1,10 +1,10 @@
|
||||
|
||||
--------------------------------------------------------------------------
|
||||
January 11, 2004 Version 1.40
|
||||
September 6, 2008 Version 1.70
|
||||
|
||||
m i m e T e X R e a d m e F i l e
|
||||
|
||||
Copyright(c) 2002-2004, John Forkosh Associates, Inc. All rights reserved.
|
||||
Copyright(c) 2002-2008, John Forkosh Associates, Inc. All rights reserved.
|
||||
--------------------------------------------------------------------------
|
||||
|
||||
by: John Forkosh
|
||||
@@ -12,17 +12,21 @@
|
||||
|
||||
This file is part of mimeTeX, which is free software.
|
||||
You may redistribute and/or modify it under the terms
|
||||
of the GNU General Public License, version 2 or later,
|
||||
of the GNU General Public License, version 3 or later,
|
||||
as published by the Free Software Foundation. See
|
||||
http://www.gnu.org/licenses/gpl.html
|
||||
|
||||
Follow the Quick Start instructions immediately below
|
||||
or the detailed instructions in Section III to install
|
||||
mimeTeX on your machine, and then point your browser to
|
||||
http://www.yourdomain.com/mimetex.html
|
||||
for a complete discussion, including demo/tutorial and
|
||||
reference. Installation problems? Point your browser
|
||||
to my page at
|
||||
MimeTeX is discussed and illustrated online at
|
||||
its homepage
|
||||
http://www.forkosh.com/mimetex.html
|
||||
Or you can follow the Quick Start instructions below
|
||||
(or the more detailed instructions in Section III)
|
||||
to immediately install mimeTeX on your own machine.
|
||||
Then point your browser to
|
||||
http://www.yourdomain.com/mimetex.html
|
||||
for a demo/tutorial and reference.
|
||||
Installation problems? Point your browser to
|
||||
mimeTeX's homepage
|
||||
http://www.forkosh.com/mimetex.html
|
||||
then click its "full mimeTeX manual" link and see
|
||||
Section II.
|
||||
@@ -31,57 +35,63 @@
|
||||
I. QUICK START
|
||||
------------------------------------------------------------------------
|
||||
To compile and install mimeTeX
|
||||
o unzip mimetex.zip in any convenient working directory
|
||||
o to produce an executable that emits anti-aliased gif images
|
||||
* unzip mimetex.zip in any convenient working directory
|
||||
* to produce an executable that emits anti-aliased
|
||||
gif images (recommended)
|
||||
cc -DAA mimetex.c gifsave.c -lm -o mimetex.cgi
|
||||
-or- for gif images without anti-aliasing
|
||||
cc -DGIF mimetex.c gifsave.c -lm -o mimetex.cgi
|
||||
-or- to produce an executable that emits mime xbitmaps
|
||||
cc -DXBITMAP mimetex.c -lm -o mimetex.cgi
|
||||
o mv mimetex.cgi to your server's cgi-bin/ directory
|
||||
o mv mimetex.html to your server's htdocs/ directory
|
||||
o if the relative path from htdocs to cgi-bin isn't
|
||||
(For Windows, see "Compile Notes" in Section III below.)
|
||||
* mv mimetex.cgi to your server's cgi-bin/ directory
|
||||
* mv mimetex.html to your server's htdocs/ directory
|
||||
* if the relative path from htdocs to cgi-bin isn't
|
||||
../cgi-bin then edit mimetex.html and change the
|
||||
few dozen occurrences as necessary
|
||||
To quickly learn about mimeTeX
|
||||
o point your browser to www.yourdomain.com/mimetex.html
|
||||
few dozen occurrences as necessary.
|
||||
Then, to quickly learn more about mimeTeX
|
||||
* point your browser to www.yourdomain.com/mimetex.html
|
||||
Any problems with the above?
|
||||
o read the more detailed instructions in Section III below,
|
||||
or see www.forkosh.com/mimetex.html
|
||||
* read the more detailed instructions below,
|
||||
or see http://www.forkosh.com/mimetex.html
|
||||
|
||||
|
||||
II. INTRODUCTION
|
||||
------------------------------------------------------------------------
|
||||
MimeTeX is licensed under the gpl. It parses LaTeX math expressions,
|
||||
emitting either gif images or mime xbitmaps of them, rather than the
|
||||
usual TeX dvi's. And mimeTeX is an entirely separate little program
|
||||
that doesn't use TeX in any way. Therefore, mimeTeX images are easily
|
||||
inserted directly into html documents using a standard html <img> tag,
|
||||
<img src="../cgi-bin/mimetex.cgi?f(x)=\int_{-\infty}^x~e^{-t^2}dt"
|
||||
border=0 align=absmiddle>
|
||||
without intermediate dvi-to-gif conversion, and without storing lots
|
||||
of little gif image files, one file for each converted expression.
|
||||
This makes your web site and html documents more easily maintained.
|
||||
|
||||
Thus, mimeTeX is primarily intended to help you write native html
|
||||
documents containing math. In this sense it's a kind of "lightweight"
|
||||
alternative to MathML, with the advantage that mimeTeX preserves LaTeX
|
||||
syntax, and works with any browser and server.
|
||||
MimeTeX, licensed under the gpl, lets you easily embed LaTeX math in
|
||||
your html pages. It parses a LaTeX math expression and immediately
|
||||
emits the corresponding gif image, rather than the usual TeX dvi.
|
||||
And mimeTeX is an entirely separate little program that doesn't
|
||||
use TeX or its fonts in any way. It's just one cgi that you put in
|
||||
your site's cgi-bin/ directory, with no other dependencies.
|
||||
So mimeTeX is very easy to install. And it's equally easy to use.
|
||||
Just place an html <img> tag in your document wherever you want to
|
||||
see the corresponding LaTeX expression. For example,
|
||||
<img src="../cgi-bin/mimetex.cgi?f(x)=\int_{-\infty}^x~e^{-t^2}dt"
|
||||
border=0 align=absmiddle>
|
||||
generates and displays the corresponding gif image on-the-fly,
|
||||
wherever you put that <img> tag. MimeTeX doesn't need intermediate
|
||||
dvi-to-gif conversion, and it doesn't clutter your filesystem with
|
||||
separate little gif files for each converted expression. (Optional
|
||||
image caching does store gif files, and subsequently reads them as
|
||||
needed, rather than re-rendering the same images every time a page
|
||||
is reloaded.)
|
||||
|
||||
|
||||
III. COMPILATION AND INSTALLATION
|
||||
------------------------------------------------------------------------
|
||||
I've comnpiled and run mimeTeX under Linux and NetBSD using gcc.
|
||||
The source code is entirely ansi-standard C, and should compile
|
||||
I've built and run mimeTeX under Linux and NetBSD using gcc.
|
||||
The source code is ansi-standard C, and should compile
|
||||
and execute under all environments without any change whatsoever.
|
||||
Build instructions below are for Unix. Modify them as necessary
|
||||
for your particular situation.
|
||||
Build instructions below are for Unix. Modify them as necessary
|
||||
for your particular situation. Note the -DWINDOWS switch if
|
||||
applicable.
|
||||
|
||||
Unzip mimetex.zip in any convenient working directory.
|
||||
You should now have files
|
||||
Your working directory should now contain
|
||||
mimetex.zip your gnu zipped mimeTeX distribution containing...
|
||||
README this file (see mimetex.html for demo/tutorial)
|
||||
LICENSE GPL license, under which you may use mimeTeX
|
||||
COPYING GPL license, under which you may use mimeTeX
|
||||
mimetex.c mimeTeX source program and all required functions
|
||||
mimetex.h header file for mimetex.c (and for gfuntype.c)
|
||||
gfuntype.c parses output from gftype -i and writes bitmap data
|
||||
@@ -93,32 +103,35 @@ III. COMPILATION AND INSTALLATION
|
||||
Conversion for Windows, Macs, VMS, etc, can usually be accomplished
|
||||
with unzip's -a option, i.e., unzip -a mimetex.zip
|
||||
|
||||
Now, to produce an executable that emits anti-aliased gif images
|
||||
(which is how the "official" www.forkosh.com/mimetex.html page
|
||||
is displayed), compile mimetex with the command
|
||||
cc -DAA mimetex.c gifsave.c -lm -o mimetex.cgi
|
||||
Now, to compile a mimeTeX executable that emits anti-aliased gif
|
||||
images (recommended for most uses), type the command
|
||||
cc -DAA mimetex.c gifsave.c -lm -o mimetex.cgi
|
||||
|
||||
Or, to produce an executable that emits gif images
|
||||
without anti-aliasing, compile mimetex with the command
|
||||
cc -DGIF mimetex.c gifsave.c -lm -o mimetex.cgi
|
||||
Or, for an executable that emits gif images without
|
||||
anti-aliasing,
|
||||
cc -DGIF mimetex.c gifsave.c -lm -o mimetex.cgi
|
||||
|
||||
Alternatively, for an executable that emits mime xbitmaps,
|
||||
just compile mimetex with the command
|
||||
cc -DXBITMAP mimetex.c -lm -o mimetex.cgi
|
||||
Alternatively, to compile a mimeTeX executable that emits
|
||||
mime xbitmaps, just type the command
|
||||
cc -DXBITMAP mimetex.c -lm -o mimetex.cgi
|
||||
|
||||
Several additional command-line options that you may find
|
||||
useful are discussed in Section IIc (href="#options")
|
||||
of mimetex.html .
|
||||
Compile Notes:
|
||||
* If (and only if) you're compiling a Windows executable
|
||||
with the -DAA or -DGIF option (but not -DXBITMAP), then
|
||||
add -DWINDOWS also. For example,
|
||||
cc -DAA -DWINDOWS mimetex.c gifsave.c -lm -o mimetex.cgi
|
||||
The above Unix-like syntax works with MinGW (http://www.mingw.org)
|
||||
and djgpp (http://www.delorie.com/djgpp/) Windows compilers, but
|
||||
probably not with most others, where it's only intended as a
|
||||
"template".
|
||||
* Several additional command-line options that you may find
|
||||
useful are discussed in Section IId (href="#options")
|
||||
of your mimetex.html page.
|
||||
|
||||
That's all there is to building mimeTeX. You can now test mimetex.cgi
|
||||
from the Unix command line by typing, e.g.,
|
||||
./mimetex.cgi x^2+y^2
|
||||
which should emit an ascii raster something like the left-hand
|
||||
illustration. And if you've compiled mimeTeX with the anti-aliasing
|
||||
-DAA option, then you'll also see the right-hand illustration.
|
||||
It shows asterisks in the same positions as the left-hand illustration,
|
||||
and anti-aliased grayscale colormap indexes assigned to neighboring
|
||||
pixels. And you'll also be shown the actual rgb value for each index.
|
||||
That's all there is to building mimeTeX. You can now test your
|
||||
mimetex.cgi executable from the Unix command line by typing, e.g.,
|
||||
./mimetex.cgi "x^2+y^2"
|
||||
which should emit two ascii rasters something like the following
|
||||
Ascii dump of bitmap image... Hex dump of colormap indexes...
|
||||
........**..................**.. .......1**1................1**1.
|
||||
.......*..*.....*..........*..*. .......*23*.....*..........*23*.
|
||||
@@ -132,34 +145,50 @@ III. COMPILATION AND INSTALLATION
|
||||
................*....**......... ................*....**1........
|
||||
The 5 colormap indexes denote rgb...
|
||||
.-->255 1-->196 2-->186 3-->177 *-->0
|
||||
If you get much fancier than x^2+y^2, remember that many characters have
|
||||
to be escaped from the Unix command line, e.g., x\<y or f\(x\)=x^2, etc.
|
||||
Of course, you won't need these extra escapes when running mimetex from
|
||||
a browser.
|
||||
The right-hand illustration shows asterisks in the same positions as
|
||||
the left-hand one, along with anti-aliased grayscale colormap indexes
|
||||
assigned to neighboring pixels, and with the rgb value for each
|
||||
index. Just typing ./mimetex.cgi without an argument should produce
|
||||
ascii rasters for the default expression f(x)=x^2. If you see the
|
||||
two ascii rasters then your binary's good, so mv it to your server's
|
||||
cgi-bin/ directory and set permissions as necessary.
|
||||
|
||||
Once mimetex.cgi is working (and you're done playing with it),
|
||||
mv it to your server's cgi-bin/ directory, where cgi programs
|
||||
are expected (and chmod/chown it if necessary). Then mv
|
||||
mimetex.html to your server's htdocs/ directory. Now point
|
||||
your browser to www.yourdomain.com/mimetex.html , and it should
|
||||
be rendered exactly like my page at www.forkosh.com/mimetex.html .
|
||||
One "gotcha": the two directories are typically of the form
|
||||
somewhere/www/cgi-bin/ and somewhere/www/htdocs/ , so I set up
|
||||
mimtex.html to get mimetex.cgi from the relative path ../cgi-bin/ .
|
||||
If your directories are non-conforming, you may have to edit the
|
||||
few dozen occurrences of ../cgi-bin/mimetex.cgi in mimetex.html
|
||||
(globally changing ../cgi-bin/mimetex.cgi should work).
|
||||
Sometimes a suitable symlink works; if not, you'll have to edit.
|
||||
Once mimetex.cgi is working, mv it to your server's cgi-bin/ directory
|
||||
(wherever cgi programs are expected), and chmod/chown it as necessary.
|
||||
Then mv mimetex.html to your server's htdocs/ directory. Now point
|
||||
your browser to www.yourdomain.com/mimetex.html and you should see
|
||||
your mimeTeX user's manual reference page.
|
||||
|
||||
Either way, once mimetex.html displays properly, and you've reviewed
|
||||
the tutorial it contains, you can begin writing html documents using
|
||||
mimetex.cgi to render your math.
|
||||
Install Notes:
|
||||
* These two directories are typically of the form
|
||||
somewhere/www/cgi-bin/ and somewhere/www/htdocs/
|
||||
so I set up mimtex.html to access mimetex.cgi from
|
||||
the relative path ../cgi-bin/ If your directories
|
||||
are non-conforming, you may have to edit the few dozen
|
||||
occurrences of ../cgi-bin/mimetex.cgi in mimetex.html
|
||||
Sometimes a suitable symlink works. If not, you'll
|
||||
have to edit. In that case, globally changing
|
||||
../cgi-bin/mimetex.cgi often works.
|
||||
* Either way, once mimetex.html displays properly, you can
|
||||
assume everything is working, and can begin authoring html
|
||||
documents using mimetex.cgi to render your own math.
|
||||
|
||||
|
||||
IV. REVISION HISTORY
|
||||
------------------------------------------------------------------------
|
||||
01/11/04 J.Forkosh version 1.40 beta released on www.forkosh.com
|
||||
LaTeX compatibility and various new features
|
||||
A more detailed account of mimeTeX's revision history
|
||||
is maintained at http://www.forkosh.com/mimetexchangelog.html
|
||||
---
|
||||
09/06/08 J.Forkosh version 1.70 released.
|
||||
11/30/04 J.Forkosh version 1.60 released
|
||||
10/02/04 J.Forkosh version 1.50 released on CTAN with various new
|
||||
features and fixes, and updated documentation.
|
||||
07/18/04 J.Forkosh version 1.40 re-released on CTAN with minor
|
||||
changes, e.g., \mathbb font and nested \array's
|
||||
now supported.
|
||||
03/21/04 J.Forkosh version 1.40 released on CTAN, with improved
|
||||
LaTeX compatibility, various new features and
|
||||
fixes, including fix to work under Windows.
|
||||
12/21/03 J.Forkosh version 1.30 released on CTAN, with improved
|
||||
LaTeX compatibility and anti-aliasing, various new
|
||||
features, and thoroughly updated documentation.
|
||||
@@ -183,9 +212,5 @@ V. CONCLUDING REMARKS
|
||||
I hope you find mimeTeX useful. If so, a contribution to your
|
||||
country's TeX Users Group, or to the GNU project, is suggested,
|
||||
especially if you're a company that's currently profitable.
|
||||
|
||||
If you also like mimeTeX's source, I'm an independent contractor
|
||||
incorporated in the US as John Forkosh Associates, Inc. A resume
|
||||
is at www.forkosh.com or email john@forkosh.com
|
||||
========================= END-OF-FILE README ===========================
|
||||
|
||||
|
||||
@@ -44,9 +44,11 @@
|
||||
* @return string the latex document
|
||||
*/
|
||||
function construct_latex_document( $formula, $fontsize=12 ) {
|
||||
// $fontsize don't affects to formula's size. $density can change size
|
||||
|
||||
global $CFG;
|
||||
|
||||
$formula = tex_sanitize_formula($formula);
|
||||
|
||||
// $fontsize don't affects to formula's size. $density can change size
|
||||
$doc = "\\documentclass[{$fontsize}pt]{article}\n";
|
||||
$doc .= $CFG->filter_tex_latexpreamble;
|
||||
$doc .= "\\pagestyle{empty}\n";
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php //$Id$
|
||||
|
||||
function tex_sanitize_formula($texexp) {
|
||||
/// Check $texexp against blacklist (whitelisting could be more complete but also harder to maintain)
|
||||
$tex_blacklist = array(
|
||||
'include','command','loop','repeat','open','toks','output',
|
||||
'input','catcode','name','^^',
|
||||
'\def','\edef','\gdef','\xdef',
|
||||
'\every','\errhelp','\errorstopmode','\scrollmode','\nonstopmode',
|
||||
'\batchmode','\read','\write','csname','\newhelp','\uppercase',
|
||||
'\lowercase','\relax','\aftergroup',
|
||||
'\afterassignment','\expandafter','\noexpand','\special',
|
||||
'\let', '\futurelet','\else','\fi','\chardef','\makeatletter','\afterground',
|
||||
'\noexpand','\line','\mathcode','\item','\section','\mbox','\declarerobustcommand'
|
||||
);
|
||||
|
||||
return str_ireplace($tex_blacklist, 'forbiddenkeyword', $texexp);
|
||||
}
|
||||
|
||||
/**
|
||||
* Purge all caches when settings changed.
|
||||
*/
|
||||
function filter_tex_updatedcallback($name) {
|
||||
global $CFG;
|
||||
|
||||
if (file_exists("$CFG->dataroot/filter/tex")) {
|
||||
remove_dir("$CFG->dataroot/filter/tex");
|
||||
}
|
||||
if (file_exists("$CFG->dataroot/filter/algebra")) {
|
||||
remove_dir("$CFG->dataroot/filter/algebra");
|
||||
}
|
||||
if (file_exists("$CFG->dataroot/temp/latex")) {
|
||||
remove_dir("$CFG->dataroot/temp/latex");
|
||||
}
|
||||
|
||||
delete_records('cache_filters', 'filter', 'tex');
|
||||
delete_records('cache_filters', 'filter', 'algebra');
|
||||
}
|
||||
|
||||
?>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+18
-6
@@ -6,7 +6,18 @@
|
||||
$nomoodlecookie = true; // Because it interferes with caching
|
||||
|
||||
require_once('../../config.php');
|
||||
|
||||
if (empty($CFG->textfilters)) {
|
||||
error ('Filter not enabled!');
|
||||
} else {
|
||||
$filters = explode(',', $CFG->textfilters);
|
||||
if (array_search('filter/tex', $filters) === FALSE) {
|
||||
error ('Filter not enabled!');
|
||||
}
|
||||
}
|
||||
|
||||
require_once($CFG->libdir.'/filelib.php');
|
||||
require_once($CFG->dirroot.'/filter/tex/lib.php');
|
||||
require_once('defaultsettings.php' );
|
||||
require_once('latex.php');
|
||||
|
||||
@@ -55,29 +66,30 @@
|
||||
$texexp = str_replace('>','>',$texexp);
|
||||
$texexp = preg_replace('!\r\n?!',' ',$texexp);
|
||||
$texexp = '\Large ' . $texexp;
|
||||
$texexp = tex_sanitize_formula($texexp);
|
||||
$texexp = escapeshellarg($texexp);
|
||||
|
||||
if ((PHP_OS == "WINNT") || (PHP_OS == "WIN32") || (PHP_OS == "Windows")) {
|
||||
$texexp = str_replace('"','\"',$texexp);
|
||||
$cmd = "$CFG->dirroot/$CFG->texfilterdir/mimetex.exe";
|
||||
$cmd = str_replace(' ','^ ',$cmd);
|
||||
$cmd .= " ++ -e \"$pathname\" -- \"$texexp\"";
|
||||
$cmd .= " ++ -e \"$pathname\" -- $texexp";
|
||||
} else if (is_executable("$CFG->dirroot/$CFG->texfilterdir/mimetex")) { /// Use the custom binary
|
||||
|
||||
$cmd = "$CFG->dirroot/$CFG->texfilterdir/mimetex -e $pathname -- ". escapeshellarg($texexp);
|
||||
$cmd = "$CFG->dirroot/$CFG->texfilterdir/mimetex -e $pathname -- $texexp";
|
||||
|
||||
} else { /// Auto-detect the right TeX binary
|
||||
switch (PHP_OS) {
|
||||
|
||||
case "Linux":
|
||||
$cmd = "\"$CFG->dirroot/$CFG->texfilterdir/mimetex.linux\" -e \"$pathname\" -- ". escapeshellarg($texexp);
|
||||
$cmd = "\"$CFG->dirroot/$CFG->texfilterdir/mimetex.linux\" -e \"$pathname\" -- $texexp";
|
||||
break;
|
||||
|
||||
case "Darwin":
|
||||
$cmd = "\"$CFG->dirroot/$CFG->texfilterdir/mimetex.darwin\" -e \"$pathname\" -- ". escapeshellarg($texexp);
|
||||
$cmd = "\"$CFG->dirroot/$CFG->texfilterdir/mimetex.darwin\" -e \"$pathname\" -- $texexp";
|
||||
break;
|
||||
|
||||
case "FreeBSD":
|
||||
$cmd = "\"$CFG->dirroot/$CFG->texfilterdir/mimetex.freebsd\" -e \"$pathname\" ". escapeshellarg($texexp);
|
||||
$cmd = "\"$CFG->dirroot/$CFG->texfilterdir/mimetex.freebsd\" -e \"$pathname\" $texexp";
|
||||
break;
|
||||
|
||||
default: /// Nothing was found, so tell them how to fix it.
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
Description of mimeTeX v 1.70 import into Moodle
|
||||
|
||||
Compiling mimeTeX:
|
||||
|
||||
===Windows===
|
||||
1/ get "Automated MinGW Installer" from https://sourceforge.net/projects/mingw/files/
|
||||
2/ install mingw
|
||||
3/ go into directory with extracted source files
|
||||
4/ execute "c:\mingw\bin\gcc -DAA -DWINDOWS mimetex.c gifsave.c -lm -o mimetex.exe"
|
||||
|
||||
===Linux===
|
||||
1/ install gcc
|
||||
2/ go into directory with extracted source files
|
||||
3/ execute "cc -DAA mimetex.c gifsave.c -lm -o mimetex.linux"
|
||||
|
||||
===FreeBSD===
|
||||
1/ go into directory with extracted source files
|
||||
2/ execute "cc -DAA mimetex.c gifsave.c -lm -o mimetex.freebsd"
|
||||
|
||||
===Apple OSX===
|
||||
1/ install gcc
|
||||
2/ go into directory with extracted source files
|
||||
3/ execute "cc -DAA mimetex.c gifsave.c -lm -o mimetex.darwin"
|
||||
|
||||
skodak
|
||||
+31
-16
@@ -1,15 +1,29 @@
|
||||
<?PHP // $Id$
|
||||
<?php // $Id$
|
||||
// This function fetches math. images from the data directory
|
||||
// If not, it obtains the corresponding TeX expression from the cache_tex db table
|
||||
// and uses mimeTeX to create the image file
|
||||
|
||||
$nomoodlecookie = true; // Because it interferes with caching
|
||||
|
||||
require_once("../../config.php");
|
||||
|
||||
if (empty($CFG->textfilters)) {
|
||||
error ('Filter not enabled!');
|
||||
} else {
|
||||
$filters = explode(',', $CFG->textfilters);
|
||||
if (array_search('filter/tex', $filters) === FALSE) {
|
||||
error ('Filter not enabled!');
|
||||
}
|
||||
}
|
||||
|
||||
require_once($CFG->dirroot.'/filter/tex/lib.php');
|
||||
|
||||
$CFG->texfilterdir = "filter/tex";
|
||||
$CFG->teximagedir = "filter/tex";
|
||||
|
||||
require_login();
|
||||
if (!isadmin()) {
|
||||
error('Sorry, but you do not currently have permissions to do that');
|
||||
}
|
||||
|
||||
$query = urldecode($_SERVER['QUERY_STRING']);
|
||||
error_reporting(E_ALL);
|
||||
|
||||
@@ -102,31 +116,32 @@
|
||||
}
|
||||
$commandpath = "";
|
||||
$cmd = "";
|
||||
$texexp = tex_sanitize_formula($texexp);
|
||||
$texexp = escapeshellarg($texexp);
|
||||
switch (PHP_OS) {
|
||||
case "Linux":
|
||||
$commandpath="$CFG->dirroot/$CFG->texfilterdir/mimetex.linux";
|
||||
$cmd = "\"$CFG->dirroot/$CFG->texfilterdir/mimetex.linux\" -e \"$pathname\" ". escapeshellarg($texexp);
|
||||
$cmd = "\"$CFG->dirroot/$CFG->texfilterdir/mimetex.linux\" -e \"$pathname\" $texexp";
|
||||
break;
|
||||
case "WINNT":
|
||||
case "WIN32":
|
||||
case "Windows":
|
||||
case "WIN32":
|
||||
case "Windows":
|
||||
$commandpath="$CFG->dirroot/$CFG->texfilterdir/mimetex.exe";
|
||||
$texexp = str_replace('"','\"',$texexp);
|
||||
$cmd = str_replace(' ','^ ',$commandpath);
|
||||
$cmd .= " ++ -e \"$pathname\" \"$texexp\"";
|
||||
$cmd = str_replace(' ','^ ',$commandpath);
|
||||
$cmd .= " ++ -e \"$pathname\" $texexp";
|
||||
break;
|
||||
case "Darwin":
|
||||
$commandpath="$CFG->dirroot/$CFG->texfilterdir/mimetex.darwin";
|
||||
$cmd = "\"$CFG->dirroot/$CFG->texfilterdir/mimetex.darwin\" -e \"$pathname\" ". escapeshellarg($texexp);
|
||||
$cmd = "\"$CFG->dirroot/$CFG->texfilterdir/mimetex.darwin\" -e \"$pathname\" $texexp";
|
||||
break;
|
||||
}
|
||||
if (!$cmd) {
|
||||
if (is_executable("$CFG->dirroot/$CFG->texfilterdir/mimetex")) { /// Use the custom binary
|
||||
$commandpath="$CFG->dirroot/$CFG->texfilterdir/mimetex";
|
||||
$cmd = "$CFG->dirroot/$CFG->texfilterdir/mimetex -e $pathname ". escapeshellarg($texexp);
|
||||
} else {
|
||||
error($error_message1);
|
||||
}
|
||||
if (is_executable("$CFG->dirroot/$CFG->texfilterdir/mimetex")) { /// Use the custom binary
|
||||
$commandpath="$CFG->dirroot/$CFG->texfilterdir/mimetex";
|
||||
$cmd = "$CFG->dirroot/$CFG->texfilterdir/mimetex -e $pathname $texexp";
|
||||
} else {
|
||||
error($error_message1);
|
||||
}
|
||||
}
|
||||
system($cmd, $status);
|
||||
}
|
||||
|
||||
+18
-6
@@ -6,6 +6,16 @@
|
||||
$nomoodlecookie = true; // Because it interferes with caching
|
||||
|
||||
require_once("../../config.php");
|
||||
require_once($CFG->dirroot.'/filter/tex/lib.php');
|
||||
|
||||
if (empty($CFG->textfilters)) {
|
||||
error ('Filter not enabled!');
|
||||
} else {
|
||||
$filters = explode(',', $CFG->textfilters);
|
||||
if (array_search('filter/tex', $filters) === FALSE) {
|
||||
error ('Filter not enabled!');
|
||||
}
|
||||
}
|
||||
|
||||
$CFG->texfilterdir = "filter/tex";
|
||||
$CFG->teximagedir = "filter/tex";
|
||||
@@ -23,18 +33,20 @@
|
||||
make_upload_directory($CFG->teximagedir);
|
||||
}
|
||||
$pathname = "$CFG->dataroot/$CFG->teximagedir/$image";
|
||||
$texexp = tex_sanitize_formula($texexp);
|
||||
$texexp = escapeshellarg($texexp);
|
||||
|
||||
switch (PHP_OS) {
|
||||
case "Linux":
|
||||
system("$CFG->dirroot/$CFG->texfilterdir/mimetex.linux -e $pathname -- ". escapeshellarg($texexp) );
|
||||
system("$CFG->dirroot/$CFG->texfilterdir/mimetex.linux -e $pathname -- $texexp" );
|
||||
break;
|
||||
case "WINNT":
|
||||
case "WIN32":
|
||||
case "Windows":
|
||||
$texexp = str_replace('"','\"',$texexp);
|
||||
system("$CFG->dirroot/$CFG->texfilterdir/mimetex.exe -e $pathname -- \"$texexp\"");
|
||||
case "WIN32":
|
||||
case "Windows":
|
||||
system("$CFG->dirroot/$CFG->texfilterdir/mimetex.exe -e $pathname -- $texexp");
|
||||
break;
|
||||
case "Darwin":
|
||||
system("$CFG->dirroot/$CFG->texfilterdir/mimetex.darwin -e $pathname -- ". escapeshellarg($texexp) );
|
||||
system("$CFG->dirroot/$CFG->texfilterdir/mimetex.darwin -e $pathname -- $texexp" );
|
||||
break;
|
||||
}
|
||||
if (file_exists($pathname)) {
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
* @param string text to be filtered
|
||||
*/
|
||||
function tidy_filter($courseid, $text) {
|
||||
|
||||
global $CFG;
|
||||
/// Configuration for tidy. Feel free to tune for your needs, e.g. to allow
|
||||
/// proprietary markup.
|
||||
$tidyoptions = array(
|
||||
@@ -39,7 +39,11 @@ function tidy_filter($courseid, $text) {
|
||||
|
||||
/// If enabled: run tidy over the entire string
|
||||
if (function_exists('tidy_repair_string')){
|
||||
$text = tidy_repair_string($text, $tidyoptions);
|
||||
if (empty($CFG->unicodedb)) {
|
||||
$text = tidy_repair_string($text, $tidyoptions);
|
||||
} else {
|
||||
$text = tidy_repair_string($text, $tidyoptions, 'utf8');
|
||||
}
|
||||
}
|
||||
|
||||
return $text;
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
$user = optional_param('user', -1);
|
||||
$group = optional_param('group', -1);
|
||||
$action = optional_param('action', 'grades');
|
||||
$cview = optional_param('cview', -1);
|
||||
|
||||
if (!$course = get_record('course', 'id', $id)) {
|
||||
error('No course ID');
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user