Merge branch 'wip-MDL-52286-master' of https://github.com/marinaglancy/moodle
authorDan Poltawski <dan@moodle.com>
Fri, 11 Dec 2015 08:57:57 +0000 (08:57 +0000)
committerDan Poltawski <dan@moodle.com>
Fri, 11 Dec 2015 08:57:57 +0000 (08:57 +0000)
252 files changed:
.travis.yml
Gruntfile.js
admin/environment.xml
admin/roles/classes/define_role_table_advanced.php
admin/tool/uploaduser/index.php
admin/tool/uploaduser/tests/behat/upload_users.feature [moved from admin/tests/behat/upload_users.feature with 58% similarity]
auth/cas/auth.php
auth/email/auth.php
auth/fc/auth.php
auth/fc/fcFPP.php
auth/imap/auth.php
auth/ldap/auth.php
auth/manual/auth.php
auth/mnet/auth.php
auth/nntp/auth.php
auth/nologin/auth.php
auth/none/auth.php
auth/pam/auth.php
auth/pop3/auth.php
auth/radius/auth.php
auth/shibboleth/auth.php
auth/webservice/auth.php
backup/cc/cc_lib/gral_lib/cssparser.php
backup/util/settings/tests/settings_test.php
blocks/edit_form.php
blocks/rss_client/editfeed.php
course/lib.php
course/mod.php
course/moodleform_mod.php
filter/local_settings_form.php
filter/tex/latex.php
grade/export/lib.php
grade/grading/form/guide/guideeditor.php
grade/grading/form/rubric/rubriceditor.php
grade/lib.php
install/lang/he/admin.php
lib/adminlib.php
lib/amd/build/form-autocomplete.min.js
lib/amd/build/templates.min.js
lib/amd/src/form-autocomplete.js
lib/amd/src/templates.js
lib/classes/shutdown_manager.php
lib/completionlib.php
lib/componentlib.class.php
lib/db/services.php
lib/dml/moodle_database.php
lib/dml/moodle_transaction.php
lib/editor/tinymce/plugins/spellchecker/classes/SpellChecker.php
lib/editor/tinymce/plugins/spellchecker/classes/utils/JSON.php
lib/editor/tinymce/plugins/spellchecker/classes/utils/Logger.php
lib/editor/tinymce/plugins/spellchecker/readme_moodle.txt
lib/environmentlib.php
lib/evalmath/evalmath.class.php
lib/evalmath/readme_moodle.txt
lib/form/advcheckbox.php
lib/form/autocomplete.php
lib/form/button.php
lib/form/cancel.php
lib/form/checkbox.php
lib/form/dateselector.php
lib/form/datetimeselector.php
lib/form/duration.php
lib/form/editor.php
lib/form/filemanager.php
lib/form/filepicker.php
lib/form/grading.php
lib/form/group.php
lib/form/header.php
lib/form/hidden.php
lib/form/htmleditor.php
lib/form/listing.php
lib/form/modgrade.php
lib/form/modvisible.php
lib/form/password.php
lib/form/passwordunmask.php
lib/form/questioncategory.php
lib/form/radio.php
lib/form/recaptcha.php
lib/form/searchableselector.php
lib/form/select.php
lib/form/selectgroups.php
lib/form/selectwithlink.php
lib/form/selectyesno.php
lib/form/static.php
lib/form/submit.php
lib/form/submitlink.php
lib/form/tags.php
lib/form/text.php
lib/form/textarea.php
lib/form/url.php
lib/form/warning.php
lib/formslib.php
lib/graphlib.php
lib/horde/framework/Horde/Imap/Client/Socket.php
lib/horde/readme_moodle.txt
lib/installlib.php
lib/jabber/XMPP/XMLStream.php
lib/jabber/readme_moodle.txt
lib/lexer.php
lib/mathslib.php
lib/medialib.php
lib/moodlelib.php
lib/navigationlib.php
lib/outputlib.php
lib/outputrenderers.php
lib/pear/Crypt/CHAP.php
lib/pear/HTML/Common.php
lib/pear/HTML/QuickForm.php
lib/pear/HTML/QuickForm/Renderer.php
lib/pear/HTML/QuickForm/Renderer/Array.php
lib/pear/HTML/QuickForm/Renderer/Default.php
lib/pear/HTML/QuickForm/Renderer/Object.php
lib/pear/HTML/QuickForm/Renderer/Tableless.php
lib/pear/HTML/QuickForm/advcheckbox.php
lib/pear/HTML/QuickForm/autocomplete.php
lib/pear/HTML/QuickForm/button.php
lib/pear/HTML/QuickForm/checkbox.php
lib/pear/HTML/QuickForm/date.php
lib/pear/HTML/QuickForm/element.php
lib/pear/HTML/QuickForm/file.php
lib/pear/HTML/QuickForm/group.php
lib/pear/HTML/QuickForm/header.php
lib/pear/HTML/QuickForm/hidden.php
lib/pear/HTML/QuickForm/hiddenselect.php
lib/pear/HTML/QuickForm/hierselect.php
lib/pear/HTML/QuickForm/html.php
lib/pear/HTML/QuickForm/image.php
lib/pear/HTML/QuickForm/input.php
lib/pear/HTML/QuickForm/link.php
lib/pear/HTML/QuickForm/password.php
lib/pear/HTML/QuickForm/radio.php
lib/pear/HTML/QuickForm/reset.php
lib/pear/HTML/QuickForm/select.php
lib/pear/HTML/QuickForm/static.php
lib/pear/HTML/QuickForm/submit.php
lib/pear/HTML/QuickForm/text.php
lib/pear/HTML/QuickForm/textarea.php
lib/pear/HTML/QuickForm/xbutton.php
lib/pear/PEAR.php
lib/pear/README_MOODLE.txt
lib/phpexcel/PHPExcel/Shared/PCLZip/pclzip.lib.php
lib/phpexcel/PHPExcel/Worksheet/AutoFilter/Column.php
lib/phpexcel/readme_moodle.txt
lib/phpunit/classes/advanced_testcase.php
lib/phpunit/classes/basic_testcase.php
lib/phpunit/classes/database_driver_testcase.php
lib/searchlib.php
lib/setup.php
lib/setuplib.php
lib/tablelib.php
lib/tests/completionlib_test.php
lib/tests/fixtures/upload_users_profile.csv [new file with mode: 0644]
lib/tests/moodlelib_test.php
lib/tests/setuplib_test.php
lib/upgrade.txt
lib/upgradelib.php
mnet/environment.php
mnet/peer.php
mnet/xmlrpc/client.php
mnet/xmlrpc/xmlparser.php
mod/assign/feedback/editpdf/fpdi/ASL20.txt [deleted file]
mod/assign/feedback/editpdf/fpdi/LICENSE [new file with mode: 0644]
mod/assign/feedback/editpdf/fpdi/filters/FilterASCII85.php
mod/assign/feedback/editpdf/fpdi/filters/FilterASCII85_FPDI.php [deleted file]
mod/assign/feedback/editpdf/fpdi/filters/FilterASCIIHexDecode.php
mod/assign/feedback/editpdf/fpdi/filters/FilterLZW.php
mod/assign/feedback/editpdf/fpdi/filters/FilterLZW_FPDI.php [deleted file]
mod/assign/feedback/editpdf/fpdi/fpdf_tpl.php
mod/assign/feedback/editpdf/fpdi/fpdi.php
mod/assign/feedback/editpdf/fpdi/fpdi_bridge.php
mod/assign/feedback/editpdf/fpdi/fpdi_pdf_parser.php
mod/assign/feedback/editpdf/fpdi/pdf_context.php
mod/assign/feedback/editpdf/fpdi/pdf_parser.php
mod/assign/feedback/editpdf/fpdi/readme_moodle.txt
mod/assign/feedback/editpdf/thirdpartylibs.xml
mod/data/export_form.php
mod/data/field/textarea/field.class.php
mod/forum/db/services.php
mod/forum/externallib.php
mod/forum/tests/externallib_test.php
mod/forum/tests/lib_test.php
mod/forum/version.php
mod/glossary/classes/external.php [new file with mode: 0644]
mod/glossary/db/services.php [new file with mode: 0644]
mod/glossary/tests/external_test.php [new file with mode: 0644]
mod/glossary/version.php
mod/lesson/mod_form.php
mod/lesson/view.php
mod/lti/locallib.php
mod/lti/tests/locallib_test.php
mod/quiz/attemptlib.php
mod/quiz/upgrade.txt
mod/wiki/classes/external.php [new file with mode: 0644]
mod/wiki/db/services.php [new file with mode: 0644]
mod/wiki/diff/diff_nwiki.php
mod/wiki/diff/difflib.php
mod/wiki/editors/wikieditor.php
mod/wiki/editors/wikifiletable.php
mod/wiki/lib.php
mod/wiki/locallib.php
mod/wiki/tests/externallib_test.php [new file with mode: 0644]
mod/wiki/version.php
package.json
question/category_class.php
question/type/calculated/db/upgradelib.php
question/type/calculated/question.php
question/type/calculated/questiontype.php
question/type/calculated/tests/variablesubstituter_test.php
question/type/calculatedmulti/db/upgradelib.php
question/type/calculatedmulti/question.php
question/type/ddimageortext/questionbase.php
question/type/description/question.php
question/type/essay/question.php
question/type/gapselect/questionbase.php
question/type/match/question.php
question/type/missingtype/question.php
question/type/missingtype/questiontype.php
question/type/multianswer/question.php
question/type/multianswer/questiontype.php
question/type/multichoice/question.php
question/type/numerical/question.php
question/type/randomsamatch/questiontype.php
question/type/shortanswer/question.php
question/type/truefalse/question.php
theme/bootstrapbase/README.txt
theme/bootstrapbase/less/README
theme/bootstrapbase/readme_moodle.txt
theme/bootstrapbase/style/editor.css
theme/bootstrapbase/style/moodle.css
user/filters/cohort.php
user/filters/courserole.php
user/filters/date.php
user/filters/globalrole.php
user/filters/lib.php
user/filters/profilefield.php
user/filters/select.php
user/filters/simpleselect.php
user/filters/text.php
user/filters/yesno.php
user/profile/field/checkbox/field.class.php
user/profile/field/menu/field.class.php
user/profile/lib.php
user/tests/behat/set_default_homepage.feature
version.php
webservice/amf/testclient/index.php
webservice/upgrade.txt
webservice/xmlrpc/lib.php
webservice/xmlrpc/locallib.php
webservice/xmlrpc/tests/fixtures/array_response.xml [new file with mode: 0644]
webservice/xmlrpc/tests/fixtures/fault_response.xml [new file with mode: 0644]
webservice/xmlrpc/tests/fixtures/value_response.xml [new file with mode: 0644]
webservice/xmlrpc/tests/lib_test.php [new file with mode: 0644]

index c462b85..08d8338 100644 (file)
@@ -12,21 +12,12 @@ notifications:
 language: php
 
 php:
-    # Moodle supports versions 5.4, 5.5, and 5.6 of PHP.
-    # Order by fastest to slowest.
-    # We currently only run the highest and lowest versions to reduce the load on travis-ci.org.
-    - 5.6
+    # We only run the highest and lowest supported versions to reduce the load on travis-ci.org.
+    - 7.0
+    # - 5.6
     # - 5.5
     - 5.4
 
-    # We hope to offer PHP 7 support in the near future.
-    - nightly
-
-services:
-    # Ensure that memcached and mongodb are running for testing of those MUC stores.
-    - memcached
-    - mongodb
-
 env:
     # Although we want to run these jobs and see failures as quickly as possible, we also want to get the slowest job to
     # start first so that the total run time is not too high.
@@ -50,29 +41,18 @@ matrix:
     # It will not stop the jobs from running.
     fast_finish: true
 
-    # Always allow failure on nightly.
-    # It's a nightly build and failures can happen.
-    allow_failures:
-        - php: nightly
-
     exclude:
-        # PHP 7 is not yet supported for actual runs.
-        # Exclude it by default - we include it for CITEST only later.
-        - php: nightly
-
         # MySQL - it's just too slow.
-        # Exclude it on all versions except for 5.6.
+        # Exclude it on all versions except for 7.0
+        # - env: DB=mysqli   PHPUNIT=true    INSTALL=false   CITEST=false
+        #   php: 5.6
+        #
         # - env: DB=mysqli   PHPUNIT=true    INSTALL=false   CITEST=false
         #   php: 5.5
 
         - env: DB=mysqli   PHPUNIT=true    INSTALL=false   CITEST=false
           php: 5.4
 
-    include:
-        # Attempt to run the CITEST set on PHP 7.
-        - php: nightly
-          env: DB=none     PHPUNIT=false   INSTALL=false   CITEST=true
-
 cache:
     directories:
       - $HOME/.composer/cache
@@ -86,10 +66,6 @@ install:
     # Typically it should be able to use the Composer cache if any other job has already completed before we started here.
     - travis_retry composer install --prefer-dist --no-interaction
 
-    - echo "extension = memcache.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini
-    - echo "extension = memcached.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini
-    - echo "extension = mongo.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini
-
 before_script:
     - >
       if [ "$INSTALL" = 'true' -o "$PHPUNIT" = 'true' ];
@@ -144,9 +120,6 @@ before_script:
           sed -i \
             -e "/require_once/i \\\$CFG->phpunit_dataroot = '\/home\/travis\/roots\/phpunit';" \
             -e "/require_once/i \\\$CFG->phpunit_prefix = 'p_';" \
-            -e "/require_once/i define('TEST_CACHESTORE_MEMCACHE_TESTSERVERS', '127.0.0.1:11211');" \
-            -e "/require_once/i define('TEST_CACHESTORE_MEMCACHED_TESTSERVERS', '127.0.0.1:11211');" \
-            -e "/require_once/i define('TEST_CACHESTORE_MONGODB_TESTSERVER', 'mongodb://localhost:27017');" \
             config.php ;
 
           # Initialise PHPUnit for Moodle.
index a3b699e..dcc22a8 100644 (file)
@@ -50,6 +50,17 @@ module.exports = function(grunt) {
                     }
                 )
             }
+        },
+        less: {
+            bootstrapbase: {
+                files: {
+                    "theme/bootstrapbase/style/moodle.css": "theme/bootstrapbase/less/moodle.less",
+                    "theme/bootstrapbase/style/editor.css": "theme/bootstrapbase/less/editor.less",
+                },
+                options: {
+                    compress: true
+                }
+           }
         }
     });
 
@@ -208,13 +219,11 @@ module.exports = function(grunt) {
             grunt.task.run('shifter');
         // Are we in an AMD directory?
         } else if (path.basename(cwd) == 'amd') {
-            grunt.task.run('jshint');
-            grunt.task.run('uglify');
+            grunt.task.run('amd');
         } else {
             // Run them all!.
-            grunt.task.run('shifter');
-            grunt.task.run('jshint');
-            grunt.task.run('uglify');
+            grunt.task.run('css');
+            grunt.task.run('js');
         }
     };
 
@@ -222,9 +231,15 @@ module.exports = function(grunt) {
     // Register NPM tasks.
     grunt.loadNpmTasks('grunt-contrib-uglify');
     grunt.loadNpmTasks('grunt-contrib-jshint');
+    grunt.loadNpmTasks('grunt-contrib-less');
 
-    // Register the shifter task.
+    // Register JS tasks.
     grunt.registerTask('shifter', 'Run Shifter against the current directory', tasks.shifter);
+    grunt.registerTask('amd', ['jshint', 'uglify']);
+    grunt.registerTask('js', ['amd', 'shifter']);
+
+    // Register CSS taks.
+    grunt.registerTask('css', ['less:bootstrapbase']);
 
     // Register the startup task.
     grunt.registerTask('startup', 'Run the correct tasks for the current directory', tasks.startup);
index 6847483..4bf5798 100644 (file)
       <VENDOR name="oracle" version="10.2" />
     </DATABASE>
     <PHP version="5.4.4" level="required">
-      <RESTRICT function="restrict_php_version_7" message="unsupportedphpversion7" />
     </PHP>
     <PCREUNICODE level="optional">
       <FEEDBACK>
index 06f565d..d18c144 100644 (file)
@@ -422,6 +422,12 @@ class core_role_define_role_table_advanced extends core_role_capability_table_wi
         } else {
             // Updating role.
             $DB->update_record('role', $this->role);
+
+            // This will ensure the course contacts cache is purged so name changes get updated in
+            // the UI. It would be better to do this only when we know that fields affected are
+            // updated. But thats getting into the weeds of the coursecat cache and role edits
+            // should not be that frequent, so here is the ugly brutal approach.
+            coursecat::role_assignment_changed($this->role->id, context_system::instance());
         }
 
         // Assignable contexts.
index ad36657..e687fe3 100644 (file)
@@ -232,8 +232,8 @@ if ($formdata = $mform2->is_cancelled()) {
                 if (isset($USER->$key) and is_array($USER->$key)) {
                     // this must be some hacky field that is abusing arrays to store content and format
                     $user->$key = array();
-                    $user->$key['text']   = $value;
-                    $user->$key['format'] = FORMAT_MOODLE;
+                    $user->{$key['text']}   = $value;
+                    $user->{$key['format']} = FORMAT_MOODLE;
                 } else {
                     $user->$key = trim($value);
                 }
@@ -1,4 +1,4 @@
-@core @core_admin @_file_upload
+@tool @tool_uploaduser @_file_upload
 Feature: Upload users
   In order to add users to the system
   As an admin
@@ -39,3 +39,25 @@ Feature: Upload users
     And I follow "Groups"
     And I set the field "groups" to "Section 1 (1)"
     And the "members" select box should contain "Tom Jones"
+
+  @javascript
+  Scenario: Upload users with custom profile fields
+    # Create user profile field.
+    Given I log in as "admin"
+    And I navigate to "User profile fields" node in "Site administration > Users > Accounts"
+    And I set the field "datatype" to "Text area"
+    And I set the following fields to these values:
+      | Short name | superfield  |
+      | Name       | Super field |
+    And I click on "Save changes" "button"
+    # Upload users.
+    When I navigate to "Upload users" node in "Site administration > Users > Accounts"
+    And I upload "lib/tests/fixtures/upload_users_profile.csv" file to "File" filemanager
+    And I press "Upload users"
+    And I press "Upload users"
+    # Check that users were created and the superfield is filled.
+    And I navigate to "Browse list of users" node in "Site administration > Users > Accounts"
+    And I follow "Tom Jones"
+    And I should see "Super field"
+    And I should see "The big guy"
+    And I log out
index afa87dd..4439bcb 100644 (file)
@@ -39,13 +39,23 @@ class auth_plugin_cas extends auth_plugin_ldap {
     /**
      * Constructor.
      */
-    function auth_plugin_cas() {
+    public function __construct() {
         $this->authtype = 'cas';
         $this->roleauth = 'auth_cas';
         $this->errorlogtag = '[AUTH CAS] ';
         $this->init_plugin($this->authtype);
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function auth_plugin_cas() {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct();
+    }
+
     function prevent_local_passwords() {
         return true;
     }
index 0a0827d..ffa0e91 100644 (file)
@@ -34,11 +34,21 @@ class auth_plugin_email extends auth_plugin_base {
     /**
      * Constructor.
      */
-    function auth_plugin_email() {
+    public function __construct() {
         $this->authtype = 'email';
         $this->config = get_config('auth/email');
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function auth_plugin_email() {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct();
+    }
+
     /**
      * Returns true if the username and password work and false if they are
      * wrong or don't exist.
index 75c8bd0..b987992 100644 (file)
@@ -37,11 +37,21 @@ class auth_plugin_fc extends auth_plugin_base {
     /**
      * Constructor.
      */
-    function auth_plugin_fc() {
+    public function __construct() {
         $this->authtype = 'fc';
         $this->config = get_config('auth/fc');
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function auth_plugin_fc() {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct();
+    }
+
     /**
      * Returns true if the username and password work and false if they are
      * wrong or don't exist.
index c082202..2adc309 100644 (file)
@@ -30,7 +30,7 @@ class fcFPP
     var $_debug = FALSE;    // set to true to see some debug info
 
     // class constructor
-    function fcFPP($host="localhost", $port="3333")
+    public function __construct($host="localhost", $port="3333")
     {
     $this->_hostname = $host;
     $this->_port = $port;
@@ -38,6 +38,12 @@ class fcFPP
     $this->_pwd = "";
     }
 
+    function fcFPP($host="localhost", $port="3333")
+    {
+           debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+           self::__construct($host, $port);
+    }
+
     // open a connection to the FirstClass server
     function open()
     {
index b0d7f9f..3e3e2da 100644 (file)
@@ -35,11 +35,21 @@ class auth_plugin_imap extends auth_plugin_base {
     /**
      * Constructor.
      */
-    function auth_plugin_imap() {
+    public function __construct() {
         $this->authtype = 'imap';
         $this->config = get_config('auth/imap');
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function auth_plugin_imap() {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct();
+    }
+
     /**
      * Returns true if the username and password work and false if they are
      * wrong or don't exist.
index 96d9bba..9d3a4ad 100644 (file)
@@ -143,13 +143,23 @@ class auth_plugin_ldap extends auth_plugin_base {
     /**
      * Constructor with initialisation.
      */
-    function auth_plugin_ldap() {
+    public function __construct() {
         $this->authtype = 'ldap';
         $this->roleauth = 'auth_ldap';
         $this->errorlogtag = '[AUTH LDAP] ';
         $this->init_plugin($this->authtype);
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function auth_plugin_ldap() {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct();
+    }
+
     /**
      * Returns true if the username and password work and false if they are
      * wrong or don't exist.
index 938aae8..c6df146 100644 (file)
@@ -46,13 +46,23 @@ class auth_plugin_manual extends auth_plugin_base {
     /**
      * Constructor.
      */
-    function auth_plugin_manual() {
+    public function __construct() {
         $this->authtype = 'manual';
         $config = get_config(self::COMPONENT_NAME);
         $legacyconfig = get_config(self::LEGACY_COMPONENT_NAME);
         $this->config = (object)array_merge((array)$legacyconfig, (array)$config);
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function auth_plugin_manual() {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct();
+    }
+
     /**
      * Returns true if the username and password work and false if they are
      * wrong or don't exist. (Non-mnet accounts only!)
index f061539..8bd7768 100644 (file)
@@ -35,12 +35,22 @@ class auth_plugin_mnet extends auth_plugin_base {
     /**
      * Constructor.
      */
-    function auth_plugin_mnet() {
+    public function __construct() {
         $this->authtype = 'mnet';
         $this->config = get_config('auth_mnet');
         $this->mnet = get_mnet_environment();
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function auth_plugin_mnet() {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct();
+    }
+
     /**
      * This function is normally used to determine if the username and password
      * are correct for local logins. Always returns false, as local users do not
index c2ad283..9e8b24c 100644 (file)
@@ -35,11 +35,21 @@ class auth_plugin_nntp extends auth_plugin_base {
     /**
      * Constructor.
      */
-    function auth_plugin_nntp() {
+    public function __construct() {
         $this->authtype = 'nntp';
         $this->config = get_config('auth/nntp');
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function auth_plugin_nntp() {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct();
+    }
+
     /**
      * Returns true if the username and password work and false if they are
      * wrong or don't exist.
index c3ed391..9a1ec28 100644 (file)
@@ -35,10 +35,20 @@ class auth_plugin_nologin extends auth_plugin_base {
     /**
      * Constructor.
      */
-    function auth_plugin_nologin() {
+    public function __construct() {
         $this->authtype = 'nologin';
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function auth_plugin_nologin() {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct();
+    }
+
     /**
      * Do not allow any login.
      *
index fcfce4c..c002930 100644 (file)
@@ -34,11 +34,21 @@ class auth_plugin_none extends auth_plugin_base {
     /**
      * Constructor.
      */
-    function auth_plugin_none() {
+    public function __construct() {
         $this->authtype = 'none';
         $this->config = get_config('auth/none');
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function auth_plugin_none() {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct();
+    }
+
     /**
      * Returns true if the username and password work or don't exist and false
      * if the user exists and the password is wrong.
index fd76a09..b1e2053 100644 (file)
@@ -53,12 +53,22 @@ class auth_plugin_pam extends auth_plugin_base {
     /**
      * Constructor.
      */
-    function auth_plugin_pam() {
+    public function __construct() {
         $this->authtype = 'pam';
         $this->config = get_config('auth/pam');
         $this->errormessage = '';
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function auth_plugin_pam() {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct();
+    }
+
     /**
      * Returns true if the username and password work and false if they are
      * wrong or don't exist.
index 5e25aa9..4bfaa0b 100644 (file)
@@ -35,11 +35,21 @@ class auth_plugin_pop3 extends auth_plugin_base {
     /**
      * Constructor.
      */
-    function auth_plugin_pop3() {
+    public function __construct() {
         $this->authtype = 'pop3';
         $this->config = get_config('auth/pop3');
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function auth_plugin_pop3() {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct();
+    }
+
     /**
      * Returns true if the username and password work and false if they are
      * wrong or don't exist.
index a74369e..24ae5d3 100644 (file)
@@ -38,11 +38,21 @@ class auth_plugin_radius extends auth_plugin_base {
     /**
      * Constructor.
      */
-    function auth_plugin_radius() {
+    public function __construct() {
         $this->authtype = 'radius';
         $this->config = get_config('auth/radius');
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function auth_plugin_radius() {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct();
+    }
+
     /**
      * Returns true if the username and password work and false if they are
      * wrong or don't exist.
index a4cebd8..be7c25b 100644 (file)
@@ -38,11 +38,21 @@ class auth_plugin_shibboleth extends auth_plugin_base {
     /**
      * Constructor.
      */
-    function auth_plugin_shibboleth() {
+    public function __construct() {
         $this->authtype = 'shibboleth';
         $this->config = get_config('auth/shibboleth');
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function auth_plugin_shibboleth() {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct();
+    }
+
     /**
      * Returns true if the username and password work and false if they are
      * wrong or don't exist.
index 1fc5694..f027f1c 100644 (file)
@@ -35,11 +35,21 @@ class auth_plugin_webservice extends auth_plugin_base {
     /**
      * Constructor.
      */
-    function auth_plugin_webservice() {
+    public function __construct() {
         $this->authtype = 'webservice';
         $this->config = get_config('auth/webservice');
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function auth_plugin_webservice() {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct();
+    }
+
     /**
      * Returns true if the username and password work and false if they are
      * wrong or don't exist.
index 3d5653f..fc2e304 100644 (file)
@@ -18,13 +18,23 @@ class cssparser {
   private $css;
   private $html;
 
-  function cssparser($html = true) {
+  public function __construct($html = true) {
     // Register "destructor"
     core_shutdown_manager::register_function(array(&$this, "finalize"));
     $this->html = ($html != false);
     $this->Clear();
   }
 
+  /**
+   * Old syntax of class constructor. Deprecated in PHP7.
+   *
+   * @deprecated since Moodle 3.1
+   */
+  public function cssparser($html = true) {
+      debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+      self::__construct($html);
+  }
+
   function finalize() {
     unset($this->css);
   }
@@ -258,4 +268,4 @@ class cssparser {
     }
     return $result;
   }
-}
\ No newline at end of file
+}
index 201d29e..45bc4ec 100644 (file)
@@ -126,6 +126,9 @@ class backp_settings_testcase extends basic_testcase {
         } catch (exception $e) {
             $this->assertTrue($e instanceof base_setting_exception);
             $this->assertEquals($e->errorcode, 'incorrect_object_passed');
+        } catch (TypeError $e) {
+            // On PHP7+ we get a TypeError raised, lets check we've the right error.
+            $this->assertRegexp('/must be an instance of backup_setting_ui/', $e->getMessage());
         }
         restore_error_handler();
 
@@ -140,6 +143,9 @@ class backp_settings_testcase extends basic_testcase {
         } catch (exception $e) {
             $this->assertTrue($e instanceof base_setting_exception);
             $this->assertEquals($e->errorcode, 'incorrect_object_passed');
+        } catch (TypeError $e) {
+            // On PHP7+ we get a TypeError raised, lets check we've the right error.
+            $this->assertRegexp('/must be an instance of backup_setting_ui/', $e->getMessage());
         }
         restore_error_handler();
 
@@ -302,6 +308,9 @@ class backp_settings_testcase extends basic_testcase {
         } catch (exception $e) {
             $this->assertTrue($e instanceof backup_setting_exception);
             $this->assertEquals($e->errorcode, 'incorrect_object_passed');
+        } catch (TypeError $e) {
+            // On PHP7+ we get a TypeError raised, lets check we've the right error.
+            $this->assertRegexp('/must be an instance of base_setting/', $e->getMessage());
         }
         restore_error_handler();
 
index ad32113..57c9de8 100644 (file)
@@ -54,7 +54,7 @@ class block_edit_form extends moodleform {
         global $CFG;
         $this->block = $block;
         $this->page = $page;
-        parent::moodleform($actionurl);
+        parent::__construct($actionurl);
     }
 
     function definition() {
index 77e3097..2b6d92a 100644 (file)
@@ -36,7 +36,7 @@ class feed_edit_form extends moodleform {
     function __construct($actionurl, $isadding, $caneditshared) {
         $this->isadding = $isadding;
         $this->caneditshared = $caneditshared;
-        parent::moodleform($actionurl);
+        parent::__construct($actionurl);
     }
 
     function definition() {
index bee6132..21c4481 100644 (file)
@@ -2519,6 +2519,8 @@ function save_local_role_names($courseid, $data) {
             $rolename->name = $value;
             $DB->insert_record('role_names', $rolename);
         }
+        // This will ensure the course contacts cache is purged..
+        coursecat::role_assignment_changed($roleid, $context);
     }
 }
 
index 3247db4..9c23493 100644 (file)
@@ -106,7 +106,8 @@ if (!empty($add)) {
         $optionsyes = array('confirm'=>1, 'delete'=>$cm->id, 'sesskey'=>sesskey(), 'sr' => $sectionreturn);
 
         $strdeletecheck = get_string('deletecheck', '', $fullmodulename);
-        $strdeletecheckfull = get_string('deletecheckfull', '', "$fullmodulename '$cm->name'");
+        $strparams = (object)array('type' => $fullmodulename, 'name' => $cm->name);
+        $strdeletechecktypename = get_string('deletechecktypename', '', $strparams);
 
         $PAGE->set_pagetype('mod-' . $cm->modname . '-delete');
         $PAGE->set_title($strdeletecheck);
@@ -117,7 +118,7 @@ if (!empty($add)) {
         echo $OUTPUT->box_start('noticebox');
         $formcontinue = new single_button(new moodle_url("$CFG->wwwroot/course/mod.php", $optionsyes), get_string('yes'));
         $formcancel = new single_button($return, get_string('no'), 'get');
-        echo $OUTPUT->confirm($strdeletecheckfull, $formcontinue, $formcancel);
+        echo $OUTPUT->confirm($strdeletechecktypename, $formcontinue, $formcancel);
         echo $OUTPUT->box_end();
         echo $OUTPUT->footer();
 
index 4c8c25f..690dda8 100644 (file)
@@ -58,7 +58,7 @@ abstract class moodleform_mod extends moodleform {
     /** @var object The course format of the current course. */
     protected $courseformat;
 
-    function moodleform_mod($current, $section, $cm, $course) {
+    public function __construct($current, $section, $cm, $course) {
         global $CFG;
 
         $this->current   = $current;
@@ -83,7 +83,17 @@ abstract class moodleform_mod extends moodleform {
         }
         $this->_modname = $matches[1];
         $this->init_features();
-        parent::moodleform('modedit.php');
+        parent::__construct('modedit.php');
+    }
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function moodleform_mod($current, $section, $cm, $course) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($current, $section, $cm, $course);
     }
 
     protected function init_features() {
index 1721ffa..fce01a1 100644 (file)
@@ -33,7 +33,7 @@ abstract class filter_local_settings_form extends moodleform {
     public function __construct($submiturl, $filter, $context) {
         $this->filter = $filter;
         $this->context = $context;
-        parent::moodleform($submiturl);
+        parent::__construct($submiturl);
     }
 
     /**
index a1966da..7eb522e 100644 (file)
@@ -15,7 +15,7 @@
          * external 'helper' binaries.
          * Other platforms could/should be added
          */
-        function latex() {
+        public function __construct() {
             global $CFG;
 
             // construct directory structure
             make_temp_directory('latex');
         }
 
+        /**
+         * Old syntax of class constructor. Deprecated in PHP7.
+         *
+         * @deprecated since Moodle 3.1
+         */
+        public function latex() {
+            debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+            self::__construct();
+        }
+
         /**
          * Accessor function for support_platform field.
          * @return boolean value of supported_platform
index e817943..bf7b981 100644 (file)
@@ -625,11 +625,21 @@ class grade_export_update_buffer {
     /**
      * Constructor - creates the buffer and initialises the time stamp
      */
-    public function grade_export_update_buffer() {
+    public function __construct() {
         $this->update_list = array();
         $this->export_time = time();
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function grade_export_update_buffer() {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct();
+    }
+
     public function flush($buffersize) {
         global $CFG, $DB;
 
index 902834c..a6e43a1 100644 (file)
@@ -53,8 +53,18 @@ class moodlequickform_guideeditor extends HTML_QuickForm_input {
      * @param string $elementlabel
      * @param array $attributes
      */
+    public function __construct($elementname=null, $elementlabel=null, $attributes=null) {
+        parent::__construct($elementname, $elementlabel, $attributes);
+    }
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
     public function moodlequickform_guideeditor($elementname=null, $elementlabel=null, $attributes=null) {
-        parent::HTML_QuickForm_input($elementname, $elementlabel, $attributes);
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementname, $elementlabel, $attributes);
     }
 
     /**
index b3cc5bf..d990126 100644 (file)
@@ -60,8 +60,18 @@ class MoodleQuickForm_rubriceditor extends HTML_QuickForm_input {
      * @param string $elementLabel
      * @param array $attributes
      */
-    function MoodleQuickForm_rubriceditor($elementName=null, $elementLabel=null, $attributes=null) {
-        parent::HTML_QuickForm_input($elementName, $elementLabel, $attributes);
+    public function __construct($elementName=null, $elementLabel=null, $attributes=null) {
+        parent::__construct($elementName, $elementLabel, $attributes);
+    }
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_rubriceditor($elementName=null, $elementLabel=null, $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $attributes);
     }
 
     /**
index 3a04829..2696dca 100644 (file)
@@ -1085,7 +1085,7 @@ class grade_plugin_return {
      *
      * @param array $params - associative array with return parameters, if null parameter are taken from _GET or _POST
      */
-    public function grade_plugin_return($params = null) {
+    public function __construct($params = null) {
         if (empty($params)) {
             $this->type     = optional_param('gpr_type', null, PARAM_SAFEDIR);
             $this->plugin   = optional_param('gpr_plugin', null, PARAM_PLUGIN);
@@ -1102,6 +1102,16 @@ class grade_plugin_return {
         }
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function grade_plugin_return($params = null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($params);
+    }
+
     /**
      * Returns return parameters as options array suitable for buttons.
      * @return array options
@@ -2033,7 +2043,7 @@ class grade_seq extends grade_structure {
      * @param bool $category_grade_last category grade item is the last child
      * @param bool $nooutcomes Whether or not outcomes should be included
      */
-    public function grade_seq($courseid, $category_grade_last=false, $nooutcomes=false) {
+    public function __construct($courseid, $category_grade_last=false, $nooutcomes=false) {
         global $USER, $CFG;
 
         $this->courseid   = $courseid;
@@ -2049,6 +2059,16 @@ class grade_seq extends grade_structure {
         }
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function grade_seq($courseid, $category_grade_last=false, $nooutcomes=false) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($courseid, $category_grade_last, $nooutcomes);
+    }
+
     /**
      * Static recursive helper - makes the grade_item for category the last children
      *
@@ -2185,7 +2205,7 @@ class grade_tree extends grade_structure {
      * @param array $collapsed array of collapsed categories
      * @param bool  $nooutcomes Whether or not outcomes should be included
      */
-    public function grade_tree($courseid, $fillers=true, $category_grade_last=false,
+    public function __construct($courseid, $fillers=true, $category_grade_last=false,
                                $collapsed=null, $nooutcomes=false) {
         global $USER, $CFG, $COURSE, $DB;
 
@@ -2229,6 +2249,17 @@ class grade_tree extends grade_structure {
 
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function grade_tree($courseid, $fillers=true, $category_grade_last=false,
+                               $collapsed=null, $nooutcomes=false) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($courseid, $fillers, $category_grade_last, $collapsed, $nooutcomes);
+    }
+
     /**
      * Static recursive helper - removes items from collapsed categories
      *
index d63a267..c9f613d 100644 (file)
@@ -36,7 +36,7 @@ $string['cliincorrectvalueerror'] = 'שגיאה: ערך לא תקין
 "{$a->value}" עבור "{$a->option}"';
 $string['cliincorrectvalueretry'] = 'ערך שגוי, נסה שנית';
 $string['clitypevalue'] = 'סוג הערך';
-$string['clitypevaluedefault'] = 'ס×\95×\92 ×\94ער×\9a, ×\94קש Enter ×\9cש×\99×\9e×\95ש ×\91ער×\9a ×\91ר×\99רת מחדל ({$a})';
+$string['clitypevaluedefault'] = '×\99ש ×\9c×\94×\96×\99×\9f ×¢×¨×\9a, ×\90×\95 ×\9c×\94ק×\99ש ×¢×\9c ×\9bפת×\95ר Enter ×\9cש×\99×\9e×\95ש ×\91ער×\9a ×\91ררת־×\94מחדל ({$a})';
 $string['cliunknowoption'] = 'אפשרויות לא מוכרות :
 {$a}
 אנא השתמש באפשרות העזרה.';
index fc177f4..81c95d0 100644 (file)
@@ -4936,11 +4936,21 @@ class admin_setting_special_gradelimiting extends admin_setting_configcheckbox {
     /**
      * Calls parent::__construct with specific arguments
      */
-    function admin_setting_special_gradelimiting() {
+    public function __construct() {
         parent::__construct('unlimitedgrades', get_string('unlimitedgrades', 'grades'),
             get_string('unlimitedgrades_help', 'grades'), '0', '1', '0');
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function admin_setting_special_gradelimiting() {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct();
+    }
+
     /**
      * Force site regrading
      */
index f8bd0d8..1adc2b0 100644 (file)
Binary files a/lib/amd/build/form-autocomplete.min.js and b/lib/amd/build/form-autocomplete.min.js differ
index 71f74a7..87a7d6c 100644 (file)
Binary files a/lib/amd/build/templates.min.js and b/lib/amd/build/templates.min.js differ
index ec3fb43..24d32c4 100644 (file)
@@ -69,6 +69,52 @@ define(['jquery', 'core/log', 'core/str', 'core/templates', 'core/notification']
         selectionElement.attr('aria-activedescendant', itemId);
     };
 
+    /**
+     * Update the element that shows the currently selected items.
+     *
+     * @method updateSelectionList
+     * @private
+     * @param {Object} options Original options for this autocomplete element.
+     * @param {Object} state State variables for this autocomplete element.
+     * @param {JQuery} originalSelect The JQuery object matching the hidden select list.
+     */
+    var updateSelectionList = function(options, state, originalSelect) {
+        // Build up a valid context to re-render the template.
+        var items = [];
+        var newSelection = $(document.getElementById(state.selectionId));
+        var activeId = newSelection.attr('aria-activedescendant');
+        var activeValue = false;
+
+        if (activeId) {
+            activeValue = $(document.getElementById(activeId)).attr('data-value');
+        }
+        originalSelect.children('option').each(function(index, ele) {
+            if ($(ele).prop('selected')) {
+                items.push( { label: $(ele).html(), value: $(ele).attr('value') } );
+            }
+        });
+        var context = $.extend({ items: items }, options, state);
+
+        // Render the template.
+        templates.render('core/form_autocomplete_selection', context).done(function(newHTML) {
+            // Add it to the page.
+            newSelection.empty().append($(newHTML).html());
+
+            if (activeValue !== false) {
+                // Reselect any previously selected item.
+                newSelection.children('[aria-selected=true]').each(function(index, ele) {
+                    if ($(ele).attr('data-value') === activeValue) {
+                        activateSelection(index, state);
+                    }
+                });
+            }
+        }).fail(notification.exception);
+        // Because this function get's called after changing the selection, this is a good place
+        // to trigger a change notification.
+        originalSelect.change();
+    };
+
+
     /**
      * Remove the given item from the list of selected things.
      *
@@ -360,51 +406,6 @@ define(['jquery', 'core/log', 'core/str', 'core/templates', 'core/notification']
         closeSuggestions(state);
     };
 
-    /**
-     * Update the element that shows the currently selected items.
-     *
-     * @method updateSelectionList
-     * @private
-     * @param {Object} options Original options for this autocomplete element.
-     * @param {Object} state State variables for this autocomplete element.
-     * @param {JQuery} originalSelect The JQuery object matching the hidden select list.
-     */
-    var updateSelectionList = function(options, state, originalSelect) {
-        // Build up a valid context to re-render the template.
-        var items = [];
-        var newSelection = $(document.getElementById(state.selectionId));
-        var activeId = newSelection.attr('aria-activedescendant');
-        var activeValue = false;
-
-        if (activeId) {
-            activeValue = $(document.getElementById(activeId)).attr('data-value');
-        }
-        originalSelect.children('option').each(function(index, ele) {
-            if ($(ele).prop('selected')) {
-                items.push( { label: $(ele).html(), value: $(ele).attr('value') } );
-            }
-        });
-        var context = $.extend({ items: items }, options, state);
-
-        // Render the template.
-        templates.render('core/form_autocomplete_selection', context).done(function(newHTML) {
-            // Add it to the page.
-            newSelection.empty().append($(newHTML).html());
-
-            if (activeValue !== false) {
-                // Reselect any previously selected item.
-                newSelection.children('[aria-selected=true]').each(function(index, ele) {
-                    if ($(ele).attr('data-value') === activeValue) {
-                        activateSelection(index, state);
-                    }
-                });
-            }
-        }).fail(notification.exception);
-        // Because this function get's called after changing the selection, this is a good place
-        // to trigger a change notification.
-        originalSelect.change();
-    };
-
     /**
      * Select the currently active item from the suggestions list.
      *
index 6e4bc0c..bde7e0d 100644 (file)
@@ -52,6 +52,83 @@ define([ 'core/mustache',
     /** @var {String} themeName for the current render */
     var currentThemeName = '';
 
+    /**
+     * Load a template from the cache or local storage or ajax request.
+     *
+     * @method getTemplate
+     * @private
+     * @param {string} templateName - should consist of the component and the name of the template like this:
+     *                              core/menu (lib/templates/menu.mustache) or
+     *                              tool_bananas/yellow (admin/tool/bananas/templates/yellow.mustache)
+     * @return {Promise} JQuery promise object resolved when the template has been fetched.
+     */
+    var getTemplate = function(templateName, async) {
+        var deferred = $.Deferred();
+        var parts = templateName.split('/');
+        var component = parts.shift();
+        var name = parts.shift();
+
+        var searchKey = currentThemeName + '/' + templateName;
+
+        // First try request variables.
+        if (searchKey in templateCache) {
+            deferred.resolve(templateCache[searchKey]);
+            return deferred.promise();
+        }
+
+        // Now try local storage.
+        var cached = storage.get('core_template/' + searchKey);
+
+        if (cached) {
+            deferred.resolve(cached);
+            templateCache[searchKey] = cached;
+            return deferred.promise();
+        }
+
+        // Oh well - load via ajax.
+        var promises = ajax.call([{
+            methodname: 'core_output_load_template',
+            args:{
+                component: component,
+                template: name,
+                themename: currentThemeName
+            }
+        }], async, false);
+
+        promises[0].done(
+            function (templateSource) {
+                storage.set('core_template/' + searchKey, templateSource);
+                templateCache[searchKey] = templateSource;
+                deferred.resolve(templateSource);
+            }
+        ).fail(
+            function (ex) {
+                deferred.reject(ex);
+            }
+        );
+        return deferred.promise();
+    };
+
+    /**
+     * Load a partial from the cache or ajax.
+     *
+     * @method partialHelper
+     * @private
+     * @param {string} name The partial name to load.
+     * @return {string}
+     */
+    var partialHelper = function(name) {
+        var template = '';
+
+        getTemplate(name, false).done(
+            function(source) {
+                template = source;
+            }
+        ).fail(notification.exception);
+
+        return template;
+    };
+
     /**
      * Render image icons.
      *
@@ -92,26 +169,6 @@ define([ 'core/mustache',
         return result.trim();
     };
 
-    /**
-     * Load a partial from the cache or ajax.
-     *
-     * @method partialHelper
-     * @private
-     * @param {string} name The partial name to load.
-     * @return {string}
-     */
-    var partialHelper = function(name) {
-        var template = '';
-
-        getTemplate(name, false).done(
-            function(source) {
-                template = source;
-            }
-        ).fail(notification.exception);
-
-        return template;
-    };
-
     /**
      * Render blocks of javascript and save them in an array.
      *
@@ -270,63 +327,6 @@ define([ 'core/mustache',
         return deferred.promise();
     };
 
-    /**
-     * Load a template from the cache or local storage or ajax request.
-     *
-     * @method getTemplate
-     * @private
-     * @param {string} templateName - should consist of the component and the name of the template like this:
-     *                              core/menu (lib/templates/menu.mustache) or
-     *                              tool_bananas/yellow (admin/tool/bananas/templates/yellow.mustache)
-     * @return {Promise} JQuery promise object resolved when the template has been fetched.
-     */
-    var getTemplate = function(templateName, async) {
-        var deferred = $.Deferred();
-        var parts = templateName.split('/');
-        var component = parts.shift();
-        var name = parts.shift();
-
-        var searchKey = currentThemeName + '/' + templateName;
-
-        // First try request variables.
-        if (searchKey in templateCache) {
-            deferred.resolve(templateCache[searchKey]);
-            return deferred.promise();
-        }
-
-        // Now try local storage.
-        var cached = storage.get('core_template/' + searchKey);
-
-        if (cached) {
-            deferred.resolve(cached);
-            templateCache[searchKey] = cached;
-            return deferred.promise();
-        }
-
-        // Oh well - load via ajax.
-        var promises = ajax.call([{
-            methodname: 'core_output_load_template',
-            args:{
-                component: component,
-                template: name,
-                themename: currentThemeName
-            }
-        }], async, false);
-
-        promises[0].done(
-            function (templateSource) {
-                storage.set('core_template/' + searchKey, templateSource);
-                templateCache[searchKey] = templateSource;
-                deferred.resolve(templateSource);
-            }
-        ).fail(
-            function (ex) {
-                deferred.reject(ex);
-            }
-        );
-        return deferred.promise();
-    };
-
     /**
      * Execute a block of JS returned from a template.
      * Call this AFTER adding the template HTML into the DOM so the nodes can be found.
index 8b01ba0..2a11ae2 100644 (file)
@@ -81,6 +81,9 @@ class core_shutdown_manager {
                 }
             } catch (Exception $e) {
                 error_log('Exception ignored in shutdown function '.var_export($callback, true).':'.$e->getMessage());
+            } catch (Throwable $e) {
+                // Engine errors in PHP7 throw exceptions of type Throwable (this "catch" will be ignored in PHP5).
+                error_log('Exception ignored in shutdown function '.var_export($callback, true).':'.$e->getMessage());
             }
         }
 
index 262c1e8..de9b8a4 100644 (file)
@@ -158,7 +158,7 @@ function completion_can_view_data($userid, $course = null) {
 
     if (!is_object($course)) {
         $cid = $course;
-        $course = new object();
+        $course = new stdClass();
         $course->id = $cid;
     }
 
index cac0f6e..0d07797 100644 (file)
@@ -190,7 +190,7 @@ class component_installer {
      *               be expanded (default='' = moodledataitself)
      * @return object
      */
-    function component_installer ($sourcebase, $zippath, $zipfilename, $md5filename='', $destpath='') {
+    public function __construct($sourcebase, $zippath, $zipfilename, $md5filename='', $destpath='') {
 
         $this->sourcebase   = $sourcebase;
         $this->zippath      = $zippath;
@@ -206,6 +206,16 @@ class component_installer {
         $this->check_requisites();
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function component_installer($sourcebase, $zippath, $zipfilename, $md5filename='', $destpath='') {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($sourcebase, $zippath, $zipfilename, $md5filename, $destpath);
+    }
+
     /**
      * This function will check if everything is properly set to begin
      * one installation. Also, it will check for required settings
index 3bf4a07..54902d9 100644 (file)
@@ -1132,7 +1132,7 @@ $functions = array(
     ),
 
     // Tag functions.
-   'core_tag_update_tags' => array(
+    'core_tag_update_tags' => array(
         'classname'   => 'core_tag_external',
         'methodname'  => 'update_tags',
         'description' => 'Updates tags',
@@ -1197,6 +1197,7 @@ $services = array(
             'mod_forum_get_forum_discussion_posts',
             'mod_forum_add_discussion_post',
             'mod_forum_add_discussion',
+            'mod_forum_can_add_discussion',
             'core_files_get_files',
             'core_message_get_messages',
             'core_message_create_contacts',
@@ -1269,6 +1270,8 @@ $services = array(
             'mod_lti_view_lti',
             'mod_imscp_view_imscp',
             'mod_imscp_get_imscps_by_courses',
+            'mod_glossary_get_glossaries_by_courses',
+            'mod_wiki_get_wikis_by_courses',
             ),
         'enabled' => 0,
         'restrictedusers' => 0,
index fee0eca..4540c7e 100644 (file)
@@ -2431,10 +2431,14 @@ abstract class moodle_database {
      * automatically if exceptions not caught.
      *
      * @param moodle_transaction $transaction An instance of a moodle_transaction.
-     * @param Exception $e The related exception to this transaction rollback.
+     * @param Exception|Throwable $e The related exception/throwable to this transaction rollback.
      * @return void This does not return, instead the exception passed in will be rethrown.
      */
-    public function rollback_delegated_transaction(moodle_transaction $transaction, Exception $e) {
+    public function rollback_delegated_transaction(moodle_transaction $transaction, $e) {
+        if (!($e instanceof Exception) && !($e instanceof Throwable)) {
+            // PHP7 - we catch Throwables in phpunit but can't use that as the type hint in PHP5.
+            $e = new \coding_exception("Must be given an Exception or Throwable object!");
+        }
         if ($transaction->is_disposed()) {
             throw new dml_transaction_exception('Transactions already disposed', $transaction);
         }
index 106ffb8..839f98d 100644 (file)
@@ -95,10 +95,10 @@ class moodle_transaction {
     /**
      * Rollback all current delegated transactions.
      *
-     * @param Exception $e mandatory exception
+     * @param Exception|Throwable $e mandatory exception/throwable
      * @return void
      */
-    public function rollback(Exception $e) {
+    public function rollback($e) {
         if ($this->is_disposed()) {
             throw new dml_transaction_exception('Transactions already disposed', $this);
         }
index b31da4b..142e510 100644 (file)
@@ -13,10 +13,20 @@ class SpellChecker {
         *\r
         * @param $config Configuration name/value array.\r
         */\r
-       function SpellChecker(&$config) {\r
+       public function __construct(&$config) {\r
                $this->_config = $config;\r
        }\r
 \r
+    /**\r
+     * Old syntax of class constructor. Deprecated in PHP7.\r
+     *\r
+     * @deprecated since Moodle 3.1\r
+     */\r
+    public function SpellChecker(&$config) {\r
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);\r
+        self::__construct($config);\r
+    }\r
+\r
        /**\r
         * Simple loopback function everything that gets in will be send back.\r
         *\r
index 1f2b92c..a2ceb81 100644 (file)
@@ -29,7 +29,7 @@ class Moxiecode_JSONReader {
        var $_location, $_lastLocations;
        var $_needProp;
 
-       function Moxiecode_JSONReader($data) {
+       public function __construct($data) {
                $this->_data = $data;
                $this->_len = strlen($data);
                $this->_pos = -1;
@@ -38,6 +38,16 @@ class Moxiecode_JSONReader {
                $this->_needProp = false;
        }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function Moxiecode_JSONReader($data) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($data);
+    }
+
        function getToken() {
                return $this->_token;
        }
@@ -360,9 +370,19 @@ class Moxiecode_JSONReader {
  * @package MCManager.utils
  */
 class Moxiecode_JSON {
-       function Moxiecode_JSON() {
+       public function __construct() {
        }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function Moxiecode_JSON() {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct();
+    }
+
        function decode($input) {
                $reader = new Moxiecode_JSONReader($input);
 
index bc501ea..c48fb42 100644 (file)
@@ -31,7 +31,7 @@ class Moxiecode_Logger {
        /**\r
         * Constructs a new logger instance.\r
         */\r
-       function Moxiecode_Logger() {\r
+       public function __construct() {\r
                $this->_path = "";\r
                $this->_filename = "{level}.log";\r
                $this->setMaxSize("100k");\r
@@ -40,6 +40,16 @@ class Moxiecode_Logger {
                $this->_format = "[{time}] [{level}] {message}";\r
        }\r
 \r
+    /**\r
+     * Old syntax of class constructor. Deprecated in PHP7.\r
+     *\r
+     * @deprecated since Moodle 3.1\r
+     */\r
+    public function Moxiecode_Logger() {\r
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);\r
+        self::__construct();\r
+    }\r
+\r
        /**\r
         * Sets the current log level, use the MC_LOGGER constants.\r
         *\r
@@ -265,4 +275,4 @@ class Moxiecode_Logger {
        }\r
 }\r
 \r
-?>
\ No newline at end of file
+?>\r
index deb2af9..d72f19f 100644 (file)
@@ -8,3 +8,4 @@ List of changes:
 * Moved static files to /tinymce/ subfolder.
 * MDL-25736 - French spellchecker fixes.
 * Fix htmlentities conversion in GoogleSpell.php
+* Constructors in Moxiecode_JSONReader, Moxiecode_JSON, Moxiecode_Logger, SpellChecker are renamed to __construct()
index cd25167..13de804 100644 (file)
@@ -1260,7 +1260,7 @@ class environment_results {
      *
      * @param string $part
      */
-    function environment_results($part) {
+    public function __construct($part) {
         $this->part=$part;
         $this->status=false;
         $this->error_code=NO_ERROR;
@@ -1273,6 +1273,16 @@ class environment_results {
         $this->restrict_str='';
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function environment_results($part) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($part);
+    }
+
     /**
      * Set the status
      *
index 8f68d2a..af8a77d 100644 (file)
@@ -117,7 +117,7 @@ class EvalMath {
 
     var $allowimplicitmultiplication;
 
-    function EvalMath($allowconstants = false, $allowimplicitmultiplication = false) {
+    public function __construct($allowconstants = false, $allowimplicitmultiplication = false) {
         if ($allowconstants){
             $this->v['pi'] = pi();
             $this->v['e'] = exp(1);
@@ -125,6 +125,16 @@ class EvalMath {
         $this->allowimplicitmultiplication = $allowimplicitmultiplication;
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function EvalMath($allowconstants = false, $allowimplicitmultiplication = false) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($allowconstants, $allowimplicitmultiplication);
+    }
+
     function e($expr) {
         return $this->evaluate($expr);
     }
index 0105d56..e9b1a80 100644 (file)
@@ -11,8 +11,10 @@ Our changes:
 * made a function to test a string to see if it is a valid func or var name.
 * localized strings
 * added round, ceil and floor functions.
+* EvalMath::EvalMath() changed to EvalMath::__construct() and there is a new EvalMath::EvalMath
+  function to maintain backwards compatibility
 
 To see all changes diff against version 1.1, available from:
 http://www.phpclasses.org/browse/package/2695.html
 
-skodak, Tim Hunt
\ No newline at end of file
+skodak, Tim Hunt
index 26ae788..ff679d4 100644 (file)
@@ -55,7 +55,7 @@ class MoodleQuickForm_advcheckbox extends HTML_QuickForm_advcheckbox{
      *              or an associative array
      * @param mixed $values (optional) Values to pass if checked or not checked
      */
-    function MoodleQuickForm_advcheckbox($elementName=null, $elementLabel=null, $text=null, $attributes=null, $values=null)
+    public function __construct($elementName=null, $elementLabel=null, $text=null, $attributes=null, $values=null)
     {
         if ($values === null){
             $values = array(0, 1);
@@ -81,7 +81,17 @@ class MoodleQuickForm_advcheckbox extends HTML_QuickForm_advcheckbox{
             }
         }
 
-        parent::HTML_QuickForm_advcheckbox($elementName, $elementLabel, $text, $attributes, $values);
+        parent::__construct($elementName, $elementLabel, $text, $attributes, $values);
+    }
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_advcheckbox($elementName=null, $elementLabel=null, $text=null, $attributes=null, $values=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $text, $attributes, $values);
     }
 
     /**
index 206bc67..5cf63c2 100644 (file)
@@ -60,7 +60,7 @@ class MoodleQuickForm_autocomplete extends MoodleQuickForm_select {
      * @param mixed $attributes Either a typical HTML attribute string or an associative array. Special options
      *                          "tags", "placeholder", "ajax", "multiple", "casesensitive" are supported.
      */
-    function MoodleQuickForm_autocomplete($elementName=null, $elementLabel=null, $options=null, $attributes=null) {
+    public function __construct($elementName=null, $elementLabel=null, $options=null, $attributes=null) {
         // Even if the constructor gets called twice we do not really want 2x options (crazy forms!).
         $this->_options = array();
         if ($attributes === null) {
@@ -87,11 +87,21 @@ class MoodleQuickForm_autocomplete extends MoodleQuickForm_select {
             $this->casesensitive = $attributes['casesensitive'] ? true : false;
             unset($attributes['casesensitive']);
         }
-        parent::HTML_QuickForm_select($elementName, $elementLabel, $options, $attributes);
+        parent::__construct($elementName, $elementLabel, $options, $attributes);
 
         $this->_type = 'autocomplete';
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_autocomplete($elementName=null, $elementLabel=null, $options=null, $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $options, $attributes);
+    }
+
     /**
      * Returns HTML for select form element.
      *
index bfa9615..a69e217 100644 (file)
@@ -50,8 +50,18 @@ class MoodleQuickForm_button extends HTML_QuickForm_button
      * @param mixed $attributes (optional) Either a typical HTML attribute string
      *              or an associative array
      */
-    function MoodleQuickForm_button($elementName=null, $value=null, $attributes=null) {
-        parent::HTML_QuickForm_button($elementName, $value, $attributes);
+    public function __construct($elementName=null, $value=null, $attributes=null) {
+        parent::__construct($elementName, $value, $attributes);
+    }
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_button($elementName=null, $value=null, $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $value, $attributes);
     }
 
     /**
index 6674377..2a5764f 100644 (file)
@@ -52,7 +52,7 @@ class MoodleQuickForm_cancel extends MoodleQuickForm_submit
      * @param mixed $attributes (optional) Either a typical HTML attribute string
      *              or an associative array
      */
-    function MoodleQuickForm_cancel($elementName=null, $value=null, $attributes=null)
+    public function __construct($elementName=null, $value=null, $attributes=null)
     {
         if ($elementName==null){
             $elementName='cancel';
@@ -60,7 +60,7 @@ class MoodleQuickForm_cancel extends MoodleQuickForm_submit
         if ($value==null){
             $value=get_string('cancel');
         }
-        MoodleQuickForm_submit::MoodleQuickForm_submit($elementName, $value, $attributes);
+        parent::__construct($elementName, $value, $attributes);
         $this->updateAttributes(array('onclick'=>'skipClientValidation = true; return true;'));
 
         // Add the class btn-cancel.
@@ -71,6 +71,16 @@ class MoodleQuickForm_cancel extends MoodleQuickForm_submit
         $this->updateAttributes(array('class' => $class . ' btn-cancel'));
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_cancel($elementName=null, $value=null, $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $value, $attributes);
+    }
+
     /**
      * Called by HTML_QuickForm whenever form event is made on this element
      *
@@ -83,8 +93,7 @@ class MoodleQuickForm_cancel extends MoodleQuickForm_submit
     {
         switch ($event) {
             case 'createElement':
-                $className = get_class($this);
-                $this->$className($arg[0], $arg[1], $arg[2]);
+                static::__construct($arg[0], $arg[1], $arg[2]);
                 $caller->_registerCancelButton($this->getName());
                 return true;
                 break;
index 37397da..8aaecdd 100644 (file)
@@ -52,8 +52,18 @@ class MoodleQuickForm_checkbox extends HTML_QuickForm_checkbox{
      * @param mixed $attributes (optional) Either a typical HTML attribute string
      *              or an associative array
      */
-    function MoodleQuickForm_checkbox($elementName=null, $elementLabel=null, $text='', $attributes=null) {
-        parent::HTML_QuickForm_checkbox($elementName, $elementLabel, $text, $attributes);
+    public function __construct($elementName=null, $elementLabel=null, $text='', $attributes=null) {
+        parent::__construct($elementName, $elementLabel, $text, $attributes);
+    }
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_checkbox($elementName=null, $elementLabel=null, $text='', $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $text, $attributes);
     }
 
     /**
index 2332e99..29957e3 100644 (file)
@@ -75,12 +75,13 @@ class MoodleQuickForm_date_selector extends MoodleQuickForm_group {
      * @param array $options Options to control the element's display
      * @param mixed $attributes Either a typical HTML attribute string or an associative array
      */
-    function MoodleQuickForm_date_selector($elementName = null, $elementLabel = null, $options = array(), $attributes = null) {
+    public function __construct($elementName = null, $elementLabel = null, $options = array(), $attributes = null) {
         // Get the calendar type used - see MDL-18375.
         $calendartype = \core_calendar\type_factory::get_calendar_instance();
         $this->_options = array('startyear' => $calendartype->get_min_year(), 'stopyear' => $calendartype->get_max_year(),
             'defaulttime' => 0, 'timezone' => 99, 'step' => 5, 'optional' => false);
-        $this->HTML_QuickForm_element($elementName, $elementLabel, $attributes);
+        // TODO MDL-52313 Replace with the call to parent::__construct().
+        HTML_QuickForm_element::__construct($elementName, $elementLabel, $attributes);
         $this->_persistantFreeze = true;
         $this->_appendName = true;
         $this->_type = 'date_selector';
@@ -103,6 +104,16 @@ class MoodleQuickForm_date_selector extends MoodleQuickForm_group {
         }
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_date_selector($elementName = null, $elementLabel = null, $options = array(), $attributes = null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $options, $attributes);
+    }
+
     /**
      * This will create date group element constisting of day, month and year.
      *
index 3153f34..8055f02 100644 (file)
@@ -77,13 +77,14 @@ class MoodleQuickForm_date_time_selector extends MoodleQuickForm_group {
      * @param array $options Options to control the element's display
      * @param mixed $attributes Either a typical HTML attribute string or an associative array
      */
-    function MoodleQuickForm_date_time_selector($elementName = null, $elementLabel = null, $options = array(), $attributes = null) {
+    public function __construct($elementName = null, $elementLabel = null, $options = array(), $attributes = null) {
         // Get the calendar type used - see MDL-18375.
         $calendartype = \core_calendar\type_factory::get_calendar_instance();
         $this->_options = array('startyear' => $calendartype->get_min_year(), 'stopyear' => $calendartype->get_max_year(),
             'defaulttime' => 0, 'timezone' => 99, 'step' => 5, 'optional' => false);
 
-        $this->HTML_QuickForm_element($elementName, $elementLabel, $attributes);
+        // TODO MDL-52313 Replace with the call to parent::__construct().
+        HTML_QuickForm_element::__construct($elementName, $elementLabel, $attributes);
         $this->_persistantFreeze = true;
         $this->_appendName = true;
         $this->_type = 'date_time_selector';
@@ -106,6 +107,16 @@ class MoodleQuickForm_date_time_selector extends MoodleQuickForm_group {
         }
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_date_time_selector($elementName = null, $elementLabel = null, $options = array(), $attributes = null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $options, $attributes);
+    }
+
     /**
      * This will create date group element constisting of day, month and year.
      *
index 4298f00..ab2d434 100644 (file)
@@ -63,8 +63,9 @@ class MoodleQuickForm_duration extends MoodleQuickForm_group {
     *              If not specified, minutes is used.
     * @param mixed $attributes Either a typical HTML attribute string or an associative array
     */
-    function MoodleQuickForm_duration($elementName = null, $elementLabel = null, $options = array(), $attributes = null) {
-        $this->HTML_QuickForm_element($elementName, $elementLabel, $attributes);
+    public function __construct($elementName = null, $elementLabel = null, $options = array(), $attributes = null) {
+        // TODO MDL-52313 Replace with the call to parent::__construct().
+        HTML_QuickForm_element::__construct($elementName, $elementLabel, $attributes);
         $this->_persistantFreeze = true;
         $this->_appendName = true;
         $this->_type = 'duration';
@@ -83,6 +84,16 @@ class MoodleQuickForm_duration extends MoodleQuickForm_group {
         }
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_duration($elementName = null, $elementLabel = null, $options = array(), $attributes = null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $options, $attributes);
+    }
+
     /**
      * Returns time associative array of unit length.
      *
index 0c18b21..4e06505 100644 (file)
@@ -68,7 +68,7 @@ class MoodleQuickForm_editor extends HTML_QuickForm_element {
      *              or an associative array
      * @param array $options set of options to initalize filepicker
      */
-    function MoodleQuickForm_editor($elementName=null, $elementLabel=null, $attributes=null, $options=null) {
+    public function __construct($elementName=null, $elementLabel=null, $attributes=null, $options=null) {
         global $CFG, $PAGE;
 
         $options = (array)$options;
@@ -89,7 +89,7 @@ class MoodleQuickForm_editor extends HTML_QuickForm_element {
             }
         }
         $this->_options['trusted'] = trusttext_trusted($this->_options['context']);
-        parent::HTML_QuickForm_element($elementName, $elementLabel, $attributes);
+        parent::__construct($elementName, $elementLabel, $attributes);
 
         // Note: for some reason the code using this setting does not like bools.
         $this->_options['subdirs'] = (int)($this->_options['subdirs'] == 1);
@@ -97,6 +97,16 @@ class MoodleQuickForm_editor extends HTML_QuickForm_element {
         editors_head_setup();
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_editor($elementName=null, $elementLabel=null, $attributes=null, $options=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $attributes, $options);
+    }
+
     /**
      * Called by HTML_QuickForm whenever form event is made on this element
      *
index 8140fec..d525253 100644 (file)
@@ -60,7 +60,7 @@ class MoodleQuickForm_filemanager extends HTML_QuickForm_element {
      *              or an associative array
      * @param array $options set of options to initalize filemanager
      */
-    function MoodleQuickForm_filemanager($elementName=null, $elementLabel=null, $attributes=null, $options=null) {
+    public function __construct($elementName=null, $elementLabel=null, $attributes=null, $options=null) {
         global $CFG, $PAGE;
 
         $options = (array)$options;
@@ -76,7 +76,17 @@ class MoodleQuickForm_filemanager extends HTML_QuickForm_element {
             $this->_options['return_types'] = (FILE_INTERNAL | FILE_REFERENCE);
         }
         $this->_type = 'filemanager';
-        parent::HTML_QuickForm_element($elementName, $elementLabel, $attributes);
+        parent::__construct($elementName, $elementLabel, $attributes);
+    }
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_filemanager($elementName=null, $elementLabel=null, $attributes=null, $options=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $attributes, $options);
     }
 
     /**
index da5aff8..1634096 100644 (file)
@@ -59,7 +59,7 @@ class MoodleQuickForm_filepicker extends HTML_QuickForm_input {
      *              or an associative array
      * @param array $options set of options to initalize filepicker
      */
-    function MoodleQuickForm_filepicker($elementName=null, $elementLabel=null, $attributes=null, $options=null) {
+    public function __construct($elementName=null, $elementLabel=null, $attributes=null, $options=null) {
         global $CFG, $PAGE;
 
         $options = (array)$options;
@@ -81,7 +81,17 @@ class MoodleQuickForm_filepicker extends HTML_QuickForm_input {
         }
         $this->_options['maxbytes'] = get_user_max_upload_file_size($PAGE->context, $CFG->maxbytes, $coursemaxbytes, $fpmaxbytes);
         $this->_type = 'filepicker';
-        parent::HTML_QuickForm_input($elementName, $elementLabel, $attributes);
+        parent::__construct($elementName, $elementLabel, $attributes);
+    }
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_filepicker($elementName=null, $elementLabel=null, $attributes=null, $options=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $attributes, $options);
     }
 
     /**
index 18191dd..c47de8a 100644 (file)
@@ -61,11 +61,21 @@ class MoodleQuickForm_grading extends HTML_QuickForm_input{
      * @param mixed $elementLabel Label(s) for the input field
      * @param mixed $attributes Either a typical HTML attribute string or an associative array
      */
-    public function MoodleQuickForm_grading($elementName=null, $elementLabel=null, $attributes=null) {
-        parent::HTML_QuickForm_input($elementName, $elementLabel, $attributes);
+    public function __construct($elementName=null, $elementLabel=null, $attributes=null) {
+        parent::__construct($elementName, $elementLabel, $attributes);
         $this->gradingattributes = $attributes;
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_grading($elementName=null, $elementLabel=null, $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $attributes);
+    }
+
     /**
      * Helper function to retrieve gradingform_instance passed in element attributes
      *
index 3d95d9f..753977f 100644 (file)
@@ -50,8 +50,18 @@ class MoodleQuickForm_group extends HTML_QuickForm_group{
      * @param string $separator (optional) string to seperate elements.
      * @param string $appendName (optional) string to appened to grouped elements.
      */
-    function MoodleQuickForm_group($elementName=null, $elementLabel=null, $elements=null, $separator=null, $appendName = true) {
-        parent::HTML_QuickForm_group($elementName, $elementLabel, $elements, $separator, $appendName);
+    public function __construct($elementName=null, $elementLabel=null, $elements=null, $separator=null, $appendName = true) {
+        parent::__construct($elementName, $elementLabel, $elements, $separator, $appendName);
+    }
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_group($elementName=null, $elementLabel=null, $elements=null, $separator=null, $appendName = true) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $elements, $separator, $appendName);
     }
 
     /** @var string template type, would cause problems with client side validation so will leave for now */
index 36c5a08..f5f1ed5 100644 (file)
@@ -48,8 +48,18 @@ class MoodleQuickForm_header extends HTML_QuickForm_header
      * @param string $elementName name of the header element
      * @param string $text text displayed in header element
      */
-    function MoodleQuickForm_header($elementName = null, $text = null) {
-        parent::HTML_QuickForm_header($elementName, $text);
+    public function __construct($elementName = null, $text = null) {
+        parent::__construct($elementName, $text);
+    }
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_header($elementName = null, $text = null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $text);
     }
 
    /**
index 6c2f239..d21c029 100644 (file)
@@ -49,8 +49,18 @@ class MoodleQuickForm_hidden extends HTML_QuickForm_hidden{
      * @param mixed  $attributes (optional) Either a typical HTML attribute string
      *               or an associative array
      */
-    function MoodleQuickForm_hidden($elementName=null, $value='', $attributes=null) {
-        parent::HTML_QuickForm_hidden($elementName, $value, $attributes);
+    public function __construct($elementName=null, $value='', $attributes=null) {
+        parent::__construct($elementName, $value, $attributes);
+    }
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_hidden($elementName=null, $value='', $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        return self::__construct($elementName, $value, $attributes);
     }
 
     /**
index adddc3f..32353d6 100644 (file)
@@ -54,8 +54,8 @@ class MoodleQuickForm_htmleditor extends MoodleQuickForm_textarea{
      * @param array $attributes (optional) Either a typical HTML attribute string
      *              or an associative array
      */
-    function MoodleQuickForm_htmleditor($elementName=null, $elementLabel=null, $options=array(), $attributes=null){
-        parent::MoodleQuickForm_textarea($elementName, $elementLabel, $attributes);
+    public function __construct($elementName=null, $elementLabel=null, $options=array(), $attributes=null){
+        parent::__construct($elementName, $elementLabel, $attributes);
         // set the options, do not bother setting bogus ones
         if (is_array($options)) {
             foreach ($options as $name => $value) {
@@ -73,6 +73,16 @@ class MoodleQuickForm_htmleditor extends MoodleQuickForm_textarea{
         editors_head_setup();
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_htmleditor($elementName=null, $elementLabel=null, $options=array(), $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $options, $attributes);
+    }
+
     /**
      * Returns the input field in HTML
      *
index 102b492..cd9477c 100644 (file)
@@ -73,7 +73,7 @@ class MoodleQuickForm_listing extends HTML_QuickForm_input {
      * @param array $attributes (optional) Either a typical HTML attribute string or an associative array.
      * @param array $options set of options to initalize listing.
      */
-    function MoodleQuickForm_listing($elementName=null, $elementLabel=null, $attributes=null, $options=array()) {
+    public function __construct($elementName=null, $elementLabel=null, $attributes=null, $options=array()) {
 
        $this->_type = 'listing';
         if (!empty($options['items'])) {
@@ -89,7 +89,17 @@ class MoodleQuickForm_listing extends HTML_QuickForm_input {
         } else {
             $this->hideall = get_string('hide');
         }
-        parent::HTML_QuickForm_input($elementName, $elementLabel, $attributes);
+        parent::__construct($elementName, $elementLabel, $attributes);
+    }
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_listing($elementName=null, $elementLabel=null, $attributes=null, $options=array()) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $attributes, $options);
     }
 
     /**
index d76122b..dd8ccce 100644 (file)
@@ -53,13 +53,24 @@ class MoodleQuickForm_modgrade extends MoodleQuickForm_group{
      * @param array $options Options to control the element's display. Not used.
      * @param mixed $attributes Either a typical HTML attribute string or an associative array
      */
-    public function MoodleQuickForm_modgrade($elementname = null, $elementlabel = null, $options = array(), $attributes = null) {
-        $this->HTML_QuickForm_element($elementname, $elementlabel, $attributes);
+    public function __construct($elementname = null, $elementlabel = null, $options = array(), $attributes = null) {
+        // TODO MDL-52313 Replace with the call to parent::__construct().
+        HTML_QuickForm_element::__construct($elementname, $elementlabel, $attributes);
         $this->_persistantFreeze = true;
         $this->_appendName = true;
         $this->_type = 'modgrade';
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_modgrade($elementname = null, $elementlabel = null, $options = array(), $attributes = null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementname, $elementlabel, $options, $attributes);
+    }
+
     /**
      * Create elements for this group.
      */
index 2a6acd9..ddc4a6f 100644 (file)
@@ -48,12 +48,20 @@ class MoodleQuickForm_modvisible extends MoodleQuickForm_select{
      * @param mixed $attributes Either a typical HTML attribute string or an associative array
      * @param array $options ignored
      */
-    function MoodleQuickForm_modvisible($elementName=null, $elementLabel=null, $attributes=null, $options=null)
-    {
-        HTML_QuickForm_element::HTML_QuickForm_element($elementName, $elementLabel, $attributes, null);
+    public function __construct($elementName=null, $elementLabel=null, $attributes=null, $options=null) {
+        // TODO MDL-52313 Replace with the call to parent::__construct().
+        HTML_QuickForm_element::__construct($elementName, $elementLabel, $attributes, null);
         $this->_type = 'modvisible';
+    }
 
-
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_modvisible($elementName=null, $elementLabel=null, $attributes=null, $options=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $attributes, $options);
     }
 
     /**
index 4265ec6..82153bc 100644 (file)
@@ -49,7 +49,7 @@ class MoodleQuickForm_password extends HTML_QuickForm_password{
      * @param mixed $attributes (optional) Either a typical HTML attribute string
      *              or an associative array
      */
-    function MoodleQuickForm_password($elementName=null, $elementLabel=null, $attributes=null) {
+    public function __construct($elementName=null, $elementLabel=null, $attributes=null) {
         global $CFG;
         // no standard mform in moodle should allow autocomplete of passwords
         if (empty($attributes)) {
@@ -62,7 +62,17 @@ class MoodleQuickForm_password extends HTML_QuickForm_password{
             }
         }
 
-        parent::HTML_QuickForm_password($elementName, $elementLabel, $attributes);
+        parent::__construct($elementName, $elementLabel, $attributes);
+    }
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_password($elementName=null, $elementLabel=null, $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $attributes);
     }
 
     /**
index 15bd4bc..b8d4102 100644 (file)
@@ -51,7 +51,7 @@ class MoodleQuickForm_passwordunmask extends MoodleQuickForm_password {
      * @param mixed $attributes (optional) Either a typical HTML attribute string
      *              or an associative array
      */
-    function MoodleQuickForm_passwordunmask($elementName=null, $elementLabel=null, $attributes=null) {
+    public function __construct($elementName=null, $elementLabel=null, $attributes=null) {
         global $CFG;
         // no standard mform in moodle should allow autocomplete of passwords
         if (empty($attributes)) {
@@ -64,7 +64,17 @@ class MoodleQuickForm_passwordunmask extends MoodleQuickForm_password {
             }
         }
 
-        parent::MoodleQuickForm_password($elementName, $elementLabel, $attributes);
+        parent::__construct($elementName, $elementLabel, $attributes);
+    }
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_passwordunmask($elementName=null, $elementLabel=null, $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $attributes);
     }
 
     /**
index 4f7d999..8ebe1d0 100644 (file)
@@ -53,8 +53,8 @@ class MoodleQuickForm_questioncategory extends MoodleQuickForm_selectgroups {
      *              from moodlelib.php.
      * @param mixed $attributes Either a typical HTML attribute string or an associative array
      */
-    function MoodleQuickForm_questioncategory($elementName = null, $elementLabel = null, $options = null, $attributes = null) {
-        MoodleQuickForm_selectgroups::MoodleQuickForm_selectgroups($elementName, $elementLabel, array(), $attributes);
+    public function __construct($elementName = null, $elementLabel = null, $options = null, $attributes = null) {
+        parent::__construct($elementName, $elementLabel, array(), $attributes);
         $this->_type = 'questioncategory';
         if (is_array($options)) {
             $this->_options = $options + $this->_options;
@@ -64,4 +64,13 @@ class MoodleQuickForm_questioncategory extends MoodleQuickForm_selectgroups {
         }
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_questioncategory($elementName = null, $elementLabel = null, $options = null, $attributes = null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $options, $attributes);
+    }
 }
index 6aaa780..3f6a731 100644 (file)
@@ -51,8 +51,18 @@ class MoodleQuickForm_radio extends HTML_QuickForm_radio{
      * @param mixed $attributes (optional) Either a typical HTML attribute string
      *              or an associative array
      */
-    function MoodleQuickForm_radio($elementName=null, $elementLabel=null, $text=null, $value=null, $attributes=null) {
-        parent::HTML_QuickForm_radio($elementName, $elementLabel, $text, $value, $attributes);
+    public function __construct($elementName=null, $elementLabel=null, $text=null, $value=null, $attributes=null) {
+        parent::__construct($elementName, $elementLabel, $text, $value, $attributes);
+    }
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_radio($elementName=null, $elementLabel=null, $text=null, $value=null, $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $text, $value, $attributes);
     }
 
     /**
index 2080088..f043353 100644 (file)
@@ -53,9 +53,9 @@ class MoodleQuickForm_recaptcha extends HTML_QuickForm_input {
      * @param mixed $attributes (optional) Either a typical HTML attribute string
      *              or an associative array
      */
-    function MoodleQuickForm_recaptcha($elementName = null, $elementLabel = null, $attributes = null) {
+    public function __construct($elementName = null, $elementLabel = null, $attributes = null) {
         global $CFG;
-        parent::HTML_QuickForm_input($elementName, $elementLabel, $attributes);
+        parent::__construct($elementName, $elementLabel, $attributes);
         $this->_type = 'recaptcha';
         if (is_https()) {
             $this->_https = true;
@@ -64,6 +64,16 @@ class MoodleQuickForm_recaptcha extends HTML_QuickForm_input {
         }
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_recaptcha($elementName = null, $elementLabel = null, $attributes = null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $attributes);
+    }
+
     /**
      * Returns the recaptcha element in HTML
      *
index 681549b..458a23c 100644 (file)
@@ -49,12 +49,22 @@ class MoodleQuickForm_searchableselector extends MoodleQuickForm_select{
      * @param array $options additional options.
      * @param mixed $attributes Either a typical HTML attribute string or an associative array
      */
-    function MoodleQuickForm_searchableselector($elementName=null, $elementLabel=null, $options=null, $attributes=null) {
+    public function __construct($elementName=null, $elementLabel=null, $options=null, $attributes=null) {
         //set size default to 12
         if (empty($attributes) || empty($attributes['size'])) {
             $attributes['size'] = 12;
         }
-        parent::MoodleQuickForm_select($elementName, $elementLabel, $options, $attributes);
+        parent::__construct($elementName, $elementLabel, $options, $attributes);
+    }
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_searchableselector($elementName=null, $elementLabel=null, $options=null, $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $options, $attributes);
     }
 
     /**
index 8b0beba..aa888cb 100644 (file)
@@ -52,8 +52,18 @@ class MoodleQuickForm_select extends HTML_QuickForm_select{
      * @param mixed $options Data to be used to populate options
      * @param mixed $attributes Either a typical HTML attribute string or an associative array
      */
-    function MoodleQuickForm_select($elementName=null, $elementLabel=null, $options=null, $attributes=null) {
-        parent::HTML_QuickForm_select($elementName, $elementLabel, $options, $attributes);
+    public function __construct($elementName=null, $elementLabel=null, $options=null, $attributes=null) {
+        parent::__construct($elementName, $elementLabel, $options, $attributes);
+    }
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_select($elementName=null, $elementLabel=null, $options=null, $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $options, $attributes);
     }
 
     /**
index 2d5dd63..c942acb 100644 (file)
@@ -63,10 +63,10 @@ class MoodleQuickForm_selectgroups extends HTML_QuickForm_element {
      * @param mixed $attributes Either a typical HTML attribute string or an associative array
      * @param bool $showchoose add standard moodle "Choose..." option as first item
      */
-    function MoodleQuickForm_selectgroups($elementName=null, $elementLabel=null, $optgrps=null, $attributes=null, $showchoose=false)
+    public function __construct($elementName=null, $elementLabel=null, $optgrps=null, $attributes=null, $showchoose=false)
     {
         $this->showchoose = $showchoose;
-        HTML_QuickForm_element::HTML_QuickForm_element($elementName, $elementLabel, $attributes);
+        parent::__construct($elementName, $elementLabel, $attributes);
         $this->_persistantFreeze = true;
         $this->_type = 'selectgroups';
         if (isset($optgrps)) {
@@ -74,6 +74,16 @@ class MoodleQuickForm_selectgroups extends HTML_QuickForm_element {
         }
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_selectgroups($elementName=null, $elementLabel=null, $optgrps=null, $attributes=null, $showchoose=false) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $optgrps, $attributes, $showchoose);
+    }
+
     /**
      * Sets the default values of the select box
      *
index 4377b31..78832d9 100644 (file)
@@ -62,8 +62,7 @@ class MoodleQuickForm_selectwithlink extends HTML_QuickForm_select{
      * @param mixed $attributes Either a typical HTML attribute string or an associative array
      * @param bool $linkdata data to be posted
      */
-    function MoodleQuickForm_selectwithlink($elementName=null, $elementLabel=null, $options=null, $attributes=null, $linkdata=null)
-    {
+    public function __construct($elementName=null, $elementLabel=null, $options=null, $attributes=null, $linkdata=null) {
         if (!empty($linkdata['link']) && !empty($linkdata['label'])) {
             $this->_link = $linkdata['link'];
             $this->_linklabel = $linkdata['label'];
@@ -73,7 +72,17 @@ class MoodleQuickForm_selectwithlink extends HTML_QuickForm_select{
             $this->_linkreturn = $linkdata['return'];
         }
 
-        parent::HTML_QuickForm_select($elementName, $elementLabel, $options, $attributes);
+        parent::__construct($elementName, $elementLabel, $options, $attributes);
+    }
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_selectwithlink($elementName=null, $elementLabel=null, $options=null, $attributes=null, $linkdata=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $options, $attributes, $linkdata);
     }
 
     /**
index d88a276..7764fbb 100644 (file)
@@ -47,13 +47,23 @@ class MoodleQuickForm_selectyesno extends MoodleQuickForm_select{
      * @param mixed $attributes Either a typical HTML attribute string or an associative array
      * @param mixed $options ignored, not used.
      */
-    function MoodleQuickForm_selectyesno($elementName=null, $elementLabel=null, $attributes=null, $options=null)
-    {
-        HTML_QuickForm_element::HTML_QuickForm_element($elementName, $elementLabel, $attributes, null);
+    public function __construct($elementName=null, $elementLabel=null, $attributes=null, $options=null) {
+        // TODO MDL-52313 Replace with the call to parent::__construct().
+        HTML_QuickForm_element::__construct($elementName, $elementLabel, $attributes, null);
         $this->_type = 'selectyesno';
         $this->_persistantFreeze = true;
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_selectyesno($elementName=null, $elementLabel=null, $attributes=null, $options=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $attributes, $options);
+    }
+
     /**
      * Called by HTML_QuickForm whenever form event is made on this element
      *
index 716b026..391be8e 100644 (file)
@@ -51,8 +51,18 @@ class MoodleQuickForm_static extends HTML_QuickForm_static{
      * @param string $elementLabel (optional) text field label
      * @param string $text (optional) Text to put in text field
      */
-    function MoodleQuickForm_static($elementName=null, $elementLabel=null, $text=null) {
-        parent::HTML_QuickForm_static($elementName, $elementLabel, $text);
+    public function __construct($elementName=null, $elementLabel=null, $text=null) {
+        parent::__construct($elementName, $elementLabel, $text);
+    }
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_static($elementName=null, $elementLabel=null, $text=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $text);
     }
 
     /**
index af94e4f..c0e2d96 100644 (file)
@@ -45,8 +45,18 @@ class MoodleQuickForm_submit extends HTML_QuickForm_submit {
      * @param string $value (optional) field label
      * @param string $attributes (optional) Either a typical HTML attribute string or an associative array
      */
-    function MoodleQuickForm_submit($elementName=null, $value=null, $attributes=null) {
-        parent::HTML_QuickForm_submit($elementName, $value, $attributes);
+    public function __construct($elementName=null, $value=null, $attributes=null) {
+        parent::__construct($elementName, $value, $attributes);
+    }
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_submit($elementName=null, $value=null, $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $value, $attributes);
     }
 
     /**
index 9b7b5e0..bf238a5 100644 (file)
@@ -51,8 +51,18 @@ class MoodleQuickForm_submitlink extends MoodleQuickForm_submit {
      * @param string $value (optional) field label
      * @param string $attributes (optional) Either a typical HTML attribute string or an associative array
      */
-    function MoodleQuickForm_submitlink($elementName=null, $value=null, $attributes=null) {
-        parent::MoodleQuickForm_submit($elementName, $value, $attributes);
+    public function __construct($elementName=null, $value=null, $attributes=null) {
+        parent::__construct($elementName, $value, $attributes);
+    }
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_submitlink($elementName=null, $value=null, $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $value, $attributes);
     }
 
     /**
index 961a262..a472767 100644 (file)
@@ -71,7 +71,7 @@ class MoodleQuickForm_tags extends MoodleQuickForm_autocomplete {
      * @param array $options Options to control the element's display
      * @param mixed $attributes Either a typical HTML attribute string or an associative array.
      */
-    function MoodleQuickForm_tags($elementName = null, $elementLabel = null, $options = array(), $attributes = null) {
+    public function __construct($elementName = null, $elementLabel = null, $options = array(), $attributes = null) {
         if (!isset($options['display'])) {
             $options['display'] = self::DEFAULTUI;
         }
@@ -92,7 +92,17 @@ class MoodleQuickForm_tags extends MoodleQuickForm_autocomplete {
         $attributes['placeholder'] = get_string('entertags', 'tag');
         $attributes['showsuggestions'] = $this->showingofficial;
 
-        parent::MoodleQuickForm_autocomplete($elementName, $elementLabel, $validoptions, $attributes);
+        parent::__construct($elementName, $elementLabel, $validoptions, $attributes);
+    }
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_tags($elementName = null, $elementLabel = null, $options = array(), $attributes = null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $options, $attributes);
     }
 
     /**
index 97a0219..a1af03b 100644 (file)
@@ -51,8 +51,18 @@ class MoodleQuickForm_text extends HTML_QuickForm_text{
      * @param string $elementLabel (optional) text field label
      * @param string $attributes (optional) Either a typical HTML attribute string or an associative array
      */
-    function MoodleQuickForm_text($elementName=null, $elementLabel=null, $attributes=null) {
-        parent::HTML_QuickForm_text($elementName, $elementLabel, $attributes);
+    public function __construct($elementName=null, $elementLabel=null, $attributes=null) {
+        parent::__construct($elementName, $elementLabel, $attributes);
+    }
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_text($elementName=null, $elementLabel=null, $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $attributes);
     }
 
     /**
index f03b610..273fff5 100644 (file)
@@ -54,8 +54,18 @@ class MoodleQuickForm_textarea extends HTML_QuickForm_textarea{
      * @param string $elementLabel (optional) text field label
      * @param string $attributes (optional) Either a typical HTML attribute string or an associative array
      */
-    function MoodleQuickForm_textarea($elementName=null, $elementLabel=null, $attributes=null) {
-        parent::HTML_QuickForm_textarea($elementName, $elementLabel, $attributes);
+    public function __construct($elementName=null, $elementLabel=null, $attributes=null) {
+        parent::__construct($elementName, $elementLabel, $attributes);
+    }
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_textarea($elementName=null, $elementLabel=null, $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $attributes);
     }
 
     /**
index 2e62463..4a22571 100644 (file)
@@ -51,7 +51,7 @@ class MoodleQuickForm_url extends HTML_QuickForm_text{
      * @param mixed $attributes Either a typical HTML attribute string or an associative array.
      * @param array $options data which need to be posted.
      */
-    function MoodleQuickForm_url($elementName=null, $elementLabel=null, $attributes=null, $options=null) {
+    public function __construct($elementName=null, $elementLabel=null, $attributes=null, $options=null) {
         global $CFG;
         require_once("$CFG->dirroot/repository/lib.php");
         $options = (array)$options;
@@ -61,7 +61,17 @@ class MoodleQuickForm_url extends HTML_QuickForm_text{
         if (!isset($this->_options['usefilepicker'])) {
             $this->_options['usefilepicker'] = true;
         }
-        parent::HTML_QuickForm_text($elementName, $elementLabel, $attributes);
+        parent::__construct($elementName, $elementLabel, $attributes);
+    }
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_url($elementName=null, $elementLabel=null, $attributes=null, $options=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $attributes, $options);
     }
 
     /**
index 90865ea..38c21a3 100644 (file)
@@ -53,8 +53,8 @@ class MoodleQuickForm_warning extends HTML_QuickForm_static{
      * @param string $elementClass (optional) show as warning or notification => 'notifyproblem'
      * @param string $text (optional) Text to put in warning field
      */
-    function MoodleQuickForm_warning($elementName=null, $elementClass='notifyproblem', $text=null) {
-        parent::HTML_QuickForm_static($elementName, null, $text);
+    public function __construct($elementName=null, $elementClass='notifyproblem', $text=null) {
+        parent::__construct($elementName, null, $text);
         $this->_type = 'warning';
         if (is_null($elementClass)) {
             $elementClass = 'notifyproblem';
@@ -62,6 +62,16 @@ class MoodleQuickForm_warning extends HTML_QuickForm_static{
         $this->_class = $elementClass;
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_warning($elementName=null, $elementClass='notifyproblem', $text=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementClass, $text);
+    }
+
     /**
      * Returns HTML for this form element.
      *
index e65979c..6192514 100644 (file)
@@ -157,7 +157,7 @@ abstract class moodleform {
      * @param mixed $attributes you can pass a string of html attributes here or an array.
      * @param bool $editable
      */
-    function moodleform($action=null, $customdata=null, $method='post', $target='', $attributes=null, $editable=true) {
+    public function __construct($action=null, $customdata=null, $method='post', $target='', $attributes=null, $editable=true) {
         global $CFG, $FULLME;
         // no standard mform in moodle should allow autocomplete with the exception of user signup
         if (empty($attributes)) {
@@ -207,6 +207,16 @@ abstract class moodleform {
         $this->_process_submission($method);
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function moodleform($action=null, $customdata=null, $method='post', $target='', $attributes=null, $editable=true) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($action, $customdata, $method, $target, $attributes, $editable);
+    }
+
     /**
      * It should returns unique identifier for the form.
      * Currently it will return class name, but in case two same forms have to be
@@ -1426,12 +1436,13 @@ class MoodleQuickForm extends HTML_QuickForm_DHTMLRulesTableless {
      * @param string $target (optional)Form's target defaults to none
      * @param mixed $attributes (optional)Extra attributes for <form> tag
      */
-    function MoodleQuickForm($formName, $method, $action, $target='', $attributes=null){
+    public function __construct($formName, $method, $action, $target='', $attributes=null) {
         global $CFG, $OUTPUT;
 
         static $formcounter = 1;
 
-        HTML_Common::HTML_Common($attributes);
+        // TODO MDL-52313 Replace with the call to parent::__construct().
+        HTML_Common::__construct($attributes);
         $target = empty($target) ? array() : array('target' => $target);
         $this->_formName = $formName;
         if (is_a($action, 'moodle_url')){
@@ -1460,6 +1471,16 @@ class MoodleQuickForm extends HTML_QuickForm_DHTMLRulesTableless {
         $this->setRequiredNote(get_string('somefieldsrequired', 'form', '<img alt="'.get_string('requiredelement', 'form').'" src="'.$OUTPUT->pix_url('req') .'" />'));
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm($formName, $method, $action, $target='', $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($formName, $method, $action, $target, $attributes);
+    }
+
     /**
      * Use this method to indicate an element in a form is an advanced field. If items in a form
      * are marked as advanced then 'Hide/Show Advanced' buttons will automatically be displayed in the
@@ -2594,7 +2615,7 @@ class MoodleQuickForm_Renderer extends HTML_QuickForm_Renderer_Tableless{
     /**
      * Constructor
      */
-    function MoodleQuickForm_Renderer(){
+    public function __construct() {
         // switch next two lines for ol li containers for form items.
         //        $this->_elementTemplates=array('default'=>"\n\t\t".'<li class="fitem"><label>{label}{help}<!-- BEGIN required -->{req}<!-- END required --></label><div class="qfelement<!-- BEGIN error --> error<!-- END error --> {type}"><!-- BEGIN error --><span class="error">{error}</span><br /><!-- END error -->{element}</div></li>');
         $this->_elementTemplates = array(
@@ -2610,7 +2631,17 @@ class MoodleQuickForm_Renderer extends HTML_QuickForm_Renderer_Tableless{
 
         'nodisplay'=>'');
 
-        parent::HTML_QuickForm_Renderer_Tableless();
+        parent::__construct();
+    }
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function MoodleQuickForm_Renderer() {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct();
     }
 
     /**
index 5b11a82..64db34a 100644 (file)
@@ -1173,7 +1173,7 @@ class graph {
       return array('min' => $min, 'max' => $max);
     }
 
-    function graph() {
+    public function __construct() {
       if (func_num_args() == 2) {
         $this->parameter['width']  = func_get_arg(0);
         $this->parameter['height'] = func_get_arg(1);
@@ -1190,6 +1190,16 @@ class graph {
       //ImageColorTransparent($this->image, $this->colour['white']); // colour for transparency
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function graph() {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct();
+    }
+
     /**
      * Prepare label's text for GD output.
      *
index 0b3b6ab..a60b72a 100644 (file)
@@ -3245,7 +3245,7 @@ class Horde_Imap_Client_Socket extends Horde_Imap_Client_Base
 
             if (is_string($val)) {
                 // These entries are text fields.
-                $ret->$env_data[$key] = substr($val, 0, $env_str);
+                $ret->{$env_data[$key]} = substr($val, 0, $env_str);
             } else {
                 // These entries are address structures.
                 $group = null;
@@ -3287,7 +3287,7 @@ class Horde_Imap_Client_Socket extends Horde_Imap_Client_Base
                     }
                 }
 
-                $ret->$env_data[$key] = $tmp;
+                $ret->{$env_data[$key]} = $tmp;
             }
 
             ++$key;
index 3fe916b..2743562 100644 (file)
@@ -8,6 +8,7 @@ Description of import of Horde libraries
 # Copy the following script and store it on /tmp, change it's execute bit, and run it, passing
   in your path to Horde (the directory you've cloned the repository):
     /tmp/copyhorde.sh ~/git/ext/horde/
+# MDL-52361 patched for PHP7 compatibility, after upgrade make sure it's updated upstream and remove this line
 
 ====
 #!/bin/sh
index d69ed35..8f033c9 100644 (file)
@@ -337,6 +337,7 @@ function install_print_header($config, $stagename, $heading, $stagetext, $stagec
 
     echo '<link rel="stylesheet" type="text/css" href="'.$CFG->wwwroot.'/install/css.php" />
           <title>'.get_string('installation','install').' - Moodle '.$CFG->target_release.'</title>
+          <meta name="robots" content="noindex">
           <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
           <meta http-equiv="pragma" content="no-cache" />
           <meta http-equiv="expires" content="0" />';
index 73ab3fe..5c71426 100644 (file)
@@ -564,7 +564,7 @@ class XMPPHP_XMLStream {
                                                if ($searchxml !== null) {
                                                        if($handler[2] === null) $handler[2] = $this;
                                                        $this->log->log("Calling {$handler[1]}",  XMPPHP_Log::LEVEL_DEBUG);
-                                                       $handler[2]->$handler[1]($this->xmlobj[2]);
+                                                       $handler[2]->{$handler[1]}($this->xmlobj[2]);
                                                }
                                        }
                                }
@@ -578,13 +578,13 @@ class XMPPHP_XMLStream {
                                if($searchxml !== null and $searchxml->name == $handler[0] and ($searchxml->ns == $handler[1] or (!$handler[1] and $searchxml->ns == $this->default_ns))) {
                                        if($handler[3] === null) $handler[3] = $this;
                                        $this->log->log("Calling {$handler[2]}",  XMPPHP_Log::LEVEL_DEBUG);
-                                       $handler[3]->$handler[2]($this->xmlobj[2]);
+                                       $handler[3]->{$handler[2]}($this->xmlobj[2]);
                                }
                        }
                        foreach($this->idhandlers as $id => $handler) {
                                if(array_key_exists('id', $this->xmlobj[2]->attrs) and $this->xmlobj[2]->attrs['id'] == $id) {
                                        if($handler[1] === null) $handler[1] = $this;
-                                       $handler[1]->$handler[0]($this->xmlobj[2]);
+                                       $handler[1]->{$handler[0]}($this->xmlobj[2]);
                                        #id handlers are only used once
                                        unset($this->idhandlers[$id]);
                                        break;
@@ -640,7 +640,7 @@ class XMPPHP_XMLStream {
                                if($handler[2] === null) {
                                        $handler[2] = $this;
                                }
-                               $handler[2]->$handler[1]($payload);
+                               $handler[2]->{$handler[1]}($payload);
                        }
                }
                foreach($this->until as $key => $until) {
index f8328fb..205c214 100644 (file)
@@ -1,3 +1,4 @@
 Description of XMPPHP (aka jabber) version 0.1rc2-r77 library import into Moodle
 
 MDL-20876 - replaced deprecated split() with explode()
+MDL-52335 - PHP7 variable syntax changes
index ca53509..cca3b85 100644 (file)
          *                    for insensitive.
          *    @access public
          */
-        function ParallelRegex($case) {
+        public function __construct($case) {
             $this->_case = $case;
             $this->_patterns = array();
             $this->_labels = array();
             $this->_regex = null;
         }
-        
+
+        /**
+         * Old syntax of class constructor. Deprecated in PHP7.
+         *
+         * @deprecated since Moodle 3.1
+         */
+        public function ParallelRegex($case) {
+            debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+            self::__construct($case);
+        }
+
         /**
          *    Adds a pattern with an optional label.
          *    @param string $pattern      Perl style regex, but ( and )
          *    @param string $start        Starting state name.
          *    @access public
          */
-        function StateStack($start) {
+        public function __construct($start) {
             $this->_stack = array($start);
         }
-        
+
+        /**
+         * Old syntax of class constructor. Deprecated in PHP7.
+         *
+         * @deprecated since Moodle 3.1
+         */
+        public function StateStack($start) {
+            debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+            self::__construct($start);
+        }
+
         /**
          *    Accessor for current state.
          *    @return string State as string.
          *    @param bool $case       True for case sensitive.
          *    @access public
          */
-        function Lexer(&$parser, $start = "accept", $case = false) {
+        public function __construct(&$parser, $start = "accept", $case = false) {
             $this->_case = $case;
             $this->_regexes = array();
             $this->_parser = &$parser;
             $this->_mode = new StateStack($start);
             $this->_mode_handlers = array();
         }
+
+        /**
+         * Old syntax of class constructor. Deprecated in PHP7.
+         *
+         * @deprecated since Moodle 3.1
+         */
+        public function Lexer(&$parser, $start = "accept", $case = false) {
+            debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+            self::__construct($parser, $start, $case);
+        }
         
         /**
          *    Adds a token search pattern for a particular
index 1640f14..aa2e866 100644 (file)
@@ -48,7 +48,7 @@ class calc_formula {
      * @param string $formula with leading =
      * @param array $params associative array of parameters used in formula. All parameter names must be lowercase!
      */
-    function calc_formula($formula, $params=false) {
+    public function __construct($formula, $params=false) {
         $this->_em = new EvalMath();
         $this->_em->suppress_errors = true; // no PHP errors!
         if (strpos($formula, '=') !== 0) {
@@ -70,6 +70,16 @@ class calc_formula {
         }
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function calc_formula($formula, $params=false) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($formula, $params);
+    }
+
     /**
      * Raplace parameters used in existing formula,
      * parameter names must contain only lowercase [a-z] letters, no other characters are allowed!
index 34c2829..0d0bd35 100644 (file)
@@ -811,7 +811,7 @@ class core_media_player_wmp extends core_media_player {
         <param name="ShowGotoBar" value="false" />
         <param name="EnableFullScreenControls" value="true" />
         <param name="uimode" value="full" />
-        <!--[if !IE]>-->
+        <!--[if !IE]><!-->
         <object data="$url" type="$mimetype" $size>
             <param name="src" value="$url" />
             <param name="controller" value="true" />
@@ -820,7 +820,7 @@ class core_media_player_wmp extends core_media_player {
             <param name="resize" value="scale" />
         <!--<![endif]-->
             $fallback
-        <!--[if !IE]>-->
+        <!--[if !IE]><!-->
         </object>
         <!--<![endif]-->
     </object>
@@ -875,7 +875,7 @@ class core_media_player_qt extends core_media_player {
         <param name="autoplay" value="false" />
         <param name="autostart" value="false" />
         <param name="scale" value="aspect" />
-        <!--[if !IE]>-->
+        <!--[if !IE]><!-->
         <object data="$url" type="$mimetype" $size>
             <param name="src" value="$url" />
             <param name="pluginurl" value="http://www.apple.com/quicktime/download/" />
@@ -886,7 +886,7 @@ class core_media_player_qt extends core_media_player {
             <param name="scale" value="aspect" />
         <!--<![endif]-->
             $fallback
-        <!--[if !IE]>-->
+        <!--[if !IE]><!-->
         </object>
         <!--<![endif]-->
     </object>
@@ -934,14 +934,14 @@ class core_media_player_rm extends core_media_player {
             data="$url" width="$width" height="$height"">
         <param name="src" value="$url" />
         <param name="controls" value="All" />
-        <!--[if !IE]>-->
+        <!--[if !IE]><!-->
         <object title="$info" type="audio/x-pn-realaudio-plugin"
                 data="$url" width="$width" height="$height">
             <param name="src" value="$url" />
             <param name="controls" value="All" />
         <!--<![endif]-->
             $fallback
-        <!--[if !IE]>-->
+        <!--[if !IE]><!-->
         </object>
         <!--<![endif]-->
   </object>
@@ -989,7 +989,8 @@ class core_media_player_swf extends core_media_player {
     <param name="scale" value="aspect" />
     <param name="base" value="." />
     <param name="allowscriptaccess" value="never" />
-<!--[if !IE]>-->
+    <param name="allowfullscreen" value="true" />
+<!--[if !IE]><!-->
     <object type="application/x-shockwave-flash" data="$url" width="$width" height="$height">
       <param name="controller" value="true" />
       <param name="autoplay" value="true" />
@@ -997,9 +998,10 @@ class core_media_player_swf extends core_media_player {
       <param name="scale" value="aspect" />
       <param name="base" value="." />
       <param name="allowscriptaccess" value="never" />
+      <param name="allowfullscreen" value="true" />
 <!--<![endif]-->
 $fallback
-<!--[if !IE]>-->
+<!--[if !IE]><!-->
     </object>
 <!--<![endif]-->
   </object>
index 8fd08cd..55c8b69 100644 (file)
@@ -7691,6 +7691,18 @@ function shorten_text($text, $ideal=30, $exact = false, $ending='...') {
                             'tag'  => core_text::strtolower($tagmatchings[1]),
                             'pos'  => core_text::strlen($truncate),
                         );
+                } else if (preg_match('/^<!--\[if\s.*?\]>$/s', $linematchings[1], $tagmatchings)) {
+                    $tagdetails[] = (object) array(
+                            'open' => true,
+                            'tag'  => core_text::strtolower('if'),
+                            'pos'  => core_text::strlen($truncate),
+                    );
+                } else if (preg_match('/^<!--<!\[endif\]-->$/s', $linematchings[1], $tagmatchings)) {
+                    $tagdetails[] = (object) array(
+                            'open' => false,
+                            'tag'  => core_text::strtolower('if'),
+                            'pos'  => core_text::strlen($truncate),
+                    );
                 }
             }
             // Add html-tag to $truncate'd text.
@@ -7776,7 +7788,11 @@ function shorten_text($text, $ideal=30, $exact = false, $ending='...') {
 
     // Close all unclosed html-tags.
     foreach ($opentags as $tag) {
-        $truncate .= '</' . $tag . '>';
+        if ($tag === 'if') {
+            $truncate .= '<!--<![endif]-->';
+        } else {
+            $truncate .= '</' . $tag . '>';
+        }
     }
 
     return $truncate;
index 9385451..b3b79cc 100644 (file)
@@ -3084,13 +3084,15 @@ class navbar extends navigation_node {
     public $children = array();
     /** @var bool A switch for whether we want to include the root node in the navbar */
     public $includesettingsbase = false;
-    /** @var navigation_node[] $prependchildren */
+    /** @var breadcrumb_navigation_node[] $prependchildren */
     protected $prependchildren = array();
     /**
      * The almighty constructor
      *
      * @param moodle_page $page
      */
+
+
     public function __construct(moodle_page $page) {
         global $CFG;
         if (during_initial_install()) {
@@ -3141,8 +3143,8 @@ class navbar extends navigation_node {
      * Gets a navigation node
      *
      * @param string|int $key for referencing the navbar nodes
-     * @param int $type navigation_node::TYPE_*
-     * @return navigation_node|bool
+     * @param int $type breadcrumb_navigation_node::TYPE_*
+     * @return breadcrumb_navigation_node|bool
      */
     public function get($key, $type = null) {
         foreach ($this->children as &$child) {
@@ -3158,7 +3160,7 @@ class navbar extends navigation_node {
         return false;
     }
     /**
-     * Returns an array of navigation_node's that make up the navbar.
+     * Returns an array of breadcrumb_navigation_nodes that make up the navbar.
      *
      * @return array
      */
@@ -3190,7 +3192,7 @@ class navbar extends navigation_node {
                 // Parse a combined navigation tree
                 while ($settingsactivenode && $settingsactivenode->parent !== null) {
                     if (!$settingsactivenode->mainnavonly) {
-                        $items[] = $settingsactivenode;
+                        $items[] = new breadcrumb_navigation_node($settingsactivenode);
                     }
                     $settingsactivenode = $settingsactivenode->parent;
                 }
@@ -3200,12 +3202,14 @@ class navbar extends navigation_node {
                 }
                 while ($navigationactivenode && $navigationactivenode->parent !== null) {
                     if (!$navigationactivenode->mainnavonly) {
-                        $items[] = $navigationactivenode;
+                        $items[] = new breadcrumb_navigation_node($navigationactivenode);
                     }
                     if (!empty($CFG->navshowcategories) &&
                             $navigationactivenode->type === self::TYPE_COURSE &&
                             $navigationactivenode->parent->key === 'currentcourse') {
-                        $items = array_merge($items, $this->get_course_categories());
+                        foreach ($this->get_course_categories() as $item) {
+                            $items[] = new breadcrumb_navigation_node($item);
+                        }
                     }
                     $navigationactivenode = $navigationactivenode->parent;
                 }
@@ -3213,12 +3217,14 @@ class navbar extends navigation_node {
                 // Parse the navigation tree to get the active node
                 while ($navigationactivenode && $navigationactivenode->parent !== null) {
                     if (!$navigationactivenode->mainnavonly) {
-                        $items[] = $navigationactivenode;
+                        $items[] = new breadcrumb_navigation_node($navigationactivenode);
                     }
                     if (!empty($CFG->navshowcategories) &&
                             $navigationactivenode->type === self::TYPE_COURSE &&
                             $navigationactivenode->parent->key === 'currentcourse') {
-                        $items = array_merge($items, $this->get_course_categories());
+                        foreach ($this->get_course_categories() as $item) {
+                            $items[] = new breadcrumb_navigation_node($item);
+                        }
                     }
                     $navigationactivenode = $navigationactivenode->parent;
                 }
@@ -3226,18 +3232,18 @@ class navbar extends navigation_node {
                 // Parse the settings navigation to get the active node
                 while ($settingsactivenode && $settingsactivenode->parent !== null) {
                     if (!$settingsactivenode->mainnavonly) {
-                        $items[] = $settingsactivenode;
+                        $items[] = new breadcrumb_navigation_node($settingsactivenode);
                     }
                     $settingsactivenode = $settingsactivenode->parent;
                 }
             }
         }
 
-        $items[] = new navigation_node(array(
-            'text'=>$this->page->navigation->text,
-            'shorttext'=>$this->page->navigation->shorttext,
-            'key'=>$this->page->navigation->key,
-            'action'=>$this->page->navigation->action
+        $items[] = new breadcrumb_navigation_node(array(
+            'text' => $this->page->navigation->text,
+            'shorttext' => $this->page->navigation->shorttext,
+            'key' => $this->page->navigation->key,
+            'action' => $this->page->navigation->action
         ));
 
         if (count($this->prependchildren) > 0) {
@@ -3274,7 +3280,7 @@ class navbar extends navigation_node {
                 }
                 $url = new moodle_url('/course/index.php', array('categoryid' => $category->id));
                 $name = format_string($category->name, true, array('context' => context_coursecat::instance($category->id)));
-                $categorynode = navigation_node::create($name, $url, self::TYPE_CATEGORY, null, $category->id);
+                $categorynode = breadcrumb_navigation_node::create($name, $url, self::TYPE_CATEGORY, null, $category->id);
                 if (!$category->visible) {
                     $categorynode->hidden = true;
                 }
@@ -3287,7 +3293,7 @@ class navbar extends navigation_node {
             $courses = $this->page->navigation->get('courses');
             if (!$courses) {
                 // Courses node may not be present.
-                $courses = navigation_node::create(
+                $courses = breadcrumb_navigation_node::create(
                     get_string('courses'),
                     new moodle_url('/course/index.php'),
                     self::TYPE_CONTAINER
@@ -3300,9 +3306,9 @@ class navbar extends navigation_node {
     }
 
     /**
-     * Add a new navigation_node to the navbar, overrides parent::add
+     * Add a new breadcrumb_navigation_node to the navbar, overrides parent::add
      *
-     * This function overrides {@link navigation_node::add()} so that we can change
+     * This function overrides {@link breadcrumb_navigation_node::add()} so that we can change
      * the way nodes get added to allow us to simply call add and have the node added to the
      * end of the navbar
      *
@@ -3345,7 +3351,7 @@ class navbar extends navigation_node {
         // Set the parent to this node
         $itemarray['parent'] = $this;
         // Add the child using the navigation_node_collections add method
-        $this->children[] = new navigation_node($itemarray);
+        $this->children[] = new breadcrumb_navigation_node($itemarray);
         return $this;
     }
 
@@ -3390,11 +3396,44 @@ class navbar extends navigation_node {
         // Set the parent to this node.
         $itemarray['parent'] = $this;
         // Add the child node to the prepend list.
-        $this->prependchildren[] = new navigation_node($itemarray);
+        $this->prependchildren[] = new breadcrumb_navigation_node($itemarray);
         return $this;
     }
 }
 
+/**
+ * Subclass of navigation_node allowing different rendering for the breadcrumbs
+ * in particular adding extra metadata for search engine robots to leverage.
+ *
+ * @package   core
+ * @category  navigation
+ * @copyright 2015 Brendan Heywood
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+class breadcrumb_navigation_node extends navigation_node {
+
+    /**
+     * A proxy constructor
+     *
+     * @param mixed $navnode A navigation_node or an array
+     */
+    public function __construct($navnode) {
+        if (is_array($navnode)) {
+            parent::__construct($navnode);
+        } else if ($navnode instanceof navigation_node) {
+
+            // Just clone everything.
+            $objvalues = get_object_vars($navnode);
+            foreach ($objvalues as $key => $value) {
+                 $this->$key = $value;
+            }
+        } else {
+            throw coding_exception('Not a valid breadcrumb_navigation_node');
+        }
+    }
+
+}
+
 /**
  * Class used to manage the settings option for the current page
  *
index e1ada8a..64e0299 100644 (file)
@@ -1078,6 +1078,7 @@ class theme_config {
      * @return bool|string Return false when the compilation failed. Else the compiled string.
      */
     protected function get_css_content_from_less($themedesigner) {
+        global $CFG;
 
         $lessfile = $this->lessfile;
         if (!$lessfile || !is_readable($this->dir . '/less/' . $lessfile . '.less')) {
@@ -1106,7 +1107,8 @@ class theme_config {
         if ($themedesigner) {
             // Add the sourceMap inline to ensure that it is atomically generated.
             $options['sourceMap'] = true;
-            $options['sourceRoot'] = 'theme';
+            $options['sourceMapBasepath'] = $CFG->dirroot;
+            $options['sourceMapRootpath'] = $CFG->wwwroot;
         }
 
         // Instantiate the compiler.
index 99f4cb2..35fba72 100644 (file)
@@ -3340,6 +3340,39 @@ EOD;
         return $navbarcontent;
     }
 
+    /**
+     * Renders a breadcrumb navigation node object.
+     *
+     * @param breadcrumb_navigation_node $item The navigation node to render.
+     * @return string HTML fragment
+     */
+    protected function render_breadcrumb_navigation_node(breadcrumb_navigation_node $item) {
+
+        if ($item->action instanceof moodle_url) {
+            $content = $item->get_content();
+            $title = $item->get_title();
+            $attributes = array();
+            $attributes['itemprop'] = 'url';
+            if ($title !== '') {
+                $attributes['title'] = $title;
+            }
+            if ($item->hidden) {
+                $attributes['class'] = 'dimmed_text';
+            }
+            $content = html_writer::tag('span', $content, array('itemprop' => 'title'));
+            $content = html_writer::link($item->action, $content, $attributes);
+
+            $attributes = array();
+            $attributes['itemscope'] = '';
+            $attributes['itemtype'] = 'http://data-vocabulary.org/Breadcrumb';
+            $content = html_writer::tag('span', $content, $attributes);
+
+        } else {
+            $content = $this->render_navigation_node($item);
+        }
+        return $content;
+    }
+
     /**
      * Renders a navigation node object.
      *
index 561ec9f..f8f4d04 100644 (file)
@@ -85,12 +85,18 @@ class Crypt_CHAP extends PEAR
      * Generates a random challenge
      * @return void
      */
-    function Crypt_CHAP()
+    public function __construct()
     {
-        $this->PEAR();
+        parent::__construct();
         $this->generateChallenge();
     }
 
+    function Crypt_CHAP()
+    {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct();
+    }
+
     /**
      * Generates a random binary challenge
      *
@@ -167,12 +173,18 @@ class Crypt_CHAP_MSv1 extends Crypt_CHAP
      * Loads the hash extension
      * @return void
      */
-    function Crypt_CHAP_MSv1()
+    public function __construct()
     {
-        $this->Crypt_CHAP();
+        parent::__construct();
         $this->loadExtension('hash');
     }
 
+    function Crypt_CHAP_MSv1()
+    {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct();
+    }
+
     /**
      * Generates the NT-HASH from the given plaintext password.
      *
@@ -415,9 +427,9 @@ class Crypt_CHAP_MSv2 extends Crypt_CHAP_MSv1
      * Generates the 16 Bytes peer and authentication challenge
      * @return void
      */
-    function Crypt_CHAP_MSv2()
+    public function __construct()
     {
-        $this->Crypt_CHAP_MSv1();
+        parent::__construct();
         $this->generateChallenge('peerChallenge', 16);
         $this->generateChallenge('authChallenge', 16);
     }
index 2c51010..b862179 100644 (file)
@@ -83,12 +83,22 @@ class HTML_Common {
      * @param    int     $tabOffset      Indent offset in tabs
      * @access   public
      */
-    function HTML_Common($attributes = null, $tabOffset = 0)
+    public function __construct($attributes = null, $tabOffset = 0)
     {
         $this->setAttributes($attributes);
         $this->setTabOffset($tabOffset);
     } // end constructor
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function HTML_Common($attributes = null, $tabOffset = 0) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($attributes, $tabOffset);
+    }
+
     public static function raiseError($message = null,
                                        $code = null,
                                        $mode = null,
index 6da6ff4..bf8062e 100644 (file)
@@ -253,9 +253,9 @@ class HTML_QuickForm extends HTML_Common {
      * @param    bool        $trackSubmit       (optional)Whether to track if the form was submitted by adding a special hidden field
      * @access   public
      */
-    function HTML_QuickForm($formName='', $method='post', $action='', $target='', $attributes=null, $trackSubmit = false)
+    public function __construct($formName='', $method='post', $action='', $target='', $attributes=null, $trackSubmit = false)
     {
-        HTML_Common::HTML_Common($attributes);
+        parent::__construct($attributes);
         $method = (strtoupper($method) == 'GET') ? 'get' : 'post';
         $action = ($action == '') ? $_SERVER['PHP_SELF'] : $action;
         $target = empty($target) ? array() : array('target' => $target);
@@ -301,6 +301,16 @@ class HTML_QuickForm extends HTML_Common {
         }
     } // end constructor
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function HTML_QuickForm($formName='', $method='post', $action='', $target='', $attributes=null, $trackSubmit = false) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($formName, $method, $action, $target, $attributes, $trackSubmit);
+    }
+
     // }}}
     // {{{ apiVersion()
 
@@ -1983,16 +1993,27 @@ class HTML_QuickForm_Error extends PEAR_Error {
     * @param int   $level intensity of the error (PHP error code)
     * @param mixed $debuginfo any information that can inform user as to nature of the error
     */
-    function HTML_QuickForm_Error($code = QUICKFORM_ERROR, $mode = PEAR_ERROR_RETURN,
+    public function __construct($code = QUICKFORM_ERROR, $mode = PEAR_ERROR_RETURN,
                          $level = E_USER_NOTICE, $debuginfo = null)
     {
         if (is_int($code)) {
-            $this->PEAR_Error(HTML_QuickForm::errorMessage($code), $code, $mode, $level, $debuginfo);
+            parent::__construct(HTML_QuickForm::errorMessage($code), $code, $mode, $level, $debuginfo);
         } else {
-            $this->PEAR_Error("Invalid error code: $code", QUICKFORM_ERROR, $mode, $level, $debuginfo);
+            parent::__construct("Invalid error code: $code", QUICKFORM_ERROR, $mode, $level, $debuginfo);
         }
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function HTML_QuickForm_Error($code = QUICKFORM_ERROR, $mode = PEAR_ERROR_RETURN,
+                         $level = E_USER_NOTICE, $debuginfo = null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($code, $mode, $level, $debuginfo);
+    }
+
     // }}}
 } // end class HTML_QuickForm_Error
 ?>
index 7162c64..324fbf7 100644 (file)
@@ -33,10 +33,19 @@ class HTML_QuickForm_Renderer
     *
     * @access public
     */
-    function HTML_QuickForm_Renderer()
-    {
+    public function __construct() {
     } // end constructor
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function HTML_QuickForm_Renderer() {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct();
+    }
+
    /**
     * Called when visiting a form, before processing any form elements
     *
index ee0c4ce..a91d90b 100644 (file)
@@ -147,13 +147,21 @@ class HTML_QuickForm_Renderer_Array extends HTML_QuickForm_Renderer
     * @param  bool    true: render an array of labels to many labels, $key 0 to 'label' and the oterh to "label_$key"
     * @access public
     */
-    function HTML_QuickForm_Renderer_Array($collectHidden = false, $staticLabels = false)
-    {
-        $this->HTML_QuickForm_Renderer();
+    public function __construct($collectHidden = false, $staticLabels = false) {
+        parent::__construct();
         $this->_collectHidden = $collectHidden;
         $this->_staticLabels  = $staticLabels;
     } // end constructor
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function HTML_QuickForm_Renderer_Array($collectHidden = false, $staticLabels = false) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($collectHidden, $staticLabels);
+    }
 
    /**
     * Returns the resultant array
index 5eeee14..7c54c13 100644 (file)
@@ -141,9 +141,18 @@ class HTML_QuickForm_Renderer_Default extends HTML_QuickForm_Renderer
     *
     * @access public
     */
-    function HTML_QuickForm_Renderer_Default()
-    {
-        $this->HTML_QuickForm_Renderer();
+    public function __construct() {
+        parent::__construct();
+    } // end constructor
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function HTML_QuickForm_Renderer_Default() {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct();
     } // end constructor
 
    /**
index 9ed495c..9928a0b 100644 (file)
@@ -78,13 +78,22 @@ class HTML_QuickForm_Renderer_Object extends HTML_QuickForm_Renderer
      * @param collecthidden bool    true: collect all hidden elements
      * @access public
      */
-    function HTML_QuickForm_Renderer_Object($collecthidden = false) 
-    {
-        $this->HTML_QuickForm_Renderer();
+    public function __construct($collecthidden = false) {
+        parent::__construct();
         $this->_collectHidden = $collecthidden;
         $this->_obj = new QuickformForm;
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function HTML_QuickForm_Renderer_Object($collecthidden = false) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($collecthidden);
+    }
+
     /**
      * Return the rendered Object
      * @access public
index 7326ede..4ef5a33 100644 (file)
@@ -118,11 +118,20 @@ class HTML_QuickForm_Renderer_Tableless extends HTML_QuickForm_Renderer_Default
     *
     * @access public
     */
-    function HTML_QuickForm_Renderer_Tableless()
-    {
-        $this->HTML_QuickForm_Renderer_Default();
+    public function __construct() {
+        parent::__construct();
     } // end constructor
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function HTML_QuickForm_Renderer_Tableless() {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct();
+    }
+
    /**
     * Called when visiting a header element
     *
index cc14b71..896fa27 100644 (file)
@@ -77,12 +77,21 @@ class HTML_QuickForm_advcheckbox extends HTML_QuickForm_checkbox
      * @access    public
      * @return    void
      */
-    function HTML_QuickForm_advcheckbox($elementName=null, $elementLabel=null, $text=null, $attributes=null, $values=null)
-    {
-        $this->HTML_QuickForm_checkbox($elementName, $elementLabel, $text, $attributes);
+    public function __construct($elementName=null, $elementLabel=null, $text=null, $attributes=null, $values=null) {
+        parent::__construct($elementName, $elementLabel, $text, $attributes);
         $this->setValues($values);
     } //end constructor
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function HTML_QuickForm_advcheckbox($elementName=null, $elementLabel=null, $text=null, $attributes=null, $values=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $text, $attributes, $values);
+    }
+
     // }}}
     // {{{ getPrivateName()
 
index c39bd8d..acfbd20 100644 (file)
@@ -75,9 +75,8 @@ class HTML_QuickForm_autocomplete extends HTML_QuickForm_text
      * @access    public
      * @return    void
      */
-    function HTML_QuickForm_autocomplete($elementName = null, $elementLabel = null, $options = null, $attributes = null)
-    {
-        $this->HTML_QuickForm_text($elementName, $elementLabel, $attributes);
+    public function __construct($elementName = null, $elementLabel = null, $options = null, $attributes = null) {
+        parent::__construct($elementName, $elementLabel, $attributes);
         $this->_persistantFreeze = true;
         $this->_type = 'autocomplete';
         if (isset($options)) {
@@ -85,6 +84,16 @@ class HTML_QuickForm_autocomplete extends HTML_QuickForm_text
         }
     } //end constructor
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function HTML_QuickForm_autocomplete($elementName = null, $elementLabel = null, $options = null, $attributes = null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $options, $attributes);
+    }
+
     // }}}
     // {{{ setOptions()
 
index bf6f10e..95e975f 100644 (file)
@@ -45,13 +45,22 @@ class HTML_QuickForm_button extends HTML_QuickForm_input
      * @access    public
      * @return    void
      */
-    function HTML_QuickForm_button($elementName=null, $value=null, $attributes=null)
-    {
-        HTML_QuickForm_input::HTML_QuickForm_input($elementName, null, $attributes);
+    public function __construct($elementName=null, $value=null, $attributes=null) {
+        parent::__construct($elementName, null, $attributes);
         $this->_persistantFreeze = false;
         $this->setValue($value);
         $this->setType('button');
     } //end constructor
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function HTML_QuickForm_button($elementName=null, $value=null, $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $value, $attributes);
+    }
     
     // }}}
     // {{{ freeze()
index 100f8e7..f305fc5 100644 (file)
@@ -57,15 +57,24 @@ class HTML_QuickForm_checkbox extends HTML_QuickForm_input
      * @access    public
      * @return    void
      */
-    function HTML_QuickForm_checkbox($elementName=null, $elementLabel=null, $text='', $attributes=null)
-    {
-        HTML_QuickForm_input::HTML_QuickForm_input($elementName, $elementLabel, $attributes);
+    public function __construct($elementName=null, $elementLabel=null, $text='', $attributes=null) {
+        parent::__construct($elementName, $elementLabel, $attributes);
         $this->_persistantFreeze = true;
         $this->_text = $text;
         $this->setType('checkbox');
         $this->updateAttributes(array('value'=>1));
     } //end constructor
-    
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function HTML_QuickForm_checkbox($elementName=null, $elementLabel=null, $text='', $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $text, $attributes);
+    }
+
     // }}}
     // {{{ setChecked()
 
index 495e76e..c0090e4 100644 (file)
@@ -266,9 +266,9 @@ class HTML_QuickForm_date extends HTML_QuickForm_group
     * @param    array   Options to control the element's display
     * @param    mixed   Either a typical HTML attribute string or an associative array
     */
-    function HTML_QuickForm_date($elementName = null, $elementLabel = null, $options = array(), $attributes = null)
-    {
-        $this->HTML_QuickForm_element($elementName, $elementLabel, $attributes);
+    public function __construct($elementName = null, $elementLabel = null, $options = array(), $attributes = null) {
+        // TODO MDL-52313 Replace with the call to parent::__construct().
+        HTML_QuickForm_element::__construct($elementName, $elementLabel, $attributes);
         $this->_persistantFreeze = true;
         $this->_appendName = true;
         $this->_type = 'date';
@@ -288,6 +288,16 @@ class HTML_QuickForm_date extends HTML_QuickForm_group
         }
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function HTML_QuickForm_date($elementName = null, $elementLabel = null, $options = array(), $attributes = null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $options, $attributes);
+    }
+
     // }}}
     // {{{ _createElements()
 
index a0a600c..dc615f5 100644 (file)
@@ -80,9 +80,8 @@ class HTML_QuickForm_element extends HTML_Common
      * @access    public
      * @return    void
      */
-    function HTML_QuickForm_element($elementName=null, $elementLabel=null, $attributes=null)
-    {
-        HTML_Common::HTML_Common($attributes);
+    public function __construct($elementName=null, $elementLabel=null, $attributes=null) {
+        parent::__construct($attributes);
         if (isset($elementName)) {
             $this->setName($elementName);
         }
@@ -90,6 +89,16 @@ class HTML_QuickForm_element extends HTML_Common
             $this->setLabel($elementLabel);
         }
     } //end constructor
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function HTML_QuickForm_element($elementName=null, $elementLabel=null, $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $attributes);
+    }
     
     // }}}
     // {{{ apiVersion()
@@ -359,8 +368,7 @@ class HTML_QuickForm_element extends HTML_Common
     {
         switch ($event) {
             case 'createElement':
-                $className = get_class($this);
-                $this->$className($arg[0], $arg[1], $arg[2], $arg[3], $arg[4]);
+                static::__construct($arg[0], $arg[1], $arg[2], $arg[3], $arg[4]);
                 break;
             case 'addElement':
                 $this->onQuickFormEvent('createElement', $arg, $caller);
index a8906f5..b698b67 100644 (file)
@@ -61,12 +61,21 @@ class HTML_QuickForm_file extends HTML_QuickForm_input
      * @since     1.0
      * @access    public
      */
-    function HTML_QuickForm_file($elementName=null, $elementLabel=null, $attributes=null)
-    {
-        HTML_QuickForm_input::HTML_QuickForm_input($elementName, $elementLabel, $attributes);
+    public function __construct($elementName=null, $elementLabel=null, $attributes=null) {
+        parent::__construct($elementName, $elementLabel, $attributes);
         $this->setType('file');
     } //end constructor
-    
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function HTML_QuickForm_file($elementName=null, $elementLabel=null, $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $attributes);
+    }
+
     // }}}
     // {{{ setSize()
 
@@ -176,8 +185,7 @@ class HTML_QuickForm_file extends HTML_QuickForm_input
                 return $this->onQuickFormEvent('updateValue', null, $caller);
                 break;
             case 'createElement':
-                $className = get_class($this);
-                $this->$className($arg[0], $arg[1], $arg[2]);
+                static::__construct($arg[0], $arg[1], $arg[2], $arg[3], $arg[4]);
                 break;
         }
         return true;
index 229d697..b400964 100644 (file)
@@ -92,9 +92,8 @@ class HTML_QuickForm_group extends HTML_QuickForm_element
      * @access    public
      * @return    void
      */
-    function HTML_QuickForm_group($elementName=null, $elementLabel=null, $elements=null, $separator=null, $appendName = true)
-    {
-        $this->HTML_QuickForm_element($elementName, $elementLabel);
+    public function __construct($elementName=null, $elementLabel=null, $elements=null, $separator=null, $appendName = true) {
+        parent::__construct($elementName, $elementLabel);
         $this->_type = 'group';
         if (isset($elements) && is_array($elements)) {
             $this->setElements($elements);
@@ -107,6 +106,16 @@ class HTML_QuickForm_group extends HTML_QuickForm_element
         }
     } //end constructor
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function HTML_QuickForm_group($elementName=null, $elementLabel=null, $elements=null, $separator=null, $appendName = true) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $elements, $separator, $appendName);
+    }
+
     // }}}
     // {{{ setName()
 
index b13eb2d..6ba301c 100644 (file)
@@ -38,12 +38,21 @@ class HTML_QuickForm_header extends HTML_QuickForm_static
     * @access public
     * @return void
     */
-    function HTML_QuickForm_header($elementName = null, $text = null)
-    {
-        $this->HTML_QuickForm_static($elementName, null, $text);
+    public function __construct($elementName = null, $text = null) {
+        parent::__construct($elementName, null, $text);
         $this->_type = 'header';
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function HTML_QuickForm_header($elementName = null, $text = null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $text);
+    }
+
     // }}}
     // {{{ accept()
 
index e758aee..edbade9 100644 (file)
@@ -45,13 +45,22 @@ class HTML_QuickForm_hidden extends HTML_QuickForm_input
      * @access    public
      * @return    void
      */
-    function HTML_QuickForm_hidden($elementName=null, $value='', $attributes=null)
-    {
-        HTML_QuickForm_input::HTML_QuickForm_input($elementName, null, $attributes);
+    public function __construct($elementName=null, $value='', $attributes=null) {
+        parent::__construct($elementName, null, $attributes);
         $this->setType('hidden');
         $this->setValue($value);
     } //end constructor
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function HTML_QuickForm_hidden($elementName=null, $value='', $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        return self::__construct($elementName, $value, $attributes);
+    }
+
     // }}}
     // {{{ freeze()
 
index 458aa5c..acafa4f 100644 (file)
@@ -49,9 +49,9 @@ class HTML_QuickForm_hiddenselect extends HTML_QuickForm_select
      * @access    public
      * @return    void
      */
-    function HTML_QuickForm_hiddenselect($elementName=null, $elementLabel=null, $options=null, $attributes=null)
-    {
-        HTML_QuickForm_element::HTML_QuickForm_element($elementName, $elementLabel, $attributes);
+    public function __construct($elementName=null, $elementLabel=null, $options=null, $attributes=null) {
+        // TODO MDL-52313 Replace with the call to parent::__construct().
+        HTML_QuickForm_element::__construct($elementName, $elementLabel, $attributes);
         $this->_persistantFreeze = true;
         $this->_type = 'hiddenselect';
         if (isset($options)) {
@@ -59,6 +59,16 @@ class HTML_QuickForm_hiddenselect extends HTML_QuickForm_select
         }
     } //end constructor
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function HTML_QuickForm_hiddenselect($elementName=null, $elementLabel=null, $options=null, $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $options, $attributes);
+    }
+
     // }}}
     // {{{ toHtml()
 
index 25de466..3762229 100644 (file)
@@ -114,9 +114,9 @@ class HTML_QuickForm_hierselect extends HTML_QuickForm_group
      * @access    public
      * @return    void
      */
-    function HTML_QuickForm_hierselect($elementName=null, $elementLabel=null, $attributes=null, $separator=null)
-    {
-        $this->HTML_QuickForm_element($elementName, $elementLabel, $attributes);
+    public function __construct($elementName=null, $elementLabel=null, $attributes=null, $separator=null) {
+        // TODO MDL-52313 Replace with the call to parent::__construct().
+        HTML_QuickForm_element::__construct($elementName, $elementLabel, $attributes);
         $this->_persistantFreeze = true;
         if (isset($separator)) {
             $this->_separator = $separator;
@@ -125,6 +125,16 @@ class HTML_QuickForm_hierselect extends HTML_QuickForm_group
         $this->_appendName = true;
     } //end constructor
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function HTML_QuickForm_hierselect($elementName=null, $elementLabel=null, $attributes=null, $separator=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $attributes, $separator);
+    }
+
     // }}}
     // {{{ setOptions()
 
index 10b773e..a8c6f01 100644 (file)
@@ -40,12 +40,21 @@ class HTML_QuickForm_html extends HTML_QuickForm_static
     * @access public
     * @return void
     */
-    function HTML_QuickForm_html($text = null)
-    {
-        $this->HTML_QuickForm_static(null, null, $text);
+    public function __construct($text = null) {
+        parent::__construct(null, null, $text);
         $this->_type = 'html';
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function HTML_QuickForm_html($text = null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($text);
+    }
+
     // }}}
     // {{{ accept()
 
index a3cc2e3..3cdef2b 100644 (file)
@@ -44,13 +44,22 @@ class HTML_QuickForm_image extends HTML_QuickForm_input
      * @access    public
      * @return    void
      */
-    function HTML_QuickForm_image($elementName=null, $src='', $attributes=null)
-    {
-        HTML_QuickForm_input::HTML_QuickForm_input($elementName, null, $attributes);
+    public function __construct($elementName=null, $src='', $attributes=null) {
+        parent::__construct($elementName, null, $attributes);
         $this->setType('image');
         $this->setSource($src);
     } // end class constructor
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function HTML_QuickForm_image($elementName=null, $src='', $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $src, $attributes);
+    }
+
     // }}}
     // {{{ setSource()
 
index f182e7e..aa197d1 100644 (file)
@@ -45,11 +45,20 @@ class HTML_QuickForm_input extends HTML_QuickForm_element
      * @access    public
      * @return    void
      */
-    function HTML_QuickForm_input($elementName=null, $elementLabel=null, $attributes=null)
-    {
-        $this->HTML_QuickForm_element($elementName, $elementLabel, $attributes);
+    public function __construct($elementName=null, $elementLabel=null, $attributes=null) {
+        parent::__construct($elementName, $elementLabel, $attributes);
     } //end constructor
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function HTML_QuickForm_input($elementName=null, $elementLabel=null, $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $attributes);
+    }
+
     // }}}
     // {{{ setType()
 
index 947f76c..7278740 100644 (file)
@@ -57,15 +57,25 @@ class HTML_QuickForm_link extends HTML_QuickForm_static
      * @return    void
      * @throws    
      */
-    function HTML_QuickForm_link($elementName=null, $elementLabel=null, $href=null, $text=null, $attributes=null)
-    {
-        HTML_QuickForm_element::HTML_QuickForm_element($elementName, $elementLabel, $attributes);
+    public function __construct($elementName=null, $elementLabel=null, $href=null, $text=null, $attributes=null) {
+        // TODO MDL-52313 Replace with the call to parent::__construct().
+        HTML_QuickForm_element::__construct($elementName, $elementLabel, $attributes);
         $this->_persistantFreeze = false;
         $this->_type = 'link';
         $this->setHref($href);
         $this->_text = $text;
     } //end constructor
-    
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function HTML_QuickForm_link($elementName=null, $elementLabel=null, $href=null, $text=null, $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $href, $text, $attributes);
+    }
+
     // }}}
     // {{{ setName()
 
index a83d505..6d4c730 100644 (file)
@@ -46,11 +46,20 @@ class HTML_QuickForm_password extends HTML_QuickForm_input
      * @return    void
      * @throws    
      */
-    function HTML_QuickForm_password($elementName=null, $elementLabel=null, $attributes=null)
-    {
-        HTML_QuickForm_input::HTML_QuickForm_input($elementName, $elementLabel, $attributes);
+    public function __construct($elementName=null, $elementLabel=null, $attributes=null) {
+        parent::__construct($elementName, $elementLabel, $attributes);
         $this->setType('password');
     } //end constructor
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function HTML_QuickForm_password($elementName=null, $elementLabel=null, $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $attributes);
+    }
     
     // }}}
     // {{{ setSize()
index 2632026..b3569fd 100644 (file)
@@ -57,9 +57,9 @@ class HTML_QuickForm_radio extends HTML_QuickForm_input
      * @access    public
      * @return    void
      */
-    function HTML_QuickForm_radio($elementName=null, $elementLabel=null, $text=null, $value=null, $attributes=null)
-    {
-        $this->HTML_QuickForm_element($elementName, $elementLabel, $attributes);
+    public function __construct($elementName=null, $elementLabel=null, $text=null, $value=null, $attributes=null) {
+        // TODO MDL-52313 Replace with the call to parent::__construct().
+        HTML_QuickForm_element::__construct($elementName, $elementLabel, $attributes);
         if (isset($value)) {
             $this->setValue($value);
         }
@@ -68,6 +68,16 @@ class HTML_QuickForm_radio extends HTML_QuickForm_input
         $this->_text = $text;
     } //end constructor
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function HTML_QuickForm_radio($elementName=null, $elementLabel=null, $text=null, $value=null, $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $text, $value, $attributes);
+    }
+
     // }}}
 
     function _generateId() {
index 3533653..62ee12f 100644 (file)
@@ -45,13 +45,22 @@ class HTML_QuickForm_reset extends HTML_QuickForm_input
      * @access    public
      * @return    void
      */
-    function HTML_QuickForm_reset($elementName=null, $value=null, $attributes=null)
-    {
-        HTML_QuickForm_input::HTML_QuickForm_input($elementName, null, $attributes);
+    public function __construct($elementName=null, $value=null, $attributes=null) {
+        parent::__construct($elementName, null, $attributes);
         $this->setValue($value);
         $this->setType('reset');
     } //end constructor
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function HTML_QuickForm_reset($elementName=null, $value=null, $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $value, $attributes);
+    }
+
     // }}}
     // {{{ freeze()
 
index f15ad8b..eda8438 100644 (file)
@@ -66,15 +66,24 @@ class HTML_QuickForm_select extends HTML_QuickForm_element {
      * @access    public
      * @return    void
      */
-    function HTML_QuickForm_select($elementName=null, $elementLabel=null, $options=null, $attributes=null)
-    {
-        HTML_QuickForm_element::HTML_QuickForm_element($elementName, $elementLabel, $attributes);
+    public function __construct($elementName=null, $elementLabel=null, $options=null, $attributes=null) {
+        parent::__construct($elementName, $elementLabel, $attributes);
         $this->_persistantFreeze = true;
         $this->_type = 'select';
         if (isset($options)) {
             $this->load($options);
         }
     } //end constructor
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function HTML_QuickForm_select($elementName=null, $elementLabel=null, $options=null, $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $attributes);
+    }
     
     // }}}
     // {{{ apiVersion()
index 6987931..728eabd 100644 (file)
@@ -49,14 +49,23 @@ class HTML_QuickForm_static extends HTML_QuickForm_element {
      * @access    public
      * @return    void
      */
-    function HTML_QuickForm_static($elementName=null, $elementLabel=null, $text=null)
-    {
-        HTML_QuickForm_element::HTML_QuickForm_element($elementName, $elementLabel);
+    public function __construct($elementName=null, $elementLabel=null, $text=null) {
+        parent::__construct($elementName, $elementLabel);
         $this->_persistantFreeze = false;
         $this->_type = 'static';
         $this->_text = $text;
     } //end constructor
-    
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function HTML_QuickForm_static($elementName=null, $elementLabel=null, $text=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $text);
+    }
+
     // }}}
     // {{{ setName()
 
index e1d3e7d..6ca23a4 100644 (file)
@@ -44,13 +44,22 @@ class HTML_QuickForm_submit extends HTML_QuickForm_input
      * @access    public
      * @return    void
      */
-    function HTML_QuickForm_submit($elementName=null, $value=null, $attributes=null)
-    {
-        HTML_QuickForm_input::HTML_QuickForm_input($elementName, null, $attributes);
+    public function __construct($elementName=null, $value=null, $attributes=null) {
+        parent::__construct($elementName, null, $attributes);
         $this->setValue($value);
         $this->setType('submit');
     } //end constructor
-    
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function HTML_QuickForm_submit($elementName=null, $value=null, $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $value, $attributes);
+    }
+
     // }}}
     // {{{ freeze()
 
index 9d6d9de..042e508 100644 (file)
@@ -46,12 +46,21 @@ class HTML_QuickForm_text extends HTML_QuickForm_input
      * @access    public
      * @return    void
      */
-    function HTML_QuickForm_text($elementName=null, $elementLabel=null, $attributes=null)
-    {
-        HTML_QuickForm_input::HTML_QuickForm_input($elementName, $elementLabel, $attributes);
+    public function __construct($elementName=null, $elementLabel=null, $attributes=null) {
+        parent::__construct($elementName, $elementLabel, $attributes);
         $this->_persistantFreeze = true;
         $this->setType('text');
     } //end constructor
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function HTML_QuickForm_text($elementName=null, $elementLabel=null, $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $attributes);
+    }
         
     // }}}
     // {{{ setSize()
index 7aa0af2..9967f59 100644 (file)
@@ -55,13 +55,22 @@ class HTML_QuickForm_textarea extends HTML_QuickForm_element
      * @access    public
      * @return    void
      */
-    function HTML_QuickForm_textarea($elementName=null, $elementLabel=null, $attributes=null)
-    {
-        HTML_QuickForm_element::HTML_QuickForm_element($elementName, $elementLabel, $attributes);
+    public function __construct($elementName=null, $elementLabel=null, $attributes=null) {
+        parent::__construct($elementName, $elementLabel, $attributes);
         $this->_persistantFreeze = true;
         $this->_type = 'textarea';
     } //end constructor
-    
+
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function HTML_QuickForm_textarea($elementName=null, $elementLabel=null, $attributes=null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementLabel, $attributes);
+    }
+
     // }}}
     // {{{ setName()
 
index dd01995..b8f972b 100644 (file)
@@ -44,14 +44,22 @@ class HTML_QuickForm_xbutton extends HTML_QuickForm_element
     * @param    mixed   Either a typical HTML attribute string or an associative array
     * @access   public
     */
-    function HTML_QuickForm_xbutton($elementName = null, $elementContent = null, $attributes = null)
-    {
-        $this->HTML_QuickForm_element($elementName, null, $attributes);
+    public function __construct($elementName = null, $elementContent = null, $attributes = null) {
+        parent::__construct($elementName, null, $attributes);
         $this->setContent($elementContent);
         $this->setPersistantFreeze(false);
         $this->_type = 'xbutton';
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function HTML_QuickForm_xbutton($elementName = null, $elementContent = null, $attributes = null) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($elementName, $elementContent, $attributes);
+    }
 
     function toHtml()
     {
index 69b2655..4e7c901 100644 (file)
@@ -146,7 +146,7 @@ class PEAR
      * @access public
      * @return void
      */
-    function PEAR($error_class = null)
+    function __construct($error_class = null)
     {
         $classname = strtolower(get_class($this));
         if ($this->_debug) {
@@ -173,6 +173,18 @@ class PEAR
         }
     }
 
+    /**
+     * Only here for backwards compatibility.
+     * E.g. Archive_Tar calls $this->PEAR() in its constructor.
+     *
+     * @param string $error_class Which class to use for error objects,
+     *                            defaults to PEAR_Error.
+     */
+    public function PEAR($error_class = null)
+    {
+        $this->__construct($error_class);
+    }
+
     /**
      * Destructor (the emulated type of...).  Does nothing right now,
      * but is included for forward compatibility, so subclass
@@ -823,7 +835,7 @@ class PEAR_Error
      * @access public
      *
      */
-    function PEAR_Error($message = 'unknown error', $code = null,
+    function __construct($message = 'unknown error', $code = null,
                         $mode = null, $options = null, $userinfo = null)
     {
         if ($mode === null) {
@@ -896,6 +908,14 @@ class PEAR_Error
         }
     }
 
+    /**
+     * Old syntax of class constructor for backward compatibility.
+     */
+    public function PEAR_Error($message = 'unknown error', $code = null,
+                        $mode = null, $options = null, $userinfo = null) {
+        self::__construct($message, $code, $mode, $options, $userinfo);
+    }
+
     /**
      * Get the error mode from an error object.
      *
index 5b70ba4..a427440 100644 (file)
@@ -27,3 +27,15 @@ Most probably we will stop using this library in the future.
 MDL-20876 - replaced split() with explode() or preg_split() where appropriate
 MDL-40267 - Moodle core_text strlen functions used for range rule rule to be utf8 safe.
 MDL-46467 - $mform->hardfreeze causes labels to loose their for HTML attribute
+MDL-52081 - made all constructors PHP7 compatible
+
+
+Pear
+====
+Changed constructors in classes PEAR and PEAR_ERROR to be __construct(). This has
+been already changed upstream in 1.10.0, remove this line after upgrade.
+
+
+Crypt/CHAP
+==========
+MDL-52285 - made all constructors PHP7 compatible
index 263137d..a5a9b0a 100644 (file)
@@ -212,7 +212,7 @@ class PclZip
     //     Note that no real action is taken, if the archive does not exist it is not
     //     created. Use create() for that.
     // --------------------------------------------------------------------------------
-    public function PclZip($p_zipname)
+    public function __construct($p_zipname)
     {
 
         // ----- Tests the zlib
index d64fd81..e0769c4 100644 (file)
@@ -393,9 +393,9 @@ class PHPExcel_Worksheet_AutoFilter_Column
                 //    The columns array of PHPExcel_Worksheet_AutoFilter objects
                 $this->$key = array();
                 foreach ($value as $k => $v) {
-                    $this->$key[$k] = clone $v;
+                    $this->{$key[$k]} = clone $v;
                     // attach the new cloned Rule to this new cloned Autofilter Cloned object
-                    $this->$key[$k]->setParent($this);
+                    $this->{$key[$k]}->setParent($this);
                 }
             } else {
                 $this->$key = $value;
index c3b5fd6..1a428cc 100644 (file)
@@ -25,6 +25,7 @@ Changes:
    - PHPExcel/Writer/Excel5/Worksheet.php
    - PHPExcel/Writer/Excel5/Xf.php
    lib/excellib.class.php has been updated so that only 2007 excel spreadsheets will be produced.
+ * MDL-52336 patch for PHP7 compatibility, after upgrade make sure that these changes are included and remove this line
 
 
 
index dc52be9..d09d5cd 100644 (file)
@@ -88,7 +88,14 @@ abstract class advanced_testcase extends base_testcase {
                 trigger_error('Unexpected debugging() call detected.', E_USER_NOTICE);
             }
 
-        } catch (Exception $e) {
+        } catch (Exception $ex) {
+            $e = $ex;
+        } catch (Throwable $ex) {
+            // Engine errors in PHP7 throw exceptions of type Throwable (this "catch" will be ignored in PHP5).
+            $e = $ex;
+        }
+
+        if (isset($e)) {
             // cleanup after failed expectation
             self::resetAllData();
             throw $e;
index 8e53d15..ba7d000 100644 (file)
@@ -62,7 +62,15 @@ abstract class basic_testcase extends base_testcase {
 
         try {
             parent::runBare();
-        } catch (Exception $e) {
+
+        } catch (Exception $ex) {
+            $e = $ex;
+        } catch (Throwable $ex) {
+            // Engine errors in PHP7 throw exceptions of type Throwable (this "catch" will be ignored in PHP5).
+            $e = $ex;
+        }
+
+        if (isset($e)) {
             // cleanup after failed expectation
             phpunit_util::reset_all_data();
             throw $e;
index eaacaa2..5236a6e 100644 (file)
@@ -142,7 +142,14 @@ abstract class database_driver_testcase extends base_testcase {
         try {
             parent::runBare();
 
-        } catch (Exception $e) {
+        } catch (Exception $ex) {
+            $e = $ex;
+        } catch (Throwable $ex) {
+            // Engine errors in PHP7 throw exceptions of type Throwable (this "catch" will be ignored in PHP5).
+            $e = $ex;
+        }
+
+        if (isset($e)) {
             if ($this->tdb->is_transaction_started()) {
                 $this->tdb->force_transaction_rollback();
             }
index 8fc15d6..1393cd4 100644 (file)
@@ -50,12 +50,22 @@ class search_token {
   private $value;
   private $type;
 
-  function search_token($type,$value){
+  public function __construct($type,$value){
     $this->type = $type;
     $this->value = $this->sanitize($value);
 
   }
 
+  /**
+   * Old syntax of class constructor. Deprecated in PHP7.
+   *
+   * @deprecated since Moodle 3.1
+   */
+  public function search_token($type, $value) {
+    debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+    self::__construct($type, $value);
+  }
+
   // Try to clean up user input to avoid potential security issues.
   // Need to think about this some more.
 
@@ -82,10 +92,10 @@ class search_token {
  */
 class search_lexer extends Lexer{
 
-  function search_lexer(&$parser){
+  public function __construct(&$parser){
 
     // Call parent constructor.
-    $this->Lexer($parser);
+    parent::__construct($parser);
 
     //Set up the state machine and pattern matches for transitions.
 
@@ -193,6 +203,17 @@ class search_lexer extends Lexer{
     $this->addExitPattern("\s","plainstring");
 
   }
+
+  /**
+   * Old syntax of class constructor. Deprecated in PHP7.
+   *
+   * @deprecated since Moodle 3.1
+   */
+  public function search_lexer(&$parser) {
+    debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+    self::__construct($parser);
+  }
+
 }
 
 
index 3175bb1..a1324f0 100644 (file)
@@ -709,6 +709,11 @@ ini_set('arg_separator.output', '&amp;');
 // Work around for a PHP bug   see MDL-11237
 ini_set('pcre.backtrack_limit', 20971520);  // 20 MB
 
+// Work around for PHP7 bug #70110. See MDL-52475 .
+if (ini_get('pcre.jit')) {
+    ini_set('pcre.jit', 0);
+}
+
 // Set PHP default timezone to server timezone.
 core_date::set_default_server_timezone();
 
index 145c4a4..155704c 100644 (file)
@@ -63,7 +63,14 @@ define('MEMORY_HUGE', -4);
  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  * @deprecated since 2.0
  */
-class object extends stdClass {};
+class object extends stdClass {
+    /**
+     * Constructor.
+     */
+    public function __construct() {
+        debugging("'object' class has been deprecated, please use stdClass instead.", DEBUG_DEVELOPER);
+    }
+};
 
 /**
  * Base Moodle Exception class
@@ -378,7 +385,14 @@ function default_exception_handler($ex) {
                 $DB->set_debug(0);
             }
             echo $OUTPUT->fatal_error($info->message, $info->moreinfourl, $info->link, $info->backtrace, $info->debuginfo);
-        } catch (Exception $out_ex) {
+        } catch (Exception $e) {
+            $out_ex = $e;
+        } catch (Throwable $e) {
+            // Engine errors in PHP7 throw exceptions of type Throwable (this "catch" will be ignored in PHP5).
+            $out_ex = $e;
+        }
+
+        if (isset($out_ex)) {
             // default exception handler MUST not throw any exceptions!!
             // the problem here is we do not know if page already started or not, we only know that somebody messed up in outputlib or theme
             // so we just print at least something instead of "Exception thrown without a stack frame in Unknown on line 0":-(
index 53b64a6..e921805 100644 (file)
@@ -1657,10 +1657,26 @@ class table_default_export_format_parent {
      * started yet.
      */
     var $documentstarted = false;
-    function table_default_export_format_parent(&$table) {
+
+    /**
+     * Constructor
+     *
+     * @param flexible_table $table
+     */
+    public function __construct(&$table) {
         $this->table =& $table;
     }
 
+    /**
+     * Old syntax of class constructor. Deprecated in PHP7.
+     *
+     * @deprecated since Moodle 3.1
+     */
+    public function table_default_export_format_parent(&$table) {
+        debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER);
+        self::__construct($table);
+    }
+
     function set_table(&$table) {
         $this->table =& $table;
     }
index f126735..d9a75de 100644 (file)
@@ -59,15 +59,7 @@ class core_completionlib_testcase extends advanced_testcase {
         // Create a course with activities.
         $this->course = $this->getDataGenerator()->create_course(array('enablecompletion' => true));
         $this->user = $this->getDataGenerator()->create_user();
-        $studentrole = $DB->get_record('role', array('shortname' => 'student'));
-        $this->assertNotEmpty($studentrole);
-
-        // Get manual enrolment plugin and enrol user.
-        require_once($CFG->dirroot.'/enrol/manual/locallib.php');
-        $manplugin = enrol_get_plugin('manual');
-        $maninstance = $DB->get_record('enrol', array('courseid' => $this->course->id, 'enrol' => 'manual'), '*', MUST_EXIST);
-        $manplugin->enrol_user($maninstance, $this->user->id, $studentrole->id);
-        $this->assertEquals(1, $DB->count_records('user_enrolments'));
+        $this->getDataGenerator()->enrol_user($this->user->id, $this->course->id);
 
         $this->module1 = $this->getDataGenerator()->create_module('forum', array('course' => $this->course->id));
         $this->module2 = $this->getDataGenerator()->create_module('forum', array('course' => $this->course->id));
@@ -858,6 +850,17 @@ class core_completionlib_testcase extends advanced_testcase {
         $expectedlegacylog = array($this->course->id, 'course', 'completion updated', 'completion.php?id='.$this->course->id);
         $this->assertEventLegacyLogData($expectedlegacylog, $event);
     }
+
+    public function test_completion_can_view_data() {
+        $this->setup_data();
+
+        $student = $this->getDataGenerator()->create_user();
+        $this->getDataGenerator()->enrol_user($student->id, $this->course->id);
+
+        $this->setUser($student);
+        $this->assertTrue(completion_can_view_data($student->id, $this->course->id));
+        $this->assertFalse(completion_can_view_data($this->user->id, $this->course->id));
+    }
 }
 
 class core_completionlib_fake_recordset implements Iterator {
diff --git a/lib/tests/fixtures/upload_users_profile.csv b/lib/tests/fixtures/upload_users_profile.csv
new file mode 100644 (file)
index 0000000..b15db76
--- /dev/null
@@ -0,0 +1,3 @@
+username,password,firstname,lastname,email,profile_field_superfield
+jonest,verysecret,Tom,Jones,jonest@someplace.edu,The big guy
+reznort,somesecret,Trent,Reznor,reznort@someplace.edu,Loves cats