Compare commits

..

1067 Commits

Author SHA1 Message Date
Moodle Robot 91a4999982 Updated the 18 build version to 20101214 2010-12-14 00:54:55 +00:00
Moodle Robot 598c50dc37 Updated the 18 build version to 20101213 2010-12-13 00:52:25 +00:00
Moodle Robot 2fc6143a56 Updated the 18 build version to 20101212 2010-12-12 00:52:25 +00:00
Moodle Robot 956f89e1e2 Updated the 18 build version to 20101211 2010-12-11 00:52:26 +00:00
Moodle Robot 48b67cc745 Updated the 18 build version to 20101210 2010-12-10 00:53:25 +00:00
Moodle Robot fb7e7c7b0b Updated the 18 build version to 20101209 2010-12-09 00:53:12 +00:00
Moodle Robot 7021a537c4 Updated the 18 build version to 20101208 2010-12-08 00:53:22 +00:00
Moodle Robot 20440468dd Updated the 18 build version to 20101207 2010-12-07 00:52:58 +00:00
Moodle Robot 9d4774e8d0 Updated the 18 build version to 20101206 2010-12-06 00:57:16 +00:00
Moodle Robot a45a4d3bd4 Updated the 18 build version to 20101205 2010-12-05 00:55:09 +00:00
Moodle Robot ea6a4b2e51 Updated the 18 build version to 20101204 2010-12-04 00:56:39 +00:00
Martin Dougiamas 8fcc4de423 Bumping to final 1.8 release, 1.8.14 2010-12-03 07:11:02 +00:00
Moodle Robot f3777e6c0f Updated the 18 build version to 20101203 2010-12-03 00:52:47 +00:00
Moodle Robot 5a9c08df4b Updated the 18 build version to 20101202 2010-12-02 00:53:22 +00:00
Moodle Robot 5168c7062a Updated the 18 build version to 20101201 2010-12-01 00:52:44 +00:00
Moodle Robot c81471cfc6 Updated the 18 build version to 20101130 2010-11-30 00:55:23 +00:00
Moodle Robot 67d307a640 Updated the 18 build version to 20101129 2010-11-29 00:54:35 +00:00
Moodle Robot 8a400a03f0 Updated the 18 build version to 20101128 2010-11-28 00:53:10 +00:00
Moodle Robot b949342640 Updated the 18 build version to 20101127 2010-11-27 00:54:21 +00:00
Moodle Robot e9765955b0 Updated the 18 build version to 20101126 2010-11-26 00:54:36 +00:00
Moodle Robot 1cd6c832f9 Updated the 18 build version to 20101125 2010-11-25 00:53:25 +00:00
Moodle Robot 93e7c086f2 Updated the 18 build version to 20101124 2010-11-24 00:54:10 +00:00
Moodle Robot a6f9cf8fbc Updated the 18 build version to 20101123 2010-11-23 00:52:50 +00:00
Moodle Robot 705079bb35 Updated the 18 build version to 20101122 2010-11-22 00:55:42 +00:00
Moodle Robot 813518590e Updated the 18 build version to 20101121 2010-11-21 00:55:28 +00:00
Moodle Robot 07d593e9f2 Updated the 18 build version to 20101120 2010-11-20 01:02:59 +00:00
Moodle Robot a11cbd84e0 Updated the 18 build version to 20101119 2010-11-19 00:56:49 +00:00
Inaki d485928c12 auth/cas: MDL-25062 CAS authentication plugin does not validate the CAS server certificate
If we enable the server validation but don't specify a certificate file path
flag the error and don't let the user save the settings.
2010-11-18 00:59:50 +00:00
Moodle Robot b404d8797d Updated the 18 build version to 20101118 2010-11-18 00:51:17 +00:00
Inaki d2bdcac8a9 auth/cas: MDL-25062 CAS authentication plugin does not validate the CAS server certificate
The CAS protocol security model requires that you verify the cas server
certificate before you trust the answer (valid authentication and username
etc.).

Credit goes to Joachim Fritschi for reporting it and providing a patch.
2010-11-18 00:07:23 +00:00
Moodle Robot 9afe740c6e Updated the 18 build version to 20101117 2010-11-17 00:51:51 +00:00
Moodle Robot a43207dc85 Updated the 18 build version to 20101116 2010-11-16 00:52:28 +00:00
Moodle Robot 98b075a454 Updated the 18 build version to 20101115 2010-11-15 00:51:44 +00:00
Moodle Robot 54ae520274 Updated the 18 build version to 20101114 2010-11-14 00:50:59 +00:00
Moodle Robot febfeaf598 Updated the 18 build version to 20101113 2010-11-13 00:50:55 +00:00
Moodle Robot b9665250bb Updated the 18 build version to 20101112 2010-11-12 00:52:13 +00:00
Moodle Robot 6e4c8a57e9 Updated the 18 build version to 20101111 2010-11-11 00:52:48 +00:00
Moodle Robot e17875ca8e Updated the 18 build version to 20101110 2010-11-10 00:50:31 +00:00
Moodle Robot ac3ace7bef Updated the 18 build version to 20101109 2010-11-09 00:53:09 +00:00
Moodle Robot d9dcc01f59 Updated the 18 build version to 20101108 2010-11-08 00:53:27 +00:00
Moodle Robot f0171d8b8d Updated the 18 build version to 20101107 2010-11-07 00:52:24 +00:00
Moodle Robot 28216ef0f0 Updated the 18 build version to 20101106 2010-11-06 00:51:15 +00:00
Moodle Robot 94b6c5e758 Updated the 18 build version to 20101105 2010-11-05 00:50:26 +00:00
Moodle Robot 9d53e426cd Updated the 18 build version to 20101104 2010-11-04 00:52:06 +00:00
Moodle Robot 3ae8fe1a6f Updated the 18 build version to 20101103 2010-11-03 00:52:13 +00:00
Moodle Robot a03e137025 Updated the 18 build version to 20101102 2010-11-02 00:52:16 +00:00
Moodle Robot f1e5f47472 Updated the 18 build version to 20101101 2010-11-01 00:50:41 +00:00
Moodle Robot 5a4b37e5f9 Updated the 18 build version to 20101031 2010-10-31 00:55:49 +00:00
Moodle Robot 76077ff00e Updated the 18 build version to 20101030 2010-10-30 00:53:32 +00:00
Moodle Robot 5882b7e958 Updated the 18 build version to 20101029 2010-10-29 00:56:21 +00:00
Moodle Robot 3b08e8f701 Updated the 18 build version to 20101028 2010-10-28 00:52:26 +00:00
Moodle Robot be06baf98a Updated the 18 build version to 20101027 2010-10-27 00:52:51 +00:00
Moodle Robot 6a17872b0c Updated the 18 build version to 20101026 2010-10-26 00:55:54 +00:00
Eloy Lafuente 31833a1e25 MDL-24836 data - fix causing DBs with new file fields to boom updating records 2010-10-25 08:21:47 +00:00
Moodle Robot 1898f271c1 Updated the 18 build version to 20101025 2010-10-25 00:53:16 +00:00
Inaki 2edb3c6a5c auth/cas MDL-24789 phpCAS single sign-on module client needs updating due to security issues
Upgraded phpCAS to 1.1.3 (latest stable version) in Moodle 1.8.x, which fixes them.

Also fixed as part of this update:
   MDL-20029
   MDL-23126
   MDL-23645
   MDL-23864
   MDL-16168
   MDL-18643
2010-10-24 14:53:42 +00:00
Moodle Robot c3ff238e7f Updated the 18 build version to 20101024 2010-10-24 00:56:27 +00:00
Moodle Robot 4e4aa7e2b9 Updated the 18 build version to 20101023 2010-10-23 00:53:51 +00:00
Petr Skoda 939e0afcd5 MDL-24258 backporting security fix 2010-10-22 12:24:57 +00:00
Petr Skoda ecf7cfb58e MDL-24523 markdown may contain html, we need to clean it too 2010-10-22 12:10:43 +00:00
Moodle Robot 6545e7d543 Updated the 18 build version to 20101022 2010-10-22 00:54:32 +00:00
Gordon Bateson 5c784cd971 MDL-24779 mod/hotpot tidy up calls to js_value() method which escapes and encodes unicode strings for javascript 2010-10-21 03:17:49 +00:00
Moodle Robot 0d2d9d3524 Updated the 18 build version to 20101021 2010-10-21 00:59:18 +00:00
Moodle Robot 5429d7b3f7 Updated the 18 build version to 20101020 2010-10-20 00:50:09 +00:00
Moodle Robot 8025224e92 Updated the 18 build version to 20101019 2010-10-19 00:49:43 +00:00
Moodle Robot 2fcc1557c3 Updated the 18 build version to 20101018 2010-10-18 00:50:13 +00:00
Moodle Robot cc3a0f4023 Updated the 18 build version to 20101017 2010-10-17 00:49:16 +00:00
Moodle Robot 6efe22d362 Updated the 18 build version to 20101016 2010-10-16 00:49:55 +00:00
Moodle Robot d62f307617 Updated the 18 build version to 20101015 2010-10-15 00:50:43 +00:00
Moodle Robot 0a5aa11fbc Updated the 18 build version to 20101014 2010-10-14 00:50:38 +00:00
Moodle Robot c4f7e8d327 Updated the 18 build version to 20101013 2010-10-13 00:49:36 +00:00
Moodle Robot 9322a55fe1 Updated the 18 build version to 20101012 2010-10-12 00:50:57 +00:00
Moodle Robot ea8cf22046 Updated the 18 build version to 20101011 2010-10-11 00:52:19 +00:00
Moodle Robot 4b40a76103 Updated the 18 build version to 20101010 2010-10-10 00:49:05 +00:00
Moodle Robot 91b632dcfe Updated the 18 build version to 20101009 2010-10-09 00:50:07 +00:00
Moodle Robot 859c84e5b2 Updated the 18 build version to 20101008 2010-10-08 00:50:14 +00:00
Moodle Robot 5e645c4a5f Updated the 18 build version to 20101007 2010-10-07 00:49:20 +00:00
Moodle Robot f95b27fdd7 Updated the 18 build version to 20101006 2010-10-06 00:50:25 +00:00
Moodle Robot 1d25548a48 Updated the 18 build version to 20101005 2010-10-05 00:49:43 +00:00
Moodle Robot 45334ae995 Updated the 18 build version to 20101004 2010-10-04 00:49:58 +00:00
Moodle Robot 69dd039899 Updated the 18 build version to 20101003 2010-10-03 00:52:45 +00:00
Moodle Robot d54d1e93fa Updated the 18 build version to 20101002 2010-10-02 00:53:29 +00:00
Moodle Robot a47ab95f2b Updated the 18 build version to 20101001 2010-10-01 00:53:06 +00:00
Moodle Robot de9f980163 Updated the 18 build version to 20100930 2010-09-30 00:53:12 +00:00
Moodle Robot e5e357c1db Updated the 18 build version to 20100929 2010-09-29 00:55:23 +00:00
Moodle Robot b0c2c0e890 Updated the 18 build version to 20100928 2010-09-28 00:54:23 +00:00
Moodle Robot 938e2c1807 Updated the 18 build version to 20100927 2010-09-27 00:54:39 +00:00
Moodle Robot 41bdc8617c Updated the 18 build version to 20100926 2010-09-26 00:52:40 +00:00
Moodle Robot 415a65986c Updated the 18 build version to 20100925 2010-09-25 00:55:04 +00:00
Moodle Robot 389ef88f64 Updated the 18 build version to 20100924 2010-09-24 00:54:15 +00:00
Moodle Robot 9320860d08 Updated the 18 build version to 20100923 2010-09-23 00:53:38 +00:00
Moodle Robot cb2138623f Updated the 18 build version to 20100922 2010-09-22 00:57:29 +00:00
Moodle Robot aac9ca28fa Updated the 18 build version to 20100921 2010-09-21 00:53:51 +00:00
Moodle Robot cf4e149e28 Updated the 18 build version to 20100920 2010-09-20 00:52:55 +00:00
Moodle Robot ab7b1a6375 Updated the 18 build version to 20100919 2010-09-19 00:54:01 +00:00
Moodle Robot 970fb4989a Updated the 18 build version to 20100918 2010-09-18 00:54:31 +00:00
Eloy Lafuente df9c5ff7c8 Initial commit of dz_utf8 installer lang strings for 18_STABLE 2010-09-17 16:44:02 +00:00
Moodle Robot 8ac128cf0b Updated the 18 build version to 20100917 2010-09-17 00:53:10 +00:00
Moodle Robot 209296ec52 Updated the 18 build version to 20100916 2010-09-16 00:54:17 +00:00
Moodle Robot 2f94e91e9e Automatic installer.php lang files by installer_builder (20100916) 2010-09-16 00:49:34 +00:00
Eloy Lafuente c558941cf5 MDL-24207 dml - fix in oracle fallabck for sequences that shouldn't be executed ever. Backported from 19_STABLE 2010-09-15 20:09:58 +00:00
Moodle Robot 3b7661ab80 Updated the 18 build version to 20100915 2010-09-15 00:56:55 +00:00
Moodle Robot cb523cc2c2 Updated the 18 build version to 20100914 2010-09-14 00:54:38 +00:00
Moodle Robot 5f630aeb40 Automatic installer.php lang files by installer_builder (20100914) 2010-09-14 00:49:36 +00:00
Eloy Lafuente 77a6439afa MDL-24189 data module restore - Fix 1.x comments and ratings restore. Were missing user remappings. Backported from 19_STABLE 2010-09-13 21:18:42 +00:00
Moodle Robot 05dd6e569f Updated the 18 build version to 20100913 2010-09-13 00:54:46 +00:00
Moodle Robot c52a293b12 Updated the 18 build version to 20100912 2010-09-12 00:53:20 +00:00
Moodle Robot bd31d8b20d Updated the 18 build version to 20100911 2010-09-11 00:54:18 +00:00
Moodle Robot 07710fbe39 Updated the 18 build version to 20100910 2010-09-10 00:52:59 +00:00
Moodle Robot a718d20141 Updated the 18 build version to 20100909 2010-09-09 00:54:33 +00:00
Moodle Robot c721ad46fa Updated the 18 build version to 20100908 2010-09-08 00:55:42 +00:00
Moodle Robot f353b5bad8 Updated the 18 build version to 20100907 2010-09-07 00:55:50 +00:00
Moodle Robot ba231d1b51 Updated the 18 build version to 20100906 2010-09-06 00:53:07 +00:00
Moodle Robot c9f0e186ac Updated the 18 build version to 20100905 2010-09-05 00:52:56 +00:00
Moodle Robot e873e34ae5 Updated the 18 build version to 20100904 2010-09-04 00:53:09 +00:00
Moodle Robot b9d1f0f8e3 Updated the 18 build version to 20100903 2010-09-03 00:53:48 +00:00
Moodle Robot da5f5bf10b Updated the 18 build version to 20100902 2010-09-02 00:52:57 +00:00
Moodle Robot 87c53fa008 Updated the 18 build version to 20100901 2010-09-01 00:55:51 +00:00
Moodle Robot 28bdb67567 Automatic installer.php lang files by installer_builder (20100901) 2010-09-01 00:50:18 +00:00
Moodle Robot 560b42ea50 Updated the 18 build version to 20100831 2010-08-31 00:55:01 +00:00
Moodle Robot bc21889450 Updated the 18 build version to 20100830 2010-08-30 00:50:06 +00:00
Moodle Robot b07bdad4db Updated the 18 build version to 20100829 2010-08-29 00:49:53 +00:00
Moodle Robot 4eaed46e0d Updated the 18 build version to 20100828 2010-08-28 00:49:26 +00:00
Moodle Robot 653534b382 Updated the 18 build version to 20100827 2010-08-27 00:51:03 +00:00
Moodle Robot d7090bf823 Updated the 18 build version to 20100826 2010-08-26 00:49:32 +00:00
Moodle Robot 703dc4d54e Updated the 18 build version to 20100825 2010-08-25 00:49:35 +00:00
Moodle Robot 4c956ace90 Updated the 18 build version to 20100824 2010-08-24 00:50:43 +00:00
Moodle Robot ac9d0e56ee Updated the 18 build version to 20100823 2010-08-23 00:49:40 +00:00
Moodle Robot 09b3f40832 Updated the 18 build version to 20100822 2010-08-22 00:49:09 +00:00
Moodle Robot eb9c0a4f22 Updated the 18 build version to 20100821 2010-08-21 00:49:10 +00:00
Moodle Robot e7840979c3 Updated the 18 build version to 20100820 2010-08-20 00:49:22 +00:00
Moodle Robot 749fdc8946 Updated the 18 build version to 20100819 2010-08-19 00:49:37 +00:00
Moodle Robot e3892e3742 Updated the 18 build version to 20100818 2010-08-18 00:50:18 +00:00
Moodle Robot df67c4a240 Updated the 18 build version to 20100817 2010-08-17 00:50:01 +00:00
Moodle Robot cf47287b2c Updated the 18 build version to 20100816 2010-08-16 00:48:47 +00:00
Moodle Robot d028c7a3bb Updated the 18 build version to 20100815 2010-08-15 00:49:55 +00:00
Moodle Robot 9938deb8a4 Automatic installer.php lang files by installer_builder (20100815) 2010-08-15 00:45:31 +00:00
Moodle Robot 7268617403 Updated the 18 build version to 20100814 2010-08-14 00:49:06 +00:00
Moodle Robot 27b62c0ff7 Automatic installer.php lang files by installer_builder (20100814) 2010-08-14 00:44:40 +00:00
Moodle Robot 8c7b8984ab Updated the 18 build version to 20100813 2010-08-13 00:49:03 +00:00
Moodle Robot e36fd7190c Updated the 18 build version to 20100812 2010-08-12 00:49:07 +00:00
Moodle Robot cff8c9f065 Updated the 18 build version to 20100811 2010-08-11 00:52:54 +00:00
Moodle Robot c9a2d752a2 Automatic installer.php lang files by installer_builder (20100811) 2010-08-11 00:44:09 +00:00
Moodle Robot 04a58c452e Updated the 18 build version to 20100810 2010-08-10 00:48:56 +00:00
Moodle Robot 3f2a39dc80 Updated the 18 build version to 20100809 2010-08-09 00:48:09 +00:00
Moodle Robot dfcb219044 Updated the 18 build version to 20100808 2010-08-08 00:48:44 +00:00
Moodle Robot 6e38e23f99 Updated the 18 build version to 20100807 2010-08-07 00:48:48 +00:00
Moodle Robot f4f132967d Updated the 18 build version to 20100806 2010-08-06 00:47:58 +00:00
Moodle Robot 4860507ef4 Updated the 18 build version to 20100805 2010-08-05 00:48:10 +00:00
Moodle Robot 7fe120a623 Updated the 18 build version to 20100804 2010-08-04 00:48:57 +00:00
Moodle Robot 1c7289697c Updated the 18 build version to 20100803 2010-08-03 00:48:17 +00:00
Moodle Robot 7b1ad1d0cf Automatic installer.php lang files by installer_builder (20100803) 2010-08-03 00:44:25 +00:00
Moodle Robot 8b8bb58fd5 Updated the 18 build version to 20100802 2010-08-02 00:48:35 +00:00
Moodle Robot 0fd746feb1 Updated the 18 build version to 20100801 2010-08-01 00:52:06 +00:00
Moodle Robot 0f86b560e8 Updated the 18 build version to 20100731 2010-07-31 00:52:52 +00:00
Moodle Robot b845de8731 Updated the 18 build version to 20100730 2010-07-30 00:51:34 +00:00
Moodle Robot e9d8e31eff Updated the 18 build version to 20100729 2010-07-29 00:49:10 +00:00
mudrd8mz c4ee2a12da MDL-21845 multilang filter applied to custom field labels in user profile 2010-07-28 09:32:41 +00:00
Moodle Robot 90a6ca7677 Updated the 18 build version to 20100728 2010-07-28 00:50:46 +00:00
Moodle Robot 230d34ae71 Updated the 18 build version to 20100727 2010-07-27 00:48:46 +00:00
Moodle Robot 5c8f5c0742 Automatic installer.php lang files by installer_builder (20100727) 2010-07-27 00:44:27 +00:00
Moodle Robot 0058ea8022 Updated the 18 build version to 20100726 2010-07-26 00:48:27 +00:00
Moodle Robot af807ac0d9 Updated the 18 build version to 20100725 2010-07-25 00:48:12 +00:00
Moodle Robot 32ad45b489 Updated the 18 build version to 20100724 2010-07-24 00:48:45 +00:00
Moodle Robot 8f450e585b Updated the 18 build version to 20100723 2010-07-23 00:48:35 +00:00
Moodle Robot be0bc99ff5 Updated the 18 build version to 20100722 2010-07-22 00:48:24 +00:00
Moodle Robot b63f8ba62b Updated the 18 build version to 20100721 2010-07-21 00:52:42 +00:00
Moodle Robot 4502a44bbb Automatic installer.php lang files by installer_builder (20100721) 2010-07-21 00:44:45 +00:00
Moodle Robot 575e5578ca Updated the 18 build version to 20100720 2010-07-20 00:49:24 +00:00
Moodle Robot 83791cf5d2 Updated the 18 build version to 20100719 2010-07-19 00:47:55 +00:00
Moodle Robot 273dd7f236 Updated the 18 build version to 20100718 2010-07-18 00:47:57 +00:00
Moodle Robot 13120ea974 Automatic installer.php lang files by installer_builder (20100718) 2010-07-18 00:43:40 +00:00
Moodle Robot f95261b77a Updated the 18 build version to 20100717 2010-07-17 00:48:17 +00:00
Moodle Robot 5ae8ea65a5 Updated the 18 build version to 20100716 2010-07-16 00:48:25 +00:00
Moodle Robot fc8433d4ba Updated the 18 build version to 20100715 2010-07-15 00:48:37 +00:00
Moodle Robot 984a381d89 Updated the 18 build version to 20100714 2010-07-14 00:49:18 +00:00
Moodle Robot 457156d6c9 Updated the 18 build version to 20100713 2010-07-13 00:49:48 +00:00
Moodle Robot dcddb61181 Updated the 18 build version to 20100712 2010-07-12 00:47:38 +00:00
Moodle Robot 05d822c737 Updated the 18 build version to 20100711 2010-07-11 00:47:48 +00:00
Moodle Robot 0b1c8775c6 Updated the 18 build version to 20100710 2010-07-10 00:47:21 +00:00
Moodle Robot d3c9f52f32 Automatic installer.php lang files by installer_builder (20100710) 2010-07-10 00:43:16 +00:00
Moodle Robot 1073e6dfe0 Updated the 18 build version to 20100709 2010-07-09 00:47:28 +00:00
Moodle Robot 28f6a67812 Updated the 18 build version to 20100708 2010-07-08 00:47:42 +00:00
Moodle Robot c158500f85 Automatic installer.php lang files by installer_builder (20100708) 2010-07-08 00:43:30 +00:00
Moodle Robot 9decb58462 Updated the 18 build version to 20100707 2010-07-07 00:50:02 +00:00
Moodle Robot 52f6a7210b Updated the 18 build version to 20100706 2010-07-06 00:48:01 +00:00
Moodle Robot 73edc31649 Updated the 18 build version to 20100705 2010-07-05 00:47:59 +00:00
Moodle Robot 6843e26679 Updated the 18 build version to 20100704 2010-07-04 00:47:51 +00:00
Moodle Robot 03303a4d12 Updated the 18 build version to 20100703 2010-07-03 00:47:17 +00:00
Moodle Robot 3609534352 Updated the 18 build version to 20100702 2010-07-02 00:46:24 +00:00
Moodle Robot 9be175ce67 Automatic installer.php lang files by installer_builder (20100702) 2010-07-02 00:42:37 +00:00
Moodle Robot d10232b8d6 Updated the 18 build version to 20100701 2010-07-01 00:47:18 +00:00
Moodle Robot 21e8c1edcb Updated the 18 build version to 20100630 2010-06-30 00:48:22 +00:00
Moodle Robot 748e48b36d Updated the 18 build version to 20100629 2010-06-29 00:47:21 +00:00
Moodle Robot b2fea24a71 Updated the 18 build version to 20100628 2010-06-28 00:46:31 +00:00
Moodle Robot c330706d89 Updated the 18 build version to 20100627 2010-06-27 00:46:41 +00:00
Moodle Robot bb51bca67b Updated the 18 build version to 20100626 2010-06-26 00:47:51 +00:00
Moodle Robot 97eba3e7b7 Updated the 18 build version to 20100625 2010-06-25 00:47:00 +00:00
Moodle Robot 81c42169e4 Updated the 18 build version to 20100624 2010-06-24 00:46:45 +00:00
Moodle Robot c63d6849a7 Updated the 18 build version to 20100623 2010-06-23 00:47:59 +00:00
Moodle Robot 79038e381c Updated the 18 build version to 20100622 2010-06-22 00:47:03 +00:00
Moodle Robot bd5c233b29 Updated the 18 build version to 20100621 2010-06-21 00:46:52 +00:00
Moodle Robot f8167376b7 Updated the 18 build version to 20100620 2010-06-20 00:46:18 +00:00
Moodle Robot f455ab281e Updated the 18 build version to 20100619 2010-06-19 00:47:01 +00:00
Moodle Robot b9377821af Updated the 18 build version to 20100618 2010-06-18 00:46:43 +00:00
Moodle Robot f830d96882 Updated the 18 build version to 20100617 2010-06-17 00:47:16 +00:00
Moodle Robot f7504dd9f0 Updated the 18 build version to 20100616 2010-06-16 00:47:10 +00:00
Moodle Robot 57026c0d17 Updated the 18 build version to 20100615 2010-06-15 00:46:52 +00:00
Moodle Robot 45664c6fff Updated the 18 build version to 20100614 2010-06-14 00:46:39 +00:00
Moodle Robot 15f6880be5 Updated the 18 build version to 20100613 2010-06-13 00:46:52 +00:00
Moodle Robot 8fee645a75 Updated the 18 build version to 20100612 2010-06-12 00:47:38 +00:00
Moodle Robot 197d5fcf01 Updated the 18 build version to 20100611 2010-06-11 00:47:26 +00:00
Gordon Bateson ed83409b01 mod/hotpot MDL-22726 fix importing of intructions from a Hot Potatoes quiz file into the Moodle question bank 2010-06-10 23:40:27 +00:00
Moodle Robot 0af5b190f6 Bumping post 1.8.13 2010-06-10 15:03:32 +00:00
Moodle Robot 8a1f0191f2 Updated the 18 build version to 20100610 2010-06-10 00:46:32 +00:00
Moodle Robot 33b2861554 Updated the 18 build version to 20100609 2010-06-09 00:47:08 +00:00
Martin Dougiamas cfc7967fc8 Bump for 1.8.13 2010-06-08 06:33:19 +00:00
Moodle Robot 3403c723bc Updated the 18 build version to 20100608 2010-06-08 00:48:01 +00:00
Moodle Robot 02f40eeda5 Updated the 18 build version to 20100607 2010-06-07 00:47:42 +00:00
Moodle Robot 9bf8c632f2 Updated the 18 build version to 20100606 2010-06-06 00:46:34 +00:00
Moodle Robot 54a52f7201 Updated the 18 build version to 20100605 2010-06-05 00:46:30 +00:00
Petr Skoda 547a9cb49c MDL-22680 fixed new password setting 2010-06-04 18:09:39 +00:00
Moodle Robot 58e4541daa Updated the 18 build version to 20100604 2010-06-04 00:47:06 +00:00
Petr Skoda 8628d9d845 MDL-22042 fixed kses cleaning of html code 2010-06-03 08:27:06 +00:00
Petr Skoda 8f1ffd5b1c MDL-22040 converting username to html entities before outputting 2010-06-03 08:16:53 +00:00
Martin Dougiamas 1f283c9acd MDL-22631 Added some clean_param calls to clean the $_GET data and also added lots of warnings and info there. (Merged from 1.9) 2010-06-03 05:51:47 +00:00
Moodle Robot 4446f5f659 Updated the 18 build version to 20100603 2010-06-03 00:46:23 +00:00
Moodle Robot 75d51a164a Automatic installer.php lang files by installer_builder (20100603) 2010-06-03 00:42:21 +00:00
Moodle Robot 29dc9ed637 Updated the 18 build version to 20100602 2010-06-02 00:46:37 +00:00
Moodle Robot ebe6bab247 Automatic installer.php lang files by installer_builder (20100602) 2010-06-02 00:41:54 +00:00
Moodle Robot ce06a2bd25 Updated the 18 build version to 20100601 2010-06-01 00:45:53 +00:00
Moodle Robot 27f6b0d2e1 Updated the 18 build version to 20100531 2010-05-31 00:46:50 +00:00
Moodle Robot ba319fdf27 Updated the 18 build version to 20100530 2010-05-30 00:45:59 +00:00
Moodle Robot 043b13d660 Automatic installer.php lang files by installer_builder (20100530) 2010-05-30 00:41:25 +00:00
Moodle Robot ab9c862009 Updated the 18 build version to 20100529 2010-05-29 00:45:58 +00:00
Eloy Lafuente bfc0089906 MDL-22588 restore scales - fix scales not being assigned to target course. From 19_STABLE 2010-05-28 09:23:45 +00:00
Moodle Robot dd2244e890 Updated the 18 build version to 20100528 2010-05-28 00:46:06 +00:00
Moodle Robot 714f538102 Updated the 18 build version to 20100527 2010-05-27 00:45:50 +00:00
Moodle Robot db4be487f5 Updated the 18 build version to 20100526 2010-05-26 00:46:36 +00:00
Moodle Robot 502bfc0a6b Automatic installer.php lang files by installer_builder (20100526) 2010-05-26 00:41:50 +00:00
Moodle Robot 842e96cd22 Updated the 18 build version to 20100525 2010-05-25 00:44:44 +00:00
Moodle Robot 3b78c41c8d Updated the 18 build version to 20100524 2010-05-24 00:45:33 +00:00
Moodle Robot 1e316bfcbe Updated the 18 build version to 20100523 2010-05-23 00:45:47 +00:00
Moodle Robot 6999e5fa5e Updated the 18 build version to 20100522 2010-05-22 00:46:01 +00:00
Moodle Robot 89bbcb2505 Updated the 18 build version to 20100521 2010-05-21 00:44:46 +00:00
Moodle Robot 1342cbd428 Automatic installer.php lang files by installer_builder (20100521) 2010-05-21 00:40:45 +00:00
Moodle Robot 9a8e5f0040 Updated the 18 build version to 20100520 2010-05-20 00:45:50 +00:00
Moodle Robot 3d6b5d81bf Updated the 18 build version to 20100519 2010-05-19 00:46:13 +00:00
Moodle Robot d029313258 Updated the 18 build version to 20100518 2010-05-18 00:45:31 +00:00
Moodle Robot f52f7e9227 Updated the 18 build version to 20100517 2010-05-17 00:44:29 +00:00
Moodle Robot a0ad836435 Updated the 18 build version to 20100516 2010-05-16 00:44:10 +00:00
Moodle Robot 38f42843d5 Updated the 18 build version to 20100515 2010-05-15 00:45:19 +00:00
Moodle Robot 4b9505b4c8 Updated the 18 build version to 20100514 2010-05-14 00:44:45 +00:00
Moodle Robot a343f8d2d1 Updated the 18 build version to 20100513 2010-05-13 00:44:13 +00:00
Moodle Robot 7adf5343a8 Updated the 18 build version to 20100512 2010-05-12 00:45:59 +00:00
Moodle Robot f7ab7a98c3 Updated the 18 build version to 20100511 2010-05-11 00:44:10 +00:00
Moodle Robot 121ec3729f Updated the 18 build version to 20100510 2010-05-10 00:44:12 +00:00
Moodle Robot 5b928bc663 Updated the 18 build version to 20100509 2010-05-09 00:44:23 +00:00
Moodle Robot 5a4dd9de65 Updated the 18 build version to 20100508 2010-05-08 00:44:35 +00:00
Moodle Robot 378484c486 Updated the 18 build version to 20100507 2010-05-07 00:45:14 +00:00
Eloy Lafuente 7fe34ad30d MDL-18576 timezones - updated to 2010i from 2009c (2147 rules) ; backported from HEAD 2010-05-06 15:30:02 +00:00
Moodle Robot c66fd4658f Updated the 18 build version to 20100506 2010-05-06 00:45:58 +00:00
Moodle Robot 19a8147018 Updated the 18 build version to 20100505 2010-05-05 00:46:29 +00:00
Moodle Robot a8eff4f89c Updated the 18 build version to 20100504 2010-05-04 00:45:28 +00:00
Moodle Robot 090c8a4f46 Automatic installer.php lang files by installer_builder (20100504) 2010-05-04 00:41:09 +00:00
Moodle Robot f8f2daa5e1 Updated the 18 build version to 20100503 2010-05-03 00:45:08 +00:00
Moodle Robot 75096debda Updated the 18 build version to 20100502 2010-05-02 00:45:02 +00:00
Moodle Robot 2455cde1d9 Updated the 18 build version to 20100501 2010-05-01 00:44:25 +00:00
Moodle Robot ea64e95a21 Updated the 18 build version to 20100430 2010-04-30 00:44:14 +00:00
Moodle Robot 6a3f4db7c1 Updated the 18 build version to 20100429 2010-04-29 00:44:18 +00:00
Moodle Robot 13119222dd Automatic installer.php lang files by installer_builder (20100429) 2010-04-29 00:40:24 +00:00
Moodle Robot 81777a4b8c Updated the 18 build version to 20100428 2010-04-28 00:45:47 +00:00
Moodle Robot 4da3705222 Updated the 18 build version to 20100427 2010-04-27 00:44:45 +00:00
Moodle Robot 490a2c95f2 Updated the 18 build version to 20100426 2010-04-26 00:45:22 +00:00
Moodle Robot c8ea0a5057 Updated the 18 build version to 20100425 2010-04-25 00:44:07 +00:00
Moodle Robot 8d95278989 Updated the 18 build version to 20100424 2010-04-24 00:44:20 +00:00
Moodle Robot f88ec4922c Updated the 18 build version to 20100423 2010-04-23 00:44:30 +00:00
Moodle Robot a9afdb17e8 Updated the 18 build version to 20100422 2010-04-22 00:44:18 +00:00
Martin Dougiamas 53375b39dd Bumping post 1.8.12 (a little late, sorry!) 2010-04-21 03:28:00 +00:00
Moodle Robot a3eb959ea9 Updated the 18 build version to 20100421 2010-04-21 00:45:18 +00:00
Moodle Robot 636f855287 Updated the 18 build version to 20100420 2010-04-20 00:45:43 +00:00
Moodle Robot ea4a4ab4fa Updated the 18 build version to 20100419 2010-04-19 00:44:07 +00:00
Moodle Robot c8f7bde5a9 Updated the 18 build version to 20100418 2010-04-18 00:45:57 +00:00
Moodle Robot 21498038ac Updated the 18 build version to 20100417 2010-04-17 00:43:52 +00:00
Moodle Robot bff5f3d2a8 Updated the 18 build version to 20100416 2010-04-16 00:44:23 +00:00
Moodle Robot 7ed238ed5a Updated the 18 build version to 20100415 2010-04-15 00:43:58 +00:00
Moodle Robot cc67d6df0b Updated the 18 build version to 20100414 2010-04-14 00:44:11 +00:00
Moodle Robot 40a24ffc13 Updated the 18 build version to 20100413 2010-04-13 00:43:57 +00:00
Moodle Robot 660da8a647 Updated the 18 build version to 20100412 2010-04-12 00:43:52 +00:00
Moodle Robot e292785bfe Updated the 18 build version to 20100411 2010-04-11 00:43:49 +00:00
Inaki 297404d6b7 auth cas/db/ldap: MDL-18689 Fix typos in auth/{cas,db,ldap}/auth.php 2010-04-10 15:23:53 +00:00
Moodle Robot b4e60bc91a Updated the 18 build version to 20100410 2010-04-10 00:44:05 +00:00
Moodle Robot 03cbed04b8 Updated the 18 build version to 20100409 2010-04-09 00:45:15 +00:00
Moodle Robot 40fc2f8443 Updated the 18 build version to 20100408 2010-04-08 00:45:16 +00:00
Moodle Robot f1ec50c4ce Updated the 18 build version to 20100407 2010-04-07 00:45:41 +00:00
Moodle Robot a6b73c6432 Automatic installer.php lang files by installer_builder (20100407) 2010-04-07 00:41:33 +00:00
Moodle Robot dc5bbfbe2d Updated the 18 build version to 20100406 2010-04-06 00:45:11 +00:00
Moodle Robot ca67abb80c Updated the 18 build version to 20100405 2010-04-05 00:44:44 +00:00
Moodle Robot abf75f82d3 Updated the 18 build version to 20100404 2010-04-04 00:45:00 +00:00
Moodle Robot 8057c37b38 Updated the 18 build version to 20100403 2010-04-03 00:45:41 +00:00
David Mudrak 40e708b693 MDL-21845 Fixed missing multilang support 2010-04-02 09:51:00 +00:00
Moodle Robot 67b0cc1082 Updated the 18 build version to 20100402 2010-04-02 00:45:05 +00:00
Moodle Robot 687f193593 Updated the 18 build version to 20100401 2010-04-01 00:45:15 +00:00
Moodle Robot 4cd7150272 Updated the 18 build version to 20100331 2010-03-31 00:46:59 +00:00
Moodle Robot 91863f2e43 Updated the 18 build version to 20100330 2010-03-30 00:46:42 +00:00
Moodle Robot 53d512caea Updated the 18 build version to 20100329 2010-03-29 00:45:19 +00:00
Moodle Robot 9724debce1 Updated the 18 build version to 20100328 2010-03-27 16:53:16 +00:00
Martin Dougiamas 7de63618e8 Releasing 1.8.12 2010-03-27 16:46:54 +00:00
Moodle Robot c192490477 Updated the 18 build version to 20100327 2010-03-27 00:44:48 +00:00
Moodle Robot a30b07f642 Automatic installer.php lang files by installer_builder (20100327) 2010-03-27 00:41:21 +00:00
Moodle Robot 17a8ce66e4 Updated the 18 build version to 20100326 2010-03-26 00:44:56 +00:00
Moodle Robot efa1a787e9 Updated the 18 build version to 20100325 2010-03-25 00:44:52 +00:00
Petr Skoda a89b63f35c MDL-21910 adding https www root to flash detection 2010-03-24 08:27:25 +00:00
Petr Skoda 1a74d63f8a MDL-21802 backporting patch for vulnerability in CAS client library 2010-03-24 08:11:13 +00:00
Moodle Robot f2c3640095 Updated the 18 build version to 20100324 2010-03-24 00:44:34 +00:00
Moodle Robot 3ce808717f Updated the 18 build version to 20100323 2010-03-23 00:43:51 +00:00
Moodle Robot b9e8e3eeae Updated the 18 build version to 20100322 2010-03-22 00:44:21 +00:00
Moodle Robot 4ca07c4d55 Updated the 18 build version to 20100321 2010-03-21 00:44:07 +00:00
Moodle Robot 7e4bdf75aa Updated the 18 build version to 20100320 2010-03-20 00:45:54 +00:00
Moodle Robot 6d3d6dcef2 Updated the 18 build version to 20100319 2010-03-19 00:44:45 +00:00
Moodle Robot c5415bef30 Automatic installer.php lang files by installer_builder (20100319) 2010-03-19 00:41:20 +00:00
Petr Skoda 2404aa0a85 MDL-21859 fixed sesskey protection on email actions 2010-03-18 22:53:45 +00:00
Petr Skoda 4597ce9ca5 MDL-21830 Prevent users from viewing names of all other site users - only teachers with role assign see the full name of not enrolled users when trying to access the profile 2010-03-18 22:14:53 +00:00
Petr Skoda 4bbeff3357 MDL-21068 do not show admin usernames in cron logs 2010-03-18 21:58:54 +00:00
Petr Skoda 311956cf45 MDL-21649 fixed form value quoting 2010-03-18 21:22:54 +00:00
Petr Skoda 86a7b79b3c MDL-21818 fixed globals problems 2010-03-18 20:56:45 +00:00
Moodle Robot 75d586bf7f Updated the 18 build version to 20100318 2010-03-18 00:45:12 +00:00
Moodle Robot f4b62cbe67 Automatic installer.php lang files by installer_builder (20100318) 2010-03-18 00:41:33 +00:00
Moodle Robot c0a8a262fc Updated the 18 build version to 20100317 2010-03-17 00:46:01 +00:00
Moodle Robot 462ce7a313 Automatic installer.php lang files by installer_builder (20100317) 2010-03-17 00:41:30 +00:00
Moodle Robot a37b021f4a Updated the 18 build version to 20100316 2010-03-16 00:44:29 +00:00
Moodle Robot 2a7044e366 Updated the 18 build version to 20100315 2010-03-15 00:44:25 +00:00
Moodle Robot 90e66f87ff Updated the 18 build version to 20100314 2010-03-14 00:45:07 +00:00
Moodle Robot 3fcfdcce7b Updated the 18 build version to 20100313 2010-03-13 00:44:18 +00:00
Moodle Robot 0a53ece9b4 Updated the 18 build version to 20100312 2010-03-12 00:44:21 +00:00
Moodle Robot 2699df0793 Automatic installer.php lang files by installer_builder (20100312) 2010-03-12 00:40:59 +00:00
Moodle Robot c87694fd6a Updated the 18 build version to 20100311 2010-03-11 00:44:03 +00:00
Moodle Robot d944a28779 Updated the 18 build version to 20100310 2010-03-10 00:44:30 +00:00
Moodle Robot ea3e2aa561 Updated the 18 build version to 20100309 2010-03-09 00:44:38 +00:00
Moodle Robot 21cb5322c3 Updated the 18 build version to 20100308 2010-03-08 00:43:57 +00:00
Petr Skoda 49ac14a868 MDL-21769 fixed input validation 2010-03-07 15:36:01 +00:00
Petr Skoda b7228927f3 MDL-21769 fixed input validation 2010-03-07 15:29:19 +00:00
Petr Skoda 2b4fb2308c MDL-21769 fixed input validation 2010-03-07 15:23:12 +00:00
Petr Skoda 99b79910fd MDL-21769 fixed input validation 2010-03-07 15:15:59 +00:00
Petr Skoda 8e37137b76 MDL-21769 fixed input validation 2010-03-07 15:09:44 +00:00
Petr Skoda 9770907db3 MDL-21767 fixed input validation 2010-03-07 14:56:54 +00:00
Moodle Robot 668f994fe0 Updated the 18 build version to 20100307 2010-03-07 00:43:55 +00:00
Moodle Robot dfd52bf7f7 Updated the 18 build version to 20100306 2010-03-06 00:43:57 +00:00
Moodle Robot 4897153ddd Updated the 18 build version to 20100305 2010-03-05 00:44:27 +00:00
Moodle Robot b07842a047 Updated the 18 build version to 20100304 2010-03-04 00:43:47 +00:00
Moodle Robot 989cf28a89 Updated the 18 build version to 20100303 2010-03-03 00:44:29 +00:00
Moodle Robot 1b9cbbeedb Updated the 18 build version to 20100302 2010-03-02 00:43:37 +00:00
Moodle Robot 866f522c78 Updated the 18 build version to 20100301 2010-03-01 00:44:06 +00:00
Moodle Robot f58c37b12d Updated the 18 build version to 20100228 2010-02-28 00:43:19 +00:00
Moodle Robot 6ddfeb4951 Automatic installer.php lang files by installer_builder (20100228) 2010-02-28 00:39:54 +00:00
Moodle Robot aae6e83738 Updated the 18 build version to 20100227 2010-02-27 00:43:42 +00:00
Moodle Robot df701c8060 Updated the 18 build version to 20100226 2010-02-26 00:44:13 +00:00
Moodle Robot f4c460aa36 Updated the 18 build version to 20100225 2010-02-25 00:43:42 +00:00
Moodle Robot 2b9a2ae76b Updated the 18 build version to 20100224 2010-02-24 00:43:58 +00:00
Moodle Robot 29c0b76898 Updated the 18 build version to 20100223 2010-02-23 00:44:14 +00:00
Moodle Robot 37e7f3bc7b Updated the 18 build version to 20100222 2010-02-22 00:44:15 +00:00
Eloy Lafuente 9d664fab49 Added new installer langs (mr_utf8 & zu_utf8) to 18_STABLE 2010-02-21 15:11:42 +00:00
Eloy Lafuente db002e43d0 file installer.php was added on branch MOODLE_18_STABLE on 2010-02-21 15:11:42 +0000 2010-02-21 15:04:22 +00:00
Moodle Robot 71012a089f Updated the 18 build version to 20100221 2010-02-21 00:43:41 +00:00
Moodle Robot e4c382f58e Updated the 18 build version to 20100220 2010-02-20 00:42:41 +00:00
Moodle Robot 9e47c2ceb6 Updated the 18 build version to 20100219 2010-02-19 00:43:46 +00:00
Moodle Robot 81ebf0964a Updated the 18 build version to 20100218 2010-02-18 00:43:38 +00:00
Moodle Robot 87d39116bd Updated the 18 build version to 20100217 2010-02-17 00:44:21 +00:00
Moodle Robot 314620f987 Automatic installer.php lang files by installer_builder (20100217) 2010-02-17 00:40:45 +00:00
Moodle Robot 6b0f9afa37 Updated the 18 build version to 20100216 2010-02-16 00:43:44 +00:00
Moodle Robot df45cdd501 Updated the 18 build version to 20100215 2010-02-15 00:43:44 +00:00
Moodle Robot d3afb4ab5c Updated the 18 build version to 20100214 2010-02-14 00:43:29 +00:00
Moodle Robot 7e99b65130 Updated the 18 build version to 20100213 2010-02-13 00:43:43 +00:00
Moodle Robot bf831036d8 Updated the 18 build version to 20100212 2010-02-12 00:42:54 +00:00
Gordon Bateson 973a31aa34 fix student access to HotPots in tail of a HotPot quiz chain 2010-02-11 02:53:28 +00:00
Moodle Robot 29caa29af9 Updated the 18 build version to 20100211 2010-02-11 00:43:40 +00:00
Eloy Lafuente 6e15bd0a93 MDL-7647 confirmation email - usernames with slashes causing confirmation problems ; backported from 19_STABLE 2010-02-10 16:47:21 +00:00
Moodle Robot b14560ef62 Updated the 18 build version to 20100210 2010-02-10 00:45:26 +00:00
Moodle Robot 3fe070cec5 Automatic installer.php lang files by installer_builder (20100210) 2010-02-10 00:41:26 +00:00
Moodle Robot 9be5ad2124 Updated the 18 build version to 20100209 2010-02-09 00:43:51 +00:00
Moodle Robot 72a3bd4fce Automatic installer.php lang files by installer_builder (20100209) 2010-02-09 00:40:13 +00:00
Moodle Robot 503ca8317d Updated the 18 build version to 20100208 2010-02-08 00:43:34 +00:00
Moodle Robot 0a8d402a21 Updated the 18 build version to 20100207 2010-02-07 00:42:43 +00:00
Moodle Robot 1ef60f91a3 Updated the 18 build version to 20100206 2010-02-06 00:43:43 +00:00
Moodle Robot 478cf6000d Automatic installer.php lang files by installer_builder (20100206) 2010-02-06 00:40:14 +00:00
Moodle Robot ffe9292500 Updated the 18 build version to 20100205 2010-02-05 00:44:24 +00:00
Moodle Robot eec5521244 Updated the 18 build version to 20100204 2010-02-04 00:43:41 +00:00
Moodle Robot 56ed884856 Updated the 18 build version to 20100203 2010-02-03 00:43:47 +00:00
Moodle Robot 83ec92fa39 Updated the 18 build version to 20100202 2010-02-02 00:39:47 +00:00
Moodle Robot f687bd15b7 Updated the 18 build version to 20100201 2010-02-01 00:38:59 +00:00
Moodle Robot 6679799534 Automatic installer.php lang files by installer_builder (20100201) 2010-02-01 00:36:19 +00:00
Moodle Robot dc70992836 Updated the 18 build version to 20100131 2010-01-31 00:38:37 +00:00
Moodle Robot ce25a56f51 Updated the 18 build version to 20100130 2010-01-30 00:39:17 +00:00
Moodle Robot 5343359135 Automatic installer.php lang files by installer_builder (20100130) 2010-01-30 00:36:40 +00:00
Moodle Robot 0de1b3c46f Updated the 18 build version to 20100129 2010-01-29 00:38:23 +00:00
Moodle Robot 95225063f9 Updated the 18 build version to 20100128 2010-01-28 00:38:41 +00:00
Moodle Robot eb4ddc4756 Updated the 18 build version to 20100127 2010-01-27 00:38:56 +00:00
Moodle Robot cf8d7cf178 Updated the 18 build version to 20100126 2010-01-26 00:38:33 +00:00
Gordon Bateson f439b040d4 do not treat https absolute urls as relative urls 2010-01-25 07:16:10 +00:00
Moodle Robot f17a81ab3d Updated the 18 build version to 20100125 2010-01-25 00:38:27 +00:00
Moodle Robot c5a3066c88 Updated the 18 build version to 20100124 2010-01-24 00:38:39 +00:00
Moodle Robot 4dfb66f748 Updated the 18 build version to 20100123 2010-01-23 00:38:01 +00:00
Moodle Robot 6282975a69 Updated the 18 build version to 20100122 2010-01-22 00:38:55 +00:00
Eloy Lafuente fb2fe3c355 MDL-21265 wiki - fix problem for students not able to see entries in other groups until own entry is created by teacher. Backported from 19_STABLE 2010-01-21 23:42:18 +00:00
Inaki 1154b26e74 auth ldap/cas config: MDL-21343 LDAP / CAS settings broken due to wrong superflous value 2010-01-21 19:19:56 +00:00
Moodle Robot 20f6a12adf Updated the 18 build version to 20100121 2010-01-21 00:38:49 +00:00
Eloy Lafuente f80632fadd MDL-21393 clean old executabble (by everybody) script. Backported from 19_STABLE 2010-01-20 11:22:26 +00:00
Moodle Robot 376c475ac5 Updated the 18 build version to 20100120 2010-01-20 00:38:44 +00:00
Moodle Robot 52c1e8df03 Updated the 18 build version to 20100119 2010-01-19 00:38:47 +00:00
Moodle Robot c83f798c8b Updated the 18 build version to 20100118 2010-01-18 00:38:27 +00:00
Moodle Robot 9e0c268251 Automatic installer.php lang files by installer_builder (20100118) 2010-01-18 00:35:48 +00:00
Moodle Robot 9be4893583 Updated the 18 build version to 20100117 2010-01-17 00:38:25 +00:00
Moodle Robot eda38df7ec Updated the 18 build version to 20100116 2010-01-16 00:38:45 +00:00
Moodle Robot b4957b0d4f Updated the 18 build version to 20100115 2010-01-15 00:38:34 +00:00
Moodle Robot ba42f8ca54 Automatic installer.php lang files by installer_builder (20100115) 2010-01-15 00:35:55 +00:00
Moodle Robot d5e0c813ef Updated the 18 build version to 20100114 2010-01-14 00:38:49 +00:00
Dan Marsden 4b9708f07c SCORM AICC MDL-19392 MDL-13716 cast result as a String in AICC (already done in Scorm 1.2 and 1.3 merged from HEAD 2010-01-13 02:02:30 +00:00
Dan Marsden d94b2ba2dc SCORM AICC MDL-21304 typo when referring to SCORM session var in AICC files - thanks to Matteo Scaramuccia for the report and fix. merged from HEAD 2010-01-13 01:40:34 +00:00
Moodle Robot 700c7eb088 Updated the 18 build version to 20100113 2010-01-13 00:39:07 +00:00
Moodle Robot f80302ce09 Updated the 18 build version to 20100112 2010-01-12 00:38:29 +00:00
Moodle Robot 1a95721947 Updated the 18 build version to 20100111 2010-01-11 00:38:57 +00:00
Moodle Robot ada301bd31 Updated the 18 build version to 20100110 2010-01-10 00:38:16 +00:00
Moodle Robot e81a5f17e1 Automatic installer.php lang files by installer_builder (20100110) 2010-01-10 00:35:36 +00:00
Eloy Lafuente ed8631b65b First commit of ast_utf8 installer file. Backported from HEAD 2010-01-09 23:17:41 +00:00
Eloy Lafuente 9f0110cac4 file installer.php was added on branch MOODLE_18_STABLE on 2010-01-09 23:17:41 +0000 2010-01-09 23:13:20 +00:00
Moodle Robot 77a549ae16 Updated the 18 build version to 20100109 2010-01-09 00:38:50 +00:00
Moodle Robot 557754e0bd Automatic installer.php lang files by installer_builder (20100109) 2010-01-09 00:36:09 +00:00
Moodle Robot 4726b47cd4 Updated the 18 build version to 20100108 2010-01-08 00:38:46 +00:00
Moodle Robot 733ee92dab Updated the 18 build version to 20100107 2010-01-07 00:38:15 +00:00
Moodle Robot 5486c83fae Updated the 18 build version to 20100106 2010-01-06 00:39:03 +00:00
Moodle Robot 1fc68d9f55 Automatic installer.php lang files by installer_builder (20100106) 2010-01-06 00:36:05 +00:00
Moodle Robot fc4d9a605b Updated the 18 build version to 20100105 2010-01-05 00:38:12 +00:00
Moodle Robot aa117d3239 Updated the 18 build version to 20100104 2010-01-04 00:35:24 +00:00
Moodle Robot 2de1ee6311 Updated the 18 build version to 20100103 2010-01-03 00:35:45 +00:00
Moodle Robot ba260d62e6 Automatic installer.php lang files by installer_builder (20100103) 2010-01-03 00:33:06 +00:00
Moodle Robot 223f348882 Updated the 18 build version to 20100102 2010-01-02 00:35:09 +00:00
Moodle Robot 88d1c990f0 Updated the 18 build version to 20100101 2010-01-01 00:35:43 +00:00
Moodle Robot 165620a2df Automatic installer.php lang files by installer_builder (20100101) 2010-01-01 00:33:05 +00:00
Moodle Robot 6133e7980f Updated the 18 build version to 20091231 2009-12-31 00:37:03 +00:00
Moodle Robot a1854aa763 Automatic installer.php lang files by installer_builder (20091231) 2009-12-31 00:33:07 +00:00
Petr Skoda fdfcab490e MDL-21194 fixed mnet quotes issue - credit goes to Valery Fremaux 2009-12-30 08:09:22 +00:00
Moodle Robot 6d58f041dc Updated the 18 build version to 20091230 2009-12-30 00:36:02 +00:00
Moodle Robot 8e93a3ec13 Updated the 18 build version to 20091229 2009-12-29 00:35:12 +00:00
Moodle Robot 3ce6fa7837 Updated the 18 build version to 20091228 2009-12-28 00:36:39 +00:00
Moodle Robot 8a79c17235 Updated the 18 build version to 20091227 2009-12-27 00:35:06 +00:00
Moodle Robot 559729f6e0 Updated the 18 build version to 20091226 2009-12-26 00:35:19 +00:00
Moodle Robot 9c29d3b87f Updated the 18 build version to 20091225 2009-12-25 00:35:09 +00:00
Moodle Robot 507fb45f9f Automatic installer.php lang files by installer_builder (20091225) 2009-12-25 00:32:34 +00:00
Moodle Robot aaade2832f Updated the 18 build version to 20091224 2009-12-24 00:35:52 +00:00
Eloy Lafuente 1ed90f55ca MDL-21173, MDL-20941 - Super :-(. When backporting some days ago I introduced
one customization that simply shouldn't be there! Thanks Ralf for detecting it. Grrr
2009-12-23 10:46:58 +00:00
Moodle Robot 12dc4b43ea Updated the 18 build version to 20091223 2009-12-23 00:35:59 +00:00
Moodle Robot 5f40368876 Updated the 18 build version to 20091222 2009-12-22 00:35:58 +00:00
Moodle Robot 1d25d29551 Updated the 18 build version to 20091221 2009-12-21 00:35:22 +00:00
Pierre Pichet e55406d3eb correcting pass from reference problem line 77as identified by syntax report on moodle.org 2009-12-20 13:21:38 +00:00
Moodle Robot 146622e945 Updated the 18 build version to 20091220 2009-12-20 00:35:53 +00:00
Moodle Robot 9f3f3c48b5 Updated the 18 build version to 20091219 2009-12-19 00:35:08 +00:00
Moodle Robot 4576033103 Automatic installer.php lang files by installer_builder (20091219) 2009-12-19 00:32:34 +00:00
Eloy Lafuente 66adbfd34b MDL-11507, MDL-15157 database activity - avoid some notices on restore ; backported from 19_STABLE 2009-12-18 17:52:54 +00:00
Eloy Lafuente 1458cc73ed MDL-21160 database activity - remap scale on restore ; backported from 19_STABLE 2009-12-18 17:39:40 +00:00
Dan Marsden 949cf6c6b3 SCORM MDL-20588 workaround for IE 6 bug - turn zlib compression off if IE 6 is detected. merged from HEAD 2009-12-18 06:44:00 +00:00
Moodle Robot ac24d26945 Updated the 18 build version to 20091218 2009-12-18 00:34:57 +00:00
jerome mouneyrac b5440e4d5b flash detection MDL-20841 backport flash detector to 1.8 2009-12-17 05:26:28 +00:00
Moodle Robot 66bd0a67a3 Updated the 18 build version to 20091217 2009-12-17 00:35:09 +00:00
Moodle Robot e7c82e7709 Updated the 18 build version to 20091216 2009-12-16 00:35:18 +00:00
Moodle Robot 1cd41d0186 Updated the 18 build version to 20091215 2009-12-15 00:35:40 +00:00
Moodle Robot 44e65a9b67 Automatic installer.php lang files by installer_builder (20091215) 2009-12-15 00:33:03 +00:00
Moodle Robot 837f5386d8 Updated the 18 build version to 20091214 2009-12-14 00:34:21 +00:00
Moodle Robot bbea55fb86 Updated the 18 build version to 20091213 2009-12-13 00:34:02 +00:00
Moodle Robot 59f543f82a Updated the 18 build version to 20091212 2009-12-12 00:34:35 +00:00
Moodle Robot 541e24c902 Updated the 18 build version to 20091211 2009-12-11 00:34:18 +00:00
Moodle Robot a5b447e7ff Updated the 18 build version to 20091210 2009-12-10 00:34:55 +00:00
Moodle Robot 0b19b17425 Updated the 18 build version to 20091209 2009-12-09 00:36:00 +00:00
Moodle Robot e254cca268 Updated the 18 build version to 20091208 2009-12-08 00:34:45 +00:00
Moodle Robot 4f2f851521 Automatic installer.php lang files by installer_builder (20091208) 2009-12-08 00:32:14 +00:00
Moodle Robot f33b0871c0 Updated the 18 build version to 20091207 2009-12-07 00:34:22 +00:00
Moodle Robot 5ca1a70372 Updated the 18 build version to 20091206 2009-12-06 00:34:01 +00:00
Moodle Robot 579590ad70 Updated the 18 build version to 20091205 2009-12-05 00:34:52 +00:00
Moodle Robot 80e4d43698 Automatic installer.php lang files by installer_builder (20091205) 2009-12-05 00:32:15 +00:00
Tim Hunt 52e79e75d0 Typo in calculated qtype lang file. 2009-12-04 19:02:14 +00:00
Moodle Robot 73ffa5530e Updated the 18 build version to 20091204 2009-12-04 00:34:15 +00:00
Moodle Robot 8c0e9ac436 Updated the 18 build version to 20091203 2009-12-03 00:34:35 +00:00
Petr Skoda 52860d1364 MDL-21026 improved entity handling 2009-12-02 21:11:36 +00:00
Moodle Robot e5d838ec77 Updated the 18 build version to 20091202 2009-12-02 00:35:38 +00:00
Moodle Robot c34f7c8bc6 Updated the 18 build version to 20091201 2009-12-01 00:35:00 +00:00
Moodle Robot 135dc80abe Updated the 18 build version to 20091130 2009-11-30 00:34:40 +00:00
Moodle Robot 90fe543b45 Updated the 18 build version to 20091129 2009-11-29 00:34:43 +00:00
Moodle Robot 0b847e9f16 Updated the 18 build version to 20091128 2009-11-28 00:34:38 +00:00
Moodle Robot a1ea793b9d Automatic installer.php lang files by installer_builder (20091128) 2009-11-28 00:32:07 +00:00
Moodle Robot cabc5c4612 Updated the 18 build version to 20091127 2009-11-27 00:35:33 +00:00
Moodle Robot fd9b25a117 Automatic installer.php lang files by installer_builder (20091127) 2009-11-27 00:33:02 +00:00
David Mudrak 14ba618d4e MDL-20981 admin/lang.php escapes all variables but $a placeholders
Merged from MOODLE_19_STABLE
2009-11-26 14:44:28 +00:00
Eloy Lafuente e58ca37fff MDL-20982 glossary - make print view to respect current theme ; backported from 19_STABLE 2009-11-26 11:36:39 +00:00
Sam Hemelryk 75d4f4ef91 admin MDL-20980 Touched up regex that determines weak password salts 2009-11-26 09:02:22 +00:00
Moodle Robot 2ef1ead9d9 Automatic installer.php lang files by installer_builder (20091126) 2009-11-26 00:31:46 +00:00
Moodle Robot 9c218332b1 Updated the 18 build version to 20091126 2009-11-25 18:42:57 +00:00
Martin Dougiamas f5f4479bd3 Bump 1.8.11 2009-11-25 18:38:08 +00:00
Moodle Robot 20acceb6ee Updated the 18 build version to 20091125 2009-11-25 00:34:56 +00:00
Dan Marsden fcf3501437 SCORM MDL-20955 fix bad use of update_record - thanks Petr 2009-11-24 21:12:09 +00:00
Dan Marsden b2d99131e8 SCORM MDL-20955 addslashes fixes 2009-11-24 21:09:31 +00:00
Petr Skoda 0c60d23bd5 MDL-20958 fixed login issues when login via https required 2009-11-24 16:19:56 +00:00
Sam Hemelryk ebcd41cac2 upgrade MDL-20933 Fixed warning if get_records_sql returned false rather than an array 2009-11-24 04:03:35 +00:00
Moodle Robot 966d4358d4 Updated the 18 build version to 20091124 2009-11-24 00:34:35 +00:00
Eloy Lafuente 0004ac64a5 MDL-20939 backup & restore - avoid admins to be always included. Two things
were causing this: wrong get_users_by_capability() call and standard scales.
Improved scales restore to observe the 'moodle/course:managescales' cap.
Backported from 19_STABLE
2009-11-24 00:26:24 +00:00
Petr Skoda 9cd77bde85 MDL-20934 'not cached' flag used in all auth plugins that do not need the password 2009-11-23 21:56:05 +00:00
Eloy Lafuente 68bbdf091b MDL-20941 store hashed username into user->email field for deleted users. Backported from 19_STABLE 2009-11-23 19:01:47 +00:00
Petr Skoda 90cb3f7d20 MDL-20937 different fix for problems with forcing passsword change for admins with external auth 2009-11-23 09:06:44 +00:00
Sam Hemelryk 993c4fe32c upgrade MDL-20937 Only force admins to change password if auth=manual or email 2009-11-23 08:13:52 +00:00
Moodle Robot 7c71190b05 Updated the 18 build version to 20091123 2009-11-23 00:34:59 +00:00
Moodle Robot ffd1f730e2 Automatic installer.php lang files by installer_builder (20091123) 2009-11-23 00:32:29 +00:00
Petr Skoda 9eed2dc7da MDL-20931 fixed input validation 2009-11-22 21:03:22 +00:00
Petr Skoda 847f077e39 MDL-20933 fixed a regression, we should not force changing of password for admins that can not actually change the password 2009-11-22 17:05:14 +00:00
Petr Skoda 89d1fd9190 MDL-20933 fixed a regression, we should not force changing of password for admins that can not actually change the password 2009-11-22 17:05:14 +00:00
Eloy Lafuente 306e851f93 MDL-20932 user->secret out 2009-11-22 13:32:22 +00:00
Petr Skoda 85cd5055dc MDL-20930 fixed input validation 2009-11-22 12:43:37 +00:00
Petr Skoda d1963e4c4e MDL-20929 fixed input validation 2009-11-22 11:09:53 +00:00
Petr Skoda d9f9e5662b MDL-20928 fixed glossary entry access control 2009-11-22 10:48:46 +00:00
Petr Skoda d57861e8e6 MDL-20928 fixed glossary entry access control 2009-11-22 10:34:28 +00:00
Moodle Robot a3951a7dd2 Updated the 18 build version to 20091122 2009-11-22 00:34:13 +00:00
Petr Skoda fd2f6aed90 MDL-20927 fixed module login issue 2009-11-21 23:49:21 +00:00
Petr Skoda c3671c1291 MDL-20926 fixed fetching of cm 2009-11-21 23:08:37 +00:00
Petr Skoda 1e7e0e1df6 MDL-20901 fixed input validation 2009-11-21 22:22:31 +00:00
Petr Skoda c64e6552f7 MDL-20901 undoing previous change, not needed 2009-11-21 22:01:18 +00:00
Petr Skoda 6b82d0f68c MDL-20901 fixed input validation 2009-11-21 21:56:39 +00:00
Petr Skoda 778dab756c MDL-20925 fixed input validation and course ajax now fully respects the disable course ajax option 2009-11-21 16:28:40 +00:00
Petr Skoda a43a5041fc MDL-20924 invalid test for not configured lams module 2009-11-21 15:58:41 +00:00
Eloy Lafuente 0502aaf736 NOBUG: Fix glossary rating in 18_STABLE. Regression introduced (some months ago!)
while securing ratings (blind merged). http://moodle.org/mod/forum/discuss.php?d=138319
2009-11-21 15:46:28 +00:00
Petr Skoda d7befb3835 MDL-20901 fixed input validation 2009-11-21 15:35:05 +00:00
Petr Skoda 35c18394a0 MDL-20901 fixed input validation 2009-11-21 15:27:38 +00:00
Petr Skoda 5d8c79c0a6 MDL-20901 fixed input validation 2009-11-21 15:17:05 +00:00
Eloy Lafuente 7e4a6aa4a1 MDL-9251 backup/restore *all* users - is now forbidden for users
lacking backup/restore permission at system level. Backported from 19_STABLE
2009-11-21 11:53:08 +00:00
Eloy Lafuente 368498d978 MDL-20849 - improved lang string, thanks, Helen. 2009-11-20 17:46:36 +00:00
Moodle Robot ff894f8f0e Updated the 18 build version to 20091121 2009-11-20 17:07:34 +00:00
Moodle Robot d8b986c779 Automatic installer.php lang files by installer_builder (20091121) 2009-11-20 17:04:41 +00:00
Eloy Lafuente 5aa2b2e943 MDL-20916 protect the whole xmldb editor with sesskey. Backported from 19_STABLE 2009-11-20 15:07:18 +00:00
Petr Skoda df09d649ab MDL-20901 fixed input validation 2009-11-20 08:51:20 +00:00
Petr Skoda 135765992f MDL-20901 fixed input validation 2009-11-20 08:34:14 +00:00
Sam Hemelryk ac5058208b upgrade MDL-18807 Fixed bug with html been emailed as plain text 2009-11-20 08:16:46 +00:00
Eloy Lafuente 94a1152832 MDL-20849 moodle/restore:userinfo - new cababilty to allow/deny
permissions to restore any (users, messages, modulesactivity...)
user-level information. Backported from 19_STABLE
2009-11-20 01:21:12 +00:00
Petr Skoda 1a5a7f122f MDL-20901 fixed input validation 2009-11-19 19:42:05 +00:00
Petr Skoda 06a6ed1f18 MDL-20901 fixed input validation 2009-11-19 19:27:12 +00:00
Petr Skoda 5a500a5a69 MDL-20901 fixed input validationand removed annoying redirect which must not be clicked during course import 2009-11-19 18:49:36 +00:00
Petr Skoda 4a8192d754 MDL-20901 fixed input validation 2009-11-19 18:12:20 +00:00
Petr Skoda f5c2028a14 MDL-20901 fixed input validation 2009-11-19 16:40:16 +00:00
Petr Skoda 6735f4a12a MDL-20901 fixed input validation 2009-11-19 08:56:36 +00:00
Petr Skoda b787618265 MDL-18807, MDL-20890 fixed notices 2009-11-18 22:35:06 +00:00
Eloy Lafuente 5701efe8da MDL-20834 new cap moodle/backup:userinfo - controls who can backupuser
related info. Disabled by default to teachers, oh my! :-( Backported from 19_STABLE
2009-11-18 15:45:33 +00:00
Sam Hemelryk f05b8d8bbc security MDL-18807 Changed language strings: Thanks for the new strings Helen 2009-11-18 09:47:22 +00:00
Sam Hemelryk f15d29f08d security MDL-18807 MDL-20853 Backported recent security chanrs to 1.8 2009-11-18 03:46:16 +00:00
Eloy Lafuente 5152338a0d MDL-20846 creating users on restore - new strings. Backported from HEAD 2009-11-18 01:26:14 +00:00
Eloy Lafuente 43df20504e MDL-20846 creating users on restore - part2 - fix navigation in header 2009-11-18 01:20:43 +00:00
Eloy Lafuente b3bf5dce4f MDL-20846 creating users on restore - part2 - hack login to inform and
allow 'restored' users to reset their password. Backported from 19_STABLE
2009-11-18 00:46:42 +00:00
Eloy Lafuente a66d540bbd file restored_password_form.php was added on branch MOODLE_18_STABLE on 2009-11-18 00:46:42 +0000 2009-11-18 00:22:44 +00:00
Petr Skoda 93a6b0e8df MDL-20639 fixed mnet security trouble - credit goes to Adrian Schlegel 2009-11-17 17:30:43 +00:00
Eloy Lafuente d322e57b0c MDL-20846 creating users on restore - part1 - mark password as 'restored'
so login will detect that for resetting password. Also some minor improvements
into user/auth detection. Backported from 19_STABLE
2009-11-17 15:31:33 +00:00
Petr Skoda fffa4ee7b0 MDL-20638 importing latest smarty 2.6.26 2009-11-17 08:56:44 +00:00
Petr Skoda 9ac25ee20b file readme_moodle.txt was added on branch MOODLE_18_STABLE on 2009-11-17 08:56:51 +0000 2009-11-17 08:46:00 +00:00
Petr Skoda a42ecd0706 file core.run_insert_handler.php was added on branch MOODLE_18_STABLE on 2009-11-17 08:56:49 +0000 2009-11-17 08:45:59 +00:00
Petr Skoda b4b208f1a4 file core.smarty_include_php.php was added on branch MOODLE_18_STABLE on 2009-11-17 08:56:51 +0000 2009-11-17 08:45:58 +00:00
Petr Skoda ed2ad4f8e5 file core.rmdir.php was added on branch MOODLE_18_STABLE on 2009-11-17 08:56:51 +0000 2009-11-17 08:45:58 +00:00
Petr Skoda e695c39f8b file core.rm_auto.php was added on branch MOODLE_18_STABLE on 2009-11-17 08:56:51 +0000 2009-11-17 08:45:58 +00:00
Petr Skoda 390b55bab6 file core.read_cache_file.php was added on branch MOODLE_18_STABLE on 2009-11-17 08:56:51 +0000 2009-11-17 08:45:58 +00:00
Petr Skoda def906afa2 file core.is_trusted.php was added on branch MOODLE_18_STABLE on 2009-11-17 08:56:51 +0000 2009-11-17 08:45:58 +00:00
Petr Skoda 50b5aefbcc file core.is_secure.php was added on branch MOODLE_18_STABLE on 2009-11-17 08:56:49 +0000 2009-11-17 08:45:58 +00:00
Petr Skoda 889f41407a file core.get_php_resource.php was added on branch MOODLE_18_STABLE on 2009-11-17 08:56:48 +0000 2009-11-17 08:45:58 +00:00
Petr Skoda 4607f415b4 file core.get_microtime.php was added on branch MOODLE_18_STABLE on 2009-11-17 08:56:49 +0000 2009-11-17 08:45:58 +00:00
Petr Skoda f57d9f3f7f file core.get_include_path.php was added on branch MOODLE_18_STABLE on 2009-11-17 08:56:49 +0000 2009-11-17 08:45:58 +00:00
Petr Skoda 9b05bc45d6 file core.create_dir_structure.php was added on branch MOODLE_18_STABLE on 2009-11-17 08:56:49 +0000 2009-11-17 08:45:58 +00:00
Petr Skoda 71206d00b2 file core.assign_smarty_interface.php was added on branch MOODLE_18_STABLE on 2009-11-17 08:56:48 +0000 2009-11-17 08:45:58 +00:00
Petr Skoda 5230fc68e4 file core.write_file.php was added on branch MOODLE_18_STABLE on 2009-11-17 08:56:51 +0000 2009-11-17 08:45:57 +00:00
Petr Skoda 0de8f84eca file core.write_compiled_resource.php was added on branch MOODLE_18_STABLE on 2009-11-17 08:56:48 +0000 2009-11-17 08:45:57 +00:00
Petr Skoda 0572612601 file core.write_compiled_include.php was added on branch MOODLE_18_STABLE on 2009-11-17 08:56:49 +0000 2009-11-17 08:45:57 +00:00
Petr Skoda 69dae0d9af file core.process_compiled_include.php was added on branch MOODLE_18_STABLE on 2009-11-17 08:56:50 +0000 2009-11-17 08:45:57 +00:00
Petr Skoda dec67e8724 file core.process_cached_inserts.php was added on branch MOODLE_18_STABLE on 2009-11-17 08:56:50 +0000 2009-11-17 08:45:57 +00:00
Petr Skoda 6ab04134fc file core.load_resource_plugin.php was added on branch MOODLE_18_STABLE on 2009-11-17 08:56:49 +0000 2009-11-17 08:45:57 +00:00
Petr Skoda 0cc285a4e4 file core.load_plugins.php was added on branch MOODLE_18_STABLE on 2009-11-17 08:56:49 +0000 2009-11-17 08:45:57 +00:00
Petr Skoda f9c83511f7 file core.display_debug_console.php was added on branch MOODLE_18_STABLE on 2009-11-17 08:56:48 +0000 2009-11-17 08:45:57 +00:00
Petr Skoda b6cc6a14c8 file core.assemble_plugin_filepath.php was added on branch MOODLE_18_STABLE on 2009-11-17 08:56:48 +0000 2009-11-17 08:45:57 +00:00
Petr Skoda 5799bd253b file core.write_cache_file.php was added on branch MOODLE_18_STABLE on 2009-11-17 08:56:49 +0000 2009-11-17 08:45:56 +00:00
Martin Dougiamas 0c54aad420 backup/nopasswords MDL-20838 Backups are now never saved with user passwords unless the admin has defined $CFG->includeuserbackupsinpasswords in config.php (Merged from 1.9) Credits to Eloy 2009-11-17 05:54:07 +00:00
Moodle Robot 185f15cd5e Updated the 18 build version to 20091117 2009-11-17 00:34:41 +00:00
Moodle Robot 6bcbac9239 Updated the 18 build version to 20091116 2009-11-16 00:34:52 +00:00
Moodle Robot fa085551ac Updated the 18 build version to 20091115 2009-11-15 00:35:44 +00:00
Moodle Robot 01032ec726 Updated the 18 build version to 20091114 2009-11-14 00:34:30 +00:00
Moodle Robot 19345459b7 Updated the 18 build version to 20091113 2009-11-13 00:35:04 +00:00
Moodle Robot 8f006d1ad8 Updated the 18 build version to 20091112 2009-11-12 00:34:07 +00:00
Moodle Robot dcc283d456 Updated the 18 build version to 20091111 2009-11-11 00:34:57 +00:00
Moodle Robot d7dc70cff1 Updated the 18 build version to 20091110 2009-11-10 00:34:11 +00:00
Gordon Bateson e8c35867b7 ensure user has_capability('mod/hotpot:attempt', $module) when viewing a HotPot or submitting results 2009-11-09 01:26:36 +00:00
Moodle Robot 68bddc6a74 Updated the 18 build version to 20091109 2009-11-09 00:33:51 +00:00
Moodle Robot f89b5161c5 Automatic installer.php lang files by installer_builder (20091109) 2009-11-09 00:31:30 +00:00
Eloy Lafuente af2d893d69 NOBUG: Initial commit of Dhivehi installer lang pack. Backported from HEAD 2009-11-08 16:21:29 +00:00
Eloy Lafuente 88c3f45682 file installer.php was added on branch MOODLE_18_STABLE on 2009-11-08 16:21:29 +0000 2009-11-08 16:16:19 +00:00
Moodle Robot 9ce9f61d8e Updated the 18 build version to 20091108 2009-11-08 00:33:27 +00:00
Moodle Robot dd40318662 Updated the 18 build version to 20091107 2009-11-07 00:33:45 +00:00
Moodle Robot 04609a6e54 Automatic installer.php lang files by installer_builder (20091107) 2009-11-07 00:31:08 +00:00
Moodle Robot 25f9a4ca99 Updated the 18 build version to 20091106 2009-11-06 00:34:47 +00:00
Moodle Robot f6953fba42 Updated the 18 build version to 20091105 2009-11-05 00:34:46 +00:00
Inaki 29bd2be123 enrol/ldap: MDL-13952 Don't auto create courses if auto creation is not enabled 2009-11-04 20:58:31 +00:00
Moodle Robot 1816ae24d2 Updated the 18 build version to 20091104 2009-11-04 00:34:34 +00:00
Moodle Robot 1846f4c588 Automatic installer.php lang files by installer_builder (20091104) 2009-11-04 00:31:35 +00:00
Moodle Robot 495a9ca909 Updated the 18 build version to 20091103 2009-11-03 00:34:34 +00:00
Tim Hunt ae43de38e0 quiz manual grading: MDL-20706 prevent XSRF.
Uses new require_sesskey funciton from MDL-20702.
2009-11-02 17:08:04 +00:00
Tim Hunt 9e63957428 lesson: MDL-20705 Fix XSRF issues.
Uses new require_sesskey funciton from MDL-20702.
2009-11-02 17:01:03 +00:00
Tim Hunt 2fb0138721 moodlelib: MDL-20702 New require_sesskey function.
Backported from head.
2009-11-02 16:50:26 +00:00
Moodle Robot dff5e4d153 Updated the 18 build version to 20091102 2009-11-02 00:33:49 +00:00
Moodle Robot 92c7772c70 Updated the 18 build version to 20091101 2009-11-01 00:33:41 +00:00
Moodle Robot d7fb192d75 Updated the 18 build version to 20091031 2009-10-31 00:35:18 +00:00
Moodle Robot 4e05658313 Automatic installer.php lang files by installer_builder (20091031) 2009-10-31 00:31:38 +00:00
Eloy Lafuente d217bcf1a8 MDL-20288 add_to_log() - handle empties in a cross-db way. Merged from 17_STABLE 2009-10-30 16:41:55 +00:00
Moodle Robot ec230ea9cd Updated the 18 build version to 20091030 2009-10-30 00:33:28 +00:00
Moodle Robot a03215e7a1 Updated the 18 build version to 20091029 2009-10-29 00:35:01 +00:00
Moodle Robot d260434e49 Updated the 18 build version to 20091028 2009-10-28 00:34:22 +00:00
Moodle Robot 7153c8eb7c Updated the 18 build version to 20091027 2009-10-27 00:34:31 +00:00
Martin Dougiamas ded50d4d15 Bumping post 1.8.10 release 2009-10-26 04:21:35 +00:00
Moodle Robot 2ff7434673 Updated the 18 build version to 20091026 2009-10-26 04:07:12 +00:00
Martin Dougiamas 7996e0c406 Bumping version for 1.8.10 release (note new convention for numbering) 2009-10-26 03:49:44 +00:00
Moodle Robot 159b126f30 Updated the 18 build version to 20091025 2009-10-25 03:23:32 +00:00
Moodle Robot 075944ac22 Updated the 18 build version to 20091024 2009-10-24 03:40:54 +00:00
Moodle Robot b12e7b0830 Updated the 18 build version to 20091023 2009-10-23 03:26:20 +00:00
moodlerobot 1af8d8116f Updated the 18 build version to 20091022 2009-10-22 03:17:52 +00:00
moodlerobot 1f378cc6de Automatic installer.php lang files by installer_builder (20091022) 2009-10-22 03:12:58 +00:00
moodlerobot 4ebb9d6320 Updated the 18 build version to 20091021 2009-10-21 03:21:12 +00:00
moodlerobot 6d883b3819 Automatic installer.php lang files by installer_builder (20091021) 2009-10-21 03:16:31 +00:00
moodlerobot edf27784d1 Updated the 18 build version to 20091020 2009-10-20 00:34:08 +00:00
moodlerobot 0a7047b6dd Updated the 18 build version to 20091019 2009-10-19 00:41:16 +00:00
moodlerobot a66dd8f93e Automatic installer.php lang files by installer_builder (20091019) 2009-10-19 00:38:07 +00:00
moodlerobot fa4879a74a Updated the 18 build version to 20091018 2009-10-18 00:39:40 +00:00
moodlerobot 926328ef14 Updated the 18 build version to 20091017 2009-10-17 00:40:00 +00:00
moodlerobot c6ae087c5a Updated the 18 build version to 20091016 2009-10-16 00:40:52 +00:00
moodlerobot aab73e27ac Updated the 18 build version to 20091015 2009-10-15 00:43:28 +00:00
moodlerobot 19cc2a493e Updated the 18 build version to 20091014 2009-10-14 00:41:02 +00:00
skodak f063b39d32 MDL-20555 fixed quoting 2009-10-13 20:59:28 +00:00
moodlerobot 25eb600834 Updated the 18 build version to 20091013 2009-10-13 00:40:25 +00:00
moodlerobot 3ea1e8d9d2 Updated the 18 build version to 20091012 2009-10-12 00:39:30 +00:00
moodlerobot 78f37e6b56 Updated the 18 build version to 20091011 2009-10-11 00:40:04 +00:00
moodlerobot 8d159544a5 Updated the 18 build version to 20091010 2009-10-10 00:40:00 +00:00
moodlerobot 2bac2f94b0 Updated the 18 build version to 20091009 2009-10-09 00:40:36 +00:00
moodlerobot 111e385ff1 Updated the 18 build version to 20091008 2009-10-08 00:40:29 +00:00
moodlerobot 9aa41b6eb8 Updated the 18 build version to 20091007 2009-10-07 00:40:28 +00:00
moodlerobot 039b4656c2 Automatic installer.php lang files by installer_builder (20091007) 2009-10-07 00:37:17 +00:00
moodlerobot 23bde2228b Updated the 18 build version to 20091006 2009-10-06 00:39:41 +00:00
dongsheng e419bcd652 "MDL-20422, check courses category before moving, hideing, showing courses, merged from 1.9" 2009-10-05 07:32:47 +00:00
moodlerobot 6d59b14ecf Updated the 18 build version to 20091005 2009-10-05 00:39:48 +00:00
moodlerobot 5fd7788933 Updated the 18 build version to 20091004 2009-10-04 00:39:24 +00:00
moodlerobot 11bab907be Updated the 18 build version to 20091003 2009-10-03 00:39:15 +00:00
moodlerobot 93c1183123 Updated the 18 build version to 20091002 2009-10-02 00:39:35 +00:00
moodlerobot 6c9b665384 Updated the 18 build version to 20091001 2009-10-01 00:40:47 +00:00
moodlerobot 6a8939d0ab Automatic installer.php lang files by installer_builder (20091001) 2009-10-01 00:37:48 +00:00
moodlerobot 88bde218bd Updated the 18 build version to 20090930 2009-09-30 00:40:35 +00:00
moodlerobot 56d63ff783 Updated the 18 build version to 20090929 2009-09-29 00:41:18 +00:00
moodlerobot 5f981a3232 Updated the 18 build version to 20090928 2009-09-28 00:39:32 +00:00
skodak a6bbcb9897 MDL-19718 fixed critical race condition when deleting posts - credit goes to Ashley Holman; backported from MOODLE_19_STABLE 2009-09-27 09:48:12 +00:00
moodlerobot 094a030494 Updated the 18 build version to 20090927 2009-09-27 00:38:26 +00:00
skodak ea05be7926 MDL-20309 improved sanitization of id property; backported from MOODLE_19_STABLE 2009-09-26 11:58:37 +00:00
moodlerobot 7cdae962cc Updated the 18 build version to 20090926 2009-09-26 00:38:57 +00:00
gbateson 668bcd59ed stricter checking of null fields when restoring HotPots in order to avoid unwanted chars being inserted into empty char fields on PostgreSQL sites 2009-09-25 06:24:23 +00:00
moodlerobot cc1575fec8 Updated the 18 build version to 20090925 2009-09-25 00:41:18 +00:00
moodler 4c1f29b738 resource/file MDL-20327 force target attributes on frame navigation for non-JS 2009-09-24 03:54:56 +00:00
moodlerobot 163fa26136 Updated the 18 build version to 20090924 2009-09-24 00:40:21 +00:00
moodlerobot 3cea51fdd9 Updated the 18 build version to 20090923 2009-09-23 00:41:48 +00:00
moodler 53aa452558 paypal MDL-20322 Make sure the currency is set correctly. 2009-09-22 01:52:29 +00:00
moodlerobot 7155129098 Updated the 18 build version to 20090922 2009-09-22 00:41:31 +00:00
moodlerobot d694324156 Automatic installer.php lang files by installer_builder (20090922) 2009-09-22 00:38:22 +00:00
moodlerobot 23ac83f4e6 Updated the 18 build version to 20090921 2009-09-21 00:40:12 +00:00
moodlerobot 471e108284 Updated the 18 build version to 20090920 2009-09-20 00:39:34 +00:00
moodlerobot cfc4835bd5 Updated the 18 build version to 20090919 2009-09-19 00:40:58 +00:00
moodlerobot ebf5fd9236 Updated the 18 build version to 20090918 2009-09-18 00:39:24 +00:00
moodlerobot 288d97b95d Automatic installer.php lang files by installer_builder (20090918) 2009-09-18 00:36:27 +00:00
moodlerobot d78a4108af Updated the 18 build version to 20090917 2009-09-17 00:39:40 +00:00
moodlerobot 35c9ff1e74 Updated the 18 build version to 20090916 2009-09-16 00:39:33 +00:00
moodlerobot ada891c30e Automatic installer.php lang files by installer_builder (20090916) 2009-09-16 00:36:08 +00:00
moodlerobot 8489a79b56 Updated the 18 build version to 20090915 2009-09-15 00:39:23 +00:00
moodlerobot f9116c797b Automatic installer.php lang files by installer_builder (20090915) 2009-09-15 00:36:13 +00:00
moodlerobot 66bf105b16 Updated the 18 build version to 20090914 2009-09-14 00:39:27 +00:00
moodlerobot da584747e0 Updated the 18 build version to 20090913 2009-09-13 00:39:24 +00:00
moodlerobot d1f518d1ac Updated the 18 build version to 20090912 2009-09-12 00:40:07 +00:00
moodlerobot d2d29997bd Updated the 18 build version to 20090911 2009-09-11 00:40:02 +00:00
moodlerobot f90fa6618f Updated the 18 build version to 20090910 2009-09-10 00:39:59 +00:00
moodlerobot 72c8cdcc97 Updated the 18 build version to 20090909 2009-09-09 00:40:42 +00:00
moodlerobot 54a401946a Updated the 18 build version to 20090908 2009-09-08 00:39:55 +00:00
pichetp b59da05f05 MDL-20189 correcting for the value of correctanswerlength on calculated export Merge
from HEAD
2009-09-07 01:30:56 +00:00
moodlerobot 85a15b9efc Updated the 18 build version to 20090907 2009-09-07 00:39:14 +00:00
moodlerobot 703076da45 Updated the 18 build version to 20090906 2009-09-06 00:38:48 +00:00
moodlerobot deff0ed668 Updated the 18 build version to 20090905 2009-09-05 00:39:34 +00:00
moodlerobot e4da8c79d5 Updated the 18 build version to 20090904 2009-09-04 00:40:17 +00:00
moodlerobot 6652c6845c Updated the 18 build version to 20090903 2009-09-03 00:40:08 +00:00
moodlerobot d5df4e4648 Updated the 18 build version to 20090902 2009-09-02 00:40:32 +00:00
gbateson 6e500ea970 MDL-20184 use $this->error() to print error message if no questions found importing from a Hot Potatoes XML file into Moodle's question bank / Quiz module 2009-09-01 01:23:16 +00:00
gbateson 840f10cca4 MDL-20184 more efficient and accurate detection of missing nodes in xml tree when importing Hot Potatoes XML files to Moodle question bank / quiz module 2009-09-01 01:03:43 +00:00
moodlerobot b0462d162d Updated the 18 build version to 20090901 2009-09-01 00:40:17 +00:00
gbateson 698092d191 MDL-20184 when importing questions from Hot Potatoes files to Moodle question-bank / Quiz module, the readquestions() function wil return "false", to signify an error, if no questions are detected in the import file 2009-08-31 02:06:02 +00:00
gbateson 6130645891 MDL-20185 detect zero, "0", as an answer for a gap in a JCloze when importing to the Moodle's question bank / Quiz module 2009-08-31 01:34:18 +00:00
moodlerobot 1572c445ca Updated the 18 build version to 20090831 2009-08-31 00:39:29 +00:00
moodlerobot e59c09a65a Updated the 18 build version to 20090830 2009-08-30 00:38:50 +00:00
moodlerobot d363d29e49 Updated the 18 build version to 20090829 2009-08-29 00:38:39 +00:00
gbateson 8b32c9da25 HotPot module: differentiate between "guesses-correct" (JCloze) and "guess-correct" (JCross, JMatch, JMix, JQuiz) in HotPot xml files and fix PreloadImages function for multiple images 2009-08-28 08:04:17 +00:00
moodlerobot 37828f7ee9 Updated the 18 build version to 20090828 2009-08-28 00:39:55 +00:00
moodlerobot 676148f88c Updated the 18 build version to 20090827 2009-08-27 00:39:40 +00:00
moodlerobot 31cf1cdc62 Updated the 18 build version to 20090826 2009-08-26 00:39:41 +00:00
gbateson ff2294aa8c add hotpot_encode_content_links() and hotpot_decode_content_links() to HotPot's backuplib.php and restorelib.php respectively 2009-08-25 01:22:02 +00:00
moodlerobot a21aa8620a Updated the 18 build version to 20090825 2009-08-25 00:39:30 +00:00
moodlerobot 1cd88f5e82 Updated the 18 build version to 20090824 2009-08-24 00:39:39 +00:00
moodlerobot 01e59f68d8 Updated the 18 build version to 20090823 2009-08-23 00:40:25 +00:00
moodlerobot 31d4c49ee8 Updated the 18 build version to 20090822 2009-08-22 00:40:11 +00:00
moodlerobot 585f927d73 Updated the 18 build version to 20090821 2009-08-21 00:41:02 +00:00
moodlerobot 0f83fc3a79 Updated the 18 build version to 20090820 2009-08-20 00:40:26 +00:00
moodlerobot 80ceb62e98 Updated the 18 build version to 20090819 2009-08-19 00:40:26 +00:00
moodlerobot 1b310b1d7a Updated the 18 build version to 20090818 2009-08-18 00:41:38 +00:00
jonathanharker 6b3d1c2a11 MDL-20114 admin/cron.php: Fix SQL bug when emailing new passwords.
Author: Jonathan Harker <jonathan@catalyst.net.nz>
2009-08-17 23:59:44 +00:00
moodlerobot 1821c3ee1e Updated the 18 build version to 20090817 2009-08-17 00:39:50 +00:00
moodlerobot 9b421a78eb Updated the 18 build version to 20090816 2009-08-16 00:37:54 +00:00
moodlerobot 99365f63eb Updated the 18 build version to 20090815 2009-08-15 00:39:47 +00:00
moodlerobot 6d9da5fb59 Updated the 18 build version to 20090814 2009-08-14 00:40:18 +00:00
moodlerobot 3df3b599d3 Updated the 18 build version to 20090813 2009-08-13 00:39:47 +00:00
moodlerobot b44dd42f7e Updated the 18 build version to 20090812 2009-08-12 00:41:17 +00:00
moodlerobot 3fa8da523e Updated the 18 build version to 20090811 2009-08-11 00:39:22 +00:00
moodlerobot 7395bf46c2 Updated the 18 build version to 20090810 2009-08-10 00:40:16 +00:00
moodlerobot 05cf8f8c8c Updated the 18 build version to 20090809 2009-08-09 00:41:14 +00:00
moodlerobot c63ed7258e Updated the 18 build version to 20090808 2009-08-08 00:40:10 +00:00
moodlerobot 1cc00d27ee Automatic installer.php lang files by installer_builder (20090808) 2009-08-08 00:36:57 +00:00
moodlerobot fc414b84db Updated the 18 build version to 20090807 2009-08-07 00:41:46 +00:00
moodlerobot 526347201c Updated the 18 build version to 20090806 2009-08-06 00:41:44 +00:00
moodlerobot b13bf01f5c Updated the 18 build version to 20090805 2009-08-04 23:32:11 +00:00
moodlerobot 8e89f31487 Updated the 18 build version to 20090804 2009-08-04 00:39:35 +00:00
moodlerobot 99b456031f Updated the 18 build version to 20090803 2009-08-03 00:38:17 +00:00
moodlerobot 4f028782c5 Updated the 18 build version to 20090802 2009-08-02 00:39:24 +00:00
moodlerobot 9c864e0baf Updated the 18 build version to 20090801 2009-08-01 00:38:21 +00:00
moodlerobot 9bc5b8d3f1 Updated the 18 build version to 20090731 2009-07-31 00:43:31 +00:00
moodlerobot 142cb4342b Updated the 18 build version to 20090730 2009-07-30 00:39:28 +00:00
moodlerobot 843b1285e4 Updated the 18 build version to 20090729 2009-07-29 00:40:26 +00:00
moodlerobot e8ece18d65 Updated the 18 build version to 20090728 2009-07-28 00:40:43 +00:00
moodlerobot c22dd8f8ba Updated the 18 build version to 20090727 2009-07-27 00:39:02 +00:00
moodlerobot d4925fec00 Updated the 18 build version to 20090726 2009-07-26 00:38:37 +00:00
moodlerobot 128d6f9539 Automatic installer.php lang files by installer_builder (20090726) 2009-07-26 00:35:47 +00:00
moodlerobot 320596ab00 Updated the 18 build version to 20090725 2009-07-25 00:37:44 +00:00
moodlerobot b5d972b10a Updated the 18 build version to 20090724 2009-07-24 00:39:08 +00:00
moodlerobot 53512b59af Updated the 18 build version to 20090723 2009-07-23 00:37:57 +00:00
moodlerobot 597b301704 Updated the 18 build version to 20090722 2009-07-22 00:39:08 +00:00
moodlerobot 944b547217 Updated the 18 build version to 20090721 2009-07-21 00:38:27 +00:00
moodlerobot 1de0dd89fa Automatic installer.php lang files by installer_builder (20090721) 2009-07-21 00:35:45 +00:00
moodlerobot ac7c1ebf25 Updated the 18 build version to 20090720 2009-07-20 00:39:23 +00:00
moodlerobot 0e45082763 Updated the 18 build version to 20090719 2009-07-19 00:37:34 +00:00
moodlerobot 4e4b482689 Updated the 18 build version to 20090718 2009-07-18 00:37:24 +00:00
skodak 870109388c MDL-19842 securing algebradebug the same way as text debug - only admins may use it now; backported from HEAD 2009-07-17 08:41:36 +00:00
moodlerobot 2a1b339c18 Updated the 18 build version to 20090717 2009-07-17 00:40:00 +00:00
skodak 6cbf5c39eb MDL-19832 new mimeTeX binaries v1.70; backported from HEAD 2009-07-16 10:02:46 +00:00
skodak ae4b810827 file readme_moodle.txt was added on branch MOODLE_18_STABLE on 2009-07-16 10:02:46 +0000 2009-07-16 09:48:18 +00:00
moodlerobot e637466a1d Updated the 18 build version to 20090716 2009-07-16 00:40:46 +00:00
moodlerobot aaea5b3f10 Updated the 18 build version to 20090715 2009-07-15 00:39:09 +00:00
moodlerobot 45baff2707 Updated the 18 build version to 20090714 2009-07-14 00:40:34 +00:00
fmarier 2461d98982 MDL-19729 fix SQL incompatibility with Oracle 2009-07-13 00:44:25 +00:00
moodlerobot 088d739939 Updated the 18 build version to 20090713 2009-07-13 00:40:21 +00:00
moodlerobot 769136e18b Automatic installer.php lang files by installer_builder (20090713) 2009-07-13 00:37:20 +00:00
moodlerobot 3d85b34474 Updated the 18 build version to 20090712 2009-07-12 00:39:46 +00:00
moodlerobot 4cc19c7e7a Updated the 18 build version to 20090711 2009-07-11 00:39:22 +00:00
moodlerobot de75bf053f Updated the 18 build version to 20090710 2009-07-10 00:39:12 +00:00
moodlerobot 2861d127a4 Updated the 18 build version to 20090709 2009-07-09 01:54:51 +00:00
moodlerobot ce46e871d2 Updated the 18 build version to 20090708 2009-07-08 00:39:04 +00:00
moodlerobot f18ae837e8 tags MDL-19728 Removing tags file and replacing with a tags.txt to explain where to get it 2009-07-07 03:44:12 +00:00
moodlerobot 83e85b443f file tags.txt was added on branch MOODLE_18_STABLE on 2009-07-07 03:44:12 +0000 2009-07-07 03:37:58 +00:00
moodlerobot 46877fc120 Updated the 18 build version to 20090707 2009-07-07 00:41:14 +00:00
moodlerobot 993326d7fb Updated the 18 build version to 20090706 2009-07-06 00:40:15 +00:00
moodlerobot 05eb9f1843 Updated the 18 build version to 20090705 2009-07-05 00:40:24 +00:00
moodlerobot 0f24f69298 Automatic installer.php lang files by installer_builder (20090705) 2009-07-05 00:37:14 +00:00
moodlerobot 80e33d9dae Updated the 18 build version to 20090704 2009-07-04 00:40:42 +00:00
moodlerobot a59054db2f Updated the 18 build version to 20090703 2009-07-03 00:41:20 +00:00
moodlerobot 82fc9603e4 Updated the 18 build version to 20090702 2009-07-02 00:40:10 +00:00
moodlerobot a43df8a553 Updated the 18 build version to 20090701 2009-07-01 00:41:12 +00:00
iarenaza 352032b81f CAS authentication: MDL-19671 phpCAS::getUser can return a mixed-case username, so lower-case it for comparison. 2009-06-30 23:31:32 +00:00
moodlerobot 8f60039dc1 Updated the 18 build version to 20090630 2009-06-30 00:40:20 +00:00
moodlerobot 5980a9fd2e Updated the 18 build version to 20090629 2009-06-29 00:40:19 +00:00
moodlerobot 2cc734b66f Updated the 18 build version to 20090628 2009-06-28 00:39:57 +00:00
moodlerobot 97148af42c Updated the 18 build version to 20090627 2009-06-27 00:40:07 +00:00
ptrkmkl 8593650e33 MDL-19607 removed float from sideblock command links 2009-06-26 03:00:00 +00:00
moodlerobot 97e65a48d6 Updated the 18 build version to 20090626 2009-06-26 00:41:43 +00:00
moodlerobot c639a5819b Automatic installer.php lang files by installer_builder (20090626) 2009-06-26 00:38:40 +00:00
moodlerobot 9668e71300 Updated the 18 build version to 20090625 2009-06-25 00:41:13 +00:00
moodlerobot 91c8853123 Updated the 18 build version to 20090624 2009-06-24 00:41:17 +00:00
moodlerobot 0de008cdaf Updated the 18 build version to 20090623 2009-06-23 00:41:39 +00:00
stronk7 3fa138b346 Commit new ur_utf8 lang installer file to HEAD. Automatically generated. Backported from HEAD 2009-06-22 17:59:38 +00:00
stronk7 62676f7107 file installer.php was added on branch MOODLE_18_STABLE on 2009-06-22 17:59:38 +0000 2009-06-22 17:55:40 +00:00
moodlerobot b4cf38c1ef Updated the 18 build version to 20090622 2009-06-22 00:38:56 +00:00
moodlerobot 4348b6da2a Automatic installer.php lang files by installer_builder (20090622) 2009-06-22 00:36:20 +00:00
iarenaza 6fac7bcafb subnet address: MDL-19509 Fix code and unit tests to comply with RFC4632 (prefix notations and behaviour)
Backported some code from HEAD to do it.
Merged from MOODLE_19_STABLE
2009-06-21 23:35:47 +00:00
moodlerobot f7fbea5c8f Updated the 18 build version to 20090621 2009-06-21 00:40:45 +00:00
moodlerobot 770ddc9b62 Updated the 18 build version to 20090620 2009-06-20 00:41:25 +00:00
moodlerobot d60c840d84 Automatic installer.php lang files by installer_builder (20090620) 2009-06-20 00:38:35 +00:00
moodlerobot 949c7b54ad Updated the 18 build version to 20090619 2009-06-19 00:41:29 +00:00
iarenaza 813c121564 subnet address: MDL-19509 make subnet matching work with 0.0.0.0/0 2009-06-18 22:21:55 +00:00
moodlerobot f0b5b602b7 Updated the 18 build version to 20090618 2009-06-18 00:41:53 +00:00
moodlerobot 50ef8bd235 Updated the 18 build version to 20090617 2009-06-17 00:41:41 +00:00
moodlerobot 0f59d8a230 Updated the 18 build version to 20090616 2009-06-16 00:43:22 +00:00
stronk7 5201667eb7 MDL-2794 html2text - backporting format_text_email tests to 1.8 2009-06-15 09:08:39 +00:00
fmarier e3b02662bd MDL-2794: fix html2text handling of non-ASCII characters 2009-06-15 05:59:38 +00:00
moodlerobot c6cda62a7c Updated the 18 build version to 20090615 2009-06-15 00:41:07 +00:00
moodlerobot 02be372aaa Updated the 18 build version to 20090614 2009-06-14 00:41:24 +00:00
moodlerobot 912539be52 Updated the 18 build version to 20090613 2009-06-13 00:41:13 +00:00
moodlerobot 3335c82fa8 Updated the 18 build version to 20090612 2009-06-12 00:41:02 +00:00
moodlerobot 0cfe42c2cf Automatic installer.php lang files by installer_builder (20090612) 2009-06-12 00:37:58 +00:00
moodlerobot 9220b708b0 Updated the 18 build version to 20090611 2009-06-11 00:41:18 +00:00
moodlerobot ba20d3668c Updated the 18 build version to 20090610 2009-06-10 00:40:33 +00:00
samhemelryk 7368e5197b resource MDL-18691 Implemented resource_get_name in one more place for dropdowns 2009-06-09 05:26:42 +00:00
jonathanharker 6e06f6559a MDL-12561: Regression fix: banish insecure items warning in IE7 in HTTPS sites.
blank.html now loaded with a https: URL in sites/pages using SSL.


Author: Jonathan Harker <jonathan@catalyst.net.nz>
2009-06-09 05:11:19 +00:00
moodlerobot d2dd89dca0 Updated the 18 build version to 20090609 2009-06-09 00:40:25 +00:00
moodlerobot 9e5bd31e7e Automatic installer.php lang files by installer_builder (20090609) 2009-06-09 00:37:45 +00:00
moodlerobot 338932936c Updated the 18 build version to 20090608 2009-06-08 00:41:46 +00:00
moodlerobot 8329a0d5b7 Updated the 18 build version to 20090607 2009-06-07 00:40:07 +00:00
moodlerobot fa68c42d2c Updated the 18 build version to 20090606 2009-06-06 00:39:22 +00:00
moodlerobot 2b04a8c875 Updated the 18 build version to 20090605 2009-06-05 00:39:45 +00:00
moodlerobot f7b71c536a Updated the 18 build version to 20090604 2009-06-04 00:40:57 +00:00
skodak 21896ac60f MDL-18976 simplexml ext now marked as required, credit goes to Dan Poltawski; backported from HEAD 2009-06-03 21:20:10 +00:00
skodak c56ae5f18a MDL-19388 removing mysql bypass from 1.8-2.0 - we require UTF8, no bypass possible any more 2009-06-03 16:58:31 +00:00
iarenaza dddb223c23 Password expired change url: MDL-18719 If auth plugin doesn't provide a url, use the standard one. 2009-06-03 14:20:22 +00:00
moodlerobot 5616de934e Updated the 18 build version to 20090603 2009-06-03 00:40:45 +00:00
moodlerobot 9fb601b91c Updated the 18 build version to 20090602 2009-06-02 00:39:45 +00:00
moodlerobot b427e3f088 Updated the 18 build version to 20090601 2009-06-01 00:39:38 +00:00
moodlerobot f8a00decd6 Updated the 18 build version to 20090531 2009-05-31 00:41:19 +00:00
stronk7 23acf9f241 MDL-13204 execution time - give extra time to checker because they can run looong; backported from HEAD 2009-05-30 23:58:55 +00:00
moodlerobot 085ccd8e64 Updated the 18 build version to 20090530 2009-05-30 00:39:10 +00:00
moodlerobot e0e788b9d2 Automatic installer.php lang files by installer_builder (20090530) 2009-05-30 00:36:20 +00:00
moodlerobot 749e45b051 Updated the 18 build version to 20090529 2009-05-29 00:39:40 +00:00
moodlerobot bd0a77c611 Updated the 18 build version to 20090528 2009-05-28 00:38:54 +00:00
moodlerobot c172ac7ee9 Updated the 18 build version to 20090527 2009-05-27 00:38:48 +00:00
moodlerobot b58011adad Updated the 18 build version to 20090526 2009-05-26 00:39:55 +00:00
moodler 9fc3c86f15 Bumped post release 2009-05-25 14:02:13 +00:00
moodlerobot 6ea056bd97 Updated the 18 build version to 20090525 2009-05-25 00:41:23 +00:00
gbateson cb19514522 fixes for XHTML strict: add <fieldset> arround hidden form fields, use "id" instead of "name" to locate forms, use HTML entities in button captions <= and => 2009-05-24 10:20:46 +00:00
moodlerobot 0b9363f28d Updated the 18 build version to 20090524 2009-05-24 00:40:33 +00:00
moodlerobot d425c6c0b7 Updated the 18 build version to 20090523 2009-05-23 00:39:31 +00:00
fmarier 485c80f39a MDL-19266 lib/html2text: fix error in preg_replace_callback on php4 2009-05-22 02:29:46 +00:00
fmarier 15df124a39 MDL-19266 lib/html2text: fix warnings in cron when using PHP4 2009-05-22 02:28:46 +00:00
fmarier d78b0e324f MDL-17542 lib/html2text: update to latest upstream version (r2374)
from http://trac.roundcube.net/log/trunk/roundcubemail/program/lib/html2text.php
2009-05-22 02:28:10 +00:00
fmarier 6af26c819a file html2text_readme.txt was added on branch MOODLE_18_STABLE on 2009-05-22 02:28:11 +0000 2009-05-22 02:10:22 +00:00
moodlerobot 14efe85dc5 Updated the 18 build version to 20090522 2009-05-22 00:41:36 +00:00
jonathanharker ea32b7ab44 MDL-12561 Fix IE6 "insecure items" warning in SSL sites using htmlarea
The HTMLArea editor uses the about:blank URL for blank pages, which
IE6 erroneously considers insecure. This commit replaces about:blank
with lib/editor/htmlarea/blank.html instead.


Author: Jonathan Harker <jonathan@catalyst.net.nz>
2009-05-21 01:59:01 +00:00
moodlerobot 1ab32a7567 Updated the 18 build version to 20090521 2009-05-21 00:41:37 +00:00
moodlerobot 988bb78064 Automatic installer.php lang files by installer_builder (20090521) 2009-05-21 00:38:12 +00:00
moodlerobot 440e6d9fa7 Updated the 18 build version to 20090520 2009-05-20 00:40:56 +00:00
moodlerobot bb497d6e5a Updated the 18 build version to 20090519 2009-05-19 00:40:47 +00:00
peterbulmer d813bd8763 MDL19219 mnet, mitigate arrkey loss in transit
When usernames are numeric, they are lost in mnet transit when used as
keys in the array result of course_enrolments(). As the username is not
sent with the enrolment details, it was not previously recoverable.
This patch adds the information to the enrolment details,
(enrol/mnet/enrol.php), and adds support for recovering the username if
it was numeric (and hence lost) (admin/mnet/enr_course_enrol.php)
2009-05-18 02:42:18 +00:00
moodlerobot a56e6b536c Updated the 18 build version to 20090518 2009-05-18 00:41:53 +00:00
moodlerobot 4590de7ee2 Updated the 18 build version to 20090517 2009-05-17 00:43:09 +00:00
moodlerobot 741f2fc93d Automatic installer.php lang files by installer_builder (20090517) 2009-05-17 00:38:56 +00:00
moodlerobot d906614fb5 Updated the 18 build version to 20090516 2009-05-16 00:39:42 +00:00
moodler 65d75e1ba0 Bumping version for 1.8.9 release. Thinking we might have to go to x.x.10 for the first time with this branch! 2009-05-15 09:40:59 +00:00
skodak 5592bd1276 MDL-19194 fixed regression - recursive cretion of dirs on win32 works again; backported from MOODLE_19_STABLE 2009-05-15 07:23:07 +00:00
fmarier 8461061743 Fix typo 2009-05-15 03:37:37 +00:00
moodlerobot c7d59ba103 Updated the 18 build version to 20090515 2009-05-15 00:40:34 +00:00
moodlerobot 01194e5659 Automatic installer.php lang files by installer_builder (20090515) 2009-05-15 00:37:49 +00:00
moodlerobot 3b2fbd7f2a Updated the 18 build version to 20090514 2009-05-14 00:40:10 +00:00
moodlerobot 804b2c9b2a Automatic installer.php lang files by installer_builder (20090514) 2009-05-14 00:37:37 +00:00
moodlerobot 7199229e75 Updated the 18 build version to 20090513 2009-05-13 00:38:03 +00:00
stronk7 e02f1a7a5a MDL-19161 - DB 2.0 reqs. Updated to fulfil 2.0 Roadmap ; backported from HEAD 2009-05-12 09:30:40 +00:00
nicolasconnault 0b547d9d9f MDL-8605 New script (web and CLI) for restoring user profile pictures that failed to move to the new folder during upgrade. 2009-05-12 07:46:44 +00:00
nicolasconnault ca49f636b6 file fixuserpix.php was added on branch MOODLE_18_STABLE on 2009-05-12 07:46:44 +0000 2009-05-12 07:46:08 +00:00
moodlerobot a1c6b65182 Updated the 18 build version to 20090512 2009-05-12 00:38:52 +00:00
fmarier 41c92ff555 MDL-19156: auth/fc: clarifying the licensing terms as per author's email 2009-05-11 23:37:37 +00:00
moodlerobot c02629eacc Updated the 18 build version to 20090511 2009-05-11 00:38:01 +00:00
moodlerobot 43a630cee5 Updated the 18 build version to 20090510 2009-05-10 00:38:11 +00:00
moodlerobot 506ebce3b5 Automatic installer.php lang files by installer_builder (20090510) 2009-05-10 00:35:36 +00:00
fmarier 66705bc9e6 MDL-19117 clarification to the license 2009-05-09 04:32:56 +00:00
moodlerobot c2014af3f8 Updated the 18 build version to 20090509 2009-05-09 00:39:04 +00:00
skodak e7b5ef8566 MDL-18311 fixed magic quotes trouble when moving courses; backported from MOODLE_19_STABLE 2009-05-08 21:06:15 +00:00
skodak 47cac9922a MDL-18744 cas fix, credit goes to Thibault Le Meur 2009-05-08 07:55:01 +00:00
moodlerobot 77d6c3e061 Updated the 18 build version to 20090508 2009-05-08 00:38:03 +00:00
gbateson ffe7588d45 when searhcing for urls of next quiz, remove requirement for navigation buttons to have class="NavButton" 2009-05-07 23:01:19 +00:00
skodak 7171099926 MDL-2307 fixing unzip regression, sorry 2009-05-07 16:45:07 +00:00
skodak ff933bfa8f MDL-2307 fixing unzip regression, sorry 2009-05-07 16:44:48 +00:00
ericmerrill 6939b5c1a4 MDL-19092 Fixed the user login view, which was incomplete and broken on some browsers 2009-05-07 12:21:20 +00:00
skodak b5469f78cb MDL-2307 improved file name cleanup during unzip; backported from MOODLE-19_STABLE 2009-05-07 10:48:28 +00:00
nicolasconnault 8cc0d4ef93 MDL-10201 Wrapping label text in a span instead of div, and giving it a class so that it can be found by hide/show AJAX code. Backported from MOODLE_19_STABLE 2009-05-07 09:49:38 +00:00
fmarier 7e6369972d MDL-19096 include a copy of the GPL 2009-05-07 03:04:47 +00:00
fmarier 2c81d559bd file COPYING.txt was added on branch MOODLE_18_STABLE on 2009-05-07 03:04:47 +0000 2009-05-07 03:03:25 +00:00
moodlerobot 11e09e01aa Updated the 18 build version to 20090507 2009-05-07 00:37:41 +00:00
stronk7 4d2cf40ef9 MDL-14463 search/order - comments cleanup + make it cross-db + delete unused column from query ; backported from HEAD 2009-05-06 17:26:34 +00:00
stronk7 bee3f66eb0 MDL-18243, MDL-16961 data module filter - make it cross-db by using sql_compare_text() 2009-05-06 15:54:04 +00:00
stronk7 42a7f43ee2 MDL-18058 glossary rates - secured ; backported from HEAD 2009-05-06 09:33:06 +00:00
skodak 604ecf1515 MDL-2307, MDL-18415 - improved unzipping - now properly removing forbidden chars and symlinks; backported from MOODLE_19_STABLE 2009-05-06 08:49:31 +00:00
moodlerobot e7dd9cd247 Updated the 18 build version to 20090506 2009-05-06 00:39:33 +00:00
moodlerobot e32fa5fdb1 Automatic installer.php lang files by installer_builder (20090506) 2009-05-06 00:36:35 +00:00
moodlerobot 50689ece08 Updated the 18 build version to 20090505 2009-05-05 00:39:25 +00:00
nicolasconnault 9ea5a54685 MDL-10201 Back-ported from MOODLE_19_STABLE 2009-05-04 11:52:51 +00:00
moodlerobot 1c0cdbf585 Updated the 18 build version to 20090504 2009-05-04 00:40:29 +00:00
moodlerobot 1119468291 Updated the 18 build version to 20090503 2009-05-03 00:40:55 +00:00
moodlerobot ee8c88d560 Updated the 18 build version to 20090502 2009-05-02 00:39:43 +00:00
moodlerobot a746558c7b Updated the 18 build version to 20090501 2009-05-01 00:40:22 +00:00
moodlerobot 044410476a Updated the 18 build version to 20090430 2009-04-30 00:38:46 +00:00
moodlerobot c9e3c4eb64 Updated the 18 build version to 20090429 2009-04-29 00:41:21 +00:00
moodlerobot ce51dc43bd Updated the 18 build version to 20090428 2009-04-28 00:43:53 +00:00
moodlerobot 567952799e Updated the 18 build version to 20090427 2009-04-27 00:37:37 +00:00
moodlerobot abec7edecb Updated the 18 build version to 20090426 2009-04-26 00:37:32 +00:00
stronk7 21fc085746 MDL-18940 meta description in main page - render multilang summary properly. Backported from 19_STABLE 2009-04-25 21:19:47 +00:00
moodlerobot e1413627d5 Updated the 18 build version to 20090425 2009-04-25 00:36:44 +00:00
moodlerobot 7e94839b54 Updated the 18 build version to 20090424 2009-04-24 00:37:23 +00:00
moodlerobot f695451963 Updated the 18 build version to 20090423 2009-04-23 00:39:34 +00:00
moodlerobot 2e83ee535a Updated the 18 build version to 20090422 2009-04-22 00:47:16 +00:00
moodlerobot 0612a16255 Updated the 18 build version to 20090421 2009-04-21 00:38:50 +00:00
stronk7 bdcc2476cf MDL-18893 TeX filter - fine tune "def" commands + add some more commands to blacklist (from Kopete).
Thanks to Mauno Korpelainen and Steve Mayer. Backported from 19_STABLE
2009-04-20 21:29:07 +00:00
moodlerobot 3f6ce53dea Updated the 18 build version to 20090420 2009-04-20 00:35:15 +00:00
gbateson 30ca2004f6 MDL-18880: only insert media players for swf URLs if $CFG->filter_mediaplugin_enable_swf is set 2009-04-19 23:51:09 +00:00
moodlerobot 094593edb4 Updated the 18 build version to 20090419 2009-04-19 00:35:39 +00:00
moodlerobot 950d680645 Updated the 18 build version to 20090418 2009-04-18 00:36:15 +00:00
gbateson 2cc212c4fd MDL-17426: removing superflous link to "Selecting a report" 2009-04-17 02:24:03 +00:00
gbateson 2da979b64d MDL-18883: fix setting of absolute urls for images in subfolders of course files 2009-04-17 01:44:37 +00:00
moodlerobot eb80e65d98 Updated the 18 build version to 20090417 2009-04-17 00:37:47 +00:00
moodlerobot 1917283bb5 Updated the 18 build version to 20090416 2009-04-16 00:37:08 +00:00
moodlerobot 36e5204979 Automatic installer.php lang files by installer_builder (20090416) 2009-04-16 00:34:27 +00:00
moodlerobot 3fce89ce50 Updated the 18 build version to 20090415 2009-04-15 00:40:08 +00:00
moodlerobot a7e3612d84 Automatic installer.php lang files by installer_builder (20090415) 2009-04-15 00:36:27 +00:00
moodlerobot cff71947e6 Updated the 18 build version to 20090414 2009-04-14 00:46:09 +00:00
moodlerobot 87511275ad Updated the 18 build version to 20090413 2009-04-13 00:45:19 +00:00
moodlerobot 46736d842a Updated the 18 build version to 20090412 2009-04-12 01:06:14 +00:00
moodlerobot 3d27822071 Updated the 18 build version to 20090411 2009-04-11 00:37:20 +00:00
moodlerobot d73dc24f17 Automatic installer.php lang files by installer_builder (20090411) 2009-04-11 00:32:51 +00:00
moodlerobot 32ace66be6 Updated the 18 build version to 20090410 2009-04-10 00:35:59 +00:00
moodlerobot 28d3cd6e8e Updated the 18 build version to 20090409 2009-04-09 00:35:57 +00:00
moodlerobot 58ae23893b Automatic installer.php lang files by installer_builder (20090409) 2009-04-09 00:33:22 +00:00
moodlerobot d319920857 Updated the 18 build version to 20090408 2009-04-08 00:36:23 +00:00
moodlerobot 76254c0477 Automatic installer.php lang files by installer_builder (20090408) 2009-04-08 00:33:11 +00:00
moodlerobot 3be9343138 Updated the 18 build version to 20090407 2009-04-07 00:37:20 +00:00
dongsheng c917b1a105 "MDL-6926, fix php notice and replace double quote with single quote to reduce memory usage, thanks, Anthony" 2009-04-06 06:12:29 +00:00
moodlerobot a028e77e30 Updated the 18 build version to 20090406 2009-04-06 00:36:47 +00:00
skodak 08369b8511 MDL-18384 better symlink support, do not recurse symlinks when deleting - patch by Matt Oquist, thanks; backported from MOODLE_19_STABLE 2009-04-05 20:56:22 +00:00
skodak 1aa4084b07 MDL-18771 fixed db quoting; backported from MOODLE_19_STABLE 2009-04-05 20:26:50 +00:00
moodlerobot 5e8a3df88e Updated the 18 build version to 20090405 2009-04-05 00:35:55 +00:00
moodlerobot ba45bd83d8 Updated the 18 build version to 20090404 2009-04-04 00:33:17 +00:00
moodlerobot e71850acb6 Updated the 18 build version to 20090403 2009-04-03 00:36:23 +00:00
moodlerobot be508b4cf8 Automatic installer.php lang files by installer_builder (20090403) 2009-04-03 00:33:35 +00:00
fmarier 9b72cbf773 html2text: MDL-17542 switch to a GPL-compatible html2text library 2009-04-02 23:14:58 +00:00
moodlerobot 0cd4cd2961 Updated the 18 build version to 20090402 2009-04-02 00:35:06 +00:00
moodlerobot eaaed6e6f4 Automatic installer.php lang files by installer_builder (20090402) 2009-04-02 00:32:36 +00:00
moodlerobot ffcbae6150 Updated the 18 build version to 20090401 2009-04-01 00:35:40 +00:00
skodak cc9bf1486e MDL-18552 different TeX trouble fix; backported from HEAD 2009-03-31 12:20:55 +00:00
skodak 17b2352193 file lib.php was added on branch MOODLE_18_STABLE on 2009-03-31 12:20:57 +0000 2009-03-31 10:03:10 +00:00
moodlerobot b877ae6d21 Updated the 18 build version to 20090331 2009-03-31 00:38:17 +00:00
gbateson e45cfdec20 when search for media players, remove requirment for <object> tag to contain a space, and make closing </A> tag lowercase 2009-03-30 07:11:51 +00:00
moodlerobot b4e1433d38 Updated the 18 build version to 20090330 2009-03-30 00:43:02 +00:00
moodlerobot 8885e891f0 Updated the 18 build version to 20090329 2009-03-29 00:38:28 +00:00
moodlerobot f66815e06a Updated the 18 build version to 20090328 2009-03-27 23:35:32 +00:00
moodlerobot 8058ca4fb2 Automatic installer.php lang files by installer_builder (20090328) 2009-03-27 23:33:01 +00:00
fmarier 7d6b6b1a16 mod/resource: MDL-18691 allow custom resource types to specify their name in their own lang directory
Before this change, the full name of the resource type had to be stored in the "resource" namespace (for example in /mod/resource/lang/en_utf8/resource.php).

Now it can be put in the "resource_foo" namespace:

e.g. in /mod/resource/type/foo/lang/en_utf8/resource_foo.php:

<?php
  $string['resourcetypefoo'] = 'Link to a Foo Bar document';
?>
2009-03-27 03:27:19 +00:00
moodlerobot a0b1f3342b Updated the 18 build version to 20090327 2009-03-26 23:36:34 +00:00
stronk7 13000c1379 MDL-18552 TeX filter - add string ; backported from HEAD 2009-03-26 21:37:58 +00:00
stronk7 899ccfe26f MDL-18552 TeX filter - blacklist unsecure commands + protect texdebug ; backported from HEAD 2009-03-26 19:19:46 +00:00
moodlerobot 2a04f622fb Updated the 18 build version to 20090326 2009-03-25 23:35:18 +00:00
poltawski 8fe8df969e lib/email_to_user MDL-10384 Recipeint names broken
When emailcharset is not utf8 the charset conversion was breaking
recipient/replyto names

thanks to Tatsuya Shirai
backported from MOODLE_19_STABLE
2009-03-25 09:17:26 +00:00
moodlerobot 32bf9c271e Updated the 18 build version to 20090325 2009-03-24 23:34:51 +00:00
moodlerobot 3dc9d883ab Updated the 18 build version to 20090324 2009-03-23 23:35:10 +00:00
tjhunt d5c0dec1cd quiz: MDL-18635 log every single hit to mod/quiz/attempts.php
I don't know why the quiz only logged every 10 minutes. No other part of Moodle worked like that. However, it has always been like that and I did not have a good reason to change it until now.

What was a problem becuase it made it harder to catch people doing a primitive DOS attack against the server by hitting Reload repeatedly.
2009-03-23 01:59:24 +00:00
moodlerobot 103965d609 Updated the 18 build version to 20090323 2009-03-22 23:43:12 +00:00
moodlerobot b6feb2ab78 Automatic installer.php lang files by installer_builder (20090323) 2009-03-22 23:38:47 +00:00
moodlerobot 49f9224222 Updated the 18 build version to 20090322 2009-03-21 23:39:26 +00:00
moodlerobot ea4c27489e Updated the 18 build version to 20090321 2009-03-20 23:43:05 +00:00
moodlerobot 82891a2810 Updated the 18 build version to 20090320 2009-03-19 23:35:54 +00:00
moodlerobot c82c86d3ea Automatic installer.php lang files by installer_builder (20090320) 2009-03-19 23:33:16 +00:00
moodlerobot 8227e923fd Updated the 18 build version to 20090319 2009-03-18 23:36:30 +00:00
danmarsden 44ac2f4d89 MDL-18564 choice - fix grammar - thanks to Ray Lawrence for the report merged from HEAD 2009-03-18 23:05:56 +00:00
moodlerobot cbe97e2692 Updated the 18 build version to 20090318 2009-03-17 23:39:59 +00:00
moodlerobot fa748dcdd1 Automatic installer.php lang files by installer_builder (20090318) 2009-03-17 23:35:34 +00:00
moodlerobot 1c79d89a7e Updated the 18 build version to 20090317 2009-03-16 23:36:20 +00:00
stronk7 65e428397d MDL-18576 timezones - info updated to tzdata2009c ; backported from HEAD 2009-03-16 17:56:20 +00:00
tjhunt d20f688bbb qtypes: MDL-18559 questions showing penalty information when they shouldn't.
We had a !== when it should have been !=, and our constants were defined as strings not ints. This problem has been there since forever, but no one had noticed before. Thanks to Alan Trick for finally spotting it!
2009-03-16 01:53:05 +00:00
moodlerobot cf3ea39a4f Updated the 18 build version to 20090316 2009-03-15 23:34:04 +00:00
skodak 57317806b9 MDL-18265 fixed regression in menu field - discovered and patched by Vlas Voloshin, thanks!; merged from MOODLE_19_STABLE 2009-03-15 13:45:57 +00:00
moodlerobot ccbe95b8cd Updated the 18 build version to 20090315 2009-03-14 23:38:31 +00:00
moodlerobot 4efcefd50f Automatic installer.php lang files by installer_builder (20090315) 2009-03-14 23:35:54 +00:00
moodlerobot 2c52512f16 Updated the 18 build version to 20090314 2009-03-13 23:34:29 +00:00
moodlerobot e5fab0d257 Updated the 18 build version to 20090313 2009-03-12 23:35:12 +00:00
moodlerobot 394b4069b1 Updated the 18 build version to 20090312 2009-03-11 23:35:29 +00:00
danmarsden b3f87b6b1a MDL-18460 - SCORM Report - remove duplicated header - thanks Vlas Voloshin for the report. - merged from HEAD 2009-03-11 01:19:35 +00:00
moodlerobot e2b00e8ac1 Updated the 18 build version to 20090311 2009-03-10 23:34:54 +00:00
moodlerobot 5eb7c5195b Automatic installer.php lang files by installer_builder (20090311) 2009-03-10 23:32:08 +00:00
moodlerobot 2d7baa2ab2 Updated the 18 build version to 20090310 2009-03-09 23:35:22 +00:00
moodlerobot 7906cb1617 Automatic installer.php lang files by installer_builder (20090310) 2009-03-09 23:32:53 +00:00
moodlerobot 58b6781967 Updated the 18 build version to 20090309 2009-03-08 23:40:28 +00:00
moodlerobot 2832c32c6b Updated the 18 build version to 20090308 2009-03-07 23:38:16 +00:00
skodak 79feabdc54 MDL-18265 fixed regressions by hardfreeze security workaround - defaults were overriding locked values - backported from HEAD 2009-03-07 21:02:38 +00:00
moodlerobot 87a2d989ba Updated the 18 build version to 20090307 2009-03-06 23:33:45 +00:00
moodlerobot 77974be16f Updated the 18 build version to 20090306 2009-03-05 23:39:44 +00:00
moodlerobot 98cf5b5527 Automatic installer.php lang files by installer_builder (20090306) 2009-03-05 23:37:11 +00:00
moodlerobot 8630b7b8fa Updated the 18 build version to 20090305 2009-03-04 23:38:37 +00:00
moodlerobot 1b398350cf Automatic installer.php lang files by installer_builder (20090305) 2009-03-04 23:36:04 +00:00
moodlerobot 9aac0bdfb1 Updated the 18 build version to 20090304 2009-03-03 23:36:39 +00:00
moodlerobot f5a117e6ec Automatic installer.php lang files by installer_builder (20090304) 2009-03-03 23:33:53 +00:00
moodlerobot 997d166f7b Updated the 18 build version to 20090303 2009-03-02 23:34:38 +00:00
piers 306e9a5057 MDL-18412 - fixed incorrect config var name. thanks Anthony. backport 1.8. 2009-03-02 23:23:19 +00:00
moodlerobot 1473dd77c3 Updated the 18 build version to 20090302 2009-03-01 23:35:12 +00:00
moodlerobot 0e370c6489 Updated the 18 build version to 20090301 2009-02-28 23:39:09 +00:00
moodlerobot 1d24da74e8 Updated the 18 build version to 20090228 2009-02-27 23:34:17 +00:00
moodlerobot 286df7a18c Updated the 18 build version to 20090227 2009-02-26 23:34:06 +00:00
piers a7e39a4f82 MDL-18148 - AICC compliance fixes from Martin Holden. backport 1.8. 2009-02-26 16:39:40 +00:00
moodlerobot d5fa0471c5 Updated the 18 build version to 20090226 2009-02-25 23:36:02 +00:00
moodlerobot 71524486db Automatic installer.php lang files by installer_builder (20090226) 2009-02-25 23:33:38 +00:00
piers 10b7c5f95c MDL-18212 - switch to addslashes_js - thanks Tim. Backport 1.8. 2009-02-25 23:13:53 +00:00
skodak 45890b7eb4 MDL-18365 fixed quoting 2009-02-25 22:26:24 +00:00
moodlerobot 28693deac8 Updated the 18 build version to 20090225 2009-02-24 23:34:54 +00:00
moodlerobot 73ec97c06b Automatic installer.php lang files by installer_builder (20090225) 2009-02-24 23:32:08 +00:00
moodlerobot d3d3cb86d6 Updated the 18 build version to 20090224 2009-02-23 23:34:14 +00:00
skodak e68b133d62 MDL-18348 CVE-2007-3215 2009-02-23 07:46:50 +00:00
moodlerobot 0a779261c8 Updated the 18 build version to 20090223 2009-02-22 23:34:18 +00:00
moodlerobot b2fbd411d9 Updated the 18 build version to 20090222 2009-02-21 23:33:58 +00:00
moodlerobot 0b18091590 Updated the 18 build version to 20090221 2009-02-20 23:34:02 +00:00
moodlerobot f5a764a35c Automatic installer.php lang files by installer_builder (20090221) 2009-02-20 23:31:37 +00:00
dongsheng 5c18bc078d "MDL-18223, add a language string for spamcleaner" 2009-02-20 08:31:43 +00:00
dongsheng f2a19d7601 "MDL-18223, backport spamcleaner to moodle 1.8" 2009-02-20 07:38:53 +00:00
moodlerobot 58e3d68846 Updated the 18 build version to 20090220 2009-02-19 23:34:21 +00:00
moodlerobot c93c4acefe Automatic installer.php lang files by installer_builder (20090220) 2009-02-19 23:31:46 +00:00
skodak 82175fb502 MDL-18039 fixed footer docs link; backported from HEAD 2009-02-19 07:33:30 +00:00
skodak bb04106c41 MDL-18274 fixed lang string, thanks Helen; backported from HEAD 2009-02-19 07:22:08 +00:00
moodlerobot f7e96073b4 Updated the 18 build version to 20090219 2009-02-18 23:34:28 +00:00
moodlerobot 17e070e261 Automatic installer.php lang files by installer_builder (20090219) 2009-02-18 23:31:55 +00:00
stronk7 9d4222bb7f MDL-18302 filterlib - fixed rebuild of nested ignoretags ; backported from HEAD 2009-02-18 11:04:35 +00:00
moodlerobot d2f4b686fd Updated the 18 build version to 20090218 2009-02-17 23:34:50 +00:00
moodlerobot bb66bc469c Automatic installer.php lang files by installer_builder (20090218) 2009-02-17 23:32:05 +00:00
moodlerobot 527b1d3474 Updated the 18 build version to 20090217 2009-02-16 23:33:54 +00:00
moodlerobot 15f4610a57 Updated the 18 build version to 20090216 2009-02-15 23:33:55 +00:00
skodak e613a1aacb MDL-18258 fixed legacy type and improved risky default course role hints; backported from HEAD 2009-02-15 18:45:42 +00:00
skodak 0ea8ab74a2 MDL-18039 xhtml strict fixes 2009-02-15 17:40:42 +00:00
skodak 66fbfc95b7 MDL-18039 bacporting security overview report to 1.8.x 2009-02-15 17:28:55 +00:00
iarenaza b74316986b Cache LDAP connections: MDL-18130 Properly handle open LDAP connections.
Both CAS and LDAP auth plugins open new connections to the LDAP server
to get the user account details. While this is the desired behaviour
for regular logins (we probably don't have an already open connection
to the LDAP server), this is a ressource hog when we are doing user
synchronization, as the closed connections remain in the TCP_WAIT
state for a while before the server can reuse them. If we are syncing
a lot of users, we can make the server run out of available TCP
ressources.

So we cache the connection the first time we establish it and return
the same connection handle everytime, unless we've closed all the
'open' connections, or the auth object is destroyed.

In addition to that, there were a few missing calls to ldap_close().
2009-02-15 15:33:21 +00:00
moodlerobot a33b386e79 Updated the 18 build version to 20090215 2009-02-14 23:32:54 +00:00
stronk7 d3d4056087 MDL-9796 install - delete dataroot's env info (shouldn't exist) to force check against released one 2009-02-14 11:03:42 +00:00
moodlerobot ac04258a92 Updated the 18 build version to 20090214 2009-02-13 23:33:45 +00:00
stronk7 6326668d2b MDL-9796 upgrade & env - delete dataroot's environmetal info to force check against released one 2009-02-13 15:45:05 +00:00
stronk7 168bbfa435 MDL-18227 - Ignoring all non numeric rates. 2009-02-13 11:02:12 +00:00
moodlerobot 5aa35fd087 Updated the 18 build version to 20090213 2009-02-12 23:33:57 +00:00
moodlerobot 4f810e39ad Automatic installer.php lang files by installer_builder (20090213) 2009-02-12 23:31:35 +00:00
moodlerobot 66d48264d0 Updated the 18 build version to 20090212 2009-02-12 00:36:17 +00:00
moodlerobot 2a5c20e237 Automatic installer.php lang files by installer_builder (20090212) 2009-02-12 00:31:46 +00:00
moodlerobot c99691f2de Updated the 18 build version to 20090211 2009-02-11 00:16:19 +00:00
moodlerobot 97f4847f35 Updated the 18 build version to 20090210 2009-02-09 23:43:20 +00:00
moodlerobot 5ae1e401db Updated the 18 build version to 20090209 2009-02-08 23:35:48 +00:00
moodlerobot 3e1bc1a46e Automatic installer.php lang files by installer_builder (20090209) 2009-02-08 23:33:41 +00:00
skodak ee756bc391 MDL-9796 fixed error array when environment file broken; merged from MOODLE_19_STABLE 2009-02-08 21:34:24 +00:00
moodlerobot d36f86fc03 Updated the 18 build version to 20090208 2009-02-07 23:39:28 +00:00
stronk7 a69f581c04 MDL-18165 filterlib - Use one exclusive separator, instead of "." (dot) to avoid saved tags to match with phrases being processed ; backported from HEAD 2009-02-07 01:01:06 +00:00
moodlerobot 4fb64b5080 Updated the 18 build version to 20090207 2009-02-06 23:38:29 +00:00
jerome 0719032352 mp3 flash player MDL-7549 MP3 flash player now plays the end of the mp3 file 2009-02-06 07:22:34 +00:00
jerome 143432338d mnet MDL-10935 fix unicode character when the remote site send the course name for updating enrolment, merged from 19 2009-02-06 00:40:50 +00:00
moodlerobot b000fba3c1 Updated the 18 build version to 20090206 2009-02-05 23:40:38 +00:00
moodlerobot 21cd910eb5 Automatic installer.php lang files by installer_builder (20090206) 2009-02-05 23:37:06 +00:00
stronk7 13ea07e24c MDL-10583 course format - some more uses of the get_section_name() added ; backported from HEAD 2009-02-05 13:42:18 +00:00
stronk7 c65318bd3c MDL-10583 course format - discovered the get_section_name() that performs the fallback harcoded in previous commit. Backported from HEAD 2009-02-05 13:31:42 +00:00
stronk7 97ac6f03aa MDL-10583 course format - allow course formats to specify their section name ; backported from HEAD 2009-02-05 13:14:20 +00:00
moodlerobot 1092a6d6c1 Updated the 18 build version to 20090205 2009-02-05 00:36:36 +00:00
piers d104b078a4 MDL-17832 - consistent adding and removing of slashes for track data. backport 1.8. 2009-02-04 19:01:43 +00:00
piers 40ab2ed04b MDL-18023 - add type check to check against default to avoid 0 error. backport 1.8. 2009-02-04 18:43:00 +00:00
stronk7 f75507dadb MDL-8848 restore section summaries - now restored if target course have them empty ; backported from 19_STABLE 2009-02-04 17:24:08 +00:00
stronk7 0462087db7 MDL-18129 blog_print_entry() - avoid double format_text() ; backported from HEAD 2009-02-04 16:42:44 +00:00
tjhunt 7731eb7005 quiz overview report: MDL-18122 stray AS kills Oracle
Thanks to Adolfo Muñoz Aguilar for finding and fixing this.
2009-02-04 06:54:30 +00:00
moodlerobot 0bc4b09a66 Updated the 18 build version to 20090204 2009-02-03 23:44:14 +00:00
moodlerobot 23a7afd437 Automatic installer.php lang files by installer_builder (20090204) 2009-02-03 23:37:07 +00:00
moodlerobot 3a3045381d Updated the 18 build version to 20090203 2009-02-02 23:45:04 +00:00
Francois Marier 5cb48efd23 Fix CVS-git drift (old .sql files) 2009-02-01 23:45:11 +00:00
moodlerobot c006a6305f Updated the 18 build version to 20090202 2009-02-01 23:45:11 +00:00
moodlerobot 818f68c0b8 Automatic installer.php lang files by installer_builder (20090202) 2009-02-01 23:38:09 +00:00
skodak 985d26e786 MDL-10275 backporting gd environment test 2009-02-01 16:27:56 +00:00
moodlerobot 2e7e59534c Updated the 18 build version to 20090201 2009-01-31 23:48:25 +00:00
moodlerobot 831e05b5a3 Automatic installer.php lang files by installer_builder (20090201) 2009-01-31 23:41:10 +00:00
moodlerobot 20821341eb Updated the 18 build version to 20090131 2009-01-30 23:49:14 +00:00
moodlerobot 0e8aa76a78 Automatic installer.php lang files by installer_builder (20090131) 2009-01-30 23:42:09 +00:00
moodlerobot 9f546911c2 Updated the 18 build version to 20090130 2009-01-29 23:44:53 +00:00
moodlerobot fac0662c6a Updated the 18 build version to 20090129 2009-01-28 23:47:16 +00:00
stronk7 6ea03ceca0 MDL-18073 environment - enforce PHP 5.2.8 req for Moodle 2.0 ; merged from 17_STABLE 2009-01-28 23:41:52 +00:00
piers c97c2b4ae9 MDL-17821 - fix incorrect data validation regexs for 2004. thanks Peter Chamberlin. backport to 1.8. fix typing error on patch. 2009-01-28 19:24:54 +00:00
piers bec2148597 MDL-17821 - fix incorrect data validation regexs for 2004. thanks Peter Chamberlin. backport to 1.8. 2009-01-28 19:23:38 +00:00
moodlerobot aeb1e82ae5 Bumped post release 2009-01-28 09:21:00 +00:00
467 changed files with 16985 additions and 31729 deletions
+339
View File
@@ -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.
+1 -1
View File
@@ -272,7 +272,7 @@
p.id as prefid
FROM {$CFG->prefix}user u
JOIN {$CFG->prefix}user_preferences p ON u.id=p.userid
WHERE p.name='create_password' AND p.value=1 AND u.email !='' ");
WHERE p.name='create_password' AND p.value='1' AND u.email !='' ");
foreach ($newusers as $newuserid => $newuser) {
$newuser->emailstop = 0; // send email regardless
+31 -12
View File
@@ -80,7 +80,6 @@
<FEEDBACK>
<ON_ERROR message="mysql416required" />
</FEEDBACK>
<BYPASS function="bypass_mysql416_reqs" message="mysql416bypassed" />
</VENDOR>
<VENDOR name="postgres" version="7.4" />
<VENDOR name="mssql" version="9.0" />
@@ -140,7 +139,6 @@
<FEEDBACK>
<ON_ERROR message="mysql416required" />
</FEEDBACK>
<BYPASS function="bypass_mysql416_reqs" message="mysql416bypassed" />
</VENDOR>
<VENDOR name="postgres" version="8.0" />
<VENDOR name="mssql" version="9.0" />
@@ -214,20 +212,19 @@
</FEEDBACK>
</UNICODE>
<DATABASE level="required">
<VENDOR name="mysql" version="4.1.16">
<VENDOR name="mysql" version="5.0.25">
<FEEDBACK>
<ON_ERROR message="mysql416required" />
</FEEDBACK>
<BYPASS function="bypass_mysql416_reqs" message="mysql416bypassed" />
</VENDOR>
<VENDOR name="postgres" version="8.0" />
<VENDOR name="postgres" version="8.3" />
<VENDOR name="mssql" version="9.0" />
<VENDOR name="odbc_mssql" version="9.0" />
<VENDOR name="mssql_n" version="9.0" />
<VENDOR name="oracle" version="9.0" />
<VENDOR name="oracle" version="10.0" />
<VENDOR name="sqlite" version="2.0" />
</DATABASE>
<PHP version="5.2.4" level="required">
<PHP version="5.2.8" level="required">
</PHP>
<PHP_EXTENSIONS>
<PHP_EXTENSION name="iconv" level="optional">
@@ -270,13 +267,35 @@
<ON_ERROR message="ziprequired" />
</FEEDBACK>
</PHP_EXTENSION>
</PHP_EXTENSIONS>
<CUSTOM_CHECKS>
<CUSTOM_CHECK file="lib/customcheckslib.php" function="php_check_register_globals" level="required">
<PHP_EXTENSION name="gd" level="optional">
<FEEDBACK>
<ON_CHECK message="globalswarning" />
<ON_CHECK message="gdrecommended" />
</FEEDBACK>
</CUSTOM_CHECK>
</PHP_EXTENSION>
<PHP_EXTENSION name="simplexml" level="required">
<FEEDBACK>
<ON_CHECK message="simplexmlrequired" />
</FEEDBACK>
</PHP_EXTENSION>
</PHP_EXTENSIONS>
<PHP_SETTINGS>
<PHP_SETTING name="memory_limit" value="40M" level="required">
<FEEDBACK>
<ON_ERROR message="settingmemorylimit" />
</FEEDBACK>
</PHP_SETTING>
<PHP_SETTING name="safe_mode" value="0" level="optional">
<FEEDBACK>
<ON_CHECK message="settingsafemode" />
</FEEDBACK>
</PHP_SETTING>
<PHP_SETTING name="file_uploads" value="1" level="optional">
<FEEDBACK>
<ON_CHECK message="settingfileuploads" />
</FEEDBACK>
</PHP_SETTING>
</PHP_SETTINGS>
<CUSTOM_CHECKS>
</CUSTOM_CHECKS>
</MOODLE>
</COMPATIBILITY_MATRIX>
+275
View File
@@ -0,0 +1,275 @@
<?php
require_once('../config.php');
/**
* SCRIPT CONFIGURATION
*/
$starttimer = time()+microtime();
$settings = array();
$settings['verbose'] = false;
$settings['username'] = null;
$settings['password'] = null;
$settings['eolchar'] = '<br />'; // Character used to break lines
// Argument arrays: 0=>short name, 1=>long name
$arguments = array(
array('short'=>'u', 'long'=>'username', 'help' => 'Your moodle username', 'type'=>'STRING', 'default' => ''),
array('short'=>'pw', 'long'=>'password', 'help' => 'Your moodle password', 'type'=>'STRING', 'default' => ''),
array('short'=>'v', 'long' => 'verbose', 'help' => 'Display extra information about the process')
);
// Building the USAGE output of the command line version
if (isset($argv) && isset($argc)) {
$help = "Moodle User Pix Fix. Restores user profile images that were not properly moved during 1.8.2 upgrade to newer versions.\n\n"
. "Usage: {$argv[0]}; [OPTION] ...\n"
. "Options:\n"
. " -h, -?, -help, --help This output\n";
foreach ($arguments as $arg_array) {
$equal = '';
if (!empty($arg_array['type'])) {
$equal = "={$arg_array['type']}";
}
$padding1 = 5 - strlen($arg_array['short']);
$padding2 = 30 - (strlen($arg_array['long']) + strlen($equal));
$paddingstr1 = '';
for ($i = 0; $i < $padding1; $i++) {
$paddingstr1 .= ' ';
}
$paddingstr2 = '';
for ($i = 0; $i < $padding2; $i++) {
$paddingstr2 .= ' ';
}
$help .= " -{$arg_array['short']},$paddingstr1--{$arg_array['long']}$equal$paddingstr2{$arg_array['help']}\n";
}
$help .= "\nEmail nicolasconnault@gmail.com for any suggestions or bug reports.\n";
if ($argc == 1 || in_array($argv[1], array('--help', '-help', '-h', '-?'))) {
echo $help;
die();
} else {
$settings['eolchar'] = "\n";
$argv = arguments($argv);
$argscount = 0;
foreach ($arguments as $arg_array) {
$value = null;
if (in_array($arg_array['short'], array_keys($argv))) {
$value = $argv[$arg_array['short']];
unset($argv[$arg_array['short']]);
} elseif (in_array($arg_array['long'], array_keys($argv))) {
$value = $argv[$arg_array['long']];
unset($argv[$arg_array['long']]);
}
if (!is_null($value)) {
$settings[$arg_array['long']] = $value;
$argscount++;
}
}
// If some params are left in argv, it means they are not supported
if ($argscount == 0 || count($argv) > 0) {
echo $help;
die();
}
}
}
/**
* SCRIPT SETUP
*/
require_once($CFG->libdir . '/formslib.php');
require_once($CFG->dirroot .'/course/lib.php');
verbose("Loading libraries...");
$systemcontext = get_context_instance(CONTEXT_SYSTEM);
/**
* WEB INTERFACE FORM
*/
class pixfix_form extends moodleform {
function definition() {
global $arguments;
$mform =& $this->_form;
foreach ($arguments as $arg_array) {
$type = 'advcheckbox';
$label = ucfirst(str_replace('-', ' ', $arg_array['long']));
if (!empty($arg_array['type'])) {
$type = 'text';
}
if ($arg_array['long'] == 'password' || $arg_array['long'] == 'username') {
continue;
}
$mform->addElement($type, $arg_array['long'], $label);
if (isset($arg_array['default'])) {
$mform->setDefault($arg_array['long'], $arg_array['default']);
}
}
$this->add_action_buttons(false, 'Restore Images');
}
function definition_after_data() {
}
}
$run_script = true;
$web_interface = false;
// If eolchar is still <br />, load the web interface
if ($settings['eolchar'] == '<br />') {
print_header("User Pix-Fix");
print_heading("User Pix-Fix");
$mform = new pixfix_form();
if ($data = $mform->get_data(false)) {
foreach ($arguments as $arg_array) {
if (!empty($data->{$arg_array['long']})) {
$settings[$arg_array['long']] = $data->{$arg_array['long']};
}
}
} else {
$run_script = false;
}
if (!has_capability('moodle/site:doanything', $systemcontext)) {
// If not logged in, give link to login page for current site
notify("You must be logged in as administrator before using this script.");
require_login();
} else {
$mform->display();
}
$web_interface = true;
}
if ($run_script) {
// User authentication
if (!$web_interface) {
if (empty($settings['username'])) {
echo "You must enter a valid username for a moodle administrator account on this site.{$settings['eolchar']}";
die();
} elseif (empty($settings['password'])) {
echo "You must enter a valid password for a moodle administrator account on this site.{$settings['eolchar']}";
die();
} else {
if (!$user = authenticate_user_login($settings['username'], $settings['password'])) {
echo "Invalid username or password!{$settings['eolchar']}";
die();
}
$USER = complete_user_login($user);
if (!has_capability('moodle/site:doanything', $systemcontext)) {
echo "You do not have administration privileges on this Moodle site. These are required for running the restore script.{$settings['eolchar']}";
die();
}
}
}
// Script code here
// Look for old moodledata/users directory
$oldusersdir = $CFG->dataroot . '/users';
if (!file_exists($oldusersdir)) {
notify('The old directory for user profile images ('.$oldusersdir.') does not exist. Pictures cannot be restored!');
} else {
// Find user profile images that are not yet in the new directory
$folders = get_directory_list($oldusersdir, '', false, true, false);
$restored_count = 0;
foreach ($folders as $userid) {
$olddir = $oldusersdir . '/' . $userid;
$files = get_directory_list($olddir);
if (empty($files)) {
continue;
}
// Create new user directory
if (!$newdir = make_user_directory($userid)) {
// some weird directory - do not stop the upgrade, just ignore it
continue;
}
// Move contents of old directory to new one
if (file_exists($olddir) && file_exists($newdir)) {
$restored = false;
foreach ($files as $file) {
if (!file_exists($newdir . '/' . $file)) {
copy($olddir . '/' . $file, $newdir . '/' . $file);
verbose("Moved $olddir/$file into $newdir/$file");
$restored = true;
}
}
if ($restored) {
$restored_count++;
}
} else {
notify("Could not move the contents of $olddir into $newdir!");
$result = false;
break;
}
}
if ($settings['eolchar'] == '<br />') {
print_box_start('generalbox centerpara');
}
if ($restored_count > 0) {
echo "Successfully restored profile images for $restored_count users!" . $settings['eolchar'];
} else {
echo "Did not find any user profile images in need of restoring." . $settings['eolchar'];
}
if ($settings['eolchar'] == '<br />') {
print_box_end();
}
}
}
if ($settings['eolchar'] == '<br />') {
print_footer();
}
/**
* Converts the standard $argv into an associative array taking var=val arguments into account
* @param array $argv
* @return array $_ARG
*/
function arguments($argv) {
$_ARG = array();
foreach ($argv as $arg) {
if (ereg('--?([^=]+)=(.*)',$arg,$reg)) {
$_ARG[$reg[1]] = $reg[2];
} elseif(ereg('-([a-zA-Z0-9]+)',$arg,$reg)) {
$_ARG[$reg[1]] = 'true';
}
}
return $_ARG;
}
/**
* If verbose is switched on, prints a string terminated by the global eolchar string.
* @param string $string The string to STDOUT
*/
function verbose($string) {
global $settings;
if ($settings['verbose'] && !$settings['quiet']) {
echo $string . $settings['eolchar'];
}
}
?>
+1
View File
@@ -281,6 +281,7 @@
require_once($CFG->libdir.'/environmentlib.php');
print_heading(get_string('environment', 'admin'));
remove_dir($CFG->dataroot . '/environment'); /// Always delete downloaded env. info to force use of the released one. MDL-9796
if (!check_moodle_environment($release, $environment_results, true)) {
print_box_start('generalbox', 'notice'); // MDL-8330
print_string('langpackwillbeupdated', 'admin');
+4
View File
@@ -586,6 +586,10 @@ function lang_fix_value_before_save($value='') {
if (ini_get_bool('magic_quotes_sybase')) { // Unescape escaped sybase quotes
$value = str_replace("''", "'", $value);
}
// escape all embedded variables
$value = str_replace('$', '\$', $value); // Add slashes for $
// unescape placeholders: only $a and $a->something are allowed. All other $variables are left escaped
$value = preg_replace('/\\\\\$a($|[^_a-zA-Z0-9\-]|\->[a-zA-Z0-9_]+)/', '$a\\1', $value);
$value = str_replace("'", "\\'", $value); // Add slashes for '
$value = str_replace('"', "\\\"", $value); // Add slashes for "
$value = str_replace("%","%%",$value); // Escape % characters
+1 -1
View File
@@ -180,7 +180,7 @@ if (!$acl) {
}
$deletecolumn = "<a href=\"?id={$aclrecord->id}&amp;action=delete&amp;sesskey={$USER->sesskey}\">"
. get_string('delete') . "</a>";
$table->data[] = array ($aclrecord->username, $aclrecord->mnet_host_id, $accesscolumn, $deletecolumn);
$table->data[] = array (s($aclrecord->username), $aclrecord->mnet_host_id, $accesscolumn, $deletecolumn);
}
}
+1 -1
View File
@@ -64,7 +64,7 @@ function mnet_get_functions($type, $parentname) {
foreach($rpcrecords as $rpc) {
if (!array_key_exists($rpc->function_name, $methodServiceArray)) {
$rpc->enabled = 0;
update_record('mnet_rpc', $rpc);
update_record('mnet_rpc', addslashes_recursive($rpc));
}
}
}
+2
View File
@@ -31,6 +31,8 @@
redirect('index.php', get_string('postrequired','mnet') ,7);
}
require_sesskey();
if ('verify' == $step) {
$mnet_peer = new mnet_peer();
$mnet_peer->set_id($hostid);
+14 -2
View File
@@ -86,9 +86,21 @@
$mnet_request->set_method('enrol/mnet/enrol.php/course_enrolments');
$mnet_request->add_param($course->remoteid, 'int');
$mnet_request->send($mnet_peer);
$all_enrolled_users = $mnet_request->response;
$raw_all_enrolled_users = $mnet_request->response;
unset($mnet_request);
$all_enrolled_users = array();
if (!empty($raw_all_enrolled_users)) {
// Try to repair keying of remote users array, numeric usernames get lost in the fracas
foreach ($raw_all_enrolled_users as $username => $userdetails) {
if (empty($userdetails['username']) || !is_numeric($username)) {
//Not able to repair, or no need to repair
$all_enrolled_users[$username] = $userdetails;
} else {
$all_enrolled_users[$userdetails['username']] = $userdetails;
}
}
}
$select = '';
$all_enrolled_usernames = '';
+1
View File
@@ -55,6 +55,7 @@ if (empty($CFG->mnet_dispatcher_mode) || $CFG->mnet_dispatcher_mode !== 'strict'
<div>
<input type="hidden" name="hostid" value="<?php echo $host->id; ?>" />
<input type="hidden" name="step" value="verify" />
<input type="hidden" name="sesskey" value="<?php echo sesskey(); ?>" />
<input type="submit" name="submit" value="<?php print_string('delete'); ?>"/>
</div>
</form>
+123
View File
@@ -0,0 +1,123 @@
<?php //$Id$
///////////////////////////////////////////////////////////////////////////
// //
// NOTICE OF COPYRIGHT //
// //
// Moodle - Modular Object-Oriented Dynamic Learning Environment //
// http://moodle.org //
// //
// Copyright (C) 1999 onwards Martin Dougiamas http://dougiamas.com //
// //
// 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: //
// //
// http://www.gnu.org/copyleft/gpl.html //
// //
///////////////////////////////////////////////////////////////////////////
require_once('../../../config.php');
require_once($CFG->dirroot.'/'.$CFG->admin.'/report/security/lib.php');
require_once($CFG->libdir.'/adminlib.php');
require_login();
$issue = optional_param('issue', '', PARAM_FILE); // show detailed info about one issue only
$issues = report_security_get_issue_list();
// test if issue valid string
if (array_search($issue, $issues, true) === false) {
$issue = '';
}
// we may need a bit more memory and this may take a long time to process
@raise_memory_limit('128M');
@set_time_limit(0);
// Print the header.
$adminroot = admin_get_root();
admin_externalpage_setup('reportsecurity', $adminroot);
admin_externalpage_print_header($adminroot);
print_heading(get_string('reportsecurity', 'report_security'));
while(@ob_end_flush());
@flush();
$strok = '<span class="statusok">'.get_string('statusok', 'report_security').'</span>';
$strinfo = '<span class="statusinfo">'.get_string('statusinfo', 'report_security').'</span>';
$strwarning = '<span class="statuswarning">'.get_string('statuswarning', 'report_security').'</span>';
$strserious = '<span class="statusserious">'.get_string('statusserious', 'report_security').'</span>';
$strcritical = '<span class="statuscritical">'.get_string('statuscritical', 'report_security').'</span>';
$strissue = get_string('issue', 'report_security');
$strstatus = get_string('status', 'report_security');
$strdesc = get_string('description', 'report_security');
$strconfig = get_string('configuration', 'report_security');
$statusarr = array(REPORT_SECURITY_OK => $strok,
REPORT_SECURITY_INFO => $strinfo,
REPORT_SECURITY_WARNING => $strwarning,
REPORT_SECURITY_SERIOUS => $strserious,
REPORT_SECURITY_CRITICAL => $strcritical);
$url = "$CFG->wwwroot/$CFG->admin/report/security/index.php";
if ($issue and ($result = $issue(true))) {
$table = new object();
$table->head = array($strissue, $strstatus, $strdesc, $strconfig);
$table->size = array('30%', '10%', '50%', '10%' );
$table->align = array('left', 'left', 'left', 'left');
$table->width = '90%';
$table->data = array();
// print detail of one issue only
$row = array();
$row[0] = report_security_doc_link($issue, $result->name);
$row[1] = $statusarr[$result->status];
$row[2] = $result->info;
$row[3] = is_null($result->link) ? '&nbsp;' : $result->link;
$CFG->pagepath = "report/security/$issue"; // help link in footer
$table->data[] = $row;
print_table($table);
print_box($result->details, 'generalbox boxwidthnormal boxaligncenter'); // TODO: add proper css
print_continue($url);
} else {
$table = new object();
$table->head = array($strissue, $strstatus, $strdesc);
$table->size = array('30%', '10%', '60%' );
$table->align = array('left', 'left', 'left');
$table->width = '90%';
$table->data = array();
foreach ($issues as $issue) {
$result = $issue(false);
if (!$result) {
// ignore this test
continue;
}
$row = array();
$row[0] = "<a href='$url?issue=$result->issue'>$result->name</a>";
$row[1] = $statusarr[$result->status];
$row[2] = $result->info;
$table->data[] = $row;
}
print_table($table);
}
admin_externalpage_print_footer($adminroot);
+779
View File
@@ -0,0 +1,779 @@
<?php //$Id$
///////////////////////////////////////////////////////////////////////////
// //
// NOTICE OF COPYRIGHT //
// //
// Moodle - Modular Object-Oriented Dynamic Learning Environment //
// http://moodle.org //
// //
// Copyright (C) 1999 onwards Martin Dougiamas http://dougiamas.com //
// //
// 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: //
// //
// http://www.gnu.org/copyleft/gpl.html //
// //
///////////////////////////////////////////////////////////////////////////
require_once("$CFG->libdir/adminlib.php");
define('REPORT_SECURITY_OK', 'ok');
define('REPORT_SECURITY_INFO', 'info');
define('REPORT_SECURITY_WARNING', 'warning');
define('REPORT_SECURITY_SERIOUS', 'serious');
define('REPORT_SECURITY_CRITICAL', 'critical');
function report_security_get_issue_list() {
return array(
'report_security_check_globals',
'report_security_check_unsecuredataroot',
'report_security_check_displayerrors',
'report_security_check_noauth',
'report_security_check_embed',
'report_security_check_mediafilterswf',
'report_security_check_openprofiles',
'report_security_check_google',
'report_security_check_passwordsaltmain',
'report_security_check_configrw',
'report_security_check_defaultuserrole',
'report_security_check_guestrole',
'report_security_check_defaultcourserole',
'report_security_check_courserole',
);
}
function report_security_doc_link($issue, $name) {
global $CFG;
if (empty($CFG->docroot)) {
return $name;
}
$lang = str_replace('_utf8', '', current_language());
$str = "<a onclick=\"this.target='docspopup'\" href=\"$CFG->docroot/$lang/report/security/$issue\">";
$str .= "<img class=\"iconhelp\" src=\"$CFG->httpswwwroot/pix/docs.gif\" alt=\"\" />$name</a>";
return $str;
}
///=============================================
/// Issue checks
///=============================================
/**
* Verifies register globals PHP setting.
* @param bool $detailed
* @return object result
*/
function report_security_check_globals($detailed=false) {
$result = new object();
$result->issue = 'report_security_check_globals';
$result->name = get_string('check_globals_name', 'report_security');
$result->info = null;
$result->details = null;
$result->status = null;
$result->link = null;
if (ini_get_bool('register_globals')) {
$result->status = REPORT_SECURITY_CRITICAL;
$result->info = get_string('check_globals_error', 'report_security');
} else {
$result->status = REPORT_SECURITY_OK;
$result->info = get_string('check_globals_ok', 'report_security');
}
if ($detailed) {
$result->details = get_string('check_globals_details', 'report_security');
}
return $result;
}
/**
* Verifies unsupported noauth setting
* @param bool $detailed
* @return object result
*/
function report_security_check_noauth($detailed=false) {
global $CFG;
$result = new object();
$result->issue = 'report_security_check_noauth';
$result->name = get_string('check_noauth_name', 'report_security');
$result->info = null;
$result->details = null;
$result->status = null;
$result->link = null;
$result->link = "<a href=\"$CFG->wwwroot/$CFG->admin/auth.php\">".get_string('authentication').'</a>';
if (is_enabled_auth('none')) {
$result->status = REPORT_SECURITY_CRITICAL;
$result->info = get_string('check_noauth_error', 'report_security');
} else {
$result->status = REPORT_SECURITY_OK;
$result->info = get_string('check_noauth_ok', 'report_security');
}
if ($detailed) {
$result->details = get_string('check_noauth_details', 'report_security');
}
return $result;
}
/**
* Verifies sloppy embedding - this should have been removed long ago!!
* @param bool $detailed
* @return object result
*/
function report_security_check_embed($detailed=false) {
global $CFG;
$result = new object();
$result->issue = 'report_security_check_embed';
$result->name = get_string('check_embed_name', 'report_security');
$result->info = null;
$result->details = null;
$result->status = null;
$result->link = "<a href=\"$CFG->wwwroot/$CFG->admin/settings.php?section=sitepolicies\">".get_string('sitepolicies', 'admin').'</a>';
if (!empty($CFG->allowobjectembed)) {
$result->status = REPORT_SECURITY_CRITICAL;
$result->info = get_string('check_embed_error', 'report_security');
} else {
$result->status = REPORT_SECURITY_OK;
$result->info = get_string('check_embed_ok', 'report_security');
}
if ($detailed) {
$result->details = get_string('check_embed_details', 'report_security');
}
return $result;
}
/**
* Verifies sloppy swf embedding - this should have been removed long ago!!
* @param bool $detailed
* @return object result
*/
function report_security_check_mediafilterswf($detailed=false) {
global $CFG;
$result = new object();
$result->issue = 'report_security_check_mediafilterswf';
$result->name = get_string('check_mediafilterswf_name', 'report_security');
$result->info = null;
$result->details = null;
$result->status = null;
$result->link = "<a href=\"$CFG->wwwroot/$CFG->admin/filters.php\">".get_string('filtersettings', 'admin').'</a>';
if (!empty($CFG->textfilters)) {
$activefilters = explode(',', $CFG->textfilters);
} else {
$activefilters = array();
}
if (array_search('filter/mediaplugin', $activefilters) !== false and !empty($CFG->filter_mediaplugin_enable_swf)) {
$result->status = REPORT_SECURITY_CRITICAL;
$result->info = get_string('check_mediafilterswf_error', 'report_security');
} else {
$result->status = REPORT_SECURITY_OK;
$result->info = get_string('check_mediafilterswf_ok', 'report_security');
}
if ($detailed) {
$result->details = get_string('check_mediafilterswf_details', 'report_security');
}
return $result;
}
/**
* Verifies fatal misconfiguration of dataroot
* @param bool $detailed
* @return object result
*/
function report_security_check_unsecuredataroot($detailed=false) {
global $CFG;
$result = new object();
$result->issue = 'report_security_check_unsecuredataroot';
$result->name = get_string('check_unsecuredataroot_name', 'report_security');
$result->info = null;
$result->details = null;
$result->status = null;
$result->link = null;
$insecuredataroot = is_dataroot_insecure();
if ($insecuredataroot) {
$result->status = REPORT_SECURITY_SERIOUS;
$result->info = get_string('check_unsecuredataroot_warning', 'report_security', $CFG->dataroot);
} else {
$result->status = REPORT_SECURITY_OK;
$result->info = get_string('check_unsecuredataroot_ok', 'report_security');
}
if ($detailed) {
$result->details = get_string('check_unsecuredataroot_details', 'report_security');
}
return $result;
}
/**
* Verifies disaplying of errors - problem for lib files and 3rd party code
* because we can not disable debugging in these scripts (they do not include config.php)
* @param bool $detailed
* @return object result
*/
function report_security_check_displayerrors($detailed=false) {
$result = new object();
$result->issue = 'report_security_check_displayerrors';
$result->name = get_string('check_displayerrors_name', 'report_security');
$result->info = null;
$result->details = null;
$result->status = null;
$result->link = null;
if (defined('WARN_DISPLAY_ERRORS_ENABLED')) {
$result->status = REPORT_SECURITY_WARNING;
$result->info = get_string('check_displayerrors_error', 'report_security');
} else {
$result->status = REPORT_SECURITY_OK;
$result->info = get_string('check_displayerrors_ok', 'report_security');
}
if ($detailed) {
$result->details = get_string('check_displayerrors_details', 'report_security');
}
return $result;
}
/**
* Verifies open profiles - originaly open by default, not anymore because spammer abused it a lot
* @param bool $detailed
* @return object result
*/
function report_security_check_openprofiles($detailed=false) {
global $CFG;
$result = new object();
$result->issue = 'report_security_check_openprofiles';
$result->name = get_string('check_openprofiles_name', 'report_security');
$result->info = null;
$result->details = null;
$result->status = null;
$result->link = "<a href=\"$CFG->wwwroot/$CFG->admin/settings.php?section=sitepolicies\">".get_string('sitepolicies', 'admin').'</a>';
if (empty($CFG->forcelogin) and empty($CFG->forceloginforprofiles)) {
$result->status = REPORT_SECURITY_WARNING;
$result->info = get_string('check_openprofiles_error', 'report_security');
} else {
$result->status = REPORT_SECURITY_OK;
$result->info = get_string('check_openprofiles_ok', 'report_security');
}
if ($detailed) {
$result->details = get_string('check_openprofiles_details', 'report_security');
}
return $result;
}
/**
* Verifies google access not combined with disabled guest access
* because attackers might gain guest access by modifying browser signature.
* @param bool $detailed
* @return object result
*/
function report_security_check_google($detailed=false) {
global $CFG;
$result = new object();
$result->issue = 'report_security_check_google';
$result->name = get_string('check_google_name', 'report_security');
$result->info = null;
$result->details = null;
$result->status = null;
$result->link = "<a href=\"$CFG->wwwroot/$CFG->admin/settings.php?section=sitepolicies\">".get_string('sitepolicies', 'admin').'</a>';
if (empty($CFG->opentogoogle)) {
$result->status = REPORT_SECURITY_OK;
$result->info = get_string('check_google_ok', 'report_security');
} else if (!empty($CFG->guestloginbutton)) {
$result->status = REPORT_SECURITY_INFO;
$result->info = get_string('check_google_info', 'report_security');
} else {
$result->status = REPORT_SECURITY_SERIOUS;
$result->info = get_string('check_google_error', 'report_security');
}
if ($detailed) {
$result->details = get_string('check_google_details', 'report_security');
}
return $result;
}
/**
* Verifies config.php is not writable anymore after installation,
* config files were changed on several outdated server.
* @param bool $detailed
* @return object result
*/
function report_security_check_configrw($detailed=false) {
global $CFG;
$result = new object();
$result->issue = 'report_security_check_configrw';
$result->name = get_string('check_configrw_name', 'report_security');
$result->info = null;
$result->details = null;
$result->status = null;
$result->link = null;
if (is_writable($CFG->dirroot.'/config.php')) {
$result->status = REPORT_SECURITY_WARNING;
$result->info = get_string('check_configrw_warning', 'report_security');
} else {
$result->status = REPORT_SECURITY_OK;
$result->info = get_string('check_configrw_ok', 'report_security');
}
if ($detailed) {
$result->details = get_string('check_configrw_details', 'report_security');
}
return $result;
}
/**
* Verifies sanity of default user role.
* @param bool $detailed
* @return object result
*/
function report_security_check_defaultuserrole($detailed=false) {
global $CFG;
$result = new object();
$result->issue = 'report_security_check_defaultuserrole';
$result->name = get_string('check_defaultuserrole_name', 'report_security');
$result->info = null;
$result->details = null;
$result->status = null;
$result->link = "<a href=\"$CFG->wwwroot/$CFG->admin/settings.php?section=userpolicies\">".get_string('userpolicies', 'admin').'</a>';;
if (!$default_role = get_record('role', 'id', $CFG->defaultuserroleid)) {
$result->status = REPORT_SECURITY_WARNING;
$result->info = get_string('check_defaultuserrole_notset', 'report_security');
$result->details = $result->info;
return $result;
}
// first test if do anything enabled - that would be really crazy!
$sql = "SELECT COUNT(DISTINCT rc.contextid)
FROM {$CFG->prefix}role_capabilities rc
WHERE rc.capability = 'moodle/site:doanything'
AND rc.permission = ".CAP_ALLOW."
AND rc.roleid = $default_role->id";
$anythingcount = count_records_sql($sql);
// risky caps - usually very dangerous
$sql = "SELECT COUNT(DISTINCT rc.contextid)
FROM {$CFG->prefix}role_capabilities rc
JOIN {$CFG->prefix}capabilities cap ON cap.name = rc.capability
WHERE ".sql_bitand('cap.riskbitmask', (RISK_XSS | RISK_CONFIG))." <> 0
AND rc.permission = ".CAP_ALLOW."
AND rc.roleid = $default_role->id";
$riskycount = count_records_sql($sql);
// default role can not have view cap in all courses - this would break moodle badly
$viewcap = record_exists('role_capabilities', 'roleid', $default_role->id, 'permission', CAP_ALLOW, 'capability', 'moodle/course:view');
// it may have either no or 'user' legacy type - nothing else, or else it would break during upgrades badly
$legacyok = false;
$sql = "SELECT rc.capability, 1
FROM {$CFG->prefix}role_capabilities rc
WHERE rc.capability LIKE 'moodle/legacy:%'
AND rc.permission = ".CAP_ALLOW."
AND rc.roleid = $default_role->id";
$legacycaps = get_records_sql($sql);
if (!$legacycaps) {
$legacyok = true;
} else if (count($legacycaps) == 1 and isset($legacycaps['moodle/legacy:user'])) {
$legacyok = true;
}
if ($anythingcount or $riskycount or $viewcap or !$legacyok) {
$result->status = REPORT_SECURITY_CRITICAL;
$result->info = get_string('check_defaultuserrole_error', 'report_security', format_string($default_role->name));
} else {
$result->status = REPORT_SECURITY_OK;
$result->info = get_string('check_defaultuserrole_ok', 'report_security');
}
if ($detailed) {
$result->details = get_string('check_defaultuserrole_details', 'report_security');
}
return $result;
}
/**
* Verifies sanity of guest role
* @param bool $detailed
* @return object result
*/
function report_security_check_guestrole($detailed=false) {
global $CFG;
$result = new object();
$result->issue = 'report_security_check_guestrole';
$result->name = get_string('check_guestrole_name', 'report_security');
$result->info = null;
$result->details = null;
$result->status = null;
$result->link = "<a href=\"$CFG->wwwroot/$CFG->admin/settings.php?section=userpolicies\">".get_string('userpolicies', 'admin').'</a>';;
if (!$guest_role = get_record('role', 'id', $CFG->guestroleid)) {
$result->status = REPORT_SECURITY_WARNING;
$result->info = get_string('check_guestrole_notset', 'report_security');
$result->details = $result->info;
return $result;
}
// first test if do anything enabled - that would be really crazy!
$sql = "SELECT COUNT(DISTINCT rc.contextid)
FROM {$CFG->prefix}role_capabilities rc
WHERE rc.capability = 'moodle/site:doanything'
AND rc.permission = ".CAP_ALLOW."
AND rc.roleid = $guest_role->id";
$anythingcount = count_records_sql($sql);
// risky caps - usually very dangerous
$sql = "SELECT COUNT(DISTINCT rc.contextid)
FROM {$CFG->prefix}role_capabilities rc
JOIN {$CFG->prefix}capabilities cap ON cap.name = rc.capability
WHERE ".sql_bitand('cap.riskbitmask', (RISK_XSS | RISK_CONFIG))." <> 0
AND rc.permission = ".CAP_ALLOW."
AND rc.roleid = $guest_role->id";
$riskycount = count_records_sql($sql);
// it may have either no or 'guest' legacy type - nothing else, or else it would break during upgrades badly
$legacyok = false;
$sql = "SELECT rc.capability, 1
FROM {$CFG->prefix}role_capabilities rc
WHERE rc.capability LIKE 'moodle/legacy:%'
AND rc.permission = ".CAP_ALLOW."
AND rc.roleid = $guest_role->id";
$legacycaps = get_records_sql($sql);
if (!$legacycaps) {
$legacyok = true;
} else if (count($legacycaps) == 1 and isset($legacycaps['moodle/legacy:guest'])) {
$legacyok = true;
}
if ($anythingcount or $riskycount or !$legacyok) {
$result->status = REPORT_SECURITY_CRITICAL;
$result->info = get_string('check_guestrole_error', 'report_security', format_string($guest_role->name));
} else {
$result->status = REPORT_SECURITY_OK;
$result->info = get_string('check_guestrole_ok', 'report_security');
}
if ($detailed) {
$result->details = get_string('check_guestrole_details', 'report_security');
}
return $result;
}
/**
* Verifies sanity of site default course role.
* @param bool $detailed
* @return object result
*/
function report_security_check_defaultcourserole($detailed=false) {
global $CFG;
$problems = array();
$result = new object();
$result->issue = 'report_security_check_defaultcourserole';
$result->name = get_string('check_defaultcourserole_name', 'report_security');
$result->info = null;
$result->details = null;
$result->status = null;
$result->link = "<a href=\"$CFG->wwwroot/$CFG->admin/settings.php?section=userpolicies\">".get_string('userpolicies', 'admin').'</a>';;
if ($detailed) {
$result->details = get_string('check_defaultcourserole_details', 'report_security');
}
if (!$student_role = get_record('role', 'id', $CFG->defaultcourseroleid)) {
$result->status = REPORT_SECURITY_WARNING;
$result->info = get_string('check_defaultcourserole_notset', 'report_security');
$result->details = get_string('check_defaultcourserole_details', 'report_security');
return $result;
}
// first test if do anything enabled - that would be really crazy!
$sql = "SELECT DISTINCT rc.contextid
FROM {$CFG->prefix}role_capabilities rc
WHERE rc.capability = 'moodle/site:doanything'
AND rc.permission = ".CAP_ALLOW."
AND rc.roleid = $student_role->id";
if ($anything_contexts = get_records_sql($sql)) {
foreach($anything_contexts as $contextid) {
if ($contextid == SYSCONTEXTID) {
$a = "$CFG->wwwroot/$CFG->admin/roles/manage.php?action=view&amp;roleid=$CFG->defaultcourseroleid";
} else {
$a = "$CFG->wwwroot/$CFG->admin/roles/override.php?contextid=$contextid&amp;roleid=$CFG->defaultcourseroleid";
}
$problems[] = get_string('check_defaultcourserole_anything', 'report_security', $a);
}
}
// risky caps - usually very dangerous
$sql = "SELECT DISTINCT rc.contextid
FROM {$CFG->prefix}role_capabilities rc
JOIN {$CFG->prefix}capabilities cap ON cap.name = rc.capability
WHERE ".sql_bitand('cap.riskbitmask', (RISK_XSS | RISK_CONFIG))." <> 0
AND rc.permission = ".CAP_ALLOW."
AND rc.roleid = $student_role->id";
if ($riskycontexts = get_records_sql($sql)) {
foreach($riskycontexts as $contextid=>$unused) {
if ($contextid == SYSCONTEXTID) {
$a = "$CFG->wwwroot/$CFG->admin/roles/manage.php?action=view&amp;roleid=$CFG->defaultcourseroleid";
} else {
$a = "$CFG->wwwroot/$CFG->admin/roles/override.php?contextid=$contextid&amp;roleid=$CFG->defaultcourseroleid";
}
$problems[] = get_string('check_defaultcourserole_risky', 'report_security', $a);
}
}
// course creator or administrator does not make any sense here
$sql = "SELECT rc.capability, 1
FROM {$CFG->prefix}role_capabilities rc
WHERE rc.capability LIKE 'moodle/legacy:%'
AND rc.permission = ".CAP_ALLOW."
AND rc.roleid = $student_role->id";
$legacycaps = get_records_sql($sql);
if (isset($legacycaps['moodle/legacy:coursecreator']) or isset($legacycaps['moodle/legacy:admin'])) {
$problems[] = get_string('check_defaultcourserole_legacy', 'report_security');
}
if ($problems) {
$result->status = REPORT_SECURITY_CRITICAL;
$result->info = get_string('check_defaultcourserole_error', 'report_security', format_string($student_role->name));
if ($detailed) {
$result->details .= "<ul>";
foreach ($problems as $problem) {
$result->details .= "<li>$problem</li>";
}
$result->details .= "</ul>";
}
} else {
$result->status = REPORT_SECURITY_OK;
$result->info = get_string('check_defaultcourserole_ok', 'report_security');
}
return $result;
}
/**
* Verifies sanity of default roles in courses.
* @param bool $detailed
* @return object result
*/
function report_security_check_courserole($detailed=false) {
global $CFG, $SITE;
$problems = array();
$result = new object();
$result->issue = 'report_security_check_courserole';
$result->name = get_string('check_courserole_name', 'report_security');
$result->info = null;
$result->details = null;
$result->status = null;
$result->link = null;
if ($detailed) {
$result->details = get_string('check_courserole_details', 'report_security');
}
// get list of all student roles selected in courses excluding the default course role
$sql = "SELECT r.*
FROM {$CFG->prefix}role r
JOIN {$CFG->prefix}course c ON c.defaultrole = r.id
WHERE c.id <> $SITE->id AND r.id <> $CFG->defaultcourseroleid";
if (!$student_roles = get_records_sql($sql)) {
$result->status = REPORT_SECURITY_OK;
$result->info = get_string('check_courserole_notyet', 'report_security');
$result->details = get_string('check_courserole_details', 'report_security');
return $result;
}
$roleids = array_keys($student_roles);
$sql = "SELECT DISTINCT rc.roleid
FROM {$CFG->prefix}role_capabilities rc
WHERE (rc.capability = 'moodle/legacy:coursecreator' OR rc.capability = 'moodle/legacy:admin'
OR rc.capability = 'moodle/legacy:teacher' OR rc.capability = 'moodle/legacy:editingteacher')
AND rc.permission = ".CAP_ALLOW."";
$riskyroleids = get_records_sql($sql);
$riskyroleids = array_keys($riskyroleids);
// first test if do anything enabled - that would be really crazy!!!!!!
$inroles = implode(',', $roleids);
$sql = "SELECT rc.roleid, rc.contextid
FROM {$CFG->prefix}role_capabilities rc
WHERE rc.capability = 'moodle/site:doanything'
AND rc.permission = ".CAP_ALLOW."
AND rc.roleid IN ($inroles)
GROUP BY rc.roleid, rc.contextid
ORDER BY rc.roleid, rc.contextid";
$rs = get_recordset_sql($sql);
while ($res = rs_fetch_next_record($rs)) {
$roleid = $res->roleid;
$contextid = $res->contextid;
if ($contextid == SYSCONTEXTID) {
$a = "$CFG->wwwroot/$CFG->admin/roles/manage.php?action=view&amp;roleid=$roleid";
} else {
$a = "$CFG->wwwroot/$CFG->admin/roles/override.php?contextid=$contextid&amp;roleid=$roleid";
}
$problems[] = get_string('check_courserole_anything', 'report_security', $a);
}
rs_close($rs);
// any XSS legacy cap does not make any sense here!
$inroles = implode(',', $riskyroleids);
$sql = "SELECT DISTINCT c.id, c.shortname
FROM {$CFG->prefix}course c
WHERE c.defaultrole IN ($inroles)
ORDER BY c.sortorder";
if ($courses = get_records_sql($sql)) {
foreach ($courses as $course) {
$a = (object)array('url'=>"$CFG->wwwroot/course/edit.php?id=$course->id", 'shortname'=>$course->shortname);
$problems[] = get_string('check_courserole_riskylegacy', 'report_security', $a);
}
} else {
$course = array();
}
// risky caps in any level for roles not marked as risky yet - usually very dangerous!!
if ($checkroles = array_diff($roleids, $riskyroleids)) {
$inroles = implode(',', $checkroles);
$sql = "SELECT rc.roleid, rc.contextid
FROM {$CFG->prefix}role_capabilities rc
JOIN {$CFG->prefix}capabilities cap ON cap.name = rc.capability
WHERE ".sql_bitand('cap.riskbitmask', (RISK_XSS | RISK_CONFIG))." <> 0
AND rc.permission = ".CAP_ALLOW."
AND rc.roleid IN ($inroles)
GROUP BY rc.roleid, rc.contextid
ORDER BY rc.roleid, rc.contextid";
$rs = get_recordset_sql($sql);
while ($res = rs_fetch_next_record($rs)) {
$roleid = $res->roleid;
$contextid = $res->contextid;
if ($contextid == SYSCONTEXTID) {
$a = "$CFG->wwwroot/$CFG->admin/roles/manage.php?action=view&amp;roleid=$roleid";
} else {
$a = "$CFG->wwwroot/$CFG->admin/roles/override.php?contextid=$contextid&amp;roleid=$roleid";
}
$problems[] = get_string('check_courserole_risky', 'report_security', $a);
}
rs_close($rs);
}
if ($problems) {
$result->status = REPORT_SECURITY_CRITICAL;
$result->info = get_string('check_courserole_error', 'report_security');
if ($detailed) {
$result->details .= "<ul>";
foreach ($problems as $problem) {
$result->details .= "<li>$problem</li>";
}
$result->details .= "</ul>";
}
} else {
$result->status = REPORT_SECURITY_OK;
$result->info = get_string('check_courserole_ok', 'report_security');
}
return $result;
}
/**
* Checks to see whether a password salt has been defined
*
* @param bool $detailed
* @return object result
*/
function report_security_check_passwordsaltmain($detailed=false) {
global $CFG;
$result = new object();
$result->issue = 'report_security_check_passwordsaltmain';
$result->name = get_string('check_passwordsaltmain_name', 'report_security');
$result->info = null;
$result->details = null;
$result->status = null;
$result->link = null;
if (empty($CFG->passwordsaltmain)) {
$result->status = REPORT_SECURITY_WARNING;
$result->info = get_string('check_passwordsaltmain_warning', 'report_security');
} else if ($CFG->passwordsaltmain === 'a_very_long_random_string_of_characters#@6&*1'
|| trim($CFG->passwordsaltmain) === '' || preg_match('/^([a-z0-9]{0,10})$/i', $CFG->passwordsaltmain)) {
$result->status = REPORT_SECURITY_WARNING;
$result->info = get_string('check_passwordsaltmain_weak', 'report_security');
} else {
$result->status = REPORT_SECURITY_OK;
$result->info = get_string('check_passwordsaltmain_ok', 'report_security');
}
if ($detailed) {
$docspath = $CFG->docroot.'/'.str_replace('_utf8', '', current_language()).'/report/security/report_security_check_passwordsaltmain';
$result->details = get_string('check_passwordsaltmain_details', 'report_security', $docspath);
}
return $result;
}
+372
View File
@@ -0,0 +1,372 @@
<?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();
$adminroot = admin_get_root();
admin_externalpage_setup('reportspamcleaner', $adminroot);
// 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;
}
admin_externalpage_print_header($adminroot);
// Print headers and things
print_spamcleaner_javascript();
print_box(get_string('spamcleanerintro', 'report_spamcleaner'));
print_box_start(); // The forms section at the top
?>
<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
print_box_end();
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_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 $rs) {
while ($user = rs_fetch_next_record($rs)) {
if (!$count) {
echo '<table border="1" width="100%" id="data-grid"><tr><th>&nbsp;</th><th>'.get_string('user','admin').'</th><th>'.get_string('spamdesc', 'report_spamcleaner').'</th><th>'.get_string('spamoperation', 'report_spamcleaner').'</th></tr>';
}
$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&amp;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 row = null;
var delall_cb = {
success: function(o){
var resp = o.responseText;
if(resp){
window.location.href=window.location.href;
}
}
}
function init() {
YAHOO.util.Event.addListener("removeall_btn", "click", function(){
var yes = confirm('<?php echo get_string('spamdeleteallconfirm', 'report_spamcleaner');?>');
if(yes){
var cObj = YAHOO.util.Connect.asyncRequest('POST', '<?php echo me();?>?delall=yes&sesskey=<?php echo $sesskey;?>', delall_cb);
}
});
}
var del_cb = {
success: function(o) {
var resp = o.responseText;
if(row) {
if(resp){
while(row.tagName != 'TR') {
row = row.parentNode;
}
row.parentNode.removeChild(row);
row = null;
} else {
alert('<?php echo get_string('spamcannotdelete', 'report_spamcleaner');?>');
}
}
}
}
var ignore_cb = {
success: function(o){
var resp = o.responseText;
if(row) {
if(resp){
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;
var cObj = YAHOO.util.Connect.asyncRequest('POST', '<?php echo me();?>?del=yes&sesskey=<?php echo $sesskey;?>&id='+id, del_cb);
}
}
function ignore_user(obj, id) {
row = obj;
var cObj = YAHOO.util.Connect.asyncRequest('POST', '<?php echo me();?>?ignore=yes&sesskey=<?php echo $sesskey;?>&id='+id, ignore_cb);
}
window.onload = function(){
init();
}
//]]>
</script>
<?php
}
admin_externalpage_print_footer($adminroot);
?>
+5
View File
@@ -0,0 +1,5 @@
<?php
// spam cleaner
$ADMIN->add('reports', new admin_externalpage('reportspamcleaner', get_string('spamcleaner','report_spamcleaner'), "$CFG->wwwroot/$CFG->admin/report/spamcleaner/index.php", 'moodle/site:config'));
+3 -2
View File
@@ -24,10 +24,10 @@
$roles = get_all_roles();
if ($grant = data_submitted()) {
if ($grant = data_submitted() and confirm_sesskey()) {
foreach ($grant as $grole => $val) {
if ($grole == 'dummy') {
if ($grole == 'dummy' or !strpos($grole, '_')) {
continue;
}
@@ -82,6 +82,7 @@
print_table($table);
echo '<div class="buttons"><input type="submit" value="'.get_string('savechanges').'"/>';
echo '<input type="hidden" name="dummy" value="1" />'; // this is needed otherwise we do not know a form has been submitted
echo '<input type="hidden" name="sesskey" value="'.sesskey().'" />';
echo '</div></form>';
admin_externalpage_print_footer($adminroot);
+3 -2
View File
@@ -22,10 +22,10 @@
$roles = get_all_roles();
if ($grant = data_submitted()) {
if ($grant = data_submitted() and confirm_sesskey()) {
foreach ($grant as $grole => $val) {
if ($grole == 'dummy') {
if ($grole == 'dummy' or !strpos($grole, '_')) {
continue;
}
@@ -80,6 +80,7 @@
print_table($table);
echo '<div class="buttons"><input type="submit" value="'.get_string('savechanges').'"/>';
echo '<input type="hidden" name="dummy" value="1" />'; // this is needed otherwise we do not know a form has been submitted
echo '<input type="hidden" name="sesskey" value="'.sesskey().'" />';
echo '</div></form>';
admin_externalpage_print_footer($adminroot);
+1
View File
@@ -47,6 +47,7 @@ $ADMIN->add('security', $temp);
// "httpsecurity" settingpage
$temp = new admin_settingpage('httpsecurity', get_string('httpsecurity', 'admin'));
$temp->add(new admin_setting_configcheckbox('loginhttps', get_string('loginhttps', 'admin'), get_string('configloginhttps', 'admin'), 0));
$temp->add(new admin_setting_configtext('excludeoldflashclients', get_string('excludeoldflashclients', 'admin'), get_string('configexcludeoldflashclients', 'admin'), '10.0.12', PARAM_TEXT));
$ADMIN->add('security', $temp);
+2 -2
View File
@@ -114,8 +114,8 @@
$updateuser->id = $user->id;
$updateuser->deleted = 1;
$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->email = md5($user->username); // Store hash of username, useful importing/restoring users
$updateuser->idnumber = ''; // Clear this field to free it up
$updateuser->timemodified = time();
if (update_record('user', $updateuser)) {
// Removing a user may have more requirements than just removing their role assignments.
+10 -2
View File
@@ -47,6 +47,8 @@ class XMLDBAction {
var $postaction; //Action to execute at the end of the invoke script
var $sesskey_protected; // Actions must be protected by sesskey mechanishm
/**
* Constructor
*/
@@ -72,6 +74,7 @@ class XMLDBAction {
$this->output = NULL;
$this->errormsg = NULL;
$this->subaction = NULL;
$this->sesskey_protected = true;
}
/**
@@ -130,13 +133,18 @@ class XMLDBAction {
}
/**
* main invoke method, it simply sets the postaction attribute
* if possible
* main invoke method, it sets the postaction attribute
* if possible and checks sesskey_protected if needed
*/
function invoke() {
global $SESSION;
/// Sesskey protection
if ($this->sesskey_protected) {
require_sesskey();
}
/// If we are used any dir, save it in the lastused session object
/// Some actions can use it to perform positioning
if ($lastused = optional_param ('dir', NULL, PARAM_PATH)) {
@@ -94,7 +94,7 @@ class check_indexes extends XMLDBAction {
$o.= ' <p class="centerpara">' . $this->str['confirmcheckindexes'] . '</p>';
$o.= ' <table class="boxaligncenter" cellpadding="20"><tr><td>';
$o.= ' <div class="singlebutton">';
$o.= ' <form action="index.php?action=check_indexes&amp;confirmed=yes" method="post"><fieldset class="invisiblefieldset">';
$o.= ' <form action="index.php?action=check_indexes&amp;sesskey=' . sesskey() . '&amp;confirmed=yes" method="post"><fieldset class="invisiblefieldset">';
$o.= ' <input type="submit" value="'. $this->str['yes'] .'" /></fieldset></form></div>';
$o.= ' </td><td>';
$o.= ' <div class="singlebutton">';
@@ -213,6 +213,10 @@ class check_indexes extends XMLDBAction {
$o.=' </ul>';
}
$o.=' </li>';
/// Give the script some more time (resetting to current if exists)
if ($currenttl = @ini_get('max_execution_time')) {
@ini_set('max_execution_time',$currenttl);
}
}
$o.=' </ul>';
}
@@ -77,7 +77,7 @@ class delete_field extends XMLDBAction {
$o.= ' <p class="centerpara">' . $this->str['confirmdeletefield'] . '<br /><br />' . $fieldparam . '</p>';
$o.= ' <table class="boxaligncenter" cellpadding="20"><tr><td>';
$o.= ' <div class="singlebutton">';
$o.= ' <form action="index.php?action=delete_field&amp;confirmed=yes&amp;postaction=edit_table&amp;field=' . $fieldparam . '&amp;table=' . $tableparam . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '" method="post"><fieldset class="invisiblefieldset">';
$o.= ' <form action="index.php?action=delete_field&amp;sesskey=' . sesskey() . '&amp;confirmed=yes&amp;postaction=edit_table&amp;field=' . $fieldparam . '&amp;table=' . $tableparam . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '" method="post"><fieldset class="invisiblefieldset">';
$o.= ' <input type="submit" value="'. $this->str['yes'] .'" /></fieldset></form></div>';
$o.= ' </td><td>';
$o.= ' <div class="singlebutton">';
@@ -77,7 +77,7 @@ class delete_index extends XMLDBAction {
$o.= ' <p class="centerpara">' . $this->str['confirmdeleteindex'] . '<br /><br />' . $indexparam . '</p>';
$o.= ' <table class="boxaligncenter" cellpadding="20"><tr><td>';
$o.= ' <div class="singlebutton">';
$o.= ' <form action="index.php?action=delete_index&amp;confirmed=yes&amp;postaction=edit_table&amp;index=' . $indexparam . '&amp;table=' . $tableparam . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '" method="post"><fieldset class="invisiblefieldset">';
$o.= ' <form action="index.php?action=delete_index&amp;sesskey=' . sesskey() . '&amp;confirmed=yes&amp;postaction=edit_table&amp;index=' . $indexparam . '&amp;table=' . $tableparam . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '" method="post"><fieldset class="invisiblefieldset">';
$o.= ' <input type="submit" value="'. $this->str['yes'] .'" /></fieldset></form></div>';
$o.= ' </td><td>';
$o.= ' <div class="singlebutton">';
@@ -77,7 +77,7 @@ class delete_key extends XMLDBAction {
$o.= ' <p class="centerpara">' . $this->str['confirmdeletekey'] . '<br /><br />' . $keyparam . '</p>';
$o.= ' <table class="boxaligncenter" cellpadding="20"><tr><td>';
$o.= ' <div class="singlebutton">';
$o.= ' <form action="index.php?action=delete_key&amp;confirmed=yes&amp;postaction=edit_table&amp;key=' . $keyparam . '&amp;table=' . $tableparam . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '" method="post"><fieldset class="invisiblefieldset">';
$o.= ' <form action="index.php?action=delete_key&amp;sesskey=' . sesskey() . '&amp;confirmed=yes&amp;postaction=edit_table&amp;key=' . $keyparam . '&amp;table=' . $tableparam . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '" method="post"><fieldset class="invisiblefieldset">';
$o.= ' <input type="submit" value="'. $this->str['yes'] .'" /></fieldset></form></div>';
$o.= ' </td><td>';
$o.= ' <div class="singlebutton">';
@@ -77,7 +77,7 @@ class delete_sentence extends XMLDBAction {
$o.= ' <p class="centerpara">' . $this->str['confirmdeletesentence'] . '</p>';
$o.= ' <table class="boxaligncenter" cellpadding="20"><tr><td>';
$o.= ' <div class="singlebutton">';
$o.= ' <form action="index.php?action=delete_sentence&amp;confirmed=yes&amp;postaction=edit_statement&amp;sentence=' . $sentenceparam . '&amp;statement=' . urlencode($statementparam) . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '" method="post"><fieldset class="invisiblefieldset">';
$o.= ' <form action="index.php?action=delete_sentence&amp;sesskey=' . sesskey() . '&amp;confirmed=yes&amp;postaction=edit_statement&amp;sentence=' . $sentenceparam . '&amp;statement=' . urlencode($statementparam) . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '" method="post"><fieldset class="invisiblefieldset">';
$o.= ' <input type="submit" value="'. $this->str['yes'] .'" /></fieldset></form></div>';
$o.= ' </td><td>';
$o.= ' <div class="singlebutton">';
@@ -76,7 +76,7 @@ class delete_statement extends XMLDBAction {
$o.= ' <p class="centerpara">' . $this->str['confirmdeletestatement'] . '<br /><br />' . $statementparam . '</p>';
$o.= ' <table class="boxaligncenter" cellpadding="20"><tr><td>';
$o.= ' <div class="singlebutton">';
$o.= ' <form action="index.php?action=delete_statement&amp;confirmed=yes&amp;postaction=edit_xml_file&amp;statement=' . $statementparam . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '" method="post"><fieldset class="invisiblefieldset">';
$o.= ' <form action="index.php?action=delete_statement&amp;sesskey=' . sesskey() . '&amp;confirmed=yes&amp;postaction=edit_xml_file&amp;statement=' . $statementparam . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '" method="post"><fieldset class="invisiblefieldset">';
$o.= ' <input type="submit" value="'. $this->str['yes'] .'" /></fieldset></form></div>';
$o.= ' </td><td>';
$o.= ' <div class="singlebutton">';
@@ -76,7 +76,7 @@ class delete_table extends XMLDBAction {
$o.= ' <p class="centerpara">' . $this->str['confirmdeletetable'] . '<br /><br />' . $tableparam . '</p>';
$o.= ' <table class="boxaligncenter" cellpadding="20"><tr><td>';
$o.= ' <div class="singlebutton">';
$o.= ' <form action="index.php?action=delete_table&amp;confirmed=yes&amp;postaction=edit_xml_file&amp;table=' . $tableparam . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '" method="post"><fieldset class="invisiblefieldset">';
$o.= ' <form action="index.php?action=delete_table&amp;sesskey=' . sesskey() . '&amp;confirmed=yes&amp;postaction=edit_xml_file&amp;table=' . $tableparam . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '" method="post"><fieldset class="invisiblefieldset">';
$o.= ' <input type="submit" value="'. $this->str['yes'] .'" /></fieldset></form></div>';
$o.= ' </td><td>';
$o.= ' <div class="singlebutton">';
@@ -75,7 +75,7 @@ class delete_xml_file extends XMLDBAction {
$o.= ' <p class="centerpara">' . $this->str['confirmdeletexmlfile'] . '<br /><br />' . $dirpath . '/install.php</p>';
$o.= ' <table class="boxaligncenter" cellpadding="20"><tr><td>';
$o.= ' <div class="singlebutton">';
$o.= ' <form action="index.php?action=delete_xml_file&amp;confirmed=yes&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '&amp;postaction=main_view#lastused" method="post"><fieldset class="invisiblefieldset">';
$o.= ' <form action="index.php?action=delete_xml_file&amp;sesskey=' . sesskey() . '&amp;confirmed=yes&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '&amp;postaction=main_view#lastused" method="post"><fieldset class="invisiblefieldset">';
$o.= ' <input type="submit" value="'. $this->str['yes'] .'" /></fieldset></form></div>';
$o.= ' </td><td>';
$o.= ' <div class="singlebutton">';
@@ -35,6 +35,7 @@ class edit_field extends XMLDBAction {
parent::init();
/// Set own custom attributes
$this->sesskey_protected = false; // This action doesn't need sesskey protection
/// Get needed strings
$this->loadStrings(array(
@@ -103,6 +104,7 @@ class edit_field extends XMLDBAction {
$o.= ' <input type="hidden" name ="dir" value="' . str_replace($CFG->dirroot, '', $dirpath) . '" />';
$o.= ' <input type="hidden" name ="table" value="' . $tableparam .'" />';
$o.= ' <input type="hidden" name ="field" value="' . $fieldparam .'" />';
$o.= ' <input type="hidden" name ="sesskey" value="' . sesskey() .'" />';
$o.= ' <input type="hidden" name ="action" value="edit_field_save" />';
$o.= ' <input type="hidden" name ="postaction" value="edit_table" />';
$o.= ' <table id="formelements" class="boxaligncenter">';
@@ -35,6 +35,7 @@ class edit_index extends XMLDBAction {
parent::init();
/// Set own custom attributes
$this->sesskey_protected = false; // This action doesn't need sesskey protection
/// Get needed strings
$this->loadStrings(array(
@@ -103,6 +104,7 @@ class edit_index extends XMLDBAction {
$o.= ' <input type="hidden" name ="dir" value="' . str_replace($CFG->dirroot, '', $dirpath) . '" />';
$o.= ' <input type="hidden" name ="table" value="' . $tableparam .'" />';
$o.= ' <input type="hidden" name ="index" value="' . $indexparam .'" />';
$o.= ' <input type="hidden" name ="sesskey" value="' . sesskey() .'" />';
$o.= ' <input type="hidden" name ="action" value="edit_index_save" />';
$o.= ' <input type="hidden" name ="postaction" value="edit_table" />';
$o.= ' <table id="formelements" class="boxaligncenter">';
@@ -35,6 +35,7 @@ class edit_key extends XMLDBAction {
parent::init();
/// Set own custom attributes
$this->sesskey_protected = false; // This action doesn't need sesskey protection
/// Get needed strings
$this->loadStrings(array(
@@ -103,6 +104,7 @@ class edit_key extends XMLDBAction {
$o.= ' <input type="hidden" name ="dir" value="' . str_replace($CFG->dirroot, '', $dirpath) . '" />';
$o.= ' <input type="hidden" name ="table" value="' . $tableparam .'" />';
$o.= ' <input type="hidden" name ="key" value="' . $keyparam .'" />';
$o.= ' <input type="hidden" name ="sesskey" value="' . sesskey() .'" />';
$o.= ' <input type="hidden" name ="action" value="edit_key_save" />';
$o.= ' <input type="hidden" name ="postaction" value="edit_table" />';
$o.= ' <table id="formelements" class="boxaligncenter">';
@@ -35,6 +35,7 @@ class edit_sentence extends XMLDBAction {
parent::init();
/// Set own custom attributes
$this->sesskey_protected = false; // This action doesn't need sesskey protection
/// Get needed strings
$this->loadStrings(array(
@@ -119,6 +120,7 @@ class edit_sentence extends XMLDBAction {
$o.= ' <input type="hidden" name ="dir" value="' . str_replace($CFG->dirroot, '', $dirpath) . '" />';
$o.= ' <input type="hidden" name ="statement" value="' . $statementparam .'" />';
$o.= ' <input type="hidden" name ="sentence" value="' . $sentenceparam .'" />';
$o.= ' <input type="hidden" name ="sesskey" value="' . sesskey() .'" />';
$o.= ' <input type="hidden" name ="action" value="edit_sentence_save" />';
$o.= ' <input type="hidden" name ="postaction" value="edit_statement" />';
$o.= ' <table id="formelements" class="boxaligncenter">';
@@ -35,6 +35,7 @@ class edit_statement extends XMLDBAction {
parent::init();
/// Set own custom attributes
$this->sesskey_protected = false; // This action doesn't need sesskey protection
/// Get needed strings
$this->loadStrings(array(
@@ -106,6 +107,7 @@ class edit_statement extends XMLDBAction {
$o.= '<div>';
$o.= ' <input type="hidden" name ="dir" value="' . str_replace($CFG->dirroot, '', $dirpath) . '" />';
$o.= ' <input type="hidden" name ="statement" value="' . $statementparam .'" />';
$o.= ' <input type="hidden" name ="sesskey" value="' . sesskey() .'" />';
$o.= ' <input type="hidden" name ="action" value="edit_statement_save" />';
$o.= ' <input type="hidden" name ="postaction" value="edit_statement" />';
$o.= ' <table id="formelements" class="boxaligncenter">';
@@ -129,7 +131,7 @@ class edit_statement extends XMLDBAction {
$b .= '&nbsp;[' . $this->str['viewedited'] . ']';
}
/// The new sentence button
$b .= '&nbsp;<a href="index.php?action=new_sentence&amp;postaction=edit_sentence&amp;statement=' . $statementparam . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['newsentence'] . ']</a>';
$b .= '&nbsp;<a href="index.php?action=new_sentence&amp;postaction=edit_sentence&amp;sesskey=' . sesskey() . '&amp;statement=' . $statementparam . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['newsentence'] . ']</a>';
/// The back to edit xml file button
$b .= '&nbsp;<a href="index.php?action=edit_xml_file&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['back'] . ']</a>';
$b .= '</p>';
@@ -157,10 +159,10 @@ class edit_statement extends XMLDBAction {
$b .= '<a href="index.php?action=edit_sentence&amp;sentence=' .$key . '&amp;statement=' . urlencode($statement->getName()) . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['edit'] . ']</a>';
$b .= '</td><td class="button cell">';
/// The duplicate button
$b .= '<a href="index.php?action=new_sentence&amp;postaction=edit_sentence&amp;basesentence=' . $key . '&amp;statement=' . urlencode($statement->getName()) . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['duplicate'] . ']</a>';
$b .= '<a href="index.php?action=new_sentence&amp;postaction=edit_sentence&amp;sesskey=' . sesskey() . '&amp;basesentence=' . $key . '&amp;statement=' . urlencode($statement->getName()) . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['duplicate'] . ']</a>';
$b .= '</td><td class="button cell">';
/// The delete button
$b .= '<a href="index.php?action=delete_sentence&amp;sentence=' . $key . '&amp;statement=' . urlencode($statement->getName()) . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['delete'] . ']</a>';
$b .= '<a href="index.php?action=delete_sentence&amp;sesskey=' . sesskey() . '&amp;sentence=' . $key . '&amp;statement=' . urlencode($statement->getName()) . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['delete'] . ']</a>';
$b .= '</td>';
/// Print table row
$o .= '<tr class="r' . $row . '"><td class="table cell">' . $p . $sentence . $b . '</tr>';
@@ -35,6 +35,7 @@ class edit_table extends XMLDBAction {
parent::init();
/// Set own custom attributes
$this->sesskey_protected = false; // This action doesn't need sesskey protection
/// Get needed strings
$this->loadStrings(array(
@@ -107,6 +108,7 @@ class edit_table extends XMLDBAction {
$o.= ' <input type="hidden" name ="dir" value="' . str_replace($CFG->dirroot, '', $dirpath) . '" />';
$o.= ' <input type="hidden" name ="table" value="' . $tableparam .'" />';
$o.= ' <input type="hidden" name ="action" value="edit_table_save" />';
$o.= ' <input type="hidden" name ="sesskey" value="' . sesskey() .'" />';
$o.= ' <input type="hidden" name ="postaction" value="edit_table" />';
$o.= ' <table id="formelements" class="boxaligncenter">';
/// If the table is being used, we cannot rename it
@@ -134,11 +136,11 @@ class edit_table extends XMLDBAction {
$b .= '&nbsp;[' . $this->str['viewedited'] . ']';
}
/// The new field button
$b .= '&nbsp;<a href="index.php?action=new_field&amp;postaction=edit_field&amp;table=' . $tableparam . '&amp;field=changeme&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['newfield'] . ']</a>';
$b .= '&nbsp;<a href="index.php?action=new_field&amp;sesskey=' . sesskey() . '&amp;postaction=edit_field&amp;table=' . $tableparam . '&amp;field=changeme&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['newfield'] . ']</a>';
/// The new key button
$b .= '&nbsp;<a href="index.php?action=new_key&amp;postaction=edit_key&amp;table=' . $tableparam . '&amp;key=changeme&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['newkey'] . ']</a>';
$b .= '&nbsp;<a href="index.php?action=new_key&amp;sesskey=' . sesskey() . '&amp;postaction=edit_key&amp;table=' . $tableparam . '&amp;key=changeme&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['newkey'] . ']</a>';
/// The new index button
$b .= '&nbsp;<a href="index.php?action=new_index&amp;postaction=edit_index&amp;table=' . $tableparam . '&amp;index=changeme&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['newindex'] . ']</a>';
$b .= '&nbsp;<a href="index.php?action=new_index&amp;sesskey=' . sesskey() . '&amp;postaction=edit_index&amp;table=' . $tableparam . '&amp;index=changeme&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['newindex'] . ']</a>';
/// The back to edit xml file button
$b .= '&nbsp;<a href="index.php?action=edit_xml_file&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['back'] . ']</a>';
$b .= '</p>';
@@ -185,14 +187,14 @@ class edit_table extends XMLDBAction {
$b .= '</td><td class="button cell">';
/// The up button
if ($field->getPrevious()) {
$b .= '<a href="index.php?action=move_updown_field&amp;direction=up&amp;field=' . $field->getName() . '&amp;table=' . $table->getName() . '&amp;postaction=edit_table' . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['up'] . ']</a>';
$b .= '<a href="index.php?action=move_updown_field&amp;direction=up&amp;sesskey=' . sesskey() . '&amp;field=' . $field->getName() . '&amp;table=' . $table->getName() . '&amp;postaction=edit_table' . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['up'] . ']</a>';
} else {
$b .= '[' . $this->str['up'] . ']';
}
$b .= '</td><td class="button cell">';
/// The down button
if ($field->getNext()) {
$b .= '<a href="index.php?action=move_updown_field&amp;direction=down&amp;field=' . $field->getName() . '&amp;table=' . $table->getName() . '&amp;postaction=edit_table' . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['down'] . ']</a>';
$b .= '<a href="index.php?action=move_updown_field&amp;direction=down&amp;sesskey=' . sesskey() . '&amp;field=' . $field->getName() . '&amp;table=' . $table->getName() . '&amp;postaction=edit_table' . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['down'] . ']</a>';
} else {
$b .= '[' . $this->str['down'] . ']';
}
@@ -200,7 +202,7 @@ class edit_table extends XMLDBAction {
/// The delete button (if we have more than one and it isn't used
if (count($fields) > 1 &&
!$structure->getFieldUses($table->getName(), $field->getName())) {
$b .= '<a href="index.php?action=delete_field&amp;field=' . $field->getName() . '&amp;table=' . $table->getName() . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['delete'] . ']</a>';
$b .= '<a href="index.php?action=delete_field&amp;sesskey=' . sesskey() . '&amp;field=' . $field->getName() . '&amp;table=' . $table->getName() . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['delete'] . ']</a>';
} else {
$b .= '[' . $this->str['delete'] . ']';
}
@@ -234,21 +236,21 @@ class edit_table extends XMLDBAction {
$b .= '</td><td class="button cell">';
/// The up button
if ($key->getPrevious()) {
$b .= '<a href="index.php?action=move_updown_key&amp;direction=up&amp;key=' . $key->getName() . '&amp;table=' . $table->getName() . '&amp;postaction=edit_table' . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['up'] . ']</a>';
$b .= '<a href="index.php?action=move_updown_key&amp;direction=up&amp;sesskey=' . sesskey() . '&amp;key=' . $key->getName() . '&amp;table=' . $table->getName() . '&amp;postaction=edit_table' . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['up'] . ']</a>';
} else {
$b .= '[' . $this->str['up'] . ']';
}
$b .= '</td><td class="button cell">';
/// The down button
if ($key->getNext()) {
$b .= '<a href="index.php?action=move_updown_key&amp;direction=down&amp;key=' . $key->getName() . '&amp;table=' . $table->getName() . '&amp;postaction=edit_table' . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['down'] . ']</a>';
$b .= '<a href="index.php?action=move_updown_key&amp;direction=down&amp;sesskey=' . sesskey() . '&amp;key=' . $key->getName() . '&amp;table=' . $table->getName() . '&amp;postaction=edit_table' . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['down'] . ']</a>';
} else {
$b .= '[' . $this->str['down'] . ']';
}
$b .= '</td><td class="button cell">';
/// The delete button (if the key hasn't uses)
if (!$structure->getKeyUses($table->getName(), $key->getName())) {
$b .= '<a href="index.php?action=delete_key&amp;key=' . $key->getName() . '&amp;table=' . $table->getName() . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['delete'] . ']</a>';
$b .= '<a href="index.php?action=delete_key&amp;sesskey=' . sesskey() . '&amp;key=' . $key->getName() . '&amp;table=' . $table->getName() . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['delete'] . ']</a>';
} else {
$b .= '[' . $this->str['delete'] . ']';
}
@@ -274,20 +276,20 @@ class edit_table extends XMLDBAction {
$b .= '</td><td class="button cell">';
/// The up button
if ($index->getPrevious()) {
$b .= '<a href="index.php?action=move_updown_index&amp;direction=up&amp;index=' . $index->getName() . '&amp;table=' . $table->getName() . '&amp;postaction=edit_table' . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['up'] . ']</a>';
$b .= '<a href="index.php?action=move_updown_index&amp;direction=up&amp;sesskey=' . sesskey() . '&amp;index=' . $index->getName() . '&amp;table=' . $table->getName() . '&amp;postaction=edit_table' . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['up'] . ']</a>';
} else {
$b .= '[' . $this->str['up'] . ']';
}
$b .= '</td><td class="button cell">';
/// The down button
if ($index->getNext()) {
$b .= '<a href="index.php?action=move_updown_index&amp;direction=down&amp;index=' . $index->getName() . '&amp;table=' . $table->getName() . '&amp;postaction=edit_table' . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['down'] . ']</a>';
$b .= '<a href="index.php?action=move_updown_index&amp;direction=down&amp;sesskey=' . sesskey() . '&amp;index=' . $index->getName() . '&amp;table=' . $table->getName() . '&amp;postaction=edit_table' . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['down'] . ']</a>';
} else {
$b .= '[' . $this->str['down'] . ']';
}
$b .= '</td><td class="button cell">';
/// The delete button
$b .= '<a href="index.php?action=delete_index&amp;index=' . $index->getName() . '&amp;table=' . $table->getName() . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['delete'] . ']</a>';
$b .= '<a href="index.php?action=delete_index&amp;sesskey=' . sesskey() . '&amp;index=' . $index->getName() . '&amp;table=' . $table->getName() . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['delete'] . ']</a>';
/// The readable info
$r = '</td><td class="readableinfo cell">' . $index->readableInfo() . '</td>';
/// Print table row
@@ -35,6 +35,7 @@ class edit_xml_file extends XMLDBAction {
parent::init();
/// Set own custom attributes
$this->sesskey_protected = false; // This action doesn't need sesskey protection
/// Get needed strings
$this->loadStrings(array(
@@ -107,6 +108,7 @@ class edit_xml_file extends XMLDBAction {
$o.= ' <input type="hidden" name ="postaction" value="edit_xml_file" />';
$o.= ' <input type="hidden" name ="path" value="' . s($structure->getPath()) .'" />';
$o.= ' <input type="hidden" name ="version" value="' . s($structure->getVersion()) .'" />';
$o.= ' <input type="hidden" name ="sesskey" value="' . sesskey() .'" />';
$o.= ' <table id="formelements" class="boxaligncenter">';
$o.= ' <tr valign="top"><td>Path:</td><td>' . s($structure->getPath()) . '</td></tr>';
$o.= ' <tr valign="top"><td>Version:</td><td>' . s($structure->getVersion()) . '</td></tr>';
@@ -125,15 +127,15 @@ class edit_xml_file extends XMLDBAction {
$b .= '&nbsp;[' . $this->str['viewedited'] . ']';
}
/// The new table button
$b .= '&nbsp;<a href="index.php?action=new_table&amp;postaction=edit_table&amp;table=changeme&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['newtable'] . ']</a>';
$b .= '&nbsp;<a href="index.php?action=new_table&amp;sesskey=' . sesskey() . '&amp;postaction=edit_table&amp;table=changeme&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['newtable'] . ']</a>';
/// The new from MySQL button
if ($CFG->dbfamily == 'mysql') {
$b .= '&nbsp;<a href="index.php?action=new_table_from_mysql&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['newtablefrommysql'] . ']</a>';
$b .= '&nbsp;<a href="index.php?action=new_table_from_mysql&amp;sesskey=' . sesskey() . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['newtablefrommysql'] . ']</a>';
} else {
$b .= '&nbsp;[' . $this->str['newtablefrommysql'] . ']';
}
/// The new statement button
$b .= '&nbsp;<a href="index.php?action=new_statement&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['newstatement'] . ']</a>';
$b .= '&nbsp;<a href="index.php?action=new_statement&amp;sesskey=' . sesskey() . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['newstatement'] . ']</a>';
/// The back to main menu button
$b .= '&nbsp;<a href="index.php?action=main_view#lastused">[' . $this->str['backtomainview'] . ']</a>';
$b .= '</p>';
@@ -169,14 +171,14 @@ class edit_xml_file extends XMLDBAction {
$b .= '</td><td class="button cell">';
/// The up button
if ($table->getPrevious()) {
$b .= '<a href="index.php?action=move_updown_table&amp;direction=up&amp;table=' . $table->getName() . '&amp;postaction=edit_xml_file' . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['up'] . ']</a>';
$b .= '<a href="index.php?action=move_updown_table&amp;direction=up&amp;sesskey=' . sesskey() . '&amp;table=' . $table->getName() . '&amp;postaction=edit_xml_file' . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['up'] . ']</a>';
} else {
$b .= '[' . $this->str['up'] . ']';
}
$b .= '</td><td class="button cell">';
/// The down button
if ($table->getNext()) {
$b .= '<a href="index.php?action=move_updown_table&amp;direction=down&amp;table=' . $table->getName() . '&amp;postaction=edit_xml_file' . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['down'] . ']</a>';
$b .= '<a href="index.php?action=move_updown_table&amp;direction=down&amp;sesskey=' . sesskey() . '&amp;table=' . $table->getName() . '&amp;postaction=edit_xml_file' . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['down'] . ']</a>';
} else {
$b .= '[' . $this->str['down'] . ']';
}
@@ -185,7 +187,7 @@ class edit_xml_file extends XMLDBAction {
if (count($tables) > 1 &&
!$structure->getTableUses($table->getName())) {
///!$structure->getTableUses($table->getName())) {
$b .= '<a href="index.php?action=delete_table&amp;table=' . $table->getName() . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['delete'] . ']</a>';
$b .= '<a href="index.php?action=delete_table&amp;sesskey=' . sesskey() . '&amp;table=' . $table->getName() . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['delete'] . ']</a>';
} else {
$b .= '[' . $this->str['delete'] . ']';
}
@@ -214,20 +216,20 @@ class edit_xml_file extends XMLDBAction {
$b .= '</td><td class="button cell">';
/// The up button
if ($statement->getPrevious()) {
$b .= '<a href="index.php?action=move_updown_statement&amp;direction=up&amp;statement=' . $statement->getName() . '&amp;postaction=edit_xml_file' . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['up'] . ']</a>';
$b .= '<a href="index.php?action=move_updown_statement&amp;direction=up&amp;sesskey=' . sesskey() . '&amp;statement=' . $statement->getName() . '&amp;postaction=edit_xml_file' . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['up'] . ']</a>';
} else {
$b .= '[' . $this->str['up'] . ']';
}
$b .= '</td><td class="button cell">';
/// The down button
if ($statement->getNext()) {
$b .= '<a href="index.php?action=move_updown_statement&amp;direction=down&amp;statement=' . $statement->getName() . '&amp;postaction=edit_xml_file' . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['down'] . ']</a>';
$b .= '<a href="index.php?action=move_updown_statement&amp;direction=down&amp;sesskey=' . sesskey() . '&amp;statement=' . $statement->getName() . '&amp;postaction=edit_xml_file' . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['down'] . ']</a>';
} else {
$b .= '[' . $this->str['down'] . ']';
}
$b .= '</td><td class="button cell">';
/// The delete button
$b .= '<a href="index.php?action=delete_statement&amp;statement=' . $statement->getName() . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['delete'] . ']</a>';
$b .= '<a href="index.php?action=delete_statement&amp;sesskey=' . sesskey() . '&amp;statement=' . $statement->getName() . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '">[' . $this->str['delete'] . ']</a>';
$b .= '</td>';
/// Print statement row
$o .= '<tr class="r' . $row . '"><td class="statement cell"><a href="index.php?action=view_statement_xml&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '&amp;statement=' . $statement->getName() . '&amp;select=edited">' . $statement->getName() . '</a>' . $b . '</tr>';
@@ -39,6 +39,7 @@ class get_db_directories extends XMLDBAction {
//$this->can_subaction = ACTION_HAVE_SUBACTIONS;
/// Set own custom attributes
$this->sesskey_protected = false; // This action doesn't need sesskey protection
/// Get needed strings
$this->loadStrings(array(
@@ -38,6 +38,7 @@ class load_xml_file extends XMLDBAction {
//$this->can_subaction = ACTION_HAVE_SUBACTIONS;
/// Set own custom attributes
$this->sesskey_protected = false; // This action doesn't need sesskey protection
/// Get needed strings
$this->loadStrings(array(
@@ -35,6 +35,7 @@ class main_view extends XMLDBAction {
parent::init();
/// Set own custom attributes
$this->sesskey_protected = false; // This action doesn't need sesskey protection
/// Get needed strings
$this->loadStrings(array(
@@ -84,9 +85,9 @@ class main_view extends XMLDBAction {
/// The reserved_words button
$b .= '&nbsp;<a href="index.php?action=view_reserved_words">[' . $this->str['reservedwords'] . ']</a>';
/// The test button
$b .= '&nbsp;<a href="index.php?action=test">[' . $this->str['test'] . ']</a>';
$b .= '&nbsp;<a href="index.php?action=test&amp;sesskey=' . sesskey() . '">[' . $this->str['test'] . ']</a>';
/// The check indexes button
$b .= '&nbsp;<a href="index.php?action=check_indexes">[' . $this->str['checkindexes'] . ']</a>';
$b .= '&nbsp;<a href="index.php?action=check_indexes&amp;sesskey=' . sesskey() . '">[' . $this->str['checkindexes'] . ']</a>';
$b .= '</p>';
/// Send buttons to output
$o .= $b;
@@ -126,7 +127,7 @@ class main_view extends XMLDBAction {
if ($dbdir->path_exists &&
!file_exists($key . '/install.xml') &&
is_writeable($key)) {
$b .= '<a href="index.php?action=create_xml_file&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $key)) . '&amp;time=' . time() . '&amp;postaction=main_view#lastused">[' . $this->str['create'] . ']</a>';
$b .= '<a href="index.php?action=create_xml_file&amp;sesskey=' . sesskey() . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $key)) . '&amp;time=' . time() . '&amp;postaction=main_view#lastused">[' . $this->str['create'] . ']</a>';
} else {
$b .= '[' . $this->str['create'] . ']';
}
@@ -159,7 +160,7 @@ class main_view extends XMLDBAction {
is_writeable($key) &&
!empty($dbdir->xml_loaded) &&
!empty($dbdir->xml_changed)) {
$b .= '<a href="index.php?action=save_xml_file&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $key)) . '&amp;time=' . time() . '&amp;postaction=main_view#lastused">[' . $this->str['save'] . ']</a>';
$b .= '<a href="index.php?action=save_xml_file&amp;sesskey=' . sesskey() . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $key)) . '&amp;time=' . time() . '&amp;postaction=main_view#lastused">[' . $this->str['save'] . ']</a>';
/// Check if the file has been manually edited while being modified in the editor
if ($dbdir->filemtime != filemtime($key . '/install.xml')) {
/// File manually modified. Add to errors.
@@ -178,7 +179,7 @@ class main_view extends XMLDBAction {
is_writeable($key) &&
!empty($dbdir->xml_loaded) &&
!empty($dbdir->xml_changed)) {
$b .= '<a href="index.php?action=revert_changes&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $key)) . '">[' . $this->str['revert'] . ']</a>';
$b .= '<a href="index.php?action=revert_changes&amp;sesskey=' . sesskey() . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $key)) . '">[' . $this->str['revert'] . ']</a>';
} else {
$b .= '[' . $this->str['revert'] . ']';
}
@@ -200,7 +201,7 @@ class main_view extends XMLDBAction {
is_readable($key . '/install.xml') &&
is_writeable($key) &&
empty($dbdir->xml_loaded)) {
$b .= '<a href="index.php?action=delete_xml_file&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $key)) . '">[' . $this->str['delete'] . ']</a>';
$b .= '<a href="index.php?action=delete_xml_file&amp;sesskey=' . sesskey() . '&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $key)) . '">[' . $this->str['delete'] . ']</a>';
} else {
$b .= '[' . $this->str['delete'] . ']';
}
@@ -107,6 +107,7 @@ class new_statement extends XMLDBAction {
$o.= ' <input type="hidden" name ="dir" value="' . str_replace($CFG->dirroot, '', $dirpath) . '" />';
$o.= ' <input type="hidden" name ="action" value="new_statement" />';
$o.= ' <input type="hidden" name ="postaction" value="edit_statement" />';
$o.= ' <input type="hidden" name ="sesskey" value="' . sesskey() . '" />';
$o.= ' <table id="formelements" class="boxaligncenter" cellpadding="5">';
$o.= ' <tr><td><label for="type" accesskey="t">' . $this->str['statementtype'] .' </label>' . choose_from_menu($typeoptions, 'type', '', 'choose', '', 0, true) . '<label for="table" accesskey="a">' . $this->str['statementtable'] . ' </label>' .choose_from_menu($selecttables, 'table', '', 'choose', '', 0, true) . '</td></tr>';
$o.= ' <tr><td colspan="2" align="center"><input type="submit" value="' .$this->str['create'] . '" /></td></tr>';
@@ -111,6 +111,7 @@ class new_table_from_mysql extends XMLDBAction {
$o.= ' <input type="hidden" name ="dir" value="' . str_replace($CFG->dirroot, '', $dirpath) . '" />';
$o.= ' <input type="hidden" name ="action" value="new_table_from_mysql" />';
$o.= ' <input type="hidden" name ="postaction" value="edit_table" />';
$o.= ' <input type="hidden" name ="sesskey" value="' . sesskey() . '" />';
$o.= ' <table id="formelements" class="boxaligncenter" cellpadding="5">';
$o.= ' <tr><td><label for="table" accesskey="t">' . $this->str['createtable'] .' </label>' . choose_from_menu($selecttables, 'table', '', 'choose', '', 0, true) . '<label for="after" accesskey="a">' . $this->str['aftertable'] . ' </label>' .choose_from_menu($aftertables, 'after', '', 'choose', '', 0, true) . '</td></tr>';
$o.= ' <tr><td colspan="2" align="center"><input type="submit" value="' .$this->str['create'] . '" /></td></tr>';
@@ -75,7 +75,7 @@ class revert_changes extends XMLDBAction {
$o.= ' <p class="centerpara">' . $this->str['confirmrevertchanges'] . '<br /><br />' . $dirpath . '</p>';
$o.= ' <table class="boxaligncenter" cellpadding="20"><tr><td>';
$o.= ' <div class="singlebutton">';
$o.= ' <form action="index.php?action=revert_changes&amp;confirmed=yes&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '&amp;postaction=main_view#lastused" method="post"><fieldset class="invisiblefieldset">';
$o.= ' <form action="index.php?action=revert_changes&amp;sesskey=' . sesskey() . '&amp;confirmed=yes&amp;dir=' . urlencode(str_replace($CFG->dirroot, '', $dirpath)) . '&amp;postaction=main_view#lastused" method="post"><fieldset class="invisiblefieldset">';
$o.= ' <input type="submit" value="'. $this->str['yes'] .'" /></fieldset></form></div>';
$o.= ' </td><td>';
$o.= ' <div class="singlebutton">';
+14
View File
@@ -955,6 +955,20 @@ class test extends XMLDBAction {
$this->output = $o;
/// Finally drop all the potentially existing test tables
$table = new XMLDBTable('testtable');
if (table_exists($table)) {
$status = drop_table($table, true, false);
}
$table = new XMLDBTable ('anothertest');
if (table_exists($table)) {
$status = drop_table($table, true, false);
}
$table = new XMLDBTable ('newnameforthetable');
if (table_exists($table)) {
$status = drop_table($table, true, false);
}
/// Launch postaction if exists (leave this here!)
if ($this->getPostAction() && $result) {
return $this->launch($this->getPostAction());
@@ -35,6 +35,7 @@ class unload_xml_file extends XMLDBAction {
parent::init();
/// Set own custom attributes
$this->sesskey_protected = false; // This action doesn't need sesskey protection
/// Get needed strings
$this->loadStrings(array(
@@ -35,6 +35,7 @@ class view_field_xml extends XMLDBAction {
parent::init();
/// Set own custom attributes
$this->sesskey_protected = false; // This action doesn't need sesskey protection
/// Get needed strings
$this->loadStrings(array(
@@ -35,6 +35,7 @@ class view_index_xml extends XMLDBAction {
parent::init();
/// Set own custom attributes
$this->sesskey_protected = false; // This action doesn't need sesskey protection
/// Get needed strings
$this->loadStrings(array(
@@ -35,6 +35,7 @@ class view_key_xml extends XMLDBAction {
parent::init();
/// Set own custom attributes
$this->sesskey_protected = false; // This action doesn't need sesskey protection
/// Get needed strings
$this->loadStrings(array(
@@ -38,6 +38,7 @@ class view_reserved_words extends XMLDBAction {
parent::init();
/// Set own custom attributes
$this->sesskey_protected = false; // This action doesn't need sesskey protection
/// Get needed strings
$this->loadStrings(array(
@@ -35,6 +35,7 @@ class view_statement_xml extends XMLDBAction {
parent::init();
/// Set own custom attributes
$this->sesskey_protected = false; // This action doesn't need sesskey protection
/// Get needed strings
$this->loadStrings(array(
@@ -36,6 +36,7 @@ class view_structure_php extends XMLDBAction {
parent::init();
/// Set own custom attributes
$this->sesskey_protected = false; // This action doesn't need sesskey protection
/// Get needed strings
$this->loadStrings(array(
@@ -36,6 +36,7 @@ class view_structure_sql extends XMLDBAction {
parent::init();
/// Set own custom attributes
$this->sesskey_protected = false; // This action doesn't need sesskey protection
/// Get needed strings
$this->loadStrings(array(
@@ -35,6 +35,7 @@ class view_structure_xml extends XMLDBAction {
parent::init();
/// Set own custom attributes
$this->sesskey_protected = false; // This action doesn't need sesskey protection
/// Get needed strings
$this->loadStrings(array(
@@ -36,6 +36,7 @@ class view_table_php extends XMLDBAction {
parent::init();
/// Set own custom attributes
$this->sesskey_protected = false; // This action doesn't need sesskey protection
/// Get needed strings
$this->loadStrings(array(
@@ -36,6 +36,7 @@ class view_table_sql extends XMLDBAction {
parent::init();
/// Set own custom attributes
$this->sesskey_protected = false; // This action doesn't need sesskey protection
/// Get needed strings
$this->loadStrings(array(
@@ -35,6 +35,7 @@ class view_table_xml extends XMLDBAction {
parent::init();
/// Set own custom attributes
$this->sesskey_protected = false; // This action doesn't need sesskey protection
/// Get needed strings
$this->loadStrings(array(
@@ -38,6 +38,7 @@ class view_xml extends XMLDBAction {
//$this->can_subaction = ACTION_HAVE_SUBACTIONS;
/// Set own custom attributes
$this->sesskey_protected = false; // This action doesn't need sesskey protection
/// Get needed strings
$this->loadStrings(array(
+1531 -3850
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+214
View File
@@ -0,0 +1,214 @@
<?php
/*
* Copyright © 2003-2010, The ESUP-Portail consortium & the JA-SIG Collaborative.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* * Neither the name of the ESUP-Portail consortium & the JA-SIG
* Collaborative nor the names of its contributors may be used to endorse or
* promote products derived from this software without specific prior
* written permission.
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* @file CAS/PGTStorage/pgt-main.php
* Basic class for PGT storage
*/
/**
* @class PGTStorage
* The PGTStorage class is a generic class for PGT storage. This class should
* not be instanciated itself but inherited by specific PGT storage classes.
*
* @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
*
* @ingroup internalPGTStorage
*/
class PGTStorage
{
/**
* @addtogroup internalPGTStorage
* @{
*/
// ########################################################################
// CONSTRUCTOR
// ########################################################################
/**
* The constructor of the class, should be called only by inherited classes.
*
* @param $cas_parent the CASclient instance that creates the current object.
*
* @protected
*/
function PGTStorage($cas_parent)
{
phpCAS::traceBegin();
if ( !$cas_parent->isProxy() ) {
phpCAS::error('defining PGT storage makes no sense when not using a CAS proxy');
}
phpCAS::traceEnd();
}
// ########################################################################
// DEBUGGING
// ########################################################################
/**
* This virtual method returns an informational string giving the type of storage
* used by the object (used for debugging purposes).
*
* @public
*/
function getStorageType()
{
phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
}
/**
* This virtual method returns an informational string giving informations on the
* parameters of the storage.(used for debugging purposes).
*
* @public
*/
function getStorageInfo()
{
phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
}
// ########################################################################
// ERROR HANDLING
// ########################################################################
/**
* string used to store an error message. Written by PGTStorage::setErrorMessage(),
* read by PGTStorage::getErrorMessage().
*
* @hideinitializer
* @private
* @deprecated not used.
*/
var $_error_message=FALSE;
/**
* This method sets en error message, which can be read later by
* PGTStorage::getErrorMessage().
*
* @param $error_message an error message
*
* @protected
* @deprecated not used.
*/
function setErrorMessage($error_message)
{
$this->_error_message = $error_message;
}
/**
* This method returns an error message set by PGTStorage::setErrorMessage().
*
* @return an error message when set by PGTStorage::setErrorMessage(), FALSE
* otherwise.
*
* @public
* @deprecated not used.
*/
function getErrorMessage()
{
return $this->_error_message;
}
// ########################################################################
// INITIALIZATION
// ########################################################################
/**
* a boolean telling if the storage has already been initialized. Written by
* PGTStorage::init(), read by PGTStorage::isInitialized().
*
* @hideinitializer
* @private
*/
var $_initialized = FALSE;
/**
* This method tells if the storage has already been intialized.
*
* @return a boolean
*
* @protected
*/
function isInitialized()
{
return $this->_initialized;
}
/**
* This virtual method initializes the object.
*
* @protected
*/
function init()
{
$this->_initialized = TRUE;
}
// ########################################################################
// PGT I/O
// ########################################################################
/**
* This virtual method stores a PGT and its corresponding PGT Iuo.
* @note Should never be called.
*
* @param $pgt the PGT
* @param $pgt_iou the PGT iou
*
* @protected
*/
function write($pgt,$pgt_iou)
{
phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
}
/**
* This virtual method reads a PGT corresponding to a PGT Iou and deletes
* the corresponding storage entry.
* @note Should never be called.
*
* @param $pgt_iou the PGT iou
*
* @protected
*/
function read($pgt_iou)
{
phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
}
/** @} */
}
// include specific PGT storage classes
include_once(dirname(__FILE__).'/pgt-file.php');
?>
File diff suppressed because it is too large Load Diff
@@ -10,12 +10,12 @@
require_once('domxml-php4-to-php5.php');
}
Version 1.20a, 2008-11-06, http://alexandre.alapetite.net/doc-alex/domxml-php4-php5/
Version 1.21.1a, 2009-03-13, http://alexandre.alapetite.fr/doc-alex/domxml-php4-php5/
------------------------------------------------------------------
Written by Alexandre Alapetite, http://alexandre.alapetite.net/cv/
Written by Alexandre Alapetite, http://alexandre.alapetite.fr/cv/
Copyright 2004-2008, GNU Lesser General Public License,
Copyright 2004-2009, GNU Lesser General Public License,
http://www.gnu.org/licenses/lgpl.html
This program is free software: you can redistribute it and/or modify
@@ -39,7 +39,7 @@
in order to improve this file for the benefit of everybody.
If you want to distribute this code, please do it as a link to:
http://alexandre.alapetite.net/doc-alex/domxml-php4-php5/
http://alexandre.alapetite.fr/doc-alex/domxml-php4-php5/
*/
define('DOMXML_LOAD_PARSING',0);
@@ -179,6 +179,7 @@ class php4DOMDocument extends php4DOMNode
}
function html_dump_mem() {return $this->myDOMNode->saveHTML();}
function root() {return parent::_newDOMElement($this->myDOMNode->documentElement,$this);}
function xinclude() {return $this->myDOMNode->xinclude();}
function xpath_new_context() {return new php4DOMXPath($this);}
}
@@ -262,7 +263,7 @@ class php4DOMNode
return false;
}
}
function add_child($newnode) {return append_child($newnode);}
function add_child($newnode) {return $this->append_child($newnode);}
function add_namespace($uri,$prefix) {return false;}
function append_child($newnode) {return self::_newDOMElement($this->myDOMNode->appendChild($this->_importNode($newnode)),$this->myOwnerDocument);}
function append_sibling($newnode) {return self::_newDOMElement($this->myDOMNode->parentNode->appendChild($this->_importNode($newnode)),$this->myOwnerDocument);}
@@ -458,8 +459,8 @@ class php4DOMXPath
}
function xpath_eval($eval_str,$contextnode=null)
{
if (method_exists($this->myDOMXPath,'evaluate')) $xp=isset($contextnode) ? $this->myDOMXPath->evaluate($eval_str,$contextnode->myDOMNode) : $this->myDOMXPath->evaluate($eval_str);
else $xp=isset($contextnode) ? $this->myDOMXPath->query($eval_str,$contextnode->myDOMNode) : $this->myDOMXPath->query($eval_str);
if (method_exists($this->myDOMXPath,'evaluate')) $xp=isset($contextnode->myDOMNode) ? $this->myDOMXPath->evaluate($eval_str,$contextnode->myDOMNode) : $this->myDOMXPath->evaluate($eval_str);
else $xp=isset($contextnode->myDOMNode) ? $this->myDOMXPath->query($eval_str,$contextnode->myDOMNode) : $this->myDOMXPath->query($eval_str);
$xp=new php4DOMNodelist($xp,$this->myOwnerDocument);
return ($xp->type===XPATH_UNDEFINED) ? false : $xp;
}
@@ -467,7 +468,7 @@ class php4DOMXPath
}
if (extension_loaded('xsl'))
{//See also: http://alexandre.alapetite.net/doc-alex/xslt-php4-php5/
{//See also: http://alexandre.alapetite.fr/doc-alex/xslt-php4-php5/
function domxml_xslt_stylesheet($xslstring) {return new php4DomXsltStylesheet(DOMDocument::loadXML($xslstring));}
function domxml_xslt_stylesheet_doc($dom_document) {return new php4DomXsltStylesheet($dom_document);}
function domxml_xslt_stylesheet_file($xslfile) {return new php4DomXsltStylesheet(DOMDocument::load($xslfile));}
+27
View File
@@ -0,0 +1,27 @@
<?php
/**
* @file languages/spanish.php
* @author Iván-Benjamín García Torà <ivaniclixx AT gmail DOT com>
* @sa @link internalLang Internationalization @endlink
* @ingroup internalLang
*/
$this->_strings = array(
CAS_STR_USING_SERVER
=> 'usant servidor',
CAS_STR_AUTHENTICATION_WANTED
=> 'Autentificació CAS necessària!',
CAS_STR_LOGOUT
=> 'Sortida de CAS necessària!',
CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
=> 'Ja hauria d\ haver estat redireccionat al servidor CAS. Feu click <a href="%s">aquí</a> per a continuar.',
CAS_STR_AUTHENTICATION_FAILED
=> 'Autentificació CAS fallida!',
CAS_STR_YOU_WERE_NOT_AUTHENTICATED
=> '<p>No estàs autentificat.</p><p>Pots tornar a intentar-ho fent click <a href="%s">aquí</a>.</p><p>Si el problema persisteix hauría de contactar amb l\'<a href="mailto:%s">administrador d\'aquest llocc</a>.</p>',
CAS_STR_SERVICE_UNAVAILABLE
=> 'El servei `<b>%s</b>\' no està disponible (<b>%s</b>).'
);
?>
@@ -1,79 +1,27 @@
<?php
/**
* @file languages/english.php
* @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
* @sa @link internalLang Internationalization @endlink
* @ingroup internalLang
*/
$this->_strings = array(
CAS_STR_USING_SERVER
=> 'using server',
CAS_STR_AUTHENTICATION_WANTED
=> 'CAS Authentication wanted!',
CAS_STR_LOGOUT
=> 'CAS logout wanted!',
CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
=> 'You should already have been redirected to the CAS server. Click <a href="%s">here</a> to continue.',
CAS_STR_AUTHENTICATION_FAILED
=> 'CAS Authentication failed!',
CAS_STR_YOU_WERE_NOT_AUTHENTICATED
=> '<p>You were not authenticated.</p><p>You may submit your request again by clicking <a href="%s">here</a>.</p><p>If the problem persists, you may contact <a href="mailto:%s">the administrator of this site</a>.</p>',
CAS_STR_SERVICE_UNAVAILABLE
=> 'The service `<b>%s</b>\' is not available (<b>%s</b>).'
);
<?php
/**
* @file languages/english.php
* @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
* @sa @link internalLang Internationalization @endlink
* @ingroup internalLang
*/
$this->_strings = array(
CAS_STR_USING_SERVER
=> 'using server',
CAS_STR_AUTHENTICATION_WANTED
=> 'CAS Authentication wanted!',
CAS_STR_LOGOUT
=> 'CAS logout wanted!',
CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
=> 'You should already have been redirected to the CAS server. Click <a href="%s">here</a> to continue.',
CAS_STR_AUTHENTICATION_FAILED
=> 'CAS Authentication failed!',
CAS_STR_YOU_WERE_NOT_AUTHENTICATED
=> '<p>You were not authenticated.</p><p>You may submit your request again by clicking <a href="%s">here</a>.</p><p>If the problem persists, you may contact <a href="mailto:%s">the administrator of this site</a>.</p>',
CAS_STR_SERVICE_UNAVAILABLE
=> 'The service `<b>%s</b>\' is not available (<b>%s</b>).'
);
?>
@@ -1,82 +1,28 @@
<?php
/**
* @file languages/english.php
* @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
* @sa @link internalLang Internationalization @endlink
* @ingroup internalLang
*/
$this->_strings = array(
CAS_STR_USING_SERVER
=> 'utilisant le serveur',
CAS_STR_AUTHENTICATION_WANTED
=> 'Authentication CAS nécessaire&nbsp;!',
CAS_STR_LOGOUT
=> 'Déconnexion demandée&nbsp;!',
CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
=> 'Vous auriez du etre redirigé(e) vers le serveur CAS. Cliquez <a href="%s">ici</a> pour continuer.',
CAS_STR_AUTHENTICATION_FAILED
=> 'Authentification CAS infructueuse&nbsp;!',
CAS_STR_YOU_WERE_NOT_AUTHENTICATED
=> '<p>Vous n\'avez pas été authentifié(e).</p><p>Vous pouvez soumettre votre requete à nouveau en cliquant <a href="%s">ici</a>.</p><p>Si le problème persiste, vous pouvez contacter <a href="mailto:%s">l\'administrateur de ce site</a>.</p>',
CAS_STR_SERVICE_UNAVAILABLE
=> 'Le service `<b>%s</b>\' est indisponible (<b>%s</b>)'
);
<?php
/**
* @file languages/english.php
* @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
* @sa @link internalLang Internationalization @endlink
* @ingroup internalLang
*/
$this->_strings = array(
CAS_STR_USING_SERVER
=> 'utilisant le serveur',
CAS_STR_AUTHENTICATION_WANTED
=> 'Authentication CAS ncessaire&nbsp;!',
CAS_STR_LOGOUT
=> 'Dconnexion demande&nbsp;!',
CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
=> 'Vous auriez du etre redirig(e) vers le serveur CAS. Cliquez <a href="%s">ici</a> pour continuer.',
CAS_STR_AUTHENTICATION_FAILED
=> 'Authentification CAS infructueuse&nbsp;!',
CAS_STR_YOU_WERE_NOT_AUTHENTICATED
=> '<p>Vous n\'avez pas t authentifi(e).</p><p>Vous pouvez soumettre votre requete nouveau en cliquant <a href="%s">ici</a>.</p><p>Si le problme persiste, vous pouvez contacter <a href="mailto:%s">l\'administrateur de ce site</a>.</p>',
CAS_STR_SERVICE_UNAVAILABLE
=> 'Le service `<b>%s</b>\' est indisponible (<b>%s</b>)'
);
?>
@@ -1,79 +1,27 @@
<?php
/**
* @file languages/german.php
* @author Henrik Genssen <hg at mediafactory.de>
* @sa @link internalLang Internationalization @endlink
* @ingroup internalLang
*/
$this->_strings = array(
CAS_STR_USING_SERVER
=> 'via Server',
CAS_STR_AUTHENTICATION_WANTED
=> 'CAS Authentifizierung erforderlich!',
CAS_STR_LOGOUT
=> 'CAS Abmeldung!',
CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
=> 'eigentlich h&auml;ten Sie zum CAS Server weitergeleitet werden sollen. Dr&uuml;cken Sie <a href="%s">hier</a> um fortzufahren.',
CAS_STR_AUTHENTICATION_FAILED
=> 'CAS Anmeldung fehlgeschlagen!',
CAS_STR_YOU_WERE_NOT_AUTHENTICATED
=> '<p>Sie wurden nicht angemeldet.</p><p>Um es erneut zu versuchen klicken Sie <a href="%s">hier</a>.</p><p>Wenn das Problem bestehen bleibt, kontkatieren Sie den <a href="mailto:%s">Administrator</a> dieser Seite.</p>',
CAS_STR_SERVICE_UNAVAILABLE
=> 'Der Dienst `<b>%s</b>\' ist nicht verf&uuml;gbar (<b>%s</b>).'
);
<?php
/**
* @file languages/german.php
* @author Henrik Genssen <hg at mediafactory.de>
* @sa @link internalLang Internationalization @endlink
* @ingroup internalLang
*/
$this->_strings = array(
CAS_STR_USING_SERVER
=> 'via Server',
CAS_STR_AUTHENTICATION_WANTED
=> 'CAS Authentifizierung erforderlich!',
CAS_STR_LOGOUT
=> 'CAS Abmeldung!',
CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
=> 'eigentlich h&auml;ten Sie zum CAS Server weitergeleitet werden sollen. Dr&uuml;cken Sie <a href="%s">hier</a> um fortzufahren.',
CAS_STR_AUTHENTICATION_FAILED
=> 'CAS Anmeldung fehlgeschlagen!',
CAS_STR_YOU_WERE_NOT_AUTHENTICATED
=> '<p>Sie wurden nicht angemeldet.</p><p>Um es erneut zu versuchen klicken Sie <a href="%s">hier</a>.</p><p>Wenn das Problem bestehen bleibt, kontkatieren Sie den <a href="mailto:%s">Administrator</a> dieser Seite.</p>',
CAS_STR_SERVICE_UNAVAILABLE
=> 'Der Dienst `<b>%s</b>\' ist nicht verf&uuml;gbar (<b>%s</b>).'
);
?>
+27
View File
@@ -0,0 +1,27 @@
<?php
/**
* @file languages/greek.php
* @author Vangelis Haniotakis <haniotak at ucnet.uoc.gr>
* @sa @link internalLang Internationalization @endlink
* @ingroup internalLang
*/
$this->_strings = array(
CAS_STR_USING_SERVER
=> ' ',
CAS_STR_AUTHENTICATION_WANTED
=> ' CAS!',
CAS_STR_LOGOUT
=> ' CAS!',
CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
=> ' CAS. <a href="%s"></a> .',
CAS_STR_AUTHENTICATION_FAILED
=> ' CAS !',
CAS_STR_YOU_WERE_NOT_AUTHENTICATED
=> '<p> .</p><p> , <a href="%s"></a>.</p><p> , <a href="mailto:%s"></a>.</p>',
CAS_STR_SERVICE_UNAVAILABLE
=> ' `<b>%s</b>\' (<b>%s</b>).'
);
?>
+27
View File
@@ -0,0 +1,27 @@
<?php
/**
* @file languages/japanese.php
* @author fnorif (fnorif@yahoo.co.jp)
*
* Now Encoding is EUC-JP and LF
**/
$this->_strings = array(
CAS_STR_USING_SERVER
=> 'using server',
CAS_STR_AUTHENTICATION_WANTED
=> 'CASˤǧڤԤޤ',
CAS_STR_LOGOUT
=> 'CAS?Ȥޤ!',
CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
=> 'CASФ˹ԤɬפޤưŪžʤ <a href="%s"></a> 򥯥å³Ԥޤ',
CAS_STR_AUTHENTICATION_FAILED
=> 'CASˤǧڤ˼Ԥޤ',
CAS_STR_YOU_WERE_NOT_AUTHENTICATED
=> '<p>ǧڤǤޤǤ.</p><p>٥ꥯȤ<a href="%s"></a>򥯥å.</p><p>ʤ <a href="mailto:%s">ΥȤδ</a>Ƥ.</p>',
CAS_STR_SERVICE_UNAVAILABLE
=> 'ӥ `<b>%s</b>\' ѤǤޤ (<b>%s</b>).'
);
?>
@@ -1,70 +1,24 @@
<?php
/**
* @file languages/languages.php
* Internationalization constants
* @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
* @sa @link internalLang Internationalization @endlink
* @ingroup internalLang
*/
//@{
/**
* a phpCAS string index
*/
define("CAS_STR_USING_SERVER", 1);
define("CAS_STR_AUTHENTICATION_WANTED", 2);
define("CAS_STR_LOGOUT", 3);
define("CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED", 4);
define("CAS_STR_AUTHENTICATION_FAILED", 5);
define("CAS_STR_YOU_WERE_NOT_AUTHENTICATED", 6);
define("CAS_STR_SERVICE_UNAVAILABLE", 7);
//@}
<?php
/**
* @file languages/languages.php
* Internationalization constants
* @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
* @sa @link internalLang Internationalization @endlink
* @ingroup internalLang
*/
//@{
/**
* a phpCAS string index
*/
define("CAS_STR_USING_SERVER", 1);
define("CAS_STR_AUTHENTICATION_WANTED", 2);
define("CAS_STR_LOGOUT", 3);
define("CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED", 4);
define("CAS_STR_AUTHENTICATION_FAILED", 5);
define("CAS_STR_YOU_WERE_NOT_AUTHENTICATED", 6);
define("CAS_STR_SERVICE_UNAVAILABLE", 7);
//@}
?>
+27
View File
@@ -0,0 +1,27 @@
<?php
/**
* @file languages/spanish.php
* @author Iván-Benjamín García Torà <ivaniclixx AT gmail DOT com>
* @sa @link internalLang Internationalization @endlink
* @ingroup internalLang
*/
$this->_strings = array(
CAS_STR_USING_SERVER
=> 'usando servidor',
CAS_STR_AUTHENTICATION_WANTED
=> '¡Autentificación CAS necesaria!',
CAS_STR_LOGOUT
=> '¡Salida CAS necesaria!',
CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
=> 'Ya debería haber sido redireccionado al servidor CAS. Haga click <a href="%s">aquí</a> para continuar.',
CAS_STR_AUTHENTICATION_FAILED
=> '¡Autentificación CAS fallida!',
CAS_STR_YOU_WERE_NOT_AUTHENTICATED
=> '<p>No estás autentificado.</p><p>Puedes volver a intentarlo haciendo click <a href="%s">aquí</a>.</p><p>Si el problema persiste debería contactar con el <a href="mailto:%s">administrador de este sitio</a>.</p>',
CAS_STR_SERVICE_UNAVAILABLE
=> 'El servicio `<b>%s</b>\' no está disponible (<b>%s</b>).'
);
?>
-568
View File
@@ -1,568 +0,0 @@
<?php
/**
* @file CAS/PGTStorage/pgt-db.php
* Basic class for PGT database storage
*/
// include phpDB library (the test was introduced in release 0.4.8 for
// the integration into Tikiwiki).
if (!class_exists('DB')) {
@include_once('DB.php');
}
/**
* @class PGTStorageDB
* The PGTStorageDB class is a class for PGT database storage. An instance of
* this class is returned by CASClient::SetPGTStorageDB().
*
* @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
*
* @ingroup internalPGTStorageDB
*/
class PGTStorageDB extends PGTStorage
{
/**
* @addtogroup internalPGTStorageDB
* @{
*/
/**
* a string representing a PEAR DB URL to connect to the database. Written by
* PGTStorageDB::PGTStorageDB(), read by getURL().
*
* @hideinitializer
* @private
*/
var $_url='';
/**
* This method returns the PEAR DB URL to use to connect to the database.
*
* @return a PEAR DB URL
*
* @private
*/
function getURL()
{
return $this->_url;
}
/**
* The handle of the connection to the database where PGT's are stored. Written by
* PGTStorageDB::init(), read by getLink().
*
* @hideinitializer
* @private
*/
var $_link = null;
/**
* This method returns the handle of the connection to the database where PGT's are
* stored.
*
* @return a handle of connection.
*
* @private
*/
function getLink()
{
return $this->_link;
}
/**
* The name of the table where PGT's are stored. Written by
* PGTStorageDB::PGTStorageDB(), read by getTable().
*
* @hideinitializer
* @private
*/
var $_table = '';
/**
* This method returns the name of the table where PGT's are stored.
*
* @return the name of a table.
*
* @private
*/
function getTable()
{
return $this->_table;
}
// ########################################################################
// DEBUGGING
// ########################################################################
/**
* This method returns an informational string giving the type of storage
* used by the object (used for debugging purposes).
*
* @return an informational string.
* @public
*/
function getStorageType()
{
return "database";
}
/**
* This method returns an informational string giving informations on the
* parameters of the storage.(used for debugging purposes).
*
* @public
*/
function getStorageInfo()
{
return 'url=`'.$this->getURL().'\', table=`'.$this->getTable().'\'';
}
// ########################################################################
// CONSTRUCTOR
// ########################################################################
/**
* The class constructor, called by CASClient::SetPGTStorageDB().
*
* @param $cas_parent the CASClient instance that creates the object.
* @param $user the user to access the data with
* @param $password the user's password
* @param $database_type the type of the database hosting the data
* @param $hostname the server hosting the database
* @param $port the port the server is listening on
* @param $database the name of the database
* @param $table the name of the table storing the data
*
* @public
*/
function PGTStorageDB($cas_parent,$user,$password,$database_type,$hostname,$port,$database,$table)
{
phpCAS::traceBegin();
// call the ancestor's constructor
$this->PGTStorage($cas_parent);
if ( empty($database_type) ) $database_type = CAS_PGT_STORAGE_DB_DEFAULT_DATABASE_TYPE;
if ( empty($hostname) ) $hostname = CAS_PGT_STORAGE_DB_DEFAULT_HOSTNAME;
if ( $port==0 ) $port = CAS_PGT_STORAGE_DB_DEFAULT_PORT;
if ( empty($database) ) $database = CAS_PGT_STORAGE_DB_DEFAULT_DATABASE;
if ( empty($table) ) $table = CAS_PGT_STORAGE_DB_DEFAULT_TABLE;
// build and store the PEAR DB URL
$this->_url = $database_type.':'.'//'.$user.':'.$password.'@'.$hostname.':'.$port.'/'.$database;
// XXX should use setURL and setTable
phpCAS::traceEnd();
}
// ########################################################################
// INITIALIZATION
// ########################################################################
/**
* This method is used to initialize the storage. Halts on error.
*
* @public
*/
function init()
{
phpCAS::traceBegin();
// if the storage has already been initialized, return immediatly
if ( $this->isInitialized() )
return;
// call the ancestor's method (mark as initialized)
parent::init();
// try to connect to the database
$this->_link = DB::connect($this->getURL());
if ( DB::isError($this->_link) ) {
phpCAS::error('could not connect to database ('.DB::errorMessage($this->_link).')');
}
var_dump($this->_link);
phpCAS::traceBEnd();
}
/** @} */
}
?>
-188
View File
@@ -1,188 +0,0 @@
<?php
/**
* @file CAS/PGTStorage/pgt-main.php
* Basic class for PGT storage
*/
/**
* @class PGTStorage
* The PGTStorage class is a generic class for PGT storage. This class should
* not be instanciated itself but inherited by specific PGT storage classes.
*
* @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
*
* @ingroup internalPGTStorage
*/
class PGTStorage
{
/**
* @addtogroup internalPGTStorage
* @{
*/
// ########################################################################
// CONSTRUCTOR
// ########################################################################
/**
* The constructor of the class, should be called only by inherited classes.
*
* @param $cas_parent the CASclient instance that creates the current object.
*
* @protected
*/
function PGTStorage($cas_parent)
{
phpCAS::traceBegin();
if ( !$cas_parent->isProxy() ) {
phpCAS::error('defining PGT storage makes no sense when not using a CAS proxy');
}
phpCAS::traceEnd();
}
// ########################################################################
// DEBUGGING
// ########################################################################
/**
* This virtual method returns an informational string giving the type of storage
* used by the object (used for debugging purposes).
*
* @public
*/
function getStorageType()
{
phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
}
/**
* This virtual method returns an informational string giving informations on the
* parameters of the storage.(used for debugging purposes).
*
* @public
*/
function getStorageInfo()
{
phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
}
// ########################################################################
// ERROR HANDLING
// ########################################################################
/**
* string used to store an error message. Written by PGTStorage::setErrorMessage(),
* read by PGTStorage::getErrorMessage().
*
* @hideinitializer
* @private
* @deprecated not used.
*/
var $_error_message=FALSE;
/**
* This method sets en error message, which can be read later by
* PGTStorage::getErrorMessage().
*
* @param $error_message an error message
*
* @protected
* @deprecated not used.
*/
function setErrorMessage($error_message)
File diff suppressed because it is too large Load Diff
-79
View File
@@ -1,79 +0,0 @@
<?php
/**
* @file languages/greek.php
* @author Vangelis Haniotakis <haniotak at ucnet.uoc.gr>
* @sa @link internalLang Internationalization @endlink
* @ingroup internalLang
*/
$this->_strings = array(
CAS_STR_USING_SERVER
=> '÷ñçóéìïðïéåßôáé ï åîõðçñåôçôÞò',
CAS_STR_AUTHENTICATION_WANTED
=> 'Áðáéôåßôáé ç ôáõôïðïßçóç CAS!',
CAS_STR_LOGOUT
=> 'Áðáéôåßôáé ç áðïóýíäåóç áðü CAS!',
CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
=> 'Èá Ýðñåðå íá åß÷áôå áíáêáôåõèõíèåß óôïí åîõðçñåôçôÞ CAS. ÊÜíôå êëßê <a href="%s">åäþ</a> ãéá íá óõíå÷ßóåôå.',
CAS_STR_AUTHENTICATION_FAILED
=> 'Ç ôáõôïðïßçóç CAS áðÝôõ÷å!',
CAS_STR_YOU_WERE_NOT_AUTHENTICATED
=> '<p>Äåí ôáõôïðïéçèÞêáôå.</p><p>Ìðïñåßôå íá îáíáðñïóðáèÞóåôå, êÜíïíôáò êëßê <a href="%s">åäþ</a>.</p><p>Åáí ôï ðñüâëçìá åðéìåßíåé, åëÜôå óå åðáöÞ ìå ôïí <a href="mailto:%s">äéá÷åéñéóôÞ</a>.</p>',
CAS_STR_SERVICE_UNAVAILABLE
=> 'Ç õðçñåóßá `<b>%s</b>\' äåí åßíáé äéáèÝóéìç (<b>%s</b>).'
);
?>
-53
View File
@@ -1,53 +0,0 @@
<?php
/**
* @file languages/japanese.php
* @author fnorif (fnorif@yahoo.co.jp)
*
* Now Encoding is EUC-JP and LF
**/
$this->_strings = array(
CAS_STR_USING_SERVER
=> 'using server',
CAS_STR_AUTHENTICATION_WANTED
=> 'CASによる認証を行います',
CAS_STR_LOGOUT
=> 'CASからログアウトします!',
CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
=> 'CASサーバに行く必要があります。自動的に転送されない場合は <a href="%s">こちら</a> をクリックして続行します。',
CAS_STR_AUTHENTICATION_FAILED
=> 'CASによる認証に失敗しました',
CAS_STR_YOU_WERE_NOT_AUTHENTICATED
=> '<p>認証できませんでした.</p><p>もう一度リクエストを送信する場合は<a href="%s">こちら</a>をクリック.</p><p>問題が解決しない場合は <a href="mailto:%s">このサイトの管理者</a>に問い合わせてください.</p>',
CAS_STR_SERVICE_UNAVAILABLE
=> 'サービス `<b>%s</b>\' は利用できません (<b>%s</b>).'
);
?>
+93 -15
View File
@@ -57,9 +57,14 @@ class auth_plugin_cas extends auth_plugin_base {
* @return bool Authentication success or failure.
*/
function user_login ($username, $password) {
$this->connectCAS();
return phpCAS::isAuthenticated();
$this->connectCAS();
return phpCAS::isAuthenticated() && (trim(moodle_strtolower(phpCAS::getUser())) == $username);
}
function prevent_local_passwords() {
return true;
}
/**
* Returns true if this authentication plugin is 'internal'.
*
@@ -92,12 +97,14 @@ class auth_plugin_cas extends auth_plugin_base {
$username = optional_param("username");
if (!empty($username)) {
if (strstr($SESSION->wantsurl,'ticket') || strstr($SESSION->wantsurl,'NOCAS'))
unset($SESSION->wantsurl);
if (isset($SESSION->wantsurl) && (strstr($SESSION->wantsurl, 'ticket') ||
strstr($SESSION->wantsurl, 'NOCAS'))) {
unset($SESSION->wantsurl);
}
return;
}
// Test si cas activé et paramêtres non remplis
// Test si cas activ et paramtres non remplis
if (empty($this->config->hostname)) {
return;
}
@@ -107,7 +114,14 @@ class auth_plugin_cas extends auth_plugin_base {
// Connection to CAS server
$this->connectCAS();
// Gestion de la connection CAS si accès direct d'un ent ou autre
if($this->config->certificate_check && $this->config->certificate_path){
phpCAS::setCasServerCACert($this->config->certificate_path);
}else{
// Don't try to validate the server SSL credentials
phpCAS::setNoCasServerValidation();
}
// Gestion de la connection CAS si accs direct d'un ent ou autre
if (phpCAS::checkAuthentication()) {
$frm->username=phpCAS::getUser();
// if (phpCAS::getUser()=='esup9992')
@@ -116,7 +130,7 @@ class auth_plugin_cas extends auth_plugin_base {
return;
}
if ($_GET["loginguest"]== true) {
if (isset($_GET["loginguest"]) && ($_GET["loginguest"]== true)) {
$frm->username="guest";
$frm->password="guest";
return;
@@ -152,7 +166,7 @@ class auth_plugin_cas extends auth_plugin_base {
if ($this->config->logoutcas ) {
$backurl = $CFG->wwwroot;
$this->connectCAS();
phpCAS::logout($backurl);
phpCAS::logoutWithURL($backurl);
}
}
/**
@@ -166,12 +180,13 @@ class auth_plugin_cas extends auth_plugin_base {
global $PHPCAS_CLIENT;
// mode proxy CAS
if ( !is_object($PHPCAS_CLIENT) ) {
// Make sure phpCAS doesn't try to start a new PHP session when connecting to the CAS server.
if ($this->config->proxycas) {
phpCAS::proxy($this->config->casversion, $this-> config->hostname, (int) $this->config->port, $this->config->baseuri);
phpCAS::proxy($this->config->casversion, $this-> config->hostname, (int) $this->config->port, $this->config->baseuri, false);
}
// mode client CAS
else {
phpCAS::client($this->config->casversion, $this-> config->hostname, (int) $this->config->port, $this->config->baseuri);
phpCAS::client($this->config->casversion, $this-> config->hostname, (int) $this->config->port, $this->config->baseuri, false);
}
}
@@ -187,6 +202,18 @@ if ( !is_object($PHPCAS_CLIENT) ) {
function config_form($config, $err, $user_fields) {
include 'config.html';
}
/**
* A chance to validate form data, and last chance to
* do stuff before it is inserted in config_plugin
* @param object object with submitted configuration settings (without system magic quotes)
* @param array $err array of error messages
*/
function validate_form(&$form, &$err) {
$certificate_path = trim($form->certificate_path);
if ($form->certificate_check && empty($certificate_path)) {
$err['certificate_path'] = get_string('auth_cas_certificate_path_empty', 'auth');
}
}
/**
* Returns the URL for changing the user's pw, or empty if the default can
* be used.
@@ -233,6 +260,10 @@ if ( !is_object($PHPCAS_CLIENT) ) {
$config->logoutcas = '';
if (!isset ($config->multiauth))
$config->multiauth = '';
if (!isset ($config->certificate_check))
$config->certificate_check = '';
if (!isset ($config->certificate_path))
$config->certificate_path = '';
// LDAP settings
if (!isset($config->host_url))
{ $config->host_url = ''; }
@@ -275,6 +306,8 @@ if ( !is_object($PHPCAS_CLIENT) ) {
set_config('proxycas', $config->proxycas, 'auth/cas');
set_config('logoutcas', $config->logoutcas, 'auth/cas');
set_config('multiauth', $config->multiauth, 'auth/cas');
set_config('certificate_check', $config->certificate_check, 'auth/cas');
set_config('certificate_path', $config->certificate_path, 'auth/cas');
// save LDAP settings
set_config('host_url', $config->host_url, 'auth/cas');
set_config('ldapencoding', $config->ldapencoding, 'auth/cas');
@@ -355,6 +388,13 @@ if ( !is_object($PHPCAS_CLIENT) ) {
* @return mixed array with no magic quotes or false on error
*/
function get_userinfo($username) {
// No LDAP servers configured, so user info has to be provided
// via other methods (CSV file, manually, etc.). Return empty
// array so existing user info is not lost.
if (empty($this->config->host_url)) {
return array();
}
$textlib = textlib_get_instance();
$extusername = $textlib->convert(stripslashes($username), 'utf-8', $this->config->ldapencoding);
$ldapconnection = $this->ldap_connect();
@@ -405,7 +445,7 @@ if ( !is_object($PHPCAS_CLIENT) ) {
$result[$key] = $ldapval;
}
}
@ldap_close($ldapconnection);
$this->ldap_close($ldapconnection);
return $result;
}
/**
@@ -435,6 +475,16 @@ if ( !is_object($PHPCAS_CLIENT) ) {
* @return connection result
*/
function ldap_connect($binddn='',$bindpwd='') {
// Cache ldap connections (they are expensive to set up
// and can drain the TCP/IP ressources on the server if we
// are syncing a lot of users (as we try to open a new connection
// to get the user details). This is the least invasive way
// to reuse existing connections without greater code surgery.
if(!empty($this->ldapconnection)) {
$this->ldapconns++;
return $this->ldapconnection;
}
//Select bind password, With empty values use
//ldap_bind_* variables or anonymous bind if ldap_bind_* are empty
if ($binddn == '' and $bindpwd == '') {
@@ -456,6 +506,9 @@ if ( !is_object($PHPCAS_CLIENT) ) {
if (!empty($this->config->version)) {
ldap_set_option($connresult, LDAP_OPT_PROTOCOL_VERSION, $this->config->version);
}
if ($this->config->user_type == 'ad') {
ldap_set_option($connresult, LDAP_OPT_REFERRALS, 0);
}
if (!empty($binddn)) {
//bind with search-user
//$debuginfo .= 'Using bind user'.$binddn.'and password:'.$bindpwd;
@@ -469,6 +522,10 @@ if ( !is_object($PHPCAS_CLIENT) ) {
ldap_set_option($connresult, LDAP_OPT_DEREF, $this->config->opt_deref);
}
if ($bindresult) {
// Set the connection counter so we can call PHP's ldap_close()
// when we call $this->ldap_close() for the last 'open' connection.
$this->ldapconns = 1;
$this->ldapconnection = $connresult;
return $connresult;
}
$debuginfo .= "<br/>Server: '$server' <br/> Connection: '$connresult'<br/> Bind result: '$bindresult'</br>";
@@ -477,6 +534,18 @@ if ( !is_object($PHPCAS_CLIENT) ) {
print_error('auth_ldap_noconnect_all','auth',$this->config->user_type);
return false;
}
/**
* disconnects from a ldap server
*
*/
function ldap_close() {
$this->ldapconns--;
if($this->ldapconns == 0) {
@ldap_close($this->ldapconnection);
unset($this->ldapconnection);
}
}
/**
* retuns user attribute mappings between moodle and ldap
*
@@ -586,6 +655,12 @@ if ( !is_object($PHPCAS_CLIENT) ) {
*/
function sync_users ($bulk_insert_records = 1000, $do_updates = true) {
global $CFG;
if(empty($this->config->host_url)) {
echo "No LDAP server configured for CAS! Syncing disabled.\n";
return;
}
$textlib = textlib_get_instance();
$droptablesql = array(); /// sql commands to drop the table (because session scope could be a problem for
/// some persistent drivers like ODBTP (mssql) or if this function is invoked
@@ -629,7 +704,7 @@ if ( !is_object($PHPCAS_CLIENT) ) {
print "Connecting to ldap...\n";
$ldapconnection = $this->ldap_connect();
if (!$ldapconnection) {
@ldap_close($ldapconnection);
$this->ldap_close($ldapconnection);
print get_string('auth_ldap_noconnect','auth',$this->config->host_url);
exit;
}
@@ -754,9 +829,9 @@ if ( !is_object($PHPCAS_CLIENT) ) {
$updateuser->id = $user->id;
$updateuser->auth = 'cas';
if (update_record('user', $updateuser)) {
echo "\t"; print_string('auth_dbreviveser', 'auth', array($user->username, $user->id)); echo "\n";
echo "\t"; print_string('auth_dbreviveduser', 'auth', array($user->username, $user->id)); echo "\n";
} else {
echo "\t"; print_string('auth_dbreviveusererror', 'auth', $user->username); echo "\n";
echo "\t"; print_string('auth_dbrevivedusererror', 'auth', $user->username); echo "\n";
}
}
commit_sql();
@@ -878,6 +953,7 @@ if ( !is_object($PHPCAS_CLIENT) ) {
} else {
print "No users to be added\n";
}
$this->ldap_close();
return true;
}
/**
@@ -946,7 +1022,7 @@ if ( !is_object($PHPCAS_CLIENT) ) {
* @return boolean result
*/
function iscreator($username) {
if ((empty($this->config->attrcreators) && empty($this->config->groupecreators)) or empty($this->config->memberattribute)) {
if (empty($this->config->host_url) or (empty($this->config->attrcreators) && empty($this->config->groupecreators)) or empty($this->config->memberattribute)) {
return null;
}
$textlib = textlib_get_instance();
@@ -1016,6 +1092,7 @@ if (!empty($this->config->attrcreators)) {
}
}
}
$this->ldap_close();
return $result;
}
/**
@@ -1055,6 +1132,7 @@ if (!empty($this->config->attrcreators)) {
array_push($fresult, ($users[$i][$this->config->user_attribute][0]) );
}
}
$this->ldap_close();
return $fresult;
}
/**
+51 -5
View File
@@ -48,6 +48,14 @@
$config->multiauth = '';
if (!isset ($config->certificate_check))
$config->certificate_check = '';
if (!isset ($config->certificate_path))
$config->certificate_path = '';
// set to defaults if undefined (LDAP)
if (!isset($config->host_url))
@@ -134,7 +142,7 @@ if (!function_exists('ldap_connect')) { // Is php4-ldap really there?
<table cellspacing="0" cellpadding="5" border="0" align="center">
<table cellspacing="0" cellpadding="5" border="0">
@@ -364,6 +372,44 @@ if (!function_exists('ldap_connect')) { // Is php4-ldap really there?
<tr valign="top" class="required">
<td align="right"><?php print_string('auth_cas_certificate_check_key', 'auth') ?>:</td>
<td>
<?php choose_from_menu ($yesno, 'certificate_check', $config->certificate_check, ''); ?>
</td>
<td><?php print_string('auth_cas_certificate_check', 'auth') ?></td>
</tr>
<tr valign="top" class="required">
<td align="right"><?php print_string('auth_cas_certificate_path_key', 'auth') ?>:</td>
<td>
<input name="certificate_path" type="text" size="30" value="<?php echo $config->certificate_path ?>" />
<?php if (isset($err['certificate_path'])) formerr($err['certificate_path']); ?>
</td>
<td>
<?php print_string('auth_cas_certificate_path', 'auth') ?>
</td>
</tr>
<tr>
<td colspan="2">
@@ -602,7 +648,7 @@ if (!function_exists('ldap_connect')) { // Is php4-ldap really there?
$opt_deref[LDAP_DEREF_ALWAYS] = get_string('yes');
choose_from_menu($opt_deref, 'opt_deref', $config->opt_deref, LDAP_DEREF_NEVER, '');
choose_from_menu($opt_deref, 'opt_deref', $config->opt_deref, '');
if (isset($err['opt_deref'])) formerr($err['opt_deref']);
@@ -722,7 +768,7 @@ if (!function_exists('ldap_connect')) { // Is php4-ldap really there?
<tr valign="top" class="required">
<td align="right"><label for="attrcreators_key"><?php print_string('auth_ldap_attrcreators_key','auth') ?></label></td>
<td align="right"><label for="attrcreators"><?php print_string('auth_ldap_attrcreators_key','auth') ?></label></td>
<td>
@@ -742,7 +788,7 @@ if (!function_exists('ldap_connect')) { // Is php4-ldap really there?
<tr valign="top" class="required">
<td align="right"><label for="groupecreators_key"><?php print_string('auth_ldap_groupecreators_key','auth') ?></label></td>
<td align="right"><label for="groupecreators"><?php print_string('auth_ldap_groupecreators_key','auth') ?></label></td>
<td>
@@ -825,4 +871,4 @@ print_auth_lock_options('cas', $user_fields, $help, true, true);
?>
</table>
</table>
+8 -1
View File
@@ -372,7 +372,7 @@ class auth_plugin_db extends auth_plugin_base {
if ($old_user = get_record('user', 'username', $user->username, 'deleted', 1, 'mnethostid', $user->mnethostid)) {
$user->id = $old_user->id;
set_field('user', 'deleted', 0, 'username', $user->username);
echo "\t"; print_string('auth_dbreviveuser', 'auth', array(stripslashes($user->username), $user->id)); echo "\n";
echo "\t"; print_string('auth_dbreviveduser', 'auth', array(stripslashes($user->username), $user->id)); echo "\n";
} elseif ($id = insert_record ('user',$user)) { // it is truly a new user
echo "\t"; print_string('auth_dbinsertuser','auth',array(stripslashes($user->username), $id)); echo "\n";
// if relevant, tag for password generation
@@ -572,6 +572,13 @@ class auth_plugin_db extends auth_plugin_base {
}
}
function prevent_local_passwords() {
if (!isset($this->config->passtype)) {
return false;
}
return ($this->config->passtype != 'internal');
}
/**
* Returns true if this authentication plugin is 'internal'.
*
+4
View File
@@ -132,6 +132,10 @@ class auth_plugin_email extends auth_plugin_base {
}
}
function prevent_local_passwords() {
return false;
}
/**
* Returns true if this authentication plugin is 'internal'.
*
+4
View File
@@ -144,6 +144,10 @@ class auth_plugin_fc extends auth_plugin_base {
return false;
}
function prevent_local_passwords() {
return true;
}
/**
* Returns true if this authentication plugin is 'internal'.
*
+2 -1
View File
@@ -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
*/
+4
View File
@@ -81,6 +81,10 @@ class auth_plugin_imap extends auth_plugin_base {
return false; // No match
}
function prevent_local_passwords() {
return true;
}
/**
* Returns true if this authentication plugin is 'internal'.
*
+44 -13
View File
@@ -109,19 +109,19 @@ class auth_plugin_ldap extends auth_plugin_base {
//if ldap_user_dn is empty, user does not exist
if (!$ldap_user_dn) {
ldap_close($ldapconnection);
$this->ldap_close();
return false;
}
// Try to bind with current username and password
$ldap_login = @ldap_bind($ldapconnection, $ldap_user_dn, $extpassword);
ldap_close($ldapconnection);
$this->ldap_close();
if ($ldap_login) {
return true;
}
}
else {
@ldap_close($ldapconnection);
$this->ldap_close();
print_error('auth_ldap_noconnect','auth','',$this->config->host_url);
}
return false;
@@ -195,7 +195,7 @@ class auth_plugin_ldap extends auth_plugin_base {
}
}
@ldap_close($ldapconnection);
$this->ldap_close();
return $result;
}
@@ -301,7 +301,7 @@ class auth_plugin_ldap extends auth_plugin_base {
print_error('auth_ldap_unsupportedusertype','auth','',$this->config->user_type);
}
$uadd = ldap_add($ldapconnection, $this->config->user_attribute.'="'.$this->ldap_addslashes($userobject->username).','.$this->config->create_context.'"', $newuser);
ldap_close($ldapconnection);
$this->ldap_close();
return $uadd;
}
@@ -416,7 +416,7 @@ class auth_plugin_ldap extends auth_plugin_base {
$ldapconnection = $this->ldap_connect();
if (!$ldapconnection) {
@ldap_close($ldapconnection);
$this->ldap_close();
print get_string('auth_ldap_noconnect','auth',$this->config->host_url);
exit;
}
@@ -556,9 +556,9 @@ class auth_plugin_ldap extends auth_plugin_base {
$updateuser->id = $user->id;
$updateuser->auth = 'ldap';
if (update_record('user', $updateuser)) {
echo "\t"; print_string('auth_dbreviveser', 'auth', array($user->username, $user->id)); echo "\n";
echo "\t"; print_string('auth_dbreviveduser', 'auth', array($user->username, $user->id)); echo "\n";
} else {
echo "\t"; print_string('auth_dbreviveusererror', 'auth', $user->username); echo "\n";
echo "\t"; print_string('auth_dbrevivedusererror', 'auth', $user->username); echo "\n";
}
}
commit_sql();
@@ -700,6 +700,7 @@ class auth_plugin_ldap extends auth_plugin_base {
} else {
print "No users to be added\n";
}
$this->ldap_close();
return true;
}
@@ -794,7 +795,7 @@ class auth_plugin_ldap extends auth_plugin_base {
error ('auth: ldap user_activate() does not support selected usertype:"'.$this->config->user_type.'" (..yet)');
}
$result = ldap_modify($ldapconnection, $userdn, $newinfo);
ldap_close($ldapconnection);
$this->ldap_close();
return $result;
}
@@ -819,7 +820,7 @@ class auth_plugin_ldap extends auth_plugin_base {
error ('auth: ldap user_disable() does not support selected usertype (..yet)');
}
$result = ldap_modify($ldapconnection, $userdn, $newinfo);
ldap_close($ldapconnection);
$this->ldap_close();
return $result;
}*/
@@ -1004,11 +1005,11 @@ class auth_plugin_ldap extends auth_plugin_base {
}
} else {
error_log("ERROR:No user found in LDAP");
@ldap_close($ldapconnection);
$this->ldap_close();
return false;
}
@ldap_close($ldapconnection);
$this->ldap_close();
return true;
@@ -1132,7 +1133,7 @@ class auth_plugin_ldap extends auth_plugin_base {
}
@ldap_close($ldapconnection);
$this->ldap_close();
return $result;
}
@@ -1365,6 +1366,16 @@ class auth_plugin_ldap extends auth_plugin_base {
* @return connection result
*/
function ldap_connect($binddn='',$bindpwd='') {
// Cache ldap connections (they are expensive to set up
// and can drain the TCP/IP ressources on the server if we
// are syncing a lot of users (as we try to open a new connection
// to get the user details). This is the least invasive way
// to reuse existing connections without greater code surgery.
if(!empty($this->ldapconnection)) {
$this->ldapconns++;
return $this->ldapconnection;
}
//Select bind password, With empty values use
//ldap_bind_* variables or anonymous bind if ldap_bind_* are empty
if ($binddn == '' and $bindpwd == '') {
@@ -1411,6 +1422,10 @@ class auth_plugin_ldap extends auth_plugin_base {
}
if ($bindresult) {
// Set the connection counter so we can call PHP's ldap_close()
// when we call $this->ldap_close() for the last 'open' connection.
$this->ldapconns = 1;
$this->ldapconnection = $connresult;
return $connresult;
}
@@ -1422,6 +1437,18 @@ class auth_plugin_ldap extends auth_plugin_base {
return false;
}
/**
* disconnects from a ldap server
*
*/
function ldap_close() {
$this->ldapconns--;
if($this->ldapconns == 0) {
@ldap_close($this->ldapconnection);
unset($this->ldapconnection);
}
}
/**
* retuns dn of username
*
@@ -1580,6 +1607,10 @@ class auth_plugin_ldap extends auth_plugin_base {
return ($fresult);
}
function prevent_local_passwords() {
return !empty($this->config->preventpassindb);
}
/**
* Returns true if this authentication plugin is 'internal'.
*
+3 -3
View File
@@ -16,7 +16,7 @@
if (!isset($config->opt_deref))
{ $config->opt_deref = LDAP_DEREF_NEVER; }
if (!isset($config->preventpassindb))
{ $config->preventpassindb = 0; }
{ $config->preventpassindb = 1; }
if (!isset($config->bind_dn))
{$config->bind_dn = ''; }
if (!isset($config->bind_pw))
@@ -86,7 +86,7 @@ if (!function_exists('ldap_connect')) { // Is php4-ldap really there?
<td align="right"><label for="menuversion"><?php print_string('auth_ldap_version_key','auth') ?></label></td>
<td>
<?php
$varsions = array();
$versions = array();
$versions[2] = '2';
$versions[3] = '3';
choose_from_menu($versions, 'version', $config->version, '');
@@ -193,7 +193,7 @@ if (!function_exists('ldap_connect')) { // Is php4-ldap really there?
$opt_deref = array();
$opt_deref[LDAP_DEREF_NEVER] = get_string('no');
$opt_deref[LDAP_DEREF_ALWAYS] = get_string('yes');
choose_from_menu($opt_deref, 'opt_deref', $config->opt_deref, LDAP_DEREF_NEVER, '');
choose_from_menu($opt_deref, 'opt_deref', $config->opt_deref, '');
if (isset($err['opt_deref'])) formerr($err['opt_deref']);
?>
</td>
+4
View File
@@ -62,6 +62,10 @@ class auth_plugin_manual extends auth_plugin_base {
return update_internal_user_password($user, $newpassword);
}
function prevent_local_passwords() {
return false;
}
/**
* Returns true if this authentication plugin is 'internal'.
*
+4
View File
@@ -590,6 +590,10 @@ class auth_plugin_mnet extends auth_plugin_base {
delete_records_select('mnet_enrol_assignments', $whereclause);
}
function prevent_local_passwords() {
return true;
}
/**
* Returns true if this authentication plugin is 'internal'.
*
+4
View File
@@ -64,6 +64,10 @@ class auth_plugin_nntp extends auth_plugin_base {
return false;
}
function prevent_local_passwords() {
return true;
}
/**
* Returns true if this authentication plugin is 'internal'.
*
+5
View File
@@ -46,6 +46,11 @@ class auth_plugin_nologin extends auth_plugin_base {
return false;
}
function prevent_local_passwords() {
// just in case, we do not want to loose the passwords
return false;
}
/**
* No external data sync.
*
+4
View File
@@ -62,6 +62,10 @@ class auth_plugin_none extends auth_plugin_base {
return update_internal_user_password($user, $newpassword);
}
function prevent_local_passwords() {
return false;
}
/**
* Returns true if this authentication plugin is 'internal'.
*
+4
View File
@@ -77,6 +77,10 @@ class auth_plugin_pam extends auth_plugin_base {
}
}
function prevent_local_passwords() {
return true;
}
/**
* Returns true if this authentication plugin is 'internal'.
*
+4
View File
@@ -81,6 +81,10 @@ class auth_plugin_pop3 extends auth_plugin_base {
return false; // No matches found
}
function prevent_local_passwords() {
return true;
}
/**
* Returns true if this authentication plugin is 'internal'.
*
+4
View File
@@ -80,6 +80,10 @@ class auth_plugin_radius extends auth_plugin_base {
$rauth->close();
}
function prevent_local_passwords() {
return true;
}
/**
* Returns true if this authentication plugin is 'internal'.
*
+4
View File
@@ -134,6 +134,10 @@ class auth_plugin_shibboleth extends auth_plugin_base {
return $moodleattributes;
}
function prevent_local_passwords() {
return true;
}
/**
* Returns true if this authentication plugin is 'internal'.
*
+1 -1
View File
@@ -115,7 +115,7 @@
raise_memory_limit("192M");
//Call the form, depending the step we are
if (!$launch) {
if (!$launch or !data_submitted() or !confirm_sesskey()) {
// if we're at the start, clear the cache of prefs
if (isset($SESSION->backupprefs[$course->id])) {
unset($SESSION->backupprefs[$course->id]);
+16
View File
@@ -4,6 +4,9 @@
//Check login
require_login();
// Init backupuserinfo
$backupuserinfo = false;
if (!empty($course->id)) {
if (!has_capability('moodle/site:backup', get_context_instance(CONTEXT_COURSE, $course->id))) {
if (empty($to)) {
@@ -14,10 +17,12 @@
}
}
}
$backupuserinfo = has_capability('moodle/backup:userinfo', get_context_instance(CONTEXT_COURSE, $course->id));
} else {
if (!has_capability('moodle/site:backup', get_context_instance(CONTEXT_SYSTEM, SITEID))) {
error("You need to be an admin user to use this page.", "$CFG->wwwroot/login/index.php");
}
$backupuserinfo = has_capability('moodle/backup:userinfo', get_context_instance(CONTEXT_SYSTEM));
}
@@ -38,6 +43,7 @@
<form id="form" method="post" action="backup.php">
<table cellpadding="5" style="text-align:center;margin-left:auto;margin-right:auto">
<?php
echo '<input type="hidden" name="sesskey" value="'.sesskey().'" />';
if (empty($to)) {
//Now print the Backup Name tr
@@ -58,6 +64,16 @@
}
// Re-enforce 'moodle/site:backup' at system context to be able to backup all users
if ($backupprefs->backup_users == 0 and !has_capability('moodle/site:backup', get_context_instance(CONTEXT_SYSTEM))) {
$backupprefs->backup_users = 1; // users => course
}
// Re-enforce moodle/backup:userinfo capability
if (!$backupuserinfo) {
$backupprefs->backup_users = 2; // users => none
}
//Here we check if backup_users = None. Then, we switch off every module
//user info, user_files, logs and exercises, workshop and messages backups. A Warning is showed to
//inform the user.
+30 -17
View File
@@ -4,6 +4,9 @@
//Check login
require_login();
//Init backupuserinfo
$backupuserinfo = false;
if (!empty($course->id)) {
if (!has_capability('moodle/site:backup', get_context_instance(CONTEXT_COURSE, $course->id))) {
if (empty($to)) {
@@ -14,10 +17,12 @@
}
}
}
$backupuserinfo = has_capability('moodle/backup:userinfo', get_context_instance(CONTEXT_COURSE, $course->id));
} else {
if (!has_capability('moodle/site:backup', get_context_instance(CONTEXT_SYSTEM, SITEID))) {
error("You need to be an admin user to use this page.", "$CFG->wwwroot/login/index.php");
}
$backupuserinfo = has_capability('moodle/backup:userinfo', get_context_instance(CONTEXT_SYSTEM));
}
//Check site
@@ -115,6 +120,8 @@ function selectItemInCheckboxByName(formId, checkName, checked ) {
<form id="form1" method="post" action="backup.php">
<table cellpadding="5" style="margin-left:auto;margin-right:auto;">
<?php
echo '<input type="hidden" name="sesskey" value="'.sesskey().'" />';
/// Acummulator for hidden options and proper XHTML output
$hidden_options = '';
//Now, check modules and info and show posibilities
@@ -127,12 +134,16 @@ function selectItemInCheckboxByName(formId, checkName, checked ) {
echo "<a href=\"javascript:void(0);\" onclick=\"selectItemInCheckboxByName('form1', 'backup_', true);\">". get_string("all")."</a>/";
echo "<a href=\"javascript:void(0);\" onclick=\"selectItemInCheckboxByName('form1', 'backup_', false);\">". get_string("none")."</a>";
echo "</td>";
echo "<td align=\"right\">";
echo '<b>&nbsp;</b>';
echo "</td><td>";
echo "<a href=\"javascript:void(0);\" onclick=\"selectItemInCheckboxByName('form1', 'backup_user_info_', true);\">". get_string("all")."</a>/";
echo "<a href=\"javascript:void(0);\" onclick=\"selectItemInCheckboxByName('form1', 'backup_user_info_', false);\">". get_string("none")."</a>";
echo "</td>";
if (empty($to) and $backupuserinfo) {
echo "<td align=\"right\">";
echo '<b>&nbsp;</b>';
echo "</td><td>";
echo "<a href=\"javascript:void(0);\" onclick=\"selectItemInCheckboxByName('form1', 'backup_user_info_', true);\">". get_string("all")."</a>/";
echo "<a href=\"javascript:void(0);\" onclick=\"selectItemInCheckboxByName('form1', 'backup_user_info_', false);\">". get_string("none")."</a>";
echo "</td>";
} else {
echo "<td colspan=\"2\">&nbsp;</td>";
}
echo "</tr>";
echo "<tr><td colspan=\"4\"><hr /></td></tr>";
$currentrow = 0;
@@ -155,8 +166,8 @@ function selectItemInCheckboxByName(formId, checkName, checked ) {
echo "</td><td align=\"right\">&nbsp;";
echo "</td><td>";
$var = "backup_user_info_".$modname;
if (empty($to)) {
$backup_user_options[0] = get_string("withoutuserdata");
if (empty($to) and $backupuserinfo) {
$backup_user_options[0] = get_string("withoutuserdata");
$backup_user_options[1] = get_string("withuserdata");
//choose_from_menu($backup_user_options, $var, $$var, "");
print_checkbox($var, $$var, $$var, get_string("userdata"),'','selectItemInCheckboxByName(\'form1\',\'backup_user_info_'.$modname.'\',this.checked)');
@@ -177,7 +188,7 @@ function selectItemInCheckboxByName(formId, checkName, checked ) {
echo '</td><td align="right">&nbsp;';
$var = 'backup_user_info_'.$modname.'_instance_'.$instance->id;
$$var = optional_param($var,1);
if (empty($to)) {
if (empty($to) and $backupuserinfo) {
print_checkbox($var,$$var,$$var,get_string('userdata'),'','this.form.elements[\'backup_user_info_'.$modname.'\'].checked=1;');
} else {
echo '<input type="hidden" name="'.$var.'" value="0" />';
@@ -207,23 +218,25 @@ function selectItemInCheckboxByName(formId, checkName, checked ) {
$hidden_options .= '<input type="hidden" name="backup_metacourse" value="0" />';
}
if (empty($to)) {
if (empty($to) and $backupuserinfo) {
//Now print the Users tr
echo "<tr>";
echo "<td align=\"right\" colspan=\"2\"><b>";
echo get_string("users").":";
echo "</b></td><td colspan=\"2\">";
$user_options[0] = get_string("all");
if (has_capability('moodle/site:backup', get_context_instance(CONTEXT_SYSTEM))) {
$user_options[0] = get_string("all");
}
$user_options[1] = get_string("course");
$user_options[2] = get_string("none");
choose_from_menu($user_options, "backup_users", $backup_users, "");
echo "</td></tr>";
}
else {
$hidden_options .= '<input type="hidden" name="backup_users" value="0" />';
$hidden_options .= '<input type="hidden" name="backup_users" value="2" />';
}
if (empty($to)) {
if (empty($to) and $backupuserinfo) {
//Now print the Logs tr
echo "<tr>";
echo "<td align=\"right\" colspan=\"2\"><b>";
@@ -237,8 +250,8 @@ function selectItemInCheckboxByName(formId, checkName, checked ) {
else {
$hidden_options .= '<input type="hidden" name="backup_logs" value="0" />';
}
if (empty($to)) {
if (empty($to) and $backupuserinfo) {
//Now print the User Files tr
echo "<tr>";
echo "<td align=\"right\" colspan=\"2\"><b>";
@@ -262,7 +275,7 @@ function selectItemInCheckboxByName(formId, checkName, checked ) {
choose_from_menu($course_file_options, "backup_course_files", $backup_course_files, "");
echo "</td></tr>";
if (empty($to) && $course->id == SITEID) {
if (empty($to) and $backupuserinfo and $course->id == SITEID) {
//If we are in a SITEID backup print the Messages tr
echo "<tr>";
echo "<td align=\"right\" colspan=\"2\"><b>";
+8 -20
View File
@@ -82,8 +82,8 @@
//Returns every needed user (participant) in a course
//It uses the xxxx_get_participants() function
//plus users needed to backup scales.
//WARNING: It returns only NEEDED users, not every
//plus users needed to backup messages
//WARNING: It returns only NEEDED users, not every
// every student and teacher in the course, so it
//must be merged with backup_get_enrrolled_users !!
@@ -119,21 +119,6 @@
}
}
//Now, add scale users (from site and course scales)
//Get users
$scaleusers = get_records_sql("SELECT DISTINCT userid,userid
FROM {$CFG->prefix}scale
WHERE courseid = '0' or courseid = '$courseid'");
//Add scale users to results
if ($scaleusers) {
foreach ($scaleusers as $scaleuser) {
//If userid != 0
if ($scaleuser->userid != 0) {
$result[$scaleuser->userid]->id = $scaleuser->userid;
}
}
}
//Now, add message users if necessary
if ($includemessages) {
include_once("$CFG->dirroot/message/lib.php");
@@ -163,7 +148,7 @@
// get all users with moodle/course:view capability, this will include people
// assigned at cat level, or site level
// but it should be ok if they have no direct assignment at course, mod, block level
return get_users_by_capability(get_context_instance(CONTEXT_COURSE, $courseid), 'moodle/course:view');
return get_users_by_capability(get_context_instance(CONTEXT_COURSE, $courseid), 'moodle/course:view', '', '', '', '', '', '', false);
}
//Returns all users ids (every record in users table)
@@ -1102,7 +1087,11 @@
fwrite ($bf,full_tag("POLICYAGREED",4,false,$user->policyagreed));
fwrite ($bf,full_tag("DELETED",4,false,$user->deleted));
fwrite ($bf,full_tag("USERNAME",4,false,$user->username));
fwrite ($bf,full_tag("PASSWORD",4,false,$user->password));
// Prevent user passwords in backup files unless
// $CFG->includeuserpasswordsinbackup is defined. MDL-20838
if (!empty($CFG->includeuserpasswordsinbackup)) {
fwrite ($bf,full_tag("PASSWORD",4,false,$user->password));
}
fwrite ($bf,full_tag("IDNUMBER",4,false,$user->idnumber));
fwrite ($bf,full_tag("FIRSTNAME",4,false,$user->firstname));
fwrite ($bf,full_tag("LASTNAME",4,false,$user->lastname));
@@ -1128,7 +1117,6 @@
fwrite ($bf,full_tag("LASTLOGIN",4,false,$user->lastlogin));
fwrite ($bf,full_tag("CURRENTLOGIN",4,false,$user->currentlogin));
fwrite ($bf,full_tag("LASTIP",4,false,$user->lastip));
fwrite ($bf,full_tag("SECRET",4,false,$user->secret));
fwrite ($bf,full_tag("PICTURE",4,false,$user->picture));
fwrite ($bf,full_tag("URL",4,false,$user->url));
fwrite ($bf,full_tag("DESCRIPTION",4,false,$user->description));
+2
View File
@@ -144,6 +144,7 @@
if (!empty($SESSION->restore->importing)) {
// set up all the config stuff and skip asking the user about it.
restore_setup_for_check($SESSION->restore,$backup_unique_code);
require_sesskey();
include_once("restore_execute.html");
} else {
include_once("restore_form.html");
@@ -159,6 +160,7 @@
}
//Unset this for the future
unset($SESSION->cancontinue);
require_sesskey();
include_once("restore_execute.html");
}
print_simple_box_end();
+41 -2
View File
@@ -18,8 +18,8 @@
if ($form1 = data_submitted()) {
$currentcourseshortname = $course_header->course_shortname; //"store_ShortName";
$course_header->course_shortname = stripslashes_safe($form1->shortname); //"update_ShortName";
$course_header->course_fullname = stripslashes_safe($form1->fullname); //"update_FullName";
$course_header->course_shortname = !empty($form1->shortname) ? stripslashes_safe($form1->shortname) : ''; //"update_ShortName";
$course_header->course_fullname = !empty($form1->fullname) ? stripslashes_safe($form1->fullname) : ''; //"update_FullName"
/// Roll dates only if the backup course has a start date
/// (some formats like main page, social..., haven't it and rolling dates
/// from 0 produces crazy dates. MDL-10125 and we have passed some custom startyear/month/day. MDL-12922
@@ -176,15 +176,21 @@
//Check login
require_login();
//Init restoreuserinfo
$restoreuserinfo = false;
//Check admin
if (!empty($id)) {
if (!has_capability('moodle/site:restore', get_context_instance(CONTEXT_COURSE, $id))) {
error("You need to be a teacher or admin user to use this page.", "$CFG->wwwroot/login/index.php");
}
$restoreuserinfo = has_capability('moodle/restore:userinfo', get_context_instance(CONTEXT_COURSE, $id));
} else {
if (!has_capability('moodle/site:restore', get_context_instance(CONTEXT_SYSTEM, SITEID))) {
error("You need to be an admin user to use this page.", "$CFG->wwwroot/login/index.php");
}
$restoreuserinfo = has_capability('moodle/restore:userinfo', get_context_instance(CONTEXT_SYSTEM));
}
//Check site
@@ -275,6 +281,38 @@
$restore->users = 1;
}
}
// Re-enforce 'moodle/site:restore' at system context to be able to restore all users
if ($restore->users == 0 and !has_capability('moodle/site:restore', get_context_instance(CONTEXT_SYSTEM))) {
$restore->users = 1; // users => course
}
// Re-enforce moodle/restore:userinfo capability
if (!$restoreuserinfo) {
$userinfocheck = true;
// Confirm that all the settings are properly set to no users
// if anything is wrong, message and stop
// First global settings
if ($restore->users != 2 or $restore->user_files or $restore->messages) {
$userinfocheck = false;
// Now all modules userinfo flag
} else {
$mods = $restore->mods;
foreach ($mods as $mod) {
if ($mod->userinfo) {
$userinfocheck = false;
}
}
}
if (!$userinfocheck) { // Something was wrong
echo get_string ('restoreuserinfofailed');
echo "<hr noshade size=\"1\">";
$show_continue_button = false;
}
}
//Save the restore session object
$SESSION->restore = $restore;
if ($show_continue_button) {
@@ -284,6 +322,7 @@
$hidden["launch"] = "execute";
$hidden["file"] = $file;
$hidden["id"] = $id;
$hidden["sesskey"] = sesskey();
print_string('longtimewarning','admin');
if ($restore->users && !empty($info->mnet_externalusers)
+124 -107
View File
@@ -21,15 +21,20 @@
//Check login
require_login();
//Init restoreuserinfo
$restoreuserinfo = false;
//Check admin
if (!empty($id)) {
if (!has_capability('moodle/site:restore', get_context_instance(CONTEXT_COURSE, $id))) {
error("You need to be a teacher or admin user to use this page.", "$CFG->wwwroot/login/index.php");
}
$restoreuserinfo = has_capability('moodle/restore:userinfo', get_context_instance(CONTEXT_COURSE, $id));
} else {
if (!has_capability('moodle/site:restore', get_context_instance(CONTEXT_SYSTEM, SITEID))) {
error("You need to be an admin user to use this page.", "$CFG->wwwroot/login/index.php");
}
$restoreuserinfo = has_capability('moodle/restore:userinfo', get_context_instance(CONTEXT_SYSTEM));
}
//Check site
@@ -60,8 +65,10 @@
}
//Check include user info
$var = "restore_user_info_".$modname;
if (!isset($$var)) {
if (!isset($$var) && $restoreuserinfo) {
$$var = 1;
} else {
$$var = 0;
}
}
}
@@ -274,14 +281,18 @@ function selectItemInCheckboxByName(formId, checkName, checked ) {
echo "<a href=\"javascript:void(0);\" onclick=\"selectItemInCheckboxByName('form1', 'restore_', false);\">".
get_string("none")."</a>";
echo "</td>";
echo "<td align=\"right\">";
echo '<b>&nbsp;</b>';
echo "</td><td>";
echo "<a href=\"javascript:void(0);\" onclick=\"selectItemInCheckboxByName('form1', 'restore_user_info_', true);\">".
get_string("all")."</a>/";
echo "<a href=\"javascript:void(0);\" onclick=\"selectItemInCheckboxByName('form1', 'restore_user_info_', false);\">".
get_string("none")."</a>";
echo "</td>";
if ($restoreuserinfo) {
echo "<td align=\"right\">";
echo '<b>&nbsp;</b>';
echo "</td><td>";
echo "<a href=\"javascript:void(0);\" onclick=\"selectItemInCheckboxByName('form1', 'restore_user_info_', true);\">".
get_string("all")."</a>/";
echo "<a href=\"javascript:void(0);\" onclick=\"selectItemInCheckboxByName('form1', 'restore_user_info_', false);\">".
get_string("none")."</a>";
echo "</td>";
} else {
echo "<td colspan=\"2\">&nbsp;</td>";
}
echo "</tr>";
echo "<tr><td colspan=\"4\"><hr /></td></tr>";
$currentrow = 0;
@@ -311,7 +322,7 @@ function selectItemInCheckboxByName(formId, checkName, checked ) {
//without user data
echo "</td><td align=\"right\">&nbsp;";
echo "</td><td>";
if ($info->mods[$modname]->userinfo == "true") {
if ($info->mods[$modname]->userinfo == "true" && $restoreuserinfo) {
$restore_user_options[1] = get_string("yes");
$restore_user_options[0] = get_string("no");
//choose_from_menu($restore_user_options, $user_info_var, $$user_info_var, "");
@@ -336,7 +347,7 @@ function selectItemInCheckboxByName(formId, checkName, checked ) {
echo '</td><td align="right">&nbsp;';
$var = 'restore_user_info_'.$modname.'_instance_'.$instance->id;
$$var = optional_param($var,1);
if ($info->mods[$modname]->instances[$instance->id]->userinfo == 'true') {
if (!empty($info->mods[$modname]->instances) && ($info->mods[$modname]->instances[$instance->id]->userinfo == 'true') && $restoreuserinfo) {
print_checkbox($var,$$var,$$var,get_string('userdata'),'','this.form.elements[\'restore_user_info_'.$modname.'\'].checked=1;');
} else {
echo '<input type="hidden" name="'.$var.'" value="0" />';
@@ -386,9 +397,10 @@ function selectItemInCheckboxByName(formId, checkName, checked ) {
echo get_string("users").":";
echo "</b></td><td colspan=\"2\">";
//If some user is present in the backup file
if ($info->backup_users == "all" or $info->backup_users == "course") {
//If all users are in the backup file
if ($info->backup_users == "all") {
if (($info->backup_users == "all" or $info->backup_users == "course") and $restoreuserinfo) {
$user_options = array();
//If all users are in the backup file and user has 'moodle/site:restore' at system level
if ($info->backup_users == "all" and has_capability('moodle/site:restore', get_context_instance(CONTEXT_SYSTEM))) {
$user_options[0] = get_string("all");
}
$user_options[1] = get_string("course");
@@ -407,7 +419,8 @@ function selectItemInCheckboxByName(formId, checkName, checked ) {
echo get_string("logs").":";
echo "</b></td><td colspan=\"2\">";
//If logs are in the backup file, show menu, else fixed to no
if ($info->backup_logs == "true") {
if ($info->backup_logs == "true" and $restoreuserinfo) {
$log_options = array();
$log_options[0] = get_string("no");
$log_options[1] = get_string("yes");
choose_from_menu($log_options, "restore_logs", $restore_logs, "");
@@ -423,9 +436,10 @@ function selectItemInCheckboxByName(formId, checkName, checked ) {
echo get_string ("userfiles").":";
echo "</b></td><td colspan=\"2\">";
//If user files are in the backup file, show menu, else fixed to no
if ($info->backup_user_files == "true") {
$user_file_options[0] = get_string("no");
$user_file_options[1] = get_string("yes");
if ($info->backup_user_files == "true" and $restoreuserinfo) {
$user_file_options = array();
$user_file_options[0] = get_string("no");
$user_file_options[1] = get_string("yes");
choose_from_menu($user_file_options, "restore_user_files", $restore_user_files, "");
} else {
echo get_string("no");
@@ -454,11 +468,10 @@ function selectItemInCheckboxByName(formId, checkName, checked ) {
//Now print the Messages tr
echo "<tr>";
echo "<td align=\"right\" colspan=\"2\"><b>";
//This tr is slighty different. Everything becomes hidden if
//we haven't messages is the backup, to avoid confusions to users.
//If messages are in the backup file, show menu, else fixed to no and show nothing
if ($info->backup_messages == "true") {
if (isset($info->backup_messages) && $info->backup_messages == "true" && !empty($CFG->messaging) and $restoreuserinfo) {
echo get_string ('messages','message').":";
echo "</b></td><td colspan=\"2\">";
$message_options[0] = get_string("no");
@@ -475,104 +488,106 @@ function selectItemInCheckboxByName(formId, checkName, checked ) {
<hr/>
<?php
// Only show the roles mapping if restore of user info is allowed
if ($restoreuserinfo) {
print_heading(get_string('rolemappings'));
$xml_file = $CFG->dataroot."/temp/backup/".$backup_unique_code."/moodle.xml";
print_heading(get_string('rolemappings'));
$xml_file = $CFG->dataroot."/temp/backup/".$backup_unique_code."/moodle.xml";
$info = restore_read_xml_info($xml_file);
$info = restore_read_xml_info($xml_file);
// fix for MDL-9068, front page course is just a normal course
$siterolesarray = get_assignable_roles (get_context_instance(CONTEXT_COURSE, $course->id), "shortname");
$siterolesnamearray = get_assignable_roles (get_context_instance(CONTEXT_COURSE, $course->id), "name");
$allroles = get_records('role');
// fix for MDL-9068, front page course is just a normal course
$siterolesarray = get_assignable_roles (get_context_instance(CONTEXT_COURSE, $course->id), "shortname");
$siterolesnamearray = get_assignable_roles (get_context_instance(CONTEXT_COURSE, $course->id), "name");
$allroles = get_records('role');
echo ('<table width="100%" class="restore-form-instances">');
echo ('<tr><td align="right" style="width:50%"><b>'.get_string('sourcerole').'</b></td><td align="left" style="width:50%"><b>'.get_string('targetrole').'</b></td></tr>');
echo ('<table width="100%" class="restore-form-instances">');
echo ('<tr><td align="right" style="width:50%"><b>'.get_string('sourcerole').'</b></td><td align="left" style="width:50%"><b>'.get_string('targetrole').'</b></td></tr>');
if ($info->backup_moodle_version < 2006092801) {
// 1.6 and below backup
if ($info->backup_moodle_version < 2006092801) {
// 1.6 and below backup
/// Editting teacher
echo ('<tr><td align="right">');
print_string('defaultcourseteacher');
echo ('</td><td algin="left">');
// get the first teacheredit legacy
$roles = get_roles_with_capability('moodle/legacy:editingteacher', CAP_ALLOW, get_context_instance(CONTEXT_SYSTEM, SITEID));
/// Editting teacher
echo ('<tr><td align="right">');
echo '<label for="menudefaultteacheredit">'.get_string ('defaultcourseteacher').'</label>';
echo ('</td><td algin="left">');
$editteacher = array_shift($roles);
choose_from_menu ($siterolesarray, "defaultteacheredit", $editteacher->id, 'new role', '', '0');
echo ('</td></tr>');
/// Non-editting teacher
echo ('<tr><td align="right">');
print_string('noneditingteacher');
echo ('</td><td algin="left">');
// get the first teacheredit legacy
$roles = get_roles_with_capability('moodle/legacy:teacher', CAP_ALLOW, get_context_instance(CONTEXT_SYSTEM, SITEID));
$teacher = array_shift($roles);
choose_from_menu ($siterolesarray, "defaultteacher", $teacher->id, 'new role', '', '0');
echo ('</td></tr>');
/// Student
echo ('<tr><td align="right">');
print_string('defaultcoursestudent');
echo ('</td><td algin="left">');
// get the first teacheredit legacy
$roles = get_roles_with_capability('moodle/legacy:student', CAP_ALLOW, get_context_instance(CONTEXT_SYSTEM, SITEID));
$studentrole = array_shift($roles);
choose_from_menu ($siterolesarray, "defaultstudent", $studentrole->id, 'new role', '', '0');
echo ('</td></tr>');
} else {
// 1.7 and above backup
$roles = restore_read_xml_roles($xml_file);
if (!empty($roles->roles)) { // possible to have course with no roles
foreach ($siterolesarray as $siteroleid=>$siteroleshortname) {
$siteroleschoicearray[$siteroleid] = $siterolesnamearray[$siteroleid]." (". $siterolesarray[$siteroleid].")";
}
// get the first teacheredit legacy
$roles = get_roles_with_capability('moodle/legacy:editingteacher', CAP_ALLOW, get_context_instance(CONTEXT_SYSTEM));
foreach ($roles->roles as $roleid=>$role) {
$mappableroles = $siteroleschoicearray;
echo ('<tr><td align="right">');
echo $role->name." (".($role->shortname).")";
echo ('</td><td align="left">');
$editteacher = reset($roles);
choose_from_menu ($siterolesarray, "defaultteacheredit", $editteacher->id, 'new role', '', '0');
echo ('</td></tr>');
/// first, we see if any exact role definition is found
/// if found, that is the only option of restoring to
if ($samerole = restore_samerole($roleid, $role)) {
$matchrole = $samerole->id;
// if an exact role is found, it does not matter whether this user can assign this role or not,
// this will be presented as a valid option regardless
$mappableroles[$samerole->id] = $allroles[$samerole->id]->name." (". $allroles[$samerole->id]->shortname.")";
} else {
// no exact role found, let's try to match shortname
// this is useful in situations where basic roles differ slightly in definition
$matchrole = 0;
foreach ($siterolesarray as $siteroleid=>$siteroleshortname) {
if ($siteroleshortname == $role->shortname) {
$matchrole = $siteroleid;
break;
/// Non-editting teacher
echo ('<tr><td align="right">');
echo '<label for="menudefaultteacher">'.get_string ('noneditingteacher').'</label>';
print_string('noneditingteacher');
echo ('</td><td algin="left">');
// get the first teacheredit legacy
$roles = get_roles_with_capability('moodle/legacy:teacher', CAP_ALLOW, get_context_instance(CONTEXT_SYSTEM));
$teacher = reset($roles);
choose_from_menu ($siterolesarray, "defaultteacher", $teacher->id, 'new role', '', '0');
echo ('</td></tr>');
/// Student
echo ('<tr><td align="right">');
echo '<label for="menudefaultstudent">'.get_string ('defaultcoursestudent').'</label>';
echo ('</td><td algin="left">');
// get the first teacheredit legacy
$roles = get_roles_with_capability('moodle/legacy:student', CAP_ALLOW, get_context_instance(CONTEXT_SYSTEM));
$studentrole = array_shift($roles);
choose_from_menu ($siterolesarray, "defaultstudent", $studentrole->id, 'new role', '', '0');
echo ('</td></tr>');
} else {
// 1.7 and above backup
$roles = restore_read_xml_roles($xml_file);
if (!empty($roles->roles)) { // possible to have course with no roles
foreach ($siterolesarray as $siteroleid=>$siteroleshortname) {
$siteroleschoicearray[$siteroleid] = $siterolesnamearray[$siteroleid]." (". $siterolesarray[$siteroleid].")";
}
foreach ($roles->roles as $roleid=>$role) {
$mappableroles = $siteroleschoicearray;
echo ('<tr><td align="right">');
echo '<label for="menuroles_'.$roleid.'">'.format_string($role->name)." (".($role->shortname).")".'</label>';
echo ('</td><td align="left">');
/// first, we see if any exact role definition is found
/// if found, that is the only option of restoring to
if ($samerole = restore_samerole($roleid, $role)) {
$matchrole = $samerole->id;
// if an exact role is found, it does not matter whether this user can assign this role or not,
// this will be presented as a valid option regardless
$mappableroles[$samerole->id] = format_string($allroles[$samerole->id]->name)." (". $allroles[$samerole->id]->shortname.")";
} else {
// no exact role found, let's try to match shortname
// this is useful in situations where basic roles differ slightly in definition
$matchrole = 0;
foreach ($siterolesarray as $siteroleid=>$siteroleshortname) {
if ($siteroleshortname == $role->shortname) {
$matchrole = $siteroleid;
break;
}
}
}
choose_from_menu ($mappableroles, "roles_".$roleid, $matchrole, 'new role', '', '0');
echo ('</td></tr>');
}
choose_from_menu ($mappableroles, "roles_".$roleid, $matchrole, 'new role', '', '0');
echo ('</td></tr>');
}
}
} // end else
echo ('</table>'); // end of role mappings table
} // end else
echo ('</table>'); // end of role mappings table
}
?>
<br />
@@ -588,8 +603,10 @@ echo ('</table>'); // end of role mappings table
<?php
/*
* If there is a role with exactly the same definition, we pull it out from db
/**
*
* @param integer $roleid the id that the role in the backup files had on the old server.
* @param object $role the rest of the definition of the role from the backup file.
*/
function restore_samerole($roleid, $role) {
global $CFG;
+72 -38
View File
@@ -974,6 +974,11 @@
//Get section id when restoring in existing course
$rec = get_record("course_sections","course",$restore->course_id,
"section",$section->section);
//If section exists, has empty summary and backup has some summary, use it. MDL-8848
if ($rec && empty($rec->summary) && !empty($section->summary)) {
$rec->summary = $section->summary;
update_record("course_sections", $rec);
}
//If that section doesn't exist, get section 0 (every mod will be
//asigned there
if(!$rec) {
@@ -1539,6 +1544,8 @@
global $CFG, $db;
$authcache = array(); // Cache to get some bits from authentication plugins
$status = true;
//Check it exists
if (!file_exists($xml_file)) {
@@ -1672,16 +1679,46 @@
}
//We need to analyse the AUTH field to recode it:
// - if the field isn't set, we are in a pre 1.4 backup and we'll
// use manual
if (empty($user->auth)) {
// - if the field isn't set, we are in a pre 1.4 backup and $CFG->registerauth will decide
// - if the auth isn't enabled in target site, $CFG->registerauth will decide
// - finally, if the auth resulting isn't enabled, default to 'manual'
if (empty($user->auth) || !is_enabled_auth($user->auth)) {
if ($CFG->registerauth == 'email') {
$user->auth = 'email';
} else {
$user->auth = 'manual';
}
}
if (!is_enabled_auth($user->auth)) { // Final auth check verify, default to manual if not enabled
$user->auth = 'manual';
}
// Now that we know the auth method, for users to be created without pass
// if password handling is internal and reset password is available
// we set the password to "restored" (plain text), so the login process
// will know how to handle that situation in order to allow the user to
// recover the password. MDL-20846
if (empty($user->password)) { // Only if restore comes without password
if (!array_key_exists($user->auth, $authcache)) { // Not in cache
$userauth = new stdClass();
$authplugin = get_auth_plugin($user->auth);
$userauth->preventpassindb = $authplugin->prevent_local_passwords();
$userauth->isinternal = $authplugin->is_internal();
$userauth->canresetpwd = $authplugin->can_reset_password();
$authcache[$user->auth] = $userauth;
} else {
$userauth = $authcache[$user->auth]; // Get from cache
}
// Most external plugins do not store passwords locally
if (!empty($userauth->preventpassindb)) {
$user->password = 'not cached';
// If Moodle is responsible for storing/validating pwd and reset functionality is available, mark
} else if ($userauth->isinternal and $userauth->canresetpwd) {
$user->password = 'restored';
}
}
//We need to process the POLICYAGREED field to recalculate it:
// - if the destination site is different (by wwwroot) reset it.
@@ -2152,7 +2189,7 @@
//This function creates all the scales
function restore_create_scales($restore,$xml_file) {
global $CFG, $db;
global $CFG, $USER, $db;
$status = true;
//Check it exists
@@ -2168,16 +2205,11 @@
//Now, if we have anything in scales, we have to restore that
//scales
if ($scales) {
//Get admin->id for later use
$admin = get_admin();
$adminid = $admin->id;
if ($scales !== true) {
//Iterate over each scale
foreach ($scales as $scale) {
//Get record from backup_ids
$data = backup_getid($restore->backup_unique_code,"scale",$scale->id);
//Init variables
$create_scale = false;
if ($data) {
//Now get completed xmlized object
@@ -2194,42 +2226,45 @@
$sca->description = backup_todb($info['SCALE']['#']['DESCRIPTION']['0']['#']);
$sca->timemodified = backup_todb($info['SCALE']['#']['TIMEMODIFIED']['0']['#']);
//Now search if that scale exists (by scale field) in course 0 (Standar scale)
//or in restore->course_id course (Personal scale)
if ($sca->courseid == 0) {
$course_to_search = 0;
} else {
$course_to_search = $restore->course_id;
}
$sca_db = get_record("scale","scale",$sca->scale,"courseid",$course_to_search);
//If it doesn't exist, create
if (!$sca_db) {
$create_scale = true;
}
//If we must create the scale
if ($create_scale) {
//Me must recode the courseid if it's <> 0 (common scale)
if ($sca->courseid != 0) {
$sca->courseid = $restore->course_id;
}
//We must recode the userid
// Look for scale (by 'scale' both in standard (course=0) and current course
// with priority to standard scales (ORDER clause)
// scale is not course unique, use get_record_sql to suppress warning
// Going to compare LOB columns so, use the cross-db sql_compare_text() in both sides.
$compare_scale_clause = sql_compare_text('scale') . "=" . sql_compare_text("'" . $sca->scale . "'");
// Scale doesn't exist, create it
if (!$sca_db = get_record_sql("SELECT *
FROM {$CFG->prefix}scale
WHERE $compare_scale_clause
AND courseid IN (0, $restore->course_id)
ORDER BY courseid", true)) {
// Try to recode the user field, defaulting to current user if not found
$user = backup_getid($restore->backup_unique_code,"user",$sca->userid);
if ($user) {
$sca->userid = $user->new_id;
} else {
//Assign it to admin
$sca->userid = $adminid;
$sca->userid = $USER->id;
}
// If course scale, recode the course field
if ($sca->courseid != 0) {
$sca->courseid = $restore->course_id;
}
// If scale is standard, if user lacks perms to manage standar scales
// 'downgrade' them to course scales
if ($sca->courseid == 0 and !has_capability('moodle/course:managescales', get_context_instance(CONTEXT_SYSTEM), $sca->userid)) {
$sca->courseid = $restore->course_id;
}
//The structure is equal to the db, so insert the scale
$newid = insert_record ("scale",$sca);
// Scale exists, reuse it
} else {
//get current scale id
$newid = $sca_db->id;
}
if ($newid) {
//We have the newid, update backup_ids
backup_putid($restore->backup_unique_code,"scale",
$scale->id, $newid);
backup_putid($restore->backup_unique_code,"scale", $scale->id, $newid);
}
}
}
@@ -4833,9 +4868,6 @@
case "LASTIP":
$this->info->tempuser->lastip = $this->getContents();
break;
case "SECRET":
$this->info->tempuser->secret = $this->getContents();
break;
case "PICTURE":
$this->info->tempuser->picture = $this->getContents();
break;
@@ -5811,7 +5843,9 @@
}
else {
if (empty($noredirect)) {
redirect($CFG->wwwroot.'/backup/restore.php?backup_unique_code='.$backup_unique_code.'&launch=form&file='.$file.'&id='.$id);
print_continue($CFG->wwwroot.'/backup/restore.php?backup_unique_code='.$backup_unique_code.'&launch=form&file='.$file.'&id='.$id.'&sesskey='.sesskey());
print_footer();
die;
} else {
return $backup_unique_code;
}
+3 -3
View File
@@ -2,11 +2,11 @@
/// This file defines the current version of the
/// backup/restore code that is being used. This can be
/// compared against the values stored in the
/// compared against the values stored in the
/// database (backup_version) to determine whether upgrades should
/// be performed (see db/backup_*.php)
$backup_version = 2007022100; // The current version is a date (YYYYMMDDXX)
$backup_release = "1.8+"; // User-friendly version number
$backup_version = 2007022101; // The current version is a date (YYYYMMDDXX)
$backup_release = "1.8.11"; // User-friendly version number
?>

Some files were not shown because too many files have changed in this diff Show More