Merge branch 'MDL-52365_new' of git://github.com/mkassaei/moodle
authorDan Poltawski <dan@moodle.com>
Tue, 22 Dec 2015 13:15:02 +0000 (13:15 +0000)
committerDan Poltawski <dan@moodle.com>
Tue, 22 Dec 2015 13:15:02 +0000 (13:15 +0000)
365 files changed:
.travis.yml
admin/environment.xml
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/db/tests/db_test.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/helper/restore_logs_processor.class.php
backup/util/plan/backup_structure_step.class.php
backup/util/plan/restore_structure_step.class.php
backup/util/settings/tests/settings_test.php
blocks/edit_form.php
blocks/rss_client/editfeed.php
blocks/rss_client/tests/cron_test.php
blog/edit.php
blog/external_blogs.php
blog/index.php
blog/lib.php
blog/locallib.php
blog/renderer.php
blog/rsslib.php
blog/tests/bloglib_test.php
completion/tests/behat/teacher_manual_completion.feature
course/moodleform_mod.php
enrol/database/lib.php
enrol/guest/classes/external.php [new file with mode: 0644]
enrol/guest/db/services.php [new file with mode: 0644]
enrol/guest/lib.php
enrol/guest/tests/external_test.php [new file with mode: 0644]
enrol/guest/version.php
enrol/self/edit_form.php
enrol/self/lib.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/ro/moodle.php
lib/adminlib.php
lib/adodb/adodb-active-record.inc.php
lib/adodb/adodb-active-recordx.inc.php
lib/adodb/adodb-csvlib.inc.php
lib/adodb/adodb-datadict.inc.php
lib/adodb/adodb-error.inc.php
lib/adodb/adodb-errorhandler.inc.php
lib/adodb/adodb-errorpear.inc.php
lib/adodb/adodb-exceptions.inc.php
lib/adodb/adodb-iterator.inc.php
lib/adodb/adodb-lib.inc.php
lib/adodb/adodb-memcache.lib.inc.php
lib/adodb/adodb-pager.inc.php
lib/adodb/adodb-pear.inc.php
lib/adodb/adodb-perf.inc.php
lib/adodb/adodb-php4.inc.php
lib/adodb/adodb-time.inc.php
lib/adodb/adodb-xmlschema.inc.php
lib/adodb/adodb-xmlschema03.inc.php
lib/adodb/adodb.inc.php
lib/adodb/datadict/datadict-access.inc.php
lib/adodb/datadict/datadict-db2.inc.php
lib/adodb/datadict/datadict-firebird.inc.php
lib/adodb/datadict/datadict-generic.inc.php
lib/adodb/datadict/datadict-ibase.inc.php
lib/adodb/datadict/datadict-informix.inc.php
lib/adodb/datadict/datadict-mssql.inc.php
lib/adodb/datadict/datadict-mssqlnative.inc.php
lib/adodb/datadict/datadict-mysql.inc.php
lib/adodb/datadict/datadict-oci8.inc.php
lib/adodb/datadict/datadict-postgres.inc.php
lib/adodb/datadict/datadict-sapdb.inc.php
lib/adodb/datadict/datadict-sqlite.inc.php
lib/adodb/datadict/datadict-sybase.inc.php
lib/adodb/drivers/adodb-access.inc.php
lib/adodb/drivers/adodb-ado.inc.php
lib/adodb/drivers/adodb-ado5.inc.php
lib/adodb/drivers/adodb-ado_access.inc.php
lib/adodb/drivers/adodb-ado_mssql.inc.php
lib/adodb/drivers/adodb-ads.inc.php
lib/adodb/drivers/adodb-borland_ibase.inc.php
lib/adodb/drivers/adodb-csv.inc.php
lib/adodb/drivers/adodb-db2.inc.php
lib/adodb/drivers/adodb-db2oci.inc.php
lib/adodb/drivers/adodb-db2ora.inc.php
lib/adodb/drivers/adodb-fbsql.inc.php
lib/adodb/drivers/adodb-firebird.inc.php
lib/adodb/drivers/adodb-ibase.inc.php
lib/adodb/drivers/adodb-informix.inc.php
lib/adodb/drivers/adodb-informix72.inc.php
lib/adodb/drivers/adodb-ldap.inc.php
lib/adodb/drivers/adodb-mssql.inc.php
lib/adodb/drivers/adodb-mssql_n.inc.php
lib/adodb/drivers/adodb-mssqlnative.inc.php
lib/adodb/drivers/adodb-mssqlpo.inc.php
lib/adodb/drivers/adodb-mysql.inc.php
lib/adodb/drivers/adodb-mysqli.inc.php
lib/adodb/drivers/adodb-mysqlpo.inc.php
lib/adodb/drivers/adodb-mysqlt.inc.php
lib/adodb/drivers/adodb-netezza.inc.php
lib/adodb/drivers/adodb-oci8.inc.php
lib/adodb/drivers/adodb-oci805.inc.php
lib/adodb/drivers/adodb-oci8po.inc.php
lib/adodb/drivers/adodb-oci8quercus.inc.php
lib/adodb/drivers/adodb-odbc.inc.php
lib/adodb/drivers/adodb-odbc_db2.inc.php
lib/adodb/drivers/adodb-odbc_mssql.inc.php
lib/adodb/drivers/adodb-odbc_oracle.inc.php
lib/adodb/drivers/adodb-odbtp.inc.php
lib/adodb/drivers/adodb-odbtp_unicode.inc.php
lib/adodb/drivers/adodb-oracle.inc.php
lib/adodb/drivers/adodb-pdo.inc.php
lib/adodb/drivers/adodb-pdo_mssql.inc.php
lib/adodb/drivers/adodb-pdo_mysql.inc.php
lib/adodb/drivers/adodb-pdo_oci.inc.php
lib/adodb/drivers/adodb-pdo_pgsql.inc.php
lib/adodb/drivers/adodb-pdo_sqlite.inc.php
lib/adodb/drivers/adodb-pdo_sqlsrv.inc.php [new file with mode: 0644]
lib/adodb/drivers/adodb-postgres.inc.php
lib/adodb/drivers/adodb-postgres64.inc.php
lib/adodb/drivers/adodb-postgres7.inc.php
lib/adodb/drivers/adodb-postgres8.inc.php
lib/adodb/drivers/adodb-postgres9.inc.php
lib/adodb/drivers/adodb-proxy.inc.php
lib/adodb/drivers/adodb-sapdb.inc.php
lib/adodb/drivers/adodb-sqlanywhere.inc.php
lib/adodb/drivers/adodb-sqlite.inc.php
lib/adodb/drivers/adodb-sqlite3.inc.php
lib/adodb/drivers/adodb-sqlitepo.inc.php
lib/adodb/drivers/adodb-sybase.inc.php
lib/adodb/drivers/adodb-sybase_ase.inc.php
lib/adodb/drivers/adodb-text.inc.php [new file with mode: 0644]
lib/adodb/drivers/adodb-vfp.inc.php
lib/adodb/license.txt
lib/adodb/perf/perf-db2.inc.php
lib/adodb/perf/perf-informix.inc.php
lib/adodb/perf/perf-mssql.inc.php
lib/adodb/perf/perf-mssqlnative.inc.php
lib/adodb/perf/perf-mysql.inc.php
lib/adodb/perf/perf-oci8.inc.php
lib/adodb/perf/perf-postgres.inc.php
lib/adodb/pivottable.inc.php
lib/adodb/readme_moodle.txt
lib/adodb/rsfilter.inc.php
lib/adodb/toexport.inc.php
lib/adodb/tohtml.inc.php
lib/behat/classes/behat_selectors.php
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/atto/plugins/rtl/yui/build/moodle-atto_rtl-button/moodle-atto_rtl-button-debug.js
lib/editor/atto/plugins/rtl/yui/build/moodle-atto_rtl-button/moodle-atto_rtl-button-min.js
lib/editor/atto/plugins/rtl/yui/build/moodle-atto_rtl-button/moodle-atto_rtl-button.js
lib/editor/atto/plugins/rtl/yui/src/button/js/button.js
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/jabber/XMPP/XMLStream.php
lib/jabber/readme_moodle.txt
lib/lexer.php
lib/mathslib.php
lib/moodlelib.php
lib/outputcomponents.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/testing/generator/data_generator.php
lib/testing/tests/generator_test.php
lib/tests/behat/largeforms.feature [new file with mode: 0644]
lib/tests/completionlib_test.php
lib/tests/fixtures/max_input_vars.php [new file with mode: 0644]
lib/tests/fixtures/upload_users_profile.csv [new file with mode: 0644]
lib/tests/rsslib_test.php
lib/tests/setuplib_test.php
lib/thirdpartylibs.xml
lib/upgrade.txt
lib/upgradelib.php
message/output/airnotifier/classes/manager.php
message/tests/behat/message_participants.feature
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/search.php
mod/lesson/mod_form.php
mod/lti/locallib.php
mod/lti/tests/locallib_test.php
mod/quiz/attemptlib.php
mod/quiz/backup/moodle2/restore_quiz_activity_task.class.php
mod/quiz/locallib.php
mod/quiz/renderer.php
mod/quiz/upgrade.txt
mod/scorm/classes/external.php
mod/scorm/datamodels/scorm_12.php
mod/scorm/datamodels/scorm_13.php
mod/scorm/locallib.php
mod/scorm/report/interactions/classes/report.php
mod/scorm/report/interactions/lang/en/scormreport_interactions.php
mod/scorm/report/interactions/responsessettings_form.php
mod/scorm/report/interactions/version.php
mod/scorm/tests/externallib_test.php
mod/scorm/tests/packages/complexscorm.zip [new file with mode: 0644]
mod/wiki/classes/external.php
mod/wiki/db/services.php
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/prettyview.php
mod/wiki/tests/externallib_test.php
mod/wiki/tests/lib_test.php [new file with mode: 0644]
mod/wiki/version.php
mod/wiki/view.php
npm-shrinkwrap.json [new file with mode: 0644]
package.json
question/category_class.php
question/engine/renderer.php
question/tests/behat/behat_question.php
question/type/calculated/db/upgradelib.php
question/type/calculated/question.php
question/type/calculated/tests/variablesubstituter_test.php
question/type/calculatedmulti/db/upgradelib.php
question/type/ddimageortext/tests/behat/preview.feature
question/type/ddmarker/tests/behat/preview.feature
question/type/ddwtos/tests/behat/preview.feature
question/type/multianswer/db/upgrade.php
question/type/multianswer/edit_multianswer_form.php
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/message.html
user/messageselect.php
user/profile/field/checkbox/field.class.php
user/profile/field/menu/field.class.php
user/profile/lib.php
version.php

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 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 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 7979bd8..03c186d 100644 (file)
@@ -381,4 +381,22 @@ class auth_db_testcase extends advanced_testcase {
 
         $this->cleanup_auth_database();
     }
+
+    /**
+     * Testing the function _colonscope() from ADOdb.
+     */
+    public function test_adodb_colonscope() {
+        global $CFG;
+        require_once($CFG->libdir.'/adodb/adodb.inc.php');
+        require_once($CFG->libdir.'/adodb/drivers/adodb-odbc.inc.php');
+        require_once($CFG->libdir.'/adodb/drivers/adodb-db2ora.inc.php');
+
+        $this->resetAfterTest(false);
+
+        $sql = "select * from table WHERE column=:1 AND anothercolumn > :0";
+        $arr = array('b', 1);
+        list($sqlout, $arrout) = _colonscope($sql,$arr);
+        $this->assertEquals("select * from table WHERE column=? AND anothercolumn > ?", $sqlout);
+        $this->assertEquals(array(1, 'b'), $arrout);
+    }
 }
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 585d9b4..bc2c2b6 100644 (file)
@@ -89,11 +89,12 @@ class restore_logs_processor {
             }
             // Arrived here log is empty, no rule was able to perform the conversion, log the problem
             if (empty($newlog)) {
-                self::$task->log('Log module-action "' . $keyname . '" process problem. Not restored', backup::LOG_DEBUG);
+                self::$task->log('Log module-action "' . $keyname . '" process problem. Not restored. ' .
+                    json_encode($log), backup::LOG_DEBUG);
             }
 
         } else { // Action not found log the problem
-            self::$task->log('Log module-action "' . $keyname . '" unknown. Not restored', backup::LOG_DEBUG);
+            self::$task->log('Log module-action "' . $keyname . '" unknown. Not restored. '.json_encode($log), backup::LOG_DEBUG);
             $newlog = false;
 
         }
index 5d8cb55..e18ada4 100644 (file)
@@ -183,6 +183,10 @@ abstract class backup_structure_step extends backup_step {
      * @return void
      */
     protected function add_subplugin_structure($subplugintype, $element, $multiple, $plugintype = null, $pluginname = null) {
+        global $CFG;
+        // This global declaration is required, because where we do require_once($backupfile);
+        // That file may in turn try to do require_once($CFG->dirroot ...).
+        // That worked in the past, we should keep it working.
 
         // Verify if this is a BC call for an activity backup. See NOTE above for this special case.
         if ($plugintype === null and $pluginname === null) {
index de7b002..b59ac82 100644 (file)
@@ -313,6 +313,10 @@ abstract class restore_structure_step extends restore_step {
      * @return void
      */
     protected function add_subplugin_structure($subplugintype, $element, $plugintype = null, $pluginname = null) {
+        global $CFG;
+        // This global declaration is required, because where we do require_once($backupfile);
+        // That file may in turn try to do require_once($CFG->dirroot ...).
+        // That worked in the past, we should keep it working.
 
         // Verify if this is a BC call for an activity restore. See NOTE above for this special case.
         if ($plugintype === null and $pluginname === null) {
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 9069c28..e1299a5 100644 (file)
@@ -40,7 +40,7 @@ class block_rss_client_cron_testcase extends advanced_testcase {
      * than the current time the attempt is skipped.
      */
     public function test_skip() {
-        global $DB;
+        global $DB, $CFG;
         $this->resetAfterTest();
         // Create a RSS feed record with a skip until time set to the future.
         $record = (object) array(
@@ -57,8 +57,12 @@ class block_rss_client_cron_testcase extends advanced_testcase {
 
         $block = new block_rss_client();
         ob_start();
+
         // Silence SimplePie php notices.
-        @$block->cron();
+        $errorlevel = error_reporting($CFG->debug & ~E_USER_NOTICE);
+        $block->cron();
+        error_reporting($errorlevel);
+
         $cronoutput = ob_get_clean();
         $this->assertContains('skipping until ' . userdate($record->skipuntil), $cronoutput);
         $this->assertContains('0 feeds refreshed (took ', $cronoutput);
@@ -68,7 +72,7 @@ class block_rss_client_cron_testcase extends advanced_testcase {
      * Test that when a feed has an error the skip time is increaed correctly.
      */
     public function test_error() {
-        global $DB;
+        global $DB, $CFG;
         $this->resetAfterTest();
         $time = time();
         // A record that has failed before.
@@ -113,8 +117,12 @@ class block_rss_client_cron_testcase extends advanced_testcase {
         // Run the cron.
         $block = new block_rss_client();
         ob_start();
+
         // Silence SimplePie php notices.
-        @$block->cron();
+        $errorlevel = error_reporting($CFG->debug & ~E_USER_NOTICE);
+        $block->cron();
+        error_reporting($errorlevel);
+
         $cronoutput = ob_get_clean();
         $skiptime1 = $record->skiptime * 2;
         $message1 = 'http://example.com/rss Error: could not load/find the RSS feed - skipping for ' . $skiptime1 . ' seconds.';
index 14d4c87..634c511 100644 (file)
@@ -132,8 +132,12 @@ if ($action === 'delete') {
             redirect($returnurl);
         }
     } else if (blog_user_can_edit_entry($entry)) {
-        $optionsyes = array('entryid'=>$id, 'action'=>'delete', 'confirm'=>1, 'sesskey'=>sesskey(), 'courseid'=>$courseid);
-        $optionsno = array('userid'=>$entry->userid, 'courseid'=>$courseid);
+        $optionsyes = array('entryid' => $id,
+                            'action' => 'delete',
+                            'confirm' => 1,
+                            'sesskey' => sesskey(),
+                            'courseid' => $courseid);
+        $optionsno = array('userid' => $entry->userid, 'courseid' => $courseid);
         $PAGE->set_title("$SITE->shortname: $strblogs");
         $PAGE->set_heading($SITE->fullname);
         echo $OUTPUT->header();
@@ -182,9 +186,9 @@ if (!empty($entry->id)) {
 }
 
 require_once('edit_form.php');
-$summaryoptions = array('maxfiles'=> 99, 'maxbytes'=>$CFG->maxbytes, 'trusttext'=>true, 'context'=>$sitecontext,
-    'subdirs'=>file_area_contains_subdirs($sitecontext, 'blog', 'post', $entry->id));
-$attachmentoptions = array('subdirs'=>false, 'maxfiles'=> 99, 'maxbytes'=>$CFG->maxbytes);
+$summaryoptions = array('maxfiles' => 99, 'maxbytes' => $CFG->maxbytes, 'trusttext' => true, 'context' => $sitecontext,
+    'subdirs' => file_area_contains_subdirs($sitecontext, 'blog', 'post', $entry->id));
+$attachmentoptions = array('subdirs' => false, 'maxfiles' => 99, 'maxbytes' => $CFG->maxbytes);
 
 $blogeditform = new blog_edit_form(null, compact('entry',
                                                  'summaryoptions',
index 4b0d408..6595848 100644 (file)
@@ -94,7 +94,7 @@ if (!empty($blogs)) {
         $editurl = new moodle_url('/blog/external_blog_edit.php', array('id' => $blog->id));
         $editicon = $OUTPUT->action_icon($editurl, new pix_icon('t/edit', get_string('editexternalblog', 'blog')));
 
-        $deletelink = new moodle_url('/blog/external_blogs.php', array('delete' => $blog->id, 'sesskey'=>sesskey()));
+        $deletelink = new moodle_url('/blog/external_blogs.php', array('delete' => $blog->id, 'sesskey' => sesskey()));
         $deleteicon = $OUTPUT->action_icon($deletelink, new pix_icon('t/delete', get_string('deleteexternalblog', 'blog')));
 
         $table->data[] = new html_table_row(array($blog->name,
index 56ab7eb..bc3dd1e 100644 (file)
@@ -40,13 +40,13 @@ $search   = optional_param('search', null, PARAM_RAW);
 
 comment::init();
 
-$url_params = compact('id', 'start', 'tag', 'userid', 'tagid', 'modid', 'entryid', 'groupid', 'courseid', 'search');
-foreach ($url_params as $var => $val) {
+$urlparams = compact('id', 'start', 'tag', 'userid', 'tagid', 'modid', 'entryid', 'groupid', 'courseid', 'search');
+foreach ($urlparams as $var => $val) {
     if (empty($val)) {
-        unset($url_params[$var]);
+        unset($urlparams[$var]);
     }
 }
-$PAGE->set_url('/blog/index.php', $url_params);
+$PAGE->set_url('/blog/index.php', $urlparams);
 
 // Correct tagid if a text tag is provided as a param.
 if (!empty($tag)) {
@@ -121,7 +121,7 @@ if (!empty($groupid) && empty($courseid)) {
 
 if (!$userid && has_capability('moodle/blog:view', $sitecontext) && $CFG->bloglevel > BLOG_USER_LEVEL) {
     if ($entryid) {
-        if (!$entryobject = $DB->get_record('post', array('id'=>$entryid))) {
+        if (!$entryobject = $DB->get_record('post', array('id' => $entryid))) {
             print_error('nosuchentry', 'blog');
         }
         $userid = $entryobject->userid;
@@ -148,12 +148,12 @@ if ((empty($courseid) ? true : $courseid == SITEID) && empty($userid)) {
         print_error('cannotviewsiteblog', 'blog');
     }
 
-    $COURSE = $DB->get_record('course', array('format'=>'site'));
+    $COURSE = $DB->get_record('course', array('format' => 'site'));
     $courseid = $COURSE->id;
 }
 
 if (!empty($courseid)) {
-    if (!$course = $DB->get_record('course', array('id'=>$courseid))) {
+    if (!$course = $DB->get_record('course', array('id' => $courseid))) {
         print_error('invalidcourseid');
     }
 
@@ -176,7 +176,7 @@ if (!empty($groupid)) {
         print_error(get_string('invalidgroupid', 'blog'));
     }
 
-    if (!$course = $DB->get_record('course', array('id'=>$group->courseid))) {
+    if (!$course = $DB->get_record('course', array('id' => $group->courseid))) {
         print_error('invalidcourseid');
     }
 
@@ -200,7 +200,7 @@ if (!empty($userid)) {
         print_error('blogdisable', 'blog');
     }
 
-    if (!$user = $DB->get_record('user', array('id'=>$userid))) {
+    if (!$user = $DB->get_record('user', array('id' => $userid))) {
         print_error('invaliduserid');
     }
 
index f99ed31..00a1ffa 100644 (file)
@@ -332,9 +332,9 @@ function blog_get_all_options(moodle_page $page, stdClass $userid = null) {
             $userid = $page->context->instanceid;
         }
         // Check the userid var.
-        if (!is_null($userid) && $userid!==$USER->id) {
+        if (!is_null($userid) && $userid !== $USER->id) {
             // Load the user from the userid... it MUST EXIST throw a wobbly if it doesn't!
-            $user = $DB->get_record('user', array('id'=>$userid), '*', MUST_EXIST);
+            $user = $DB->get_record('user', array('id' => $userid), '*', MUST_EXIST);
         } else {
             $user = null;
         }
@@ -350,7 +350,7 @@ function blog_get_all_options(moodle_page $page, stdClass $userid = null) {
         // Get the options for the user.
         if ($user !== null and !isguestuser($user)) {
             // Load for the requested user.
-            $options[CONTEXT_USER+1] = blog_get_options_for_user($user);
+            $options[CONTEXT_USER + 1] = blog_get_options_for_user($user);
         }
         // Load for the current user.
         if (isloggedin() and !isguestuser()) {
@@ -413,7 +413,7 @@ function blog_get_options_for_user(stdClass $user=null) {
         // Not the current user, but we can view and its blogs are enabled for SITE or GLOBAL.
         $options['userentries'] = array(
             'string' => get_string('viewuserentries', 'blog', fullname($user)),
-            'link' => new moodle_url('/blog/index.php', array('userid'=>$user->id))
+            'link' => new moodle_url('/blog/index.php', array('userid' => $user->id))
         );
     } else {
         // It's the current user.
@@ -421,14 +421,14 @@ function blog_get_options_for_user(stdClass $user=null) {
             // We can view our own blogs .... BIG surprise.
             $options['view'] = array(
                 'string' => get_string('blogentries', 'blog'),
-                'link' => new moodle_url('/blog/index.php', array('userid'=>$USER->id))
+                'link' => new moodle_url('/blog/index.php', array('userid' => $USER->id))
             );
         }
         if (has_capability('moodle/blog:create', $sitecontext)) {
             // We can add to our own blog.
             $options['add'] = array(
                 'string' => get_string('addnewentry', 'blog'),
-                'link' => new moodle_url('/blog/edit.php', array('action'=>'add'))
+                'link' => new moodle_url('/blog/edit.php', array('action' => 'add'))
             );
         }
     }
@@ -560,13 +560,13 @@ function blog_get_options_for_module($module, $user=null) {
             $a->type = $modulename;
             $options['moduleview'] = array(
                 'string' => get_string('viewallmodentries', 'blog', $a),
-                'link' => new moodle_url('/blog/index.php', array('modid'=>$module->id))
+                'link' => new moodle_url('/blog/index.php', array('modid' => $module->id))
             );
         }
         // View MY entries about this module.
         $options['moduleviewmine'] = array(
             'string' => get_string('viewmyentriesaboutmodule', 'blog', $modulename),
-            'link' => new moodle_url('/blog/index.php', array('modid'=>$module->id, 'userid'=>$USER->id))
+            'link' => new moodle_url('/blog/index.php', array('modid' => $module->id, 'userid' => $USER->id))
         );
         if (!empty($user) && ($CFG->bloglevel >= BLOG_SITE_LEVEL)) {
             // View the given users entries about this module.
@@ -575,7 +575,7 @@ function blog_get_options_for_module($module, $user=null) {
             $a->user = fullname($user);
             $options['moduleviewuser'] = array(
                 'string' => get_string('blogentriesbyuseraboutmodule', 'blog', $a),
-                'link' => new moodle_url('/blog/index.php', array('modid'=>$module->id, 'userid'=>$user->id))
+                'link' => new moodle_url('/blog/index.php', array('modid' => $module->id, 'userid' => $user->id))
             );
         }
     }
@@ -584,7 +584,7 @@ function blog_get_options_for_module($module, $user=null) {
         // The user can blog about this module.
         $options['moduleadd'] = array(
             'string' => get_string('blogaboutthismodule', 'blog', $modulename),
-            'link' => new moodle_url('/blog/edit.php', array('action'=>'add', 'modid'=>$module->id))
+            'link' => new moodle_url('/blog/edit.php', array('action' => 'add', 'modid' => $module->id))
         );
     }
     // Cache the options.
@@ -673,7 +673,7 @@ function blog_get_headers($courseid=null, $groupid=null, $userid=null, $tagid=nu
 
         $headers['filters']['module'] = $modid;
         // A groupid param may conflict with this coursemod's courseid. Ignore groupid in that case.
-        $courseid = $DB->get_field('course_modules', 'course', array('id'=>$modid));
+        $courseid = $DB->get_field('course_modules', 'course', array('id' => $modid));
         $course = $DB->get_record('course', array('id' => $courseid));
         $cm = $DB->get_record('course_modules', array('id' => $modid));
         $cm->modname = $DB->get_field('modules', 'name', array('id' => $cm->module));
@@ -861,7 +861,7 @@ function blog_get_headers($courseid=null, $groupid=null, $userid=null, $tagid=nu
         if (!empty($tagid)) {
             $headers['filters']['tag'] = $tagid;
             $blogurl->param('tagid', $tagid);
-            $tagrec = $DB->get_record('tag', array('id'=>$tagid));
+            $tagrec = $DB->get_record('tag', array('id' => $tagid));
             $PAGE->navbar->add($tagrec->name, $blogurl);
         } else if (!empty($tag)) {
             if ($tagrec = $DB->get_record('tag', array('name' => $tag))) {
@@ -921,7 +921,7 @@ function blog_get_associated_count($courseid, $cmid=null) {
  * @package  core_blog
  * @category comment
  *
- * @param stdClass $comment_param {
+ * @param stdClass $commentparam {
  *              context  => context the context object
  *              courseid => int course id
  *              cm       => stdClass course module object
@@ -930,11 +930,11 @@ function blog_get_associated_count($courseid, $cmid=null) {
  * }
  * @return array
  */
-function blog_comment_permissions($comment_param) {
+function blog_comment_permissions($commentparam) {
     global $DB;
 
     // If blog is public and current user is guest, then don't let him post comments.
-    $blogentry = $DB->get_record('post', array('id' => $comment_param->itemid), 'publishstate', MUST_EXIST);
+    $blogentry = $DB->get_record('post', array('id' => $commentparam->itemid), 'publishstate', MUST_EXIST);
 
     if ($blogentry->publishstate != 'public') {
         if (!isloggedin() || isguestuser()) {
@@ -959,7 +959,7 @@ function blog_comment_permissions($comment_param) {
  * }
  * @return boolean
  */
-function blog_comment_validate($comment_param) {
+function blog_comment_validate($commentparam) {
     global $CFG, $DB, $USER;
 
     // Check if blogs are enabled user can comment.
@@ -968,22 +968,22 @@ function blog_comment_validate($comment_param) {
     }
 
     // Validate comment area.
-    if ($comment_param->commentarea != 'format_blog') {
+    if ($commentparam->commentarea != 'format_blog') {
         throw new comment_exception('invalidcommentarea');
     }
 
-    $blogentry = $DB->get_record('post', array('id' => $comment_param->itemid), '*', MUST_EXIST);
+    $blogentry = $DB->get_record('post', array('id' => $commentparam->itemid), '*', MUST_EXIST);
 
     // Validation for comment deletion.
-    if (!empty($comment_param->commentid)) {
-        if ($record = $DB->get_record('comments', array('id'=>$comment_param->commentid))) {
+    if (!empty($commentparam->commentid)) {
+        if ($record = $DB->get_record('comments', array('id' => $commentparam->commentid))) {
             if ($record->commentarea != 'format_blog') {
                 throw new comment_exception('invalidcommentarea');
             }
-            if ($record->contextid != $comment_param->context->id) {
+            if ($record->contextid != $commentparam->context->id) {
                 throw new comment_exception('invalidcontext');
             }
-            if ($record->itemid != $comment_param->itemid) {
+            if ($record->itemid != $commentparam->itemid) {
                 throw new comment_exception('invalidcommentitemid');
             }
         } else {
@@ -1005,10 +1005,10 @@ function blog_comment_validate($comment_param) {
  */
 function blog_page_type_list($pagetype, $parentcontext, $currentcontext) {
     return array(
-        '*'=>get_string('page-x', 'pagetype'),
-        'blog-*'=>get_string('page-blog-x', 'blog'),
-        'blog-index'=>get_string('page-blog-index', 'blog'),
-        'blog-edit'=>get_string('page-blog-edit', 'blog')
+        '*' => get_string('page-x', 'pagetype'),
+        'blog-*' => get_string('page-blog-x', 'blog'),
+        'blog-index' => get_string('page-blog-index', 'blog'),
+        'blog-edit' => get_string('page-blog-edit', 'blog')
     );
 }
 
index 114e38e..7968483 100644 (file)
@@ -112,7 +112,7 @@ class blog_entry implements renderable {
 
         $this->renderable = new StdClass();
 
-        $this->renderable->user = $DB->get_record('user', array('id'=>$this->userid));
+        $this->renderable->user = $DB->get_record('user', array('id' => $this->userid));
 
         // Entry comments.
         if (!empty($CFG->usecomments) and $CFG->blogusecomments) {
@@ -163,7 +163,7 @@ class blog_entry implements renderable {
                     $associations[$key]->contextlevel = $context->contextlevel;
 
                     // Course associations.
-                    if ($context->contextlevel ==  CONTEXT_COURSE) {
+                    if ($context->contextlevel == CONTEXT_COURSE) {
                         // TODO: performance!!!!
                         $instancename = $DB->get_field('course', 'shortname', array('id' => $context->instanceid));
 
@@ -174,7 +174,7 @@ class blog_entry implements renderable {
                     }
 
                     // Mod associations.
-                    if ($context->contextlevel ==  CONTEXT_MODULE) {
+                    if ($context->contextlevel == CONTEXT_MODULE) {
 
                         // Getting the activity type and the activity instance id.
                         $sql = 'SELECT cm.instance, m.name FROM {course_modules} cm
@@ -653,7 +653,7 @@ class blog_listing {
                 $assocexists = $DB->record_exists('blog_association', array());
 
                 // Begin permission sql clause.
-                $permissionsql =  '(p.userid = ? ';
+                $permissionsql = '(p.userid = ? ';
                 $params[] = $userid;
 
                 if ($CFG->bloglevel >= BLOG_SITE_LEVEL) { // Add permission to view site-level entries.
index 832d4b1..1045a89 100644 (file)
@@ -141,10 +141,10 @@ class core_blog_renderer extends plugin_renderer_base {
             if ($officialtags) {
                 $o .= get_string('tags', 'tag') .': '. $this->output->container($officialtags, 'officialblogtags');
                 if ($defaulttags) {
-                    $o .=  ', ';
+                    $o .= ', ';
                 }
             }
-            $o .=  $defaulttags;
+            $o .= $defaulttags;
             $o .= $this->output->container_end();
         }
 
@@ -155,7 +155,7 @@ class core_blog_renderer extends plugin_renderer_base {
             $assocstr = '';
             $coursesarray = array();
             foreach ($entry->renderable->blogassociations as $assocrec) {
-                if ($assocrec->contextlevel ==  CONTEXT_COURSE) {
+                if ($assocrec->contextlevel == CONTEXT_COURSE) {
                     $coursesarray[] = $this->output->action_icon($assocrec->url, $assocrec->icon, null, array(), true);
                 }
             }
@@ -166,7 +166,7 @@ class core_blog_renderer extends plugin_renderer_base {
             // Now show mod association.
             $modulesarray = array();
             foreach ($entry->renderable->blogassociations as $assocrec) {
-                if ($assocrec->contextlevel ==  CONTEXT_MODULE) {
+                if ($assocrec->contextlevel == CONTEXT_MODULE) {
                     $str = get_string('associated', 'blog', $assocrec->type) . ': ';
                     $str .= $this->output->action_icon($assocrec->url, $assocrec->icon, null, array(), true);
                     $modulesarray[] = $str;
index 3f26eb0..cad38d8 100644 (file)
@@ -35,7 +35,7 @@ require_once($CFG->dirroot .'/blog/lib.php');
  * @param int    $tagid        The id of the row in the tag table that identifies the RSS Feed
  * @return string
  */
-function blog_rss_get_url($contextid, $userid, $filtertype, $filterselect=0, $tagid=0) {
+function blog_rss_get_url($contextid, $userid, $filtertype, $filterselect = 0, $tagid = 0) {
     $componentname = 'blog';
 
     $additionalargs = null;
@@ -70,7 +70,7 @@ function blog_rss_get_url($contextid, $userid, $filtertype, $filterselect=0, $ta
  * @param int         $tagid        The id of the row in the tag table that identifies the RSS Feed
  * @param string      $tooltiptext  The tooltip to be displayed with the link
  */
-function blog_rss_print_link($context, $filtertype, $filterselect=0, $tagid=0, $tooltiptext='') {
+function blog_rss_print_link($context, $filtertype, $filterselect = 0, $tagid = 0, $tooltiptext = '') {
     global $CFG, $USER, $OUTPUT;
 
     if (!isloggedin()) {
@@ -93,7 +93,7 @@ function blog_rss_print_link($context, $filtertype, $filterselect=0, $tagid=0, $
  * @param int         $filterselect The id of the item defined by $filtertype
  * @param int         $tagid        The id of the row in the tag table that identifies the RSS Feed
  */
-function blog_rss_add_http_header($context, $title, $filtertype, $filterselect=0, $tagid=0) {
+function blog_rss_add_http_header($context, $title, $filtertype, $filterselect = 0, $tagid = 0) {
     global $PAGE, $USER, $CFG;
 
     if (!isloggedin()) {
@@ -168,7 +168,7 @@ function blog_rss_get_feed($context, $args) {
     $type  = clean_param($args[3], PARAM_ALPHA);
     $id = clean_param($args[4], PARAM_INT);  // Could be groupid / courseid  / userid  depending on $type.
 
-    $tagid=0;
+    $tagid = 0;
     if ($args[5] != 'rss.xml') {
         $tagid = clean_param($args[5], PARAM_INT);
     } else {
@@ -234,10 +234,10 @@ function blog_rss_get_feed($context, $args) {
 
     switch ($type) {
         case 'user':
-            $info = fullname($DB->get_record('user', array('id'=>$id), 'firstname,lastname'));
+            $info = fullname($DB->get_record('user', array('id' => $id), 'firstname,lastname'));
             break;
         case 'course':
-            $info = $DB->get_field('course', 'fullname', array('id'=>$id));
+            $info = $DB->get_field('course', 'fullname', array('id' => $id));
             $info = format_string($info, true, array('context' => context_course::instance($id)));
             break;
         case 'site':
@@ -245,7 +245,7 @@ function blog_rss_get_feed($context, $args) {
             break;
         case 'group':
             $group = groups_get_group($id);
-            $info = $group->name; // TODO: $DB->get_field('groups', 'name', array('id'=>$id)).
+            $info = $group->name; // TODO: $DB->get_field('groups', 'name', array('id' => $id)).
             break;
         default:
             $info = '';
@@ -253,7 +253,7 @@ function blog_rss_get_feed($context, $args) {
     }
 
     if ($tagid) {
-        $info .= ': '.$DB->get_field('tags', 'text', array('id'=>$tagid));
+        $info .= ': '.$DB->get_field('tags', 'text', array('id' => $tagid));
     }
 
     $header = rss_standard_header(get_string($type.'blog', 'blog', $info),
@@ -279,7 +279,7 @@ function blog_rss_get_feed($context, $args) {
  * @param int    $tagid The id of the row in the tag table that identifies the RSS Feed
  * @return string
  */
-function blog_rss_file_name($type, $id, $tagid=0) {
+function blog_rss_file_name($type, $id, $tagid = 0) {
     global $CFG;
 
     if ($tagid) {
@@ -298,7 +298,7 @@ function blog_rss_file_name($type, $id, $tagid=0) {
  * @param string $contents The contents of the RSS Feed file
  * @return bool whether the save was successful or not
  */
-function blog_rss_save_file($type, $id, $tagid=0, $contents='') {
+function blog_rss_save_file($type, $id, $tagid = 0, $contents = '') {
     global $CFG;
 
     $status = true;
index a0589c2..73c81f2 100644 (file)
@@ -46,9 +46,9 @@ class core_bloglib_testcase extends advanced_testcase {
         $this->resetAfterTest();
 
         // Create default course.
-        $course = $this->getDataGenerator()->create_course(array('category'=>1, 'shortname'=>'ANON'));
+        $course = $this->getDataGenerator()->create_course(array('category' => 1, 'shortname' => 'ANON'));
         $this->assertNotEmpty($course);
-        $page = $this->getDataGenerator()->create_module('page', array('course'=>$course->id));
+        $page = $this->getDataGenerator()->create_module('page', array('course' => $course->id));
         $this->assertNotEmpty($page);
 
         // Create default group.
@@ -58,7 +58,11 @@ class core_bloglib_testcase extends advanced_testcase {
         $group->id = $DB->insert_record('groups', $group);
 
         // Create default user.
-        $user = $this->getDataGenerator()->create_user(array('username'=>'testuser', 'firstname'=>'Jimmy', 'lastname'=>'Kinnon'));
+        $user = $this->getDataGenerator()->create_user(array(
+                'username' => 'testuser',
+                'firstname' => 'Jimmy',
+                'lastname' => 'Kinnon'
+        ));
 
         // Create default tag.
         $tag = new stdClass();
@@ -91,35 +95,35 @@ class core_bloglib_testcase extends advanced_testcase {
         // Try all the filters at once: Only the entry filter is active.
         $filters = array('site' => $SITE->id, 'course' => $this->courseid, 'module' => $this->cmid,
             'group' => $this->groupid, 'user' => $this->userid, 'tag' => $this->tagid, 'entry' => $this->postid);
-        $blog_listing = new blog_listing($filters);
-        $this->assertFalse(array_key_exists('site', $blog_listing->filters));
-        $this->assertFalse(array_key_exists('course', $blog_listing->filters));
-        $this->assertFalse(array_key_exists('module', $blog_listing->filters));
-        $this->assertFalse(array_key_exists('group', $blog_listing->filters));
-        $this->assertFalse(array_key_exists('user', $blog_listing->filters));
-        $this->assertFalse(array_key_exists('tag', $blog_listing->filters));
-        $this->assertTrue(array_key_exists('entry', $blog_listing->filters));
+        $bloglisting = new blog_listing($filters);
+        $this->assertFalse(array_key_exists('site', $bloglisting->filters));
+        $this->assertFalse(array_key_exists('course', $bloglisting->filters));
+        $this->assertFalse(array_key_exists('module', $bloglisting->filters));
+        $this->assertFalse(array_key_exists('group', $bloglisting->filters));
+        $this->assertFalse(array_key_exists('user', $bloglisting->filters));
+        $this->assertFalse(array_key_exists('tag', $bloglisting->filters));
+        $this->assertTrue(array_key_exists('entry', $bloglisting->filters));
 
         // Again, but without the entry filter: This time, the tag, user and module filters are active.
         $filters = array('site' => $SITE->id, 'course' => $this->courseid, 'module' => $this->cmid,
             'group' => $this->groupid, 'user' => $this->userid, 'tag' => $this->postid);
-        $blog_listing = new blog_listing($filters);
-        $this->assertFalse(array_key_exists('site', $blog_listing->filters));
-        $this->assertFalse(array_key_exists('course', $blog_listing->filters));
-        $this->assertFalse(array_key_exists('group', $blog_listing->filters));
-        $this->assertTrue(array_key_exists('module', $blog_listing->filters));
-        $this->assertTrue(array_key_exists('user', $blog_listing->filters));
-        $this->assertTrue(array_key_exists('tag', $blog_listing->filters));
+        $bloglisting = new blog_listing($filters);
+        $this->assertFalse(array_key_exists('site', $bloglisting->filters));
+        $this->assertFalse(array_key_exists('course', $bloglisting->filters));
+        $this->assertFalse(array_key_exists('group', $bloglisting->filters));
+        $this->assertTrue(array_key_exists('module', $bloglisting->filters));
+        $this->assertTrue(array_key_exists('user', $bloglisting->filters));
+        $this->assertTrue(array_key_exists('tag', $bloglisting->filters));
 
         // We should get the same result by removing the 3 inactive filters: site, course and group.
         $filters = array('module' => $this->cmid, 'user' => $this->userid, 'tag' => $this->tagid);
-        $blog_listing = new blog_listing($filters);
-        $this->assertFalse(array_key_exists('site', $blog_listing->filters));
-        $this->assertFalse(array_key_exists('course', $blog_listing->filters));
-        $this->assertFalse(array_key_exists('group', $blog_listing->filters));
-        $this->assertTrue(array_key_exists('module', $blog_listing->filters));
-        $this->assertTrue(array_key_exists('user', $blog_listing->filters));
-        $this->assertTrue(array_key_exists('tag', $blog_listing->filters));
+        $bloglisting = new blog_listing($filters);
+        $this->assertFalse(array_key_exists('site', $bloglisting->filters));
+        $this->assertFalse(array_key_exists('course', $bloglisting->filters));
+        $this->assertFalse(array_key_exists('group', $bloglisting->filters));
+        $this->assertTrue(array_key_exists('module', $bloglisting->filters));
+        $this->assertTrue(array_key_exists('user', $bloglisting->filters));
+        $this->assertTrue(array_key_exists('tag', $bloglisting->filters));
 
     }
 
index c1ce408..0a73901 100644 (file)
@@ -37,12 +37,9 @@ Feature: Allow teachers to manually mark users as complete when configured
     And I follow "View course report"
     And I should see "Student First"
     And I follow "Click to mark user complete"
-    # Running cron just after clicking sometimes fail, so navigate back
-    # and ensure the student completion is updated before running cron.
-    And I am on site homepage
-    And I follow "Completion course"
-    And I follow "View course report"
-    And "//img[contains(@alt, 'Completed')]" "xpath_element" should exist in the "student1" "table_row"
+    # Running cron just after clicking sometimes fail, as record
+    # should be created before the cron runs.
+    And I wait "1" seconds
     And I trigger cron
     And I am on site homepage
     And I log out
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 c22c65e..d25e14a 100644 (file)
@@ -264,9 +264,9 @@ class enrol_database_plugin extends enrol_plugin {
                   FROM {enrol} e
                   JOIN {course} c ON c.id = e.courseid
                   JOIN {role_assignments} ra ON ra.itemid = e.id
-             LEFT JOIN {user_enrolments} ue ON ue.enrolid = e.id
+             LEFT JOIN {user_enrolments} ue ON ue.enrolid = e.id AND ue.userid = ra.userid
                  WHERE ra.userid = :userid AND e.enrol = 'database'";
-        $rs = $DB->get_recordset_sql($sql, array('userid'=>$user->id));
+        $rs = $DB->get_recordset_sql($sql, array('userid' => $user->id));
         foreach ($rs as $instance) {
             if (!$instance->cvisible and $ignorehidden) {
                 continue;
diff --git a/enrol/guest/classes/external.php b/enrol/guest/classes/external.php
new file mode 100644 (file)
index 0000000..a441ef8
--- /dev/null
@@ -0,0 +1,119 @@
+<?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * Guest enrolment method external API
+ *
+ * @package    enrol_guest
+ * @category   external
+ * @copyright  2015 Juan Leyva <juan@moodle.com>
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ * @since      Moodle 3.1
+ */
+
+defined('MOODLE_INTERNAL') || die;
+
+require_once($CFG->libdir . '/externallib.php');
+require_once($CFG->libdir . '/enrollib.php');
+
+/**
+ * Guest enrolment method external API
+ *
+ * @package    enrol_guest
+ * @category   external
+ * @copyright  2015 Juan Leyva <juan@moodle.com>
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ * @since      Moodle 3.1
+ */
+class enrol_guest_external extends external_api {
+
+    /**
+     * Returns description of get_instance_info() parameters.
+     *
+     * @return external_function_parameters
+     * @since Moodle 3.1
+     */
+    public static function get_instance_info_parameters() {
+        return new external_function_parameters(
+                array('instanceid' => new external_value(PARAM_INT, 'Instance id of guest enrolment plugin.'))
+            );
+    }
+
+    /**
+     * Return guest enrolment instance information.
+     *
+     * @param int $instanceid instance id of guest enrolment plugin.
+     * @return array warnings and instance information.
+     * @since Moodle 3.1
+     */
+    public static function get_instance_info($instanceid) {
+        global $DB;
+
+        $params = self::validate_parameters(self::get_instance_info_parameters(), array('instanceid' => $instanceid));
+        $warnings = array();
+
+        // Retrieve guest enrolment plugin.
+        $enrolplugin = enrol_get_plugin('guest');
+        if (empty($enrolplugin)) {
+            throw new moodle_exception('invaliddata', 'error');
+        }
+
+        require_login(null, false, null, false, true);
+        $enrolinstance = $DB->get_record('enrol', array('id' => $params['instanceid']), '*', MUST_EXIST);
+
+        $course = $DB->get_record('course', array('id' => $enrolinstance->courseid), '*', MUST_EXIST);
+        $context = context_course::instance($course->id);
+        if (!$course->visible and !has_capability('moodle/course:viewhiddencourses', $context)) {
+            throw new moodle_exception('coursehidden');
+        }
+
+        $instanceinfo = $enrolplugin->get_enrol_info($enrolinstance);
+        // Specific instance information.
+        $instanceinfo->passwordrequired = $instanceinfo->requiredparam->passwordrequired;
+
+        unset($instanceinfo->requiredparam);
+
+        $result = array();
+        $result['instanceinfo'] = $instanceinfo;
+        $result['warnings'] = $warnings;
+        return $result;
+    }
+
+    /**
+     * Returns description of get_instance_info() result value.
+     *
+     * @return external_description
+     * @since Moodle 3.1
+     */
+    public static function get_instance_info_returns() {
+        return new external_single_structure(
+            array(
+                'instanceinfo' => new external_single_structure(
+                    array(
+                        'id' => new external_value(PARAM_INT, 'Id of course enrolment instance'),
+                        'courseid' => new external_value(PARAM_INT, 'Id of course'),
+                        'type' => new external_value(PARAM_PLUGIN, 'Type of enrolment plugin'),
+                        'name' => new external_value(PARAM_RAW, 'Name of enrolment plugin'),
+                        'status' => new external_value(PARAM_BOOL, 'Is the enrolment enabled?'),
+                        'passwordrequired' => new external_value(PARAM_BOOL, 'Is a password required?'),
+                    )
+                ),
+                'warnings' => new external_warnings()
+            )
+        );
+    }
+
+}
diff --git a/enrol/guest/db/services.php b/enrol/guest/db/services.php
new file mode 100644 (file)
index 0000000..9127483
--- /dev/null
@@ -0,0 +1,35 @@
+<?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * Guest enrolment external functions and service definitions.
+ *
+ * @package    enrol_guest
+ * @category   external
+ * @copyright  2015 Juan Leyva <juan@moodle.com>
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ * @since      Moodle 3.1
+ */
+
+$functions = array(
+
+    'enrol_guest_get_instance_info' => array(
+        'classname'   => 'enrol_guest_external',
+        'methodname'  => 'get_instance_info',
+        'description' => 'Return guest enrolment instance information.',
+        'type'        => 'read'
+    ),
+);
index 7c0bfd2..51e2edb 100644 (file)
@@ -391,4 +391,32 @@ class enrol_guest_plugin extends enrol_plugin {
         $fields['status']          = $this->get_config('status');
         return $fields;
     }
+
+    /**
+     * Return information for enrolment instance containing list of parameters required
+     * for enrolment, name of enrolment plugin etc.
+     *
+     * @param stdClass $instance enrolment instance
+     * @return stdClass instance info.
+     * @since Moodle 3.1
+     */
+    public function get_enrol_info(stdClass $instance) {
+
+        $instanceinfo = new stdClass();
+        $instanceinfo->id = $instance->id;
+        $instanceinfo->courseid = $instance->courseid;
+        $instanceinfo->type = $this->get_name();
+        $instanceinfo->name = $this->get_instance_name($instance);
+        $instanceinfo->status = $instance->status == ENROL_INSTANCE_ENABLED;
+
+        // Specifics enrolment method parameters.
+        $instanceinfo->requiredparam = new stdClass();
+        $instanceinfo->requiredparam->passwordrequired = !empty($instance->password);
+
+        // If the plugin is enabled, return the URL for obtaining more information.
+        if ($instanceinfo->status) {
+            $instanceinfo->wsfunction = 'enrol_guest_get_instance_info';
+        }
+        return $instanceinfo;
+    }
 }
diff --git a/enrol/guest/tests/external_test.php b/enrol/guest/tests/external_test.php
new file mode 100644 (file)
index 0000000..91193af
--- /dev/null
@@ -0,0 +1,116 @@
+<?php
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * Self enrol external PHPunit tests
+ *
+ * @package   enrol_guest
+ * @copyright 2015 Juan Leyva <juan@moodle.com>
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ * @since     Moodle 3.1
+ */
+
+defined('MOODLE_INTERNAL') || die();
+
+global $CFG;
+
+require_once($CFG->dirroot . '/webservice/tests/helpers.php');
+
+/**
+ * Guest enrolment external functions tests
+ *
+ * @package    enrol_guest
+ * @category   external
+ * @copyright  2015 Juan Leyva <juan@moodle.com>
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ * @since      Moodle 3.1
+ */
+class enrol_guest_external_testcase extends externallib_advanced_testcase {
+
+    /**
+     * Test get_instance_info
+     */
+    public function test_get_instance_info() {
+        global $DB;
+
+        $this->resetAfterTest(true);
+
+        // Check if guest enrolment plugin is enabled.
+        $guestplugin = enrol_get_plugin('guest');
+        $this->assertNotEmpty($guestplugin);
+
+        $studentrole = $DB->get_record('role', array('shortname' => 'student'));
+
+        $coursedata = new stdClass();
+        $coursedata->visible = 0;
+        $course = self::getDataGenerator()->create_course($coursedata);
+
+        $student = self::getDataGenerator()->create_user();
+        $this->getDataGenerator()->enrol_user($student->id, $course->id, $studentrole->id, 'manual');
+
+        // Add enrolment methods for course.
+        $instance = $guestplugin->add_instance($course, array('status' => ENROL_INSTANCE_ENABLED,
+                                                                'name' => 'Test instance',
+                                                                'customint6' => 1,
+                                                                'roleid' => $studentrole->id));
+
+        $this->setAdminUser();
+        $result = enrol_guest_external::get_instance_info($instance);
+        $result = external_api::clean_returnvalue(enrol_guest_external::get_instance_info_returns(), $result);
+
+        $this->assertEquals($instance, $result['instanceinfo']['id']);
+        $this->assertEquals($course->id, $result['instanceinfo']['courseid']);
+        $this->assertEquals('guest', $result['instanceinfo']['type']);
+        $this->assertEquals('Test instance', $result['instanceinfo']['name']);
+        $this->assertTrue($result['instanceinfo']['status']);
+        $this->assertFalse($result['instanceinfo']['passwordrequired']);
+
+        $DB->set_field('enrol', 'status', ENROL_INSTANCE_DISABLED, array('id' => $instance));
+
+        $result = enrol_guest_external::get_instance_info($instance);
+        $result = external_api::clean_returnvalue(enrol_guest_external::get_instance_info_returns(), $result);
+        $this->assertEquals($instance, $result['instanceinfo']['id']);
+        $this->assertEquals($course->id, $result['instanceinfo']['courseid']);
+        $this->assertEquals('guest', $result['instanceinfo']['type']);
+        $this->assertEquals('Test instance', $result['instanceinfo']['name']);
+        $this->assertFalse($result['instanceinfo']['status']);
+        $this->assertFalse($result['instanceinfo']['passwordrequired']);
+
+        $DB->set_field('enrol', 'status', ENROL_INSTANCE_ENABLED, array('id' => $instance));
+
+        // Try to retrieve information using a normal user for a hidden course.
+        $user = self::getDataGenerator()->create_user();
+        $this->setUser($user);
+        try {
+            enrol_guest_external::get_instance_info($instance);
+        } catch (moodle_exception $e) {
+            $this->assertEquals('coursehidden', $e->errorcode);
+        }
+
+        // Student user.
+        $DB->set_field('course', 'visible', 1, array('id' => $course->id));
+        $this->setUser($student);
+        $result = enrol_guest_external::get_instance_info($instance);
+        $result = external_api::clean_returnvalue(enrol_guest_external::get_instance_info_returns(), $result);
+
+        $this->assertEquals($instance, $result['instanceinfo']['id']);
+        $this->assertEquals($course->id, $result['instanceinfo']['courseid']);
+        $this->assertEquals('guest', $result['instanceinfo']['type']);
+        $this->assertEquals('Test instance', $result['instanceinfo']['name']);
+        $this->assertTrue($result['instanceinfo']['status']);
+        $this->assertFalse($result['instanceinfo']['passwordrequired']);
+    }
+}
index d916ed6..5076e7b 100644 (file)
@@ -24,6 +24,6 @@
 
 defined('MOODLE_INTERNAL') || die();
 
-$plugin->version   = 2015111600;        // The current plugin version (Date: YYYYMMDDXX)
+$plugin->version   = 2015111601;        // The current plugin version (Date: YYYYMMDDXX)
 $plugin->requires  = 2015111000;        // Requires this Moodle version
 $plugin->component = 'enrol_guest';     // Full name of the plugin (used for diagnostics)
index b035bd3..af10050 100644 (file)
@@ -163,15 +163,17 @@ class enrol_self_edit_form extends moodleform {
         $checkpassword = false;
 
         if ($instance->id) {
-            if ($data['status'] == ENROL_INSTANCE_ENABLED) {
-                if ($instance->password !== $data['password']) {
-                    $checkpassword = true;
-                }
+            // Check the password if we are enabling the plugin again.
+            if (($instance->status == ENROL_INSTANCE_DISABLED) && ($data['status'] == ENROL_INSTANCE_ENABLED)) {
+                $checkpassword = true;
             }
-        } else {
-            if ($data['status'] == ENROL_INSTANCE_ENABLED) {
+
+            // Check the password if the instance is enabled and the password has changed.
+            if (($data['status'] == ENROL_INSTANCE_ENABLED) && ($instance->password !== $data['password'])) {
                 $checkpassword = true;
             }
+        } else {
+            $checkpassword = true;
         }
 
         if ($checkpassword) {
@@ -179,8 +181,8 @@ class enrol_self_edit_form extends moodleform {
             $policy  = $plugin->get_config('usepasswordpolicy');
             if ($require and trim($data['password']) === '') {
                 $errors['password'] = get_string('required');
-            } else if ($policy) {
-                $errmsg = '';//prevent eclipse warning
+            } else if (!empty($data['password']) && $policy) {
+                $errmsg = '';
                 if (!check_password_policy($data['password'], $errmsg)) {
                     $errors['password'] = $errmsg;
                 }
index 7ad82ef..fef3f6f 100644 (file)
@@ -685,6 +685,27 @@ class enrol_self_plugin extends enrol_plugin {
      */
     public function can_hide_show_instance($instance) {
         $context = context_course::instance($instance->courseid);
-        return has_capability('enrol/self:config', $context);
+
+        if (!has_capability('enrol/self:config', $context)) {
+            return false;
+        }
+
+        // If the instance is currently disabled, before it can be enabled,
+        // we must check whether the password meets the password policies.
+        if ($instance->status == ENROL_INSTANCE_DISABLED) {
+            if ($this->get_config('requirepassword')) {
+                if (empty($instance->password)) {
+                    return false;
+                }
+            }
+            // Only check the password if it is set.
+            if (!empty($instance->password) && $this->get_config('usepasswordpolicy')) {
+                if (!check_password_policy($instance->password, $errmsg)) {
+                    return false;
+                }
+            }
+        }
+
+        return true;
     }
 }
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..e09f7e9 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
 
             // run dvips (.dvi to .ps)
             $pathdvips = escapeshellarg(trim(get_config('filter_tex', 'pathdvips'), " '\""));
-            $command = "$pathdvips -E $dvi -o $ps";
+            $command = "$pathdvips -q -E $dvi -o $ps";
             if ($this->execute($command, $log )) {
                 return false;
             }
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 be0a958..067f640 100644 (file)
@@ -31,6 +31,7 @@
 defined('MOODLE_INTERNAL') || die();
 
 $string['language'] = 'Limba';
+$string['moodlelogo'] = 'Logo Moodle';
 $string['next'] = 'Următorul';
 $string['previous'] = 'Precedent';
 $string['reload'] = 'Reîncarcă';
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 607fa94..ad9533c 100644 (file)
@@ -1,7 +1,9 @@
 <?php
 /*
 
-@version V5.19  23-Apr-2014  (c) 2000-2014 John Lim (jlim#natsoft.com). All rights reserved.
+@version   v5.20.1  06-Dec-2015
+@copyright (c) 2000-2013 John Lim (jlim#natsoft.com). All rights reserved.
+@copyright (c) 2014      Damien Regad, Mark Newnham and the ADOdb community
   Latest version is available at http://adodb.sourceforge.net
 
   Released under both BSD license and Lesser GPL library license.
@@ -52,10 +54,13 @@ function ADODB_SetDatabaseAdapter(&$db, $index=false)
 
                foreach($_ADODB_ACTIVE_DBS as $k => $d) {
                        if (PHP_VERSION >= 5) {
-                               if ($d->db === $db) return $k;
+                               if ($d->db === $db) {
+                                       return $k;
+                               }
                        } else {
-                               if ($d->db->_connectionID === $db->_connectionID && $db->database == $d->db->database)
+                               if ($d->db->_connectionID === $db->_connectionID && $db->database == $d->db->database) {
                                        return $k;
+                               }
                        }
                }
 
@@ -63,8 +68,9 @@ function ADODB_SetDatabaseAdapter(&$db, $index=false)
                $obj->db = $db;
                $obj->tables = array();
 
-               if ($index == false) $index = sizeof($_ADODB_ACTIVE_DBS);
-
+               if ($index == false) {
+                       $index = sizeof($_ADODB_ACTIVE_DBS);
+               }
 
                $_ADODB_ACTIVE_DBS[$index] = $obj;
 
@@ -92,7 +98,9 @@ class ADODB_Active_Record {
        static function UseDefaultValues($bool=null)
        {
        global $ADODB_ACTIVE_DEFVALS;
-               if (isset($bool)) $ADODB_ACTIVE_DEFVALS = $bool;
+               if (isset($bool)) {
+                       $ADODB_ACTIVE_DEFVALS = $bool;
+               }
                return $ADODB_ACTIVE_DEFVALS;
        }
 
@@ -120,14 +128,21 @@ class ADODB_Active_Record {
                }
 
                if (!$table) {
-                       if (!empty($this->_table)) $table = $this->_table;
+                       if (!empty($this->_table)) {
+                               $table = $this->_table;
+                       }
                        else $table = $this->_pluralize(get_class($this));
                }
                $this->foreignName = strtolower(get_class($this)); // CFR: default foreign name
                if ($db) {
                        $this->_dbat = ADODB_Active_Record::SetDatabaseAdapter($db);
                } else if (!isset($this->_dbat)) {
-                       if (sizeof($_ADODB_ACTIVE_DBS) == 0) $this->Error("No database connection set; use ADOdb_Active_Record::SetDatabaseAdapter(\$db)",'ADODB_Active_Record::__constructor');
+                       if (sizeof($_ADODB_ACTIVE_DBS) == 0) {
+                               $this->Error(
+                                       "No database connection set; use ADOdb_Active_Record::SetDatabaseAdapter(\$db)",
+                                       'ADODB_Active_Record::__constructor'
+                               );
+                       }
                        end($_ADODB_ACTIVE_DBS);
                        $this->_dbat = key($_ADODB_ACTIVE_DBS);
                }
@@ -146,7 +161,9 @@ class ADODB_Active_Record {
 
        function _pluralize($table)
        {
-               if (!ADODB_Active_Record::$_changeNames) return $table;
+               if (!ADODB_Active_Record::$_changeNames) {
+                       return $table;
+               }
 
                $ut = strtoupper($table);
                $len = strlen($table);
@@ -160,8 +177,9 @@ class ADODB_Active_Record {
                case 'X':
                        return $table.'es';
                case 'H':
-                       if ($lastc2 == 'CH' || $lastc2 == 'SH')
+                       if ($lastc2 == 'CH' || $lastc2 == 'SH') {
                                return $table.'es';
+                       }
                default:
                        return $table.'s';
                }
@@ -172,24 +190,28 @@ class ADODB_Active_Record {
        function _singularize($tables)
        {
 
-               if (!ADODB_Active_Record::$_changeNames) return $table;
+               if (!ADODB_Active_Record::$_changeNames) {
+                       return $table;
+               }
 
                $ut = strtoupper($tables);
                $len = strlen($tables);
-               if($ut[$len-1] != 'S')
+               if($ut[$len-1] != 'S') {
                        return $tables; // I know...forget oxen
-               if($ut[$len-2] != 'E')
+               }
+               if($ut[$len-2] != 'E') {
                        return substr($tables, 0, $len-1);
-               switch($ut[$len-3])
-               {
+               }
+               switch($ut[$len-3]) {
                        case 'S':
                        case 'X':
                                return substr($tables, 0, $len-2);
                        case 'I':
                                return substr($tables, 0, $len-3) . 'y';
                        case 'H';
-                               if($ut[$len-4] == 'C' || $ut[$len-4] == 'S')
+                               if($ut[$len-4] == 'C' || $ut[$len-4] == 'S') {
                                        return substr($tables, 0, $len-2);
+                               }
                        default:
                                return substr($tables, 0, $len-1); // ?
                }
@@ -216,7 +238,9 @@ class ADODB_Active_Record {
        // use when you don't want ADOdb to auto-pluralize tablename
        static function TableKeyHasMany($table, $tablePKey, $foreignRef, $foreignKey = false, $foreignClass = 'ADODB_Active_Record')
        {
-               if (!is_array($tablePKey)) $tablePKey = array($tablePKey);
+               if (!is_array($tablePKey)) {
+                       $tablePKey = array($tablePKey);
+               }
                $ar = new ADODB_Active_Record($table,$tablePKey);
                $ar->hasMany($foreignRef, $foreignKey, $foreignClass);
        }
@@ -260,7 +284,9 @@ class ADODB_Active_Record {
 
        static function TableKeyBelongsTo($table, $tablePKey, $foreignRef, $foreignKey=false, $parentKey='', $parentClass = 'ADODB_Active_Record')
        {
-               if (!is_array($tablePKey)) $tablePKey = array($tablePKey);
+               if (!is_array($tablePKey)) {
+                       $tablePKey = array($tablePKey);
+               }
                $ar = new ADOdb_Active_Record($table, $tablePKey);
                $ar->belongsTo($foreignRef, $foreignKey, $parentKey, $parentClass);
        }
@@ -289,24 +315,34 @@ class ADODB_Active_Record {
        {
                $extras = array();
                $table = $this->TableInfo();
-               if ($limit >= 0) $extras['limit'] = $limit;
-               if ($offset >= 0) $extras['offset'] = $offset;
+               if ($limit >= 0) {
+                       $extras['limit'] = $limit;
+               }
+               if ($offset >= 0) {
+                       $extras['offset'] = $offset;
+               }
 
-               if (strlen($whereOrderBy))
-                       if (!preg_match('/^[ \n\r]*AND/i',$whereOrderBy))
-                               if (!preg_match('/^[ \n\r]*ORDER[ \n\r]/i',$whereOrderBy))
-                                       $whereOrderBy = 'AND '.$whereOrderBy;
+               if (strlen($whereOrderBy)) {
+                       if (!preg_match('/^[ \n\r]*AND/i', $whereOrderBy)) {
+                               if (!preg_match('/^[ \n\r]*ORDER[ \n\r]/i', $whereOrderBy)) {
+                                       $whereOrderBy = 'AND ' . $whereOrderBy;
+                               }
+                       }
+               }
 
-               if(!empty($table->_belongsTo[$name]))
-               {
+               if(!empty($table->_belongsTo[$name])) {
                        $obj = $table->_belongsTo[$name];
                        $columnName = $obj->foreignKey;
-                       if(empty($this->$columnName))
+                       if(empty($this->$columnName)) {
                                $this->$name = null;
-                       else
-                       {
-                               if ($obj->parentKey) $key = $obj->parentKey;
-                               else $key = reset($table->keys);
+                       }
+                       else {
+                               if ($obj->parentKey) {
+                                       $key = $obj->parentKey;
+                               }
+                               else {
+                                       $key = reset($table->keys);
+                               }
 
                                $arrayOfOne = $obj->Find($key.'='.$this->$columnName.' '.$whereOrderBy,false,false,$extras);
                                if ($arrayOfOne) {
@@ -315,8 +351,7 @@ class ADODB_Active_Record {
                                }
                        }
                }
-               if(!empty($table->_hasMany[$name]))
-               {
+               if(!empty($table->_hasMany[$name])) {
                        $obj = $table->_hasMany[$name];
                        $key = reset($table->keys);
                        $id = @$this->$key;
@@ -325,7 +360,9 @@ class ADODB_Active_Record {
                                $id = $db->qstr($id);
                        }
                        $objs = $obj->Find($obj->foreignKey.'='.$id. ' '.$whereOrderBy,false,false,$extras);
-                       if (!$objs) $objs = array();
+                       if (!$objs) {
+                               $objs = array();
+                       }
                        $this->$name = $objs;
                        return $objs;
                }
@@ -349,10 +386,12 @@ class ADODB_Active_Record {
 
                        $acttab = $tables[$tableat];
                        foreach($acttab->flds as $name => $fld) {
-                       if ($ADODB_ACTIVE_DEFVALS && isset($fld->default_value))
-                               $this->$name = $fld->default_value;
-                       else
-                               $this->$name = null;
+                               if ($ADODB_ACTIVE_DEFVALS && isset($fld->default_value)) {
+                                       $this->$name = $fld->default_value;
+                               }
+                               else {
+                                       $this->$name = null;
+                               }
                        }
                        return;
                }
@@ -368,10 +407,12 @@ class ADODB_Active_Record {
                                // ideally, you should cache at least 32 secs
 
                                foreach($acttab->flds as $name => $fld) {
-                                       if ($ADODB_ACTIVE_DEFVALS && isset($fld->default_value))
+                                       if ($ADODB_ACTIVE_DEFVALS && isset($fld->default_value)) {
                                                $this->$name = $fld->default_value;
-                                       else
+                                       }
+                                       else {
                                                $this->$name = null;
+                                       }
                                }
 
                                $activedb->tables[$table] = $acttab;
@@ -387,11 +428,15 @@ class ADODB_Active_Record {
 
                $save = $ADODB_FETCH_MODE;
                $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
-               if ($db->fetchMode !== false) $savem = $db->SetFetchMode(false);
+               if ($db->fetchMode !== false) {
+                       $savem = $db->SetFetchMode(false);
+               }
 
                $cols = $db->MetaColumns($table);
 
-               if (isset($savem)) $db->SetFetchMode($savem);
+               if (isset($savem)) {
+                       $db->SetFetchMode($savem);
+               }
                $ADODB_FETCH_MODE = $save;
 
                if (!$cols) {
@@ -403,7 +448,9 @@ class ADODB_Active_Record {
                        if (isset($fld->primary_key)) {
                                $pkeys = array();
                                foreach($cols as $name => $fld) {
-                                       if (!empty($fld->primary_key)) $pkeys[] = $name;
+                                       if (!empty($fld->primary_key)) {
+                                               $pkeys[] = $name;
+                                       }
                                }
                        } else
                                $pkeys = $this->GetPrimaryKeys($db, $table);
@@ -420,10 +467,12 @@ class ADODB_Active_Record {
                case 0:
                        foreach($cols as $name => $fldobj) {
                                $name = strtolower($name);
-                if ($ADODB_ACTIVE_DEFVALS && isset($fldobj->default_value))
-                    $this->$name = $fldobj->default_value;
-                else
+                               if ($ADODB_ACTIVE_DEFVALS && isset($fldobj->default_value)) {
+                                       $this->$name = $fldobj->default_value;
+                               }
+                               else {
                                        $this->$name = null;
+                               }
                                $attr[$name] = $fldobj;
                        }
                        foreach($pkeys as $k => $name) {
@@ -435,10 +484,12 @@ class ADODB_Active_Record {
                        foreach($cols as $name => $fldobj) {
                                $name = strtoupper($name);
 
-                if ($ADODB_ACTIVE_DEFVALS && isset($fldobj->default_value))
-                    $this->$name = $fldobj->default_value;
-                else
+                               if ($ADODB_ACTIVE_DEFVALS && isset($fldobj->default_value)) {
+                                       $this->$name = $fldobj->default_value;
+                               }
+                               else {
                                        $this->$name = null;
+                               }
                                $attr[$name] = $fldobj;
                        }
 
@@ -450,10 +501,12 @@ class ADODB_Active_Record {
                        foreach($cols as $name => $fldobj) {
                                $name = ($fldobj->name);
 
-                if ($ADODB_ACTIVE_DEFVALS && isset($fldobj->default_value))
-                    $this->$name = $fldobj->default_value;
-                else
+                               if ($ADODB_ACTIVE_DEFVALS && isset($fldobj->default_value)) {
+                                       $this->$name = $fldobj->default_value;
+                               }
+                               else {
                                        $this->$name = null;
+                               }
                                $attr[$name] = $fldobj;
                        }
                        foreach($pkeys as $k => $name) {
@@ -468,14 +521,18 @@ class ADODB_Active_Record {
                if ($ADODB_ACTIVE_CACHESECS && $ADODB_CACHE_DIR) {
                        $activetab->_created = time();
                        $s = serialize($activetab);
-                       if (!function_exists('adodb_write_file')) include(ADODB_DIR.'/adodb-csvlib.inc.php');
+                       if (!function_exists('adodb_write_file')) {
+                               include(ADODB_DIR.'/adodb-csvlib.inc.php');
+                       }
                        adodb_write_file($fname,$s);
                }
                if (isset($activedb->tables[$table])) {
                        $oldtab = $activedb->tables[$table];
 
-                       if ($oldtab) $activetab->_belongsTo = $oldtab->_belongsTo;
-                       if ($oldtab) $activetab->_hasMany = $oldtab->_hasMany;
+                       if ($oldtab) {
+                               $activetab->_belongsTo = $oldtab->_belongsTo;
+                               $activetab->_hasMany = $oldtab->_hasMany;
+                       }
                }
                $activedb->tables[$table] = $activetab;
        }
@@ -493,17 +550,26 @@ class ADODB_Active_Record {
                $fn = get_class($this).'::'.$fn;
                $this->_lasterr = $fn.': '.$err;
 
-               if ($this->_dbat < 0) $db = false;
+               if ($this->_dbat < 0) {
+                       $db = false;
+               }
                else {
                        $activedb = $_ADODB_ACTIVE_DBS[$this->_dbat];
                        $db = $activedb->db;
                }
 
                if (function_exists('adodb_throw')) {
-                       if (!$db) adodb_throw('ADOdb_Active_Record', $fn, -1, $err, 0, 0, false);
-                       else adodb_throw($db->databaseType, $fn, -1, $err, 0, 0, $db);
-               } else
-                       if (!$db || $db->debug) ADOConnection::outp($this->_lasterr);
+                       if (!$db) {
+                               adodb_throw('ADOdb_Active_Record', $fn, -1, $err, 0, 0, false);
+                       }
+                       else {
+                               adodb_throw($db->databaseType, $fn, -1, $err, 0, 0, $db);
+                       }
+               } else {
+                       if (!$db || $db->debug) {
+                               ADOConnection::outp($this->_lasterr);
+                       }
+               }
 
        }
 
@@ -511,18 +577,26 @@ class ADODB_Active_Record {
        function ErrorMsg()
        {
                if (!function_exists('adodb_throw')) {
-                       if ($this->_dbat < 0) $db = false;
-                       else $db = $this->DB();
+                       if ($this->_dbat < 0) {
+                               $db = false;
+                       }
+                       else {
+                               $db = $this->DB();
+                       }
 
                        // last error could be database error too
-                       if ($db && $db->ErrorMsg()) return $db->ErrorMsg();
+                       if ($db && $db->ErrorMsg()) {
+                               return $db->ErrorMsg();
+                       }
                }
                return $this->_lasterr;
        }
 
        function ErrorNo()
        {
-               if ($this->_dbat < 0) return -9999; // no database connection...
+               if ($this->_dbat < 0) {
+                       return -9999; // no database connection...
+               }
                $db = $this->DB();
 
                return (int) $db->ErrorNo();
@@ -558,8 +632,11 @@ class ADODB_Active_Record {
        // So, I find that for myTable, I want to reload an active record after saving it. -- Malcolm Cook
        function Reload()
        {
-               $db =& $this->DB(); if (!$db) return false;
-               $table =& $this->TableInfo();
+               $db = $this->DB();
+               if (!$db) {
+                       return false;
+               }
+               $table = $this->TableInfo();
                $where = $this->GenWhere($db, $table);
                return($this->Load($where));
        }
@@ -581,44 +658,47 @@ class ADODB_Active_Record {
 
                $table = $this->TableInfo();
                if ($ACTIVE_RECORD_SAFETY && sizeof($table->flds) != sizeof($row)) {
-            # <AP>
-            $bad_size = TRUE;
-            if (sizeof($row) == 2 * sizeof($table->flds)) {
-                // Only keep string keys
-                $keys = array_filter(array_keys($row), 'is_string');
-                if (sizeof($keys) == sizeof($table->flds))
-                    $bad_size = FALSE;
-            }
-            if ($bad_size) {
+                       # <AP>
+                       $bad_size = TRUE;
+                       if (sizeof($row) == 2 * sizeof($table->flds)) {
+                               // Only keep string keys
+                               $keys = array_filter(array_keys($row), 'is_string');
+                               if (sizeof($keys) == sizeof($table->flds)) {
+                                       $bad_size = FALSE;
+                               }
+                       }
+                       if ($bad_size) {
                        $this->Error("Table structure of $this->_table has changed","Load");
                        return false;
                }
-            # </AP>
+                       # </AP>
                }
-        else
+               else
                        $keys = array_keys($row);
 
-        # <AP>
-        reset($keys);
-        $this->_original = array();
+               # <AP>
+               reset($keys);
+               $this->_original = array();
                foreach($table->flds as $name=>$fld) {
-            $value = $row[current($keys)];
+                       $value = $row[current($keys)];
                        $this->$name = $value;
-            $this->_original[] = $value;
-            next($keys);
+                       $this->_original[] = $value;
+                       next($keys);
                }
 
-        # </AP>
+               # </AP>
                return true;
        }
 
        // get last inserted id for INSERT
        function LastInsertID(&$db,$fieldname)
        {
-               if ($db->hasInsertID)
+               if ($db->hasInsertID) {
                        $val = $db->Insert_ID($this->_table,$fieldname);
-               else
+               }
+               else {
                        $val = false;
+               }
 
                if (is_null($val) || $val === false) {
                        // this might not work reliably in multi-user environment
@@ -632,19 +712,25 @@ class ADODB_Active_Record {
        {
                switch($t) {
                case 'L':
-                       if (strpos($db->databaseType,'postgres') !== false) return $db->qstr($val);
+                       if (strpos($db->databaseType,'postgres') !== false) {
+                               return $db->qstr($val);
+                       }
                case 'D':
                case 'T':
-                       if (empty($val)) return 'null';
-
+                       if (empty($val)) {
+                               return 'null';
+                       }
                case 'B':
                case 'N':
                case 'C':
                case 'X':
-                       if (is_null($val)) return 'null';
+                       if (is_null($val)) {
+                               return 'null';
+                       }
 
                        if (strlen($val)>0 &&
-                               (strncmp($val,"'",1) != 0 || substr($val,strlen($val)-1,1) != "'")) {
+                               (strncmp($val,"'",1) != 0 || substr($val,strlen($val)-1,1) != "'")
+                       ) {
                                return $db->qstr($val);
                                break;
                        }
@@ -672,8 +758,15 @@ class ADODB_Active_Record {
 
        function _QName($n,$db=false)
        {
-               if (!ADODB_Active_Record::$_quoteNames) return $n;
-               if (!$db) $db = $this->DB(); if (!$db) return false;
+               if (!ADODB_Active_Record::$_quoteNames) {
+                       return $n;
+               }
+               if (!$db) {
+                       $db = $this->DB();
+                       if (!$db) {
+                               return false;
+                       }
+               }
                return $db->nameQuote.$n.$db->nameQuote;
        }
 
@@ -683,23 +776,32 @@ class ADODB_Active_Record {
        {
        global $ADODB_FETCH_MODE;
 
-               $db = $this->DB(); if (!$db) return false;
+               $db = $this->DB();
+               if (!$db) {
+                       return false;
+               }
                $this->_where = $where;
 
                $save = $ADODB_FETCH_MODE;
                $ADODB_FETCH_MODE = ADODB_FETCH_NUM;
-               if ($db->fetchMode !== false) $savem = $db->SetFetchMode(false);
+               if ($db->fetchMode !== false) {
+                       $savem = $db->SetFetchMode(false);
+               }
 
                $qry = "select * from ".$this->_table;
 
                if($where) {
                        $qry .= ' WHERE '.$where;
                }
-               if ($lock) $qry .= $this->lockMode;
+               if ($lock) {
+                       $qry .= $this->lockMode;
+               }
 
                $row = $db->GetRow($qry,$bindarr);
 
-               if (isset($savem)) $db->SetFetchMode($savem);
+               if (isset($savem)) {
+                       $db->SetFetchMode($savem);
+               }
                $ADODB_FETCH_MODE = $save;
 
                return $this->Set($row);
@@ -714,25 +816,29 @@ class ADODB_Active_Record {
        # see http://phplens.com/lens/lensforum/msgs.php?id=17795
        function Reset()
        {
-        $this->_where=null;
-        $this->_saved = false;
-        $this->_lasterr = false;
-        $this->_original = false;
-        $vars=get_object_vars($this);
-        foreach($vars as $k=>$v){
-               if(substr($k,0,1)!=='_'){
-                       $this->{$k}=null;
-               }
-        }
-        $this->foreignName=strtolower(get_class($this));
-        return true;
-    }
+               $this->_where=null;
+               $this->_saved = false;
+               $this->_lasterr = false;
+               $this->_original = false;
+               $vars=get_object_vars($this);
+               foreach($vars as $k=>$v){
+                       if(substr($k,0,1)!=='_'){
+                               $this->{$k}=null;
+                       }
+               }
+               $this->foreignName=strtolower(get_class($this));
+               return true;
+       }
 
        // false on error
        function Save()
        {
-               if ($this->_saved) $ok = $this->Update();
-               else $ok = $this->Insert();
+               if ($this->_saved) {
+                       $ok = $this->Update();
+               }
+               else {
+                       $ok = $this->Insert();
+               }
 
                return $ok;
        }
@@ -741,7 +847,10 @@ class ADODB_Active_Record {
        // false on error
        function Insert()
        {
-               $db = $this->DB(); if (!$db) return false;
+               $db = $this->DB();
+               if (!$db) {
+                       return false;
+               }
                $cnt = 0;
                $table = $this->TableInfo();
 
@@ -791,7 +900,10 @@ class ADODB_Active_Record {
 
        function Delete()
        {
-               $db = $this->DB(); if (!$db) return false;
+               $db = $this->DB();
+               if (!$db) {
+                       return false;
+               }
                $table = $this->TableInfo();
 
                $where = $this->GenWhere($db,$table);
@@ -804,7 +916,10 @@ class ADODB_Active_Record {
        // returns an array of active record objects
        function Find($whereOrderBy,$bindarr=false,$pkeysArr=false,$extra=array())
        {
-               $db = $this->DB(); if (!$db || empty($this->_table)) return false;
+               $db = $this->DB();
+               if (!$db || empty($this->_table)) {
+                       return false;
+               }
                $arr = $db->GetActiveRecordsClass(get_class($this),$this->_table, $whereOrderBy,$bindarr,$pkeysArr,$extra);
                return $arr;
        }
@@ -814,7 +929,10 @@ class ADODB_Active_Record {
        {
        global $ADODB_ASSOC_CASE;
 
-               $db = $this->DB(); if (!$db) return false;
+               $db = $this->DB();
+               if (!$db) {
+                       return false;
+               }
                $table = $this->TableInfo();
 
                $pkey = $table->keys;
@@ -824,7 +942,9 @@ class ADODB_Active_Record {
                        /*
                        if (is_null($val)) {
                                if (isset($fld->not_null) && $fld->not_null) {
-                                       if (isset($fld->default_value) && strlen($fld->default_value)) continue;
+                                       if (isset($fld->default_value) && strlen($fld->default_value)) {
+                                               continue;
+                                       }
                                        else {
                                                $this->Error("Cannot update null into $name","Replace");
                                                return false;
@@ -832,25 +952,31 @@ class ADODB_Active_Record {
                                }
                        }*/
                        if (is_null($val) && !empty($fld->auto_increment)) {
-               continue;
-            }
+                               continue;
+                       }
 
-                       if (is_array($val)) continue;
+                       if (is_array($val)) {
+                               continue;
+                       }
 
                        $t = $db->MetaType($fld->type);
                        $arr[$name] = $this->doquote($db,$val,$t);
                        $valarr[] = $val;
                }
 
-               if (!is_array($pkey)) $pkey = array($pkey);
-
+               if (!is_array($pkey)) {
+                       $pkey = array($pkey);
+               }
 
-               if ($ADODB_ASSOC_CASE == 0)
+               if ($ADODB_ASSOC_CASE == 0) {
                        foreach($pkey as $k => $v)
                                $pkey[$k] = strtolower($v);
-               elseif ($ADODB_ASSOC_CASE == 1)
-                       foreach($pkey as $k => $v)
+               }
+               elseif ($ADODB_ASSOC_CASE == 1) {
+                       foreach($pkey as $k => $v) {
                                $pkey[$k] = strtoupper($v);
+                       }
+               }
 
                $ok = $db->Replace($this->_table,$arr,$pkey);
                if ($ok) {
@@ -877,7 +1003,10 @@ class ADODB_Active_Record {
        // returns 0 on error, 1 on update, -1 if no change in data (no update)
        function Update()
        {
-               $db = $this->DB(); if (!$db) return false;
+               $db = $this->DB();
+               if (!$db) {
+                       return false;
+               }
                $table = $this->TableInfo();
 
                $where = $this->GenWhere($db, $table);
@@ -896,12 +1025,15 @@ class ADODB_Active_Record {
                        $val = $this->$name;
                        $neworig[] = $val;
 
-                       if (isset($table->keys[$name]) || is_array($val))
+                       if (isset($table->keys[$name]) || is_array($val)) {
                                continue;
+                       }
 
                        if (is_null($val)) {
                                if (isset($fld->not_null) && $fld->not_null) {
-                                       if (isset($fld->default_value) && strlen($fld->default_value)) continue;
+                                       if (isset($fld->default_value) && strlen($fld->default_value)) {
+                                               continue;
+                                       }
                                        else {
                                                $this->Error("Cannot set field $name to NULL","Update");
                                                return false;
@@ -909,9 +1041,13 @@ class ADODB_Active_Record {
                                }
                        }
 
-                       if (isset($this->_original[$i]) && strcmp($val,$this->_original[$i]) == 0) continue;
+                       if (isset($this->_original[$i]) && strcmp($val,$this->_original[$i]) == 0) {
+                               continue;
+                       }
 
-                       if (is_null($this->_original[$i]) && is_null($val)) continue;
+                       if (is_null($this->_original[$i]) && is_null($val)) {
+                               continue;
+                       }
 
                        $valarr[] = $val;
                        $pairs[] = $this->_QName($name,$db).'='.$db->Param($cnt);
@@ -919,7 +1055,10 @@ class ADODB_Active_Record {
                }
 
 
-               if (!$cnt) return -1;
+               if (!$cnt) {
+                       return -1;
+               }
+
                $sql = 'UPDATE '.$this->_table." SET ".implode(",",$pairs)." WHERE ".$where;
                $ok = $db->Execute($sql,$valarr);
                if ($ok) {
@@ -932,7 +1071,9 @@ class ADODB_Active_Record {
        function GetAttributeNames()
        {
                $table = $this->TableInfo();
-               if (!$table) return false;
+               if (!$table) {
+                       return false;
+               }
                return array_keys($table->flds);
        }
 
@@ -947,10 +1088,10 @@ global $_ADODB_ACTIVE_DBS;
        $save = $db->SetFetchMode(ADODB_FETCH_NUM);
        $qry = "select * from ".$table;
 
-       if (!empty($whereOrderBy))
+       if (!empty($whereOrderBy)) {
                $qry .= ' WHERE '.$whereOrderBy;
-       if(isset($extra['limit']))
-       {
+       }
+       if(isset($extra['limit'])) {
                $rows = false;
                if(isset($extra['offset'])) {
                        $rs = $db->SelectLimit($qry, $extra['limit'], $extra['offset'],$bindarr);
index e820144..771a086 100644 (file)
@@ -1,7 +1,9 @@
 <?php
 /*
 
-@version V5.19  23-Apr-2014  (c) 2000-2014 John Lim (jlim#natsoft.com). All rights reserved.
+@version   v5.20.1  06-Dec-2015
+@copyright (c) 2000-2013 John Lim (jlim#natsoft.com). All rights reserved.
+@copyright (c) 2014      Damien Regad, Mark Newnham and the ADOdb community
   Latest version is available at http://adodb.sourceforge.net
 
   Released under both BSD license and Lesser GPL library license.
@@ -66,10 +68,13 @@ function ADODB_SetDatabaseAdapter(&$db)
 
                foreach($_ADODB_ACTIVE_DBS as $k => $d) {
                        if (PHP_VERSION >= 5) {
-                               if ($d->db === $db) return $k;
+                               if ($d->db === $db) {
+                                       return $k;
+                               }
                        } else {
-                               if ($d->db->_connectionID === $db->_connectionID && $db->database == $d->db->database)
+                               if ($d->db->_connectionID === $db->_connectionID && $db->database == $d->db->database) {
                                        return $k;
+                               }
                        }
                }
 
@@ -101,7 +106,9 @@ class ADODB_Active_Record {
        static function UseDefaultValues($bool=null)
        {
        global $ADODB_ACTIVE_DEFVALS;
-               if (isset($bool)) $ADODB_ACTIVE_DEFVALS = $bool;
+               if (isset($bool)) {
+                       $ADODB_ACTIVE_DEFVALS = $bool;
+               }
                return $ADODB_ACTIVE_DEFVALS;
        }
 
@@ -137,15 +144,13 @@ class ADODB_Active_Record {
                        $pkeyarr = false;
                }
 
-               if($table)
-               {
+               if($table) {
                        // table argument exists. It is expected to be
                        // already plural form.
                        $this->_pTable = $table;
                        $this->_sTable = $this->_singularize($this->_pTable);
                }
-               else
-               {
+               else {
                        // We will use current classname as table name.
                        // We need to pluralize it for the real table name.
                        $this->_sTable = strtolower(get_class($this));
@@ -161,7 +166,12 @@ class ADODB_Active_Record {
                        $this->_dbat = sizeof($_ADODB_ACTIVE_DBS)-1;
 
 
-               if ($this->_dbat < 0) $this->Error("No database connection set; use ADOdb_Active_Record::SetDatabaseAdapter(\$db)",'ADODB_Active_Record::__constructor');
+               if ($this->_dbat < 0) {
+                       $this->Error(
+                               "No database connection set; use ADOdb_Active_Record::SetDatabaseAdapter(\$db)",
+                               'ADODB_Active_Record::__constructor'
+                       );
+               }
 
                $this->_tableat = $this->_table; # reserved for setting the assoc value to a non-table name, eg. the sql string in future
 
@@ -169,8 +179,7 @@ class ADODB_Active_Record {
                // but there was no way to ask it to do that.
                $forceUpdate = (isset($options['refresh']) && true === $options['refresh']);
                $this->UpdateActiveTable($pkeyarr, $forceUpdate);
-               if(isset($options['new']) && true === $options['new'])
-               {
+               if(isset($options['new']) && true === $options['new']) {
                        $table =& $this->TableInfo();
                        unset($table->_hasMany);
                        unset($table->_belongsTo);
@@ -181,8 +190,8 @@ class ADODB_Active_Record {
 
        function __wakeup()
        {
-               $class = get_class($this);
-               new $class;
+               $class = get_class($this);
+               new $class;
        }
 
        // CFR: Constants found in Rails
@@ -215,32 +224,32 @@ class ADODB_Active_Record {
 
        function _pluralize($table)
        {
-               if (!ADODB_Active_Record::$_changeNames) return $table;
-
+               if (!ADODB_Active_Record::$_changeNames) {
+                       return $table;
+               }
                $ut = strtoupper($table);
-               if(isset(self::$WeIsI[$ut]))
-               {
+               if(isset(self::$WeIsI[$ut])) {
                        return $table;
                }
-               if(isset(self::$IrregularP[$ut]))
-               {
+               if(isset(self::$IrregularP[$ut])) {
                        return self::$IrregularP[$ut];
                }
                $len = strlen($table);
                $lastc = $ut[$len-1];
                $lastc2 = substr($ut,$len-2);
                switch ($lastc) {
-               case 'S':
-                       return $table.'es';
-               case 'Y':
-                       return substr($table,0,$len-1).'ies';
-               case 'X':
-                       return $table.'es';
-               case 'H':
-                       if ($lastc2 == 'CH' || $lastc2 == 'SH')
+                       case 'S':
                                return $table.'es';
-               default:
-                       return $table.'s';
+                       case 'Y':
+                               return substr($table,0,$len-1).'ies';
+                       case 'X':
+                               return $table.'es';
+                       case 'H':
+                               if ($lastc2 == 'CH' || $lastc2 == 'SH') {
+                                       return $table.'es';
+                               }
+                       default:
+                               return $table.'s';
                }
        }
 
@@ -249,32 +258,33 @@ class ADODB_Active_Record {
        function _singularize($table)
        {
 
-               if (!ADODB_Active_Record::$_changeNames) return $table;
-
+               if (!ADODB_Active_Record::$_changeNames) {
+               return $table;
+       }
                $ut = strtoupper($table);
-               if(isset(self::$WeIsI[$ut]))
-               {
+               if(isset(self::$WeIsI[$ut])) {
                        return $table;
                }
-               if(isset(self::$IrregularS[$ut]))
-               {
+               if(isset(self::$IrregularS[$ut])) {
                        return self::$IrregularS[$ut];
                }
                $len = strlen($table);
-               if($ut[$len-1] != 'S')
+               if($ut[$len-1] != 'S') {
                        return $table; // I know...forget oxen
-               if($ut[$len-2] != 'E')
+               }
+               if($ut[$len-2] != 'E') {
                        return substr($table, 0, $len-1);
-               switch($ut[$len-3])
-               {
+               }
+               switch($ut[$len-3]) {
                        case 'S':
                        case 'X':
                                return substr($table, 0, $len-2);
                        case 'I':
                                return substr($table, 0, $len-3) . 'y';
                        case 'H';
-                               if($ut[$len-4] == 'C' || $ut[$len-4] == 'S')
+                               if($ut[$len-4] == 'C' || $ut[$len-4] == 'S') {
                                        return substr($table, 0, $len-2);
+                               }
                        default:
                                return substr($table, 0, $len-1); // ?
                }
@@ -296,8 +306,7 @@ class ADODB_Active_Record {
                $ar->foreignKey = ($foreignKey) ? $foreignKey : strtolower(get_class($this)) . self::$_foreignSuffix;
 
                $table =& $this->TableInfo();
-               if(!isset($table->_hasMany[$foreignRef]))
-               {
+               if(!isset($table->_hasMany[$foreignRef])) {
                        $table->_hasMany[$foreignRef] = $ar;
                        $table->updateColsCount();
                }
@@ -322,8 +331,7 @@ class ADODB_Active_Record {
                $ar->foreignKey = ($foreignKey) ? $foreignKey : $ar->foreignName . self::$_foreignSuffix;
 
                $table =& $this->TableInfo();
-               if(!isset($table->_belongsTo[$foreignRef]))
-               {
+               if(!isset($table->_belongsTo[$foreignRef])) {
                        $table->_belongsTo[$foreignRef] = $ar;
                        $table->updateColsCount();
                }
@@ -345,27 +353,35 @@ class ADODB_Active_Record {
        function LoadRelations($name, $whereOrderBy, $offset=-1, $limit=-1)
        {
                $extras = array();
-               if($offset >= 0) $extras['offset'] = $offset;
-               if($limit >= 0) $extras['limit'] = $limit;
+               if($offset >= 0) {
+                       $extras['offset'] = $offset;
+               }
+               if($limit >= 0) {
+                       $extras['limit'] = $limit;
+               }
                $table =& $this->TableInfo();
 
-               if (strlen($whereOrderBy))
-                       if (!preg_match('/^[ \n\r]*AND/i',$whereOrderBy))
-                               if (!preg_match('/^[ \n\r]*ORDER[ \n\r]/i',$whereOrderBy))
+               if (strlen($whereOrderBy)) {
+                       if (!preg_match('/^[ \n\r]*AND/i',$whereOrderBy)) {
+                               if (!preg_match('/^[ \n\r]*ORDER[ \n\r]/i',$whereOrderBy)) {
                                        $whereOrderBy = 'AND '.$whereOrderBy;
+                               }
+                       }
+               }
 
-               if(!empty($table->_belongsTo[$name]))
-               {
+               if(!empty($table->_belongsTo[$name])) {
                        $obj = $table->_belongsTo[$name];
                        $columnName = $obj->foreignKey;
-                       if(empty($this->$columnName))
+                       if(empty($this->$columnName)) {
                                $this->$name = null;
-                       else
-                       {
-                               if(($k = reset($obj->TableInfo()->keys)))
+                       }
+                       else {
+                               if(($k = reset($obj->TableInfo()->keys))) {
                                        $belongsToId = $k;
-                               else
+                               }
+                               else {
                                        $belongsToId = 'id';
+                               }
 
                                $arrayOfOne =
                                        $obj->Find(
@@ -374,13 +390,14 @@ class ADODB_Active_Record {
                        }
                        return $this->$name;
                }
-               if(!empty($table->_hasMany[$name]))
-               {
+               if(!empty($table->_hasMany[$name])) {
                        $obj = $table->_hasMany[$name];
-                       if(($k = reset($table->keys)))
+                       if(($k = reset($table->keys))) {
                                $hasManyId   = $k;
-                       else
+                       }
+                       else {
                                $hasManyId   = 'id';
+                       }
 
                        $this->$name =
                                $obj->Find(
@@ -405,10 +422,12 @@ class ADODB_Active_Record {
 
                        $tobj = $tables[$tableat];
                        foreach($tobj->flds as $name => $fld) {
-                       if ($ADODB_ACTIVE_DEFVALS && isset($fld->default_value))
-                               $this->$name = $fld->default_value;
-                       else
-                               $this->$name = null;
+                               if ($ADODB_ACTIVE_DEFVALS && isset($fld->default_value)) {
+                                       $this->$name = $fld->default_value;
+                               }
+                               else {
+                                       $this->$name = null;
+                               }
                        }
                        return;
                }
@@ -426,7 +445,7 @@ class ADODB_Active_Record {
                                $activedb->tables[$table] = $acttab;
 
                                //if ($db->debug) ADOConnection::outp("Reading cached active record file: $fname");
-                               return;
+                                       return;
                        } else if ($db->debug) {
                                ADOConnection::outp("Refreshing cached active record file: $fname");
                        }
@@ -436,11 +455,15 @@ class ADODB_Active_Record {
 
                $save = $ADODB_FETCH_MODE;
                $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
-               if ($db->fetchMode !== false) $savem = $db->SetFetchMode(false);
+               if ($db->fetchMode !== false) {
+                       $savem = $db->SetFetchMode(false);
+               }
 
                $cols = $db->MetaColumns($table);
 
-               if (isset($savem)) $db->SetFetchMode($savem);
+               if (isset($savem)) {
+                       $db->SetFetchMode($savem);
+               }
                $ADODB_FETCH_MODE = $save;
 
                if (!$cols) {
@@ -452,10 +475,13 @@ class ADODB_Active_Record {
                        if (isset($fld->primary_key)) {
                                $pkeys = array();
                                foreach($cols as $name => $fld) {
-                                       if (!empty($fld->primary_key)) $pkeys[] = $name;
+                                       if (!empty($fld->primary_key)) {
+                                               $pkeys[] = $name;
+                                       }
                                }
-                       } else
+                       } else {
                                $pkeys = $this->GetPrimaryKeys($db, $table);
+                       }
                }
                if (empty($pkeys)) {
                        $this->Error("No primary key found for table $table",'UpdateActiveTable');
@@ -469,10 +495,12 @@ class ADODB_Active_Record {
                case 0:
                        foreach($cols as $name => $fldobj) {
                                $name = strtolower($name);
-                if ($ADODB_ACTIVE_DEFVALS && isset($fldobj->default_value))
-                    $this->$name = $fldobj->default_value;
-                else
+                               if ($ADODB_ACTIVE_DEFVALS && isset($fldobj->default_value)) {
+                                       $this->$name = $fldobj->default_value;
+                               }
+                               else {
                                        $this->$name = null;
+                               }
                                $attr[$name] = $fldobj;
                        }
                        foreach($pkeys as $k => $name) {
@@ -484,10 +512,12 @@ class ADODB_Active_Record {
                        foreach($cols as $name => $fldobj) {
                                $name = strtoupper($name);
 
-                if ($ADODB_ACTIVE_DEFVALS && isset($fldobj->default_value))
-                    $this->$name = $fldobj->default_value;
-                else
+                               if ($ADODB_ACTIVE_DEFVALS && isset($fldobj->default_value)) {
+                                       $this->$name = $fldobj->default_value;
+                               }
+                               else {
                                        $this->$name = null;
+                               }
                                $attr[$name] = $fldobj;
                        }
 
@@ -499,10 +529,12 @@ class ADODB_Active_Record {
                        foreach($cols as $name => $fldobj) {
                                $name = ($fldobj->name);
 
-                if ($ADODB_ACTIVE_DEFVALS && isset($fldobj->default_value))
-                    $this->$name = $fldobj->default_value;
-                else
+                               if ($ADODB_ACTIVE_DEFVALS && isset($fldobj->default_value)) {
+                                       $this->$name = $fldobj->default_value;
+                               }
+                               else {
                                        $this->$name = null;
+                               }
                                $attr[$name] = $fldobj;
                        }
                        foreach($pkeys as $k => $name) {
@@ -518,14 +550,18 @@ class ADODB_Active_Record {
                if ($ADODB_ACTIVE_CACHESECS && $ADODB_CACHE_DIR) {
                        $activetab->_created = time();
                        $s = serialize($activetab);
-                       if (!function_exists('adodb_write_file')) include(ADODB_DIR.'/adodb-csvlib.inc.php');
+                       if (!function_exists('adodb_write_file')) {
+                               include(ADODB_DIR.'/adodb-csvlib.inc.php');
+                       }
                        adodb_write_file($fname,$s);
                }
                if (isset($activedb->tables[$table])) {
                        $oldtab = $activedb->tables[$table];
 
-                       if ($oldtab) $activetab->_belongsTo = $oldtab->_belongsTo;
-                       if ($oldtab) $activetab->_hasMany = $oldtab->_hasMany;
+                       if ($oldtab) {
+                               $activetab->_belongsTo = $oldtab->_belongsTo;
+                               $activetab->_hasMany = $oldtab->_hasMany;
+                       }
                }
                $activedb->tables[$table] = $activetab;
        }
@@ -543,17 +579,26 @@ class ADODB_Active_Record {
                $fn = get_class($this).'::'.$fn;
                $this->_lasterr = $fn.': '.$err;
 
-               if ($this->_dbat < 0) $db = false;
+               if ($this->_dbat < 0) {
+                       $db = false;
+               }
                else {
                        $activedb = $_ADODB_ACTIVE_DBS[$this->_dbat];
                        $db = $activedb->db;
                }
 
                if (function_exists('adodb_throw')) {
-                       if (!$db) adodb_throw('ADOdb_Active_Record', $fn, -1, $err, 0, 0, false);
-                       else adodb_throw($db->databaseType, $fn, -1, $err, 0, 0, $db);
-               } else
-                       if (!$db || $db->debug) ADOConnection::outp($this->_lasterr);
+                       if (!$db) {
+                               adodb_throw('ADOdb_Active_Record', $fn, -1, $err, 0, 0, false);
+                       }
+                       else {
+                               adodb_throw($db->databaseType, $fn, -1, $err, 0, 0, $db);
+                       }
+               } else {
+                       if (!$db || $db->debug) {
+                               ADOConnection::outp($this->_lasterr);
+                       }
+               }
 
        }
 
@@ -561,18 +606,26 @@ class ADODB_Active_Record {
        function ErrorMsg()
        {
                if (!function_exists('adodb_throw')) {
-                       if ($this->_dbat < 0) $db = false;
-                       else $db = $this->DB();
+                       if ($this->_dbat < 0) {
+                               $db = false;
+                       }
+                       else {
+                               $db = $this->DB();
+                       }
 
                        // last error could be database error too
-                       if ($db && $db->ErrorMsg()) return $db->ErrorMsg();
+                       if ($db && $db->ErrorMsg()) {
+                               return $db->ErrorMsg();
+                       }
                }
                return $this->_lasterr;
        }
 
        function ErrorNo()
        {
-               if ($this->_dbat < 0) return -9999; // no database connection...
+               if ($this->_dbat < 0) {
+                       return -9999; // no database connection...
+               }
                $db = $this->DB();
 
                return (int) $db->ErrorNo();
@@ -609,7 +662,10 @@ class ADODB_Active_Record {
        // So, I find that for myTable, I want to reload an active record after saving it. -- Malcolm Cook
        function Reload()
        {
-               $db =& $this->DB(); if (!$db) return false;
+               $db =& $this->DB();
+               if (!$db) {
+                       return false;
+               }
                $table =& $this->TableInfo();
                $where = $this->GenWhere($db, $table);
                return($this->Load($where));
@@ -634,67 +690,74 @@ class ADODB_Active_Record {
                $sizeofFlds = sizeof($table->flds);
                $sizeofRow  = sizeof($row);
                if ($ACTIVE_RECORD_SAFETY && $table->_colsCount != $sizeofRow && $sizeofFlds != $sizeofRow) {
-            # <AP>
-            $bad_size = TRUE;
-       if($sizeofRow == 2 * $table->_colsCount || $sizeofRow == 2 * $sizeofFlds) {
-                // Only keep string keys
-                $keys = array_filter(array_keys($row), 'is_string');
-                if (sizeof($keys) == sizeof($table->flds))
-                    $bad_size = FALSE;
-            }
-            if ($bad_size) {
-                       $this->Error("Table structure of $this->_table has changed","Load");
-                       return false;
+                       # <AP>
+                       $bad_size = TRUE;
+                       if($sizeofRow == 2 * $table->_colsCount || $sizeofRow == 2 * $sizeofFlds) {
+                               // Only keep string keys
+                               $keys = array_filter(array_keys($row), 'is_string');
+                               if (sizeof($keys) == sizeof($table->flds)) {
+                                       $bad_size = FALSE;
+                               }
+                       }
+                       if ($bad_size) {
+                               $this->Error("Table structure of $this->_table has changed","Load");
+                               return false;
+                       }
+                       # </AP>
                }
-            # </AP>
+               else {
+                       $keys = array_keys($row);
                }
-        else
-               $keys = array_keys($row);
-        # <AP>
-        reset($keys);
-        $this->_original = array();
-               foreach($table->flds as $name=>$fld)
-               {
-            $value = $row[current($keys)];
+
+               # <AP>
+               reset($keys);
+               $this->_original = array();
+               foreach($table->flds as $name=>$fld) {
+                       $value = $row[current($keys)];
                        $this->$name = $value;
-            $this->_original[] = $value;
-            if(!next($keys)) break;
+                       $this->_original[] = $value;
+                       if(!next($keys)) {
+                               break;
+                       }
                }
                $table =& $this->TableInfo();
-               foreach($table->_belongsTo as $foreignTable)
-               {
+               foreach($table->_belongsTo as $foreignTable) {
                        $ft = $foreignTable->TableInfo();
                        $propertyName = $ft->name;
-                       foreach($ft->flds as $name=>$fld)
-                       {
+                       foreach($ft->flds as $name=>$fld) {
                                $value = $row[current($keys)];
                                $foreignTable->$name = $value;
                                $foreignTable->_original[] = $value;
-                               if(!next($keys)) break;
+                               if(!next($keys)) {
+                                       break;
+                               }
                        }
                }
-               foreach($table->_hasMany as $foreignTable)
-               {
+               foreach($table->_hasMany as $foreignTable) {
                        $ft = $foreignTable->TableInfo();
-                       foreach($ft->flds as $name=>$fld)
-                       {
+                       foreach($ft->flds as $name=>$fld) {
                                $value = $row[current($keys)];
                                $foreignTable->$name = $value;
                                $foreignTable->_original[] = $value;
-                               if(!next($keys)) break;
+                               if(!next($keys)) {
+                                       break;
+                               }
                        }
                }
-        # </AP>
+               # </AP>
+
                return true;
        }
 
        // get last inserted id for INSERT
        function LastInsertID(&$db,$fieldname)
        {
-               if ($db->hasInsertID)
+               if ($db->hasInsertID) {
                        $val = $db->Insert_ID($this->_table,$fieldname);
-               else
+               }
+               else {
                        $val = false;
+               }
 
                if (is_null($val) || $val === false) {
                        // this might not work reliably in multi-user environment
@@ -709,14 +772,17 @@ class ADODB_Active_Record {
                switch($t) {
                case 'D':
                case 'T':
-                       if (empty($val)) return 'null';
-
+                       if (empty($val)) {
+                               return 'null';
+                       }
                case 'C':
                case 'X':
-                       if (is_null($val)) return 'null';
-
+                       if (is_null($val)) {
+                               return 'null';
+                       }
                        if (strlen($val)>0 &&
-                               (strncmp($val,"'",1) != 0 || substr($val,strlen($val)-1,1) != "'")) {
+                               (strncmp($val,"'",1) != 0 || substr($val,strlen($val)-1,1) != "'")
+                       ) {
                                return $db->qstr($val);
                                break;
                        }
@@ -746,26 +812,28 @@ class ADODB_Active_Record {
 
        function Load($where=null,$bindarr=false)
        {
-               $db = $this->DB(); if (!$db) return false;
+               $db = $this->DB();
+               if (!$db) {
+                       return false;
+               }
                $this->_where = $where;
 
                $save = $db->SetFetchMode(ADODB_FETCH_NUM);
                $qry = "select * from ".$this->_table;
                $table =& $this->TableInfo();
 
-               if(($k = reset($table->keys)))
+               if(($k = reset($table->keys))) {
                        $hasManyId   = $k;
-               else
+               }
+               else {
                        $hasManyId   = 'id';
+               }
 
-               foreach($table->_belongsTo as $foreignTable)
-               {
-                       if(($k = reset($foreignTable->TableInfo()->keys)))
-                       {
+               foreach($table->_belongsTo as $foreignTable) {
+                       if(($k = reset($foreignTable->TableInfo()->keys))) {
                                $belongsToId = $k;
                        }
-                       else
-                       {
+                       else {
                                $belongsToId = 'id';
                        }
                        $qry .= ' LEFT JOIN '.$foreignTable->_table.' ON '.
@@ -778,96 +846,88 @@ class ADODB_Active_Record {
                                $this->_table.'.'.$hasManyId.'='.
                                $foreignTable->_table.'.'.$foreignTable->foreignKey;
                }
-               if($where)
+               if($where) {
                        $qry .= ' WHERE '.$where;
+               }
 
                // Simple case: no relations. Load row and return.
-               if((count($table->_hasMany) + count($table->_belongsTo)) < 1)
-               {
+               if((count($table->_hasMany) + count($table->_belongsTo)) < 1) {
                        $row = $db->GetRow($qry,$bindarr);
-                       if(!$row)
+                       if(!$row) {
                                return false;
+                       }
                        $db->SetFetchMode($save);
                        return $this->Set($row);
                }
 
                // More complex case when relations have to be collated
                $rows = $db->GetAll($qry,$bindarr);
-               if(!$rows)
+               if(!$rows) {
                        return false;
+               }
                $db->SetFetchMode($save);
-               if(count($rows) < 1)
+               if(count($rows) < 1) {
                        return false;
+               }
                $class = get_class($this);
                $isFirstRow = true;
 
-               if(($k = reset($this->TableInfo()->keys)))
+               if(($k = reset($this->TableInfo()->keys))) {
                        $myId   = $k;
-               else
+               }
+               else {
                        $myId   = 'id';
+               }
                $index = 0; $found = false;
                /** @todo Improve by storing once and for all in table metadata */
                /** @todo Also re-use info for hasManyId */
-               foreach($this->TableInfo()->flds as $fld)
-               {
-                       if($fld->name == $myId)
-                       {
+               foreach($this->TableInfo()->flds as $fld) {
+                       if($fld->name == $myId) {
                                $found = true;
                                break;
                        }
                        $index++;
                }
-               if(!$found)
+               if(!$found) {
                        $this->outp_throw("Unable to locate key $myId for $class in Load()",'Load');
+               }
 
-               foreach($rows as $row)
-               {
+               foreach($rows as $row) {
                        $rowId = intval($row[$index]);
-                       if($rowId > 0)
-                       {
-                               if($isFirstRow)
-                               {
+                       if($rowId > 0) {
+                               if($isFirstRow) {
                                        $isFirstRow = false;
-                                       if(!$this->Set($row))
+                                       if(!$this->Set($row)) {
                                                return false;
+                                       }
                                }
                                $obj = new $class($table,false,$db);
                                $obj->Set($row);
                                // TODO Copy/paste code below: bad!
-                               if(count($table->_hasMany) > 0)
-                               {
-                                       foreach($table->_hasMany as $foreignTable)
-                                       {
+                               if(count($table->_hasMany) > 0) {
+                                       foreach($table->_hasMany as $foreignTable) {
                                                $foreignName = $foreignTable->foreignName;
-                                               if(!empty($obj->$foreignName))
-                                               {
-                                                       if(!is_array($this->$foreignName))
-                                                       {
+                                               if(!empty($obj->$foreignName)) {
+                                                       if(!is_array($this->$foreignName)) {
                                                                $foreignObj = $this->$foreignName;
                                                                $this->$foreignName = array(clone($foreignObj));
                                                        }
-                                                       else
-                                                       {
+                                                       else {
                                                                $foreignObj = $obj->$foreignName;
                                                                array_push($this->$foreignName, clone($foreignObj));
                                                        }
                                                }
                                        }
                                }
-                               if(count($table->_belongsTo) > 0)
-                               {
-                                       foreach($table->_belongsTo as $foreignTable)
-                                       {
+                               if(count($table->_belongsTo) > 0) {
+                                       foreach($table->_belongsTo as $foreignTable) {
                                                $foreignName = $foreignTable->foreignName;
-                                               if(!empty($obj->$foreignName))
-                                               {
-                                                       if(!is_array($this->$foreignName))
-                                                       {
+                                               if(!empty($obj->$foreignName)) {
+                                                       if(!is_array($this->$foreignName)) {
                                                                $foreignObj = $this->$foreignName;
                                                                $this->$foreignName = array(clone($foreignObj));
                                                        }
-                                                       else
-                                                       {
+                                                       else {
                                                                $foreignObj = $obj->$foreignName;
                                                                array_push($this->$foreignName, clone($foreignObj));
                                                        }
@@ -882,8 +942,12 @@ class ADODB_Active_Record {
        // false on error
        function Save()
        {
-               if ($this->_saved) $ok = $this->Update();
-               else $ok = $this->Insert();
+               if ($this->_saved) {
+                       $ok = $this->Update();
+               }
+               else {
+                       $ok = $this->Insert();
+               }
 
                return $ok;
        }
@@ -898,7 +962,10 @@ class ADODB_Active_Record {
        // false on error
        function Insert()
        {
-               $db = $this->DB(); if (!$db) return false;
+               $db = $this->DB();
+               if (!$db) {
+                       return false;
+               }
                $cnt = 0;
                $table = $this->TableInfo();
 
@@ -948,7 +1015,10 @@ class ADODB_Active_Record {
 
        function Delete()
        {
-               $db = $this->DB(); if (!$db) return false;
+               $db = $this->DB();
+               if (!$db) {
+                       return false;
+               }
                $table = $this->TableInfo();
 
                $where = $this->GenWhere($db,$table);
@@ -961,7 +1031,10 @@ class ADODB_Active_Record {
        // returns an array of active record objects
        function Find($whereOrderBy,$bindarr=false,$pkeysArr=false,$extra=array())
        {
-               $db = $this->DB(); if (!$db || empty($this->_table)) return false;
+               $db = $this->DB();
+               if (!$db || empty($this->_table)) {
+                       return false;
+               }
                $table =& $this->TableInfo();
                $arr = $db->GetActiveRecordsClass(get_class($this),$this, $whereOrderBy,$bindarr,$pkeysArr,$extra,
                        array('foreignName'=>$this->foreignName, 'belongsTo'=>$table->_belongsTo, 'hasMany'=>$table->_hasMany));
@@ -974,7 +1047,10 @@ class ADODB_Active_Record {
        // Shockingly because I want to preserve PHP4 compatibility.
        function packageFind($whereOrderBy,$bindarr=false,$pkeysArr=false,$extra=array())
        {
-               $db = $this->DB(); if (!$db || empty($this->_table)) return false;
+               $db = $this->DB();
+               if (!$db || empty($this->_table)) {
+                       return false;
+               }
                $table =& $this->TableInfo();
                $arr = $db->GetActiveRecordsClass(get_class($this),$this, $whereOrderBy,$bindarr,$pkeysArr,$extra,
                        array('foreignName'=>$this->foreignName, 'belongsTo'=>$table->_belongsTo, 'hasMany'=>$table->_hasMany));
@@ -986,7 +1062,10 @@ class ADODB_Active_Record {
        {
        global $ADODB_ASSOC_CASE;
 
-               $db = $this->DB(); if (!$db) return false;
+               $db = $this->DB();
+               if (!$db) {
+                       return false;
+               }
                $table = $this->TableInfo();
 
                $pkey = $table->keys;
@@ -996,7 +1075,9 @@ class ADODB_Active_Record {
                        /*
                        if (is_null($val)) {
                                if (isset($fld->not_null) && $fld->not_null) {
-                                       if (isset($fld->default_value) && strlen($fld->default_value)) continue;
+                                       if (isset($fld->default_value) && strlen($fld->default_value)) {
+                                               continue;
+                                       }
                                        else {
                                                $this->Error("Cannot update null into $name","Replace");
                                                return false;
@@ -1004,22 +1085,30 @@ class ADODB_Active_Record {
                                }
                        }*/
                        if (is_null($val) && !empty($fld->auto_increment)) {
-               continue;
-            }
+                               continue;
+                       }
                        $t = $db->MetaType($fld->type);
                        $arr[$name] = $this->doquote($db,$val,$t);
                        $valarr[] = $val;
                }
 
-               if (!is_array($pkey)) $pkey = array($pkey);
+               if (!is_array($pkey)) {
+                       $pkey = array($pkey);
+               }
 
 
-               if ($ADODB_ASSOC_CASE == 0)
-                       foreach($pkey as $k => $v)
-                               $pkey[$k] = strtolower($v);
-               elseif ($ADODB_ASSOC_CASE == 1)
-                       foreach($pkey as $k => $v)
-                               $pkey[$k] = strtoupper($v);
+               switch ($ADODB_ASSOC_CASE == 0) {
+                       case ADODB_ASSOC_CASE_LOWER:
+                               foreach($pkey as $k => $v) {
+                                       $pkey[$k] = strtolower($v);
+                               }
+                               break;
+                       case ADODB_ASSOC_CASE_UPPER:
+                               foreach($pkey as $k => $v) {
+                                       $pkey[$k] = strtoupper($v);
+                               }
+                               break;
+               }
 
                $ok = $db->Replace($this->_table,$arr,$pkey);
                if ($ok) {
@@ -1046,7 +1135,10 @@ class ADODB_Active_Record {
        // returns 0 on error, 1 on update, -1 if no change in data (no update)
        function Update()
        {
-               $db = $this->DB(); if (!$db) return false;
+               $db = $this->DB();
+               if (!$db) {
+                       return false;
+               }
                $table = $this->TableInfo();
 
                $where = $this->GenWhere($db, $table);
@@ -1071,7 +1163,9 @@ class ADODB_Active_Record {
 
                        if (is_null($val)) {
                                if (isset($fld->not_null) && $fld->not_null) {
-                                       if (isset($fld->default_value) && strlen($fld->default_value)) continue;
+                                       if (isset($fld->default_value) && strlen($fld->default_value)) {
+                                               continue;
+                                       }
                                        else {
                                                $this->Error("Cannot set field $name to NULL","Update");
                                                return false;
@@ -1079,7 +1173,7 @@ class ADODB_Active_Record {
                                }
                        }
 
-                       if (isset($this->_original[$i]) && $val == $this->_original[$i]) {
+                       if (isset($this->_original[$i]) && $val === $this->_original[$i]) {
                                continue;
                        }
                        $valarr[] = $val;
@@ -1088,7 +1182,9 @@ class ADODB_Active_Record {
                }
 
 
-               if (!$cnt) return -1;
+               if (!$cnt) {
+                       return -1;
+               }
                $sql = 'UPDATE '.$this->_table." SET ".implode(",",$pairs)." WHERE ".$where;
                $ok = $db->Execute($sql,$valarr);
                if ($ok) {
@@ -1101,7 +1197,9 @@ class ADODB_Active_Record {
        function GetAttributeNames()
        {
                $table = $this->TableInfo();
-               if (!$table) return false;
+               if (!$table) {
+                       return false;
+               }
                return array_keys($table->flds);
        }
 
@@ -1112,43 +1210,41 @@ function adodb_GetActiveRecordsClass(&$db, $class, $tableObj,$whereOrderBy,$bind
 {
        global $_ADODB_ACTIVE_DBS;
 
-               if (empty($extra['loading'])) $extra['loading'] = ADODB_LAZY_AR;
-
+               if (empty($extra['loading'])) {
+                       $extra['loading'] = ADODB_LAZY_AR;
+               }
                $save = $db->SetFetchMode(ADODB_FETCH_NUM);
                $table = &$tableObj->_table;
                $tableInfo =& $tableObj->TableInfo();
-               if(($k = reset($tableInfo->keys)))
-                       $myId   = $k;
-               else
-                       $myId   = 'id';
+               if(($k = reset($tableInfo->keys))) {
+                       $myId = $k;
+               }
+               else {
+                       $myId = 'id';
+               }
                $index = 0; $found = false;
                /** @todo Improve by storing once and for all in table metadata */
                /** @todo Also re-use info for hasManyId */
                foreach($tableInfo->flds as $fld)
                {
-                       if($fld->name == $myId)
-                       {
+                       if($fld->name == $myId) {
                                $found = true;
                                break;
                        }
                        $index++;
                }
-               if(!$found)
+               if(!$found) {
                        $db->outp_throw("Unable to locate key $myId for $class in GetActiveRecordsClass()",'GetActiveRecordsClass');
+               }
 
                $qry = "select * from ".$table;
-               if(ADODB_JOIN_AR == $extra['loading'])
-               {
-                       if(!empty($relations['belongsTo']))
-                       {
-                               foreach($relations['belongsTo'] as $foreignTable)
-                               {
-                                       if(($k = reset($foreignTable->TableInfo()->keys)))
-                                       {
+               if(ADODB_JOIN_AR == $extra['loading']) {
+                       if(!empty($relations['belongsTo'])) {
+                               foreach($relations['belongsTo'] as $foreignTable) {
+                                       if(($k = reset($foreignTable->TableInfo()->keys))) {
                                                $belongsToId = $k;
                                        }
-                                       else
-                                       {
+                                       else {
                                                $belongsToId = 'id';
                                        }
 
@@ -1157,27 +1253,28 @@ function adodb_GetActiveRecordsClass(&$db, $class, $tableObj,$whereOrderBy,$bind
                                                $foreignTable->_table.'.'.$belongsToId;
                                }
                        }
-                       if(!empty($relations['hasMany']))
-                       {
-                               if(empty($relations['foreignName']))
+                       if(!empty($relations['hasMany'])) {
+                               if(empty($relations['foreignName'])) {
                                        $db->outp_throw("Missing foreignName is relation specification in GetActiveRecordsClass()",'GetActiveRecordsClass');
-                               if(($k = reset($tableInfo->keys)))
+                               }
+                               if(($k = reset($tableInfo->keys))) {
                                        $hasManyId   = $k;
-                               else
+                               }
+                               else {
                                        $hasManyId   = 'id';
+                               }
 
-                               foreach($relations['hasMany'] as $foreignTable)
-                               {
+                               foreach($relations['hasMany'] as $foreignTable) {
                                        $qry .= ' LEFT JOIN '.$foreignTable->_table.' ON '.
                                                $table.'.'.$hasManyId.'='.
                                                $foreignTable->_table.'.'.$foreignTable->foreignKey;
                                }
                        }
                }
-               if (!empty($whereOrderBy))
+               if (!empty($whereOrderBy)) {
                        $qry .= ' WHERE '.$whereOrderBy;
-               if(isset($extra['limit']))
-               {
+               }
+               if(isset($extra['limit'])) {
                        $rows = false;
                        if(isset($extra['offset'])) {
                                $rs = $db->SelectLimit($qry, $extra['limit'], $extra['offset']);
@@ -1237,59 +1334,55 @@ function adodb_GetActiveRecordsClass(&$db, $class, $tableObj,$whereOrderBy,$bind
                        // Note: to-many relationships mess around with the 'limit' parameter
                        $rowId = intval($row[$index]);
 
-                       if(ADODB_WORK_AR == $extra['loading'])
-                       {
+                       if(ADODB_WORK_AR == $extra['loading']) {
                                $arrRef[$rowId] = $obj;
                                $arr[] = &$arrRef[$rowId];
-                               if(!isset($indices))
+                               if(!isset($indices)) {
                                        $indices = $rowId;
-                               else
+                               }
+                               else {
                                        $indices .= ','.$rowId;
-                               if(!empty($relations['belongsTo']))
-                               {
-                                       foreach($relations['belongsTo'] as $foreignTable)
-                                       {
+                               }
+                               if(!empty($relations['belongsTo'])) {
+                                       foreach($relations['belongsTo'] as $foreignTable) {
                                                $foreignTableRef = $foreignTable->foreignKey;
                                                // First array: list of foreign ids we are looking for
-                                               if(empty($bTos[$foreignTableRef]))
+                                               if(empty($bTos[$foreignTableRef])) {
                                                        $bTos[$foreignTableRef] = array();
+                                               }
                                                // Second array: list of ids found
-                                               if(empty($obj->$foreignTableRef))
+                                               if(empty($obj->$foreignTableRef)) {
                                                        continue;
-                                               if(empty($bTos[$foreignTableRef][$obj->$foreignTableRef]))
+                                               }
+                                               if(empty($bTos[$foreignTableRef][$obj->$foreignTableRef])) {
                                                        $bTos[$foreignTableRef][$obj->$foreignTableRef] = array();
+                                               }
                                                $bTos[$foreignTableRef][$obj->$foreignTableRef][] = $obj;
                                        }
                                }
                                continue;
                        }
 
-                       if($rowId>0)
-                       {
-                               if(ADODB_JOIN_AR == $extra['loading'])
-                               {
+                       if($rowId>0) {
+                               if(ADODB_JOIN_AR == $extra['loading']) {
                                        $isNewObj = !isset($uniqArr['_'.$row[0]]);
-                                       if($isNewObj)
+                                       if($isNewObj) {
                                                $uniqArr['_'.$row[0]] = $obj;
+                                       }
 
                                        // TODO Copy/paste code below: bad!
-