Merge branch 'MDL-62965-master-userprofilesignup' of git://github.com/mudrd8mz/moodle
authorEloy Lafuente (stronk7) <stronk7@moodle.org>
Wed, 1 Aug 2018 22:37:40 +0000 (00:37 +0200)
committerEloy Lafuente (stronk7) <stronk7@moodle.org>
Wed, 1 Aug 2018 22:37:40 +0000 (00:37 +0200)
user/profile/lib.php
user/tests/behat/custom_profile_fields.feature

index 25b719d..f7d0d88 100644 (file)
@@ -432,7 +432,9 @@ class profile_field_base {
             case PROFILE_VISIBLE_ALL:
                 return true;
             case PROFILE_VISIBLE_PRIVATE:
-                if ($this->userid == $USER->id) {
+                if ($this->is_signup_field() && (empty($this->userid) || isguestuser($this->userid))) {
+                    return true;
+                } else if ($this->userid == $USER->id) {
                     return true;
                 } else {
                     return has_capability('moodle/user:viewalldetails', $context);
@@ -454,6 +456,11 @@ class profile_field_base {
             return false;
         }
 
+        if ($this->is_signup_field() && (empty($this->userid) || isguestuser($this->userid))) {
+            // Allow editing the field on the signup page.
+            return true;
+        }
+
         $systemcontext = context_system::instance();
 
         if ($this->userid == $USER->id && has_capability('moodle/user:editownprofile', $systemcontext)) {
index 9359113..6f529a2 100644 (file)
@@ -1,7 +1,7 @@
 @core @core_user
 Feature: Custom profile fields should be visible and editable by those with the correct permissions.
 
-  Background: Attempting to self-register as a new user with empty names
+  Background:
     Given the following "users" exist:
       | username            | firstname           | lastname | email                           |
       | userwithinformation | userwithinformation | 1        | userwithinformation@example.com |
@@ -12,12 +12,16 @@ Feature: Custom profile fields should be visible and editable by those with the
       | user                | course | role    |
       | userwithinformation | C1     | student |
 
+    And the following config values are set as admin:
+      | registerauth    | email |
+
     And 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 input"
     And I set the following fields to these values:
       | Short name                    | notvisible_field |
       | Name                          | notvisible_field |
+      | Display on signup page?       | Yes              |
       | Who is this field visible to? | Not visible      |
     And I click on "Save changes" "button"
 
@@ -25,6 +29,7 @@ Feature: Custom profile fields should be visible and editable by those with the
     And I set the following fields to these values:
       | Short name                    | uservisible_field |
       | Name                          | uservisible_field |
+      | Display on signup page?       | Yes               |
       | Who is this field visible to? | Visible to user   |
     And I click on "Save changes" "button"
 
@@ -32,6 +37,7 @@ Feature: Custom profile fields should be visible and editable by those with the
     And I set the following fields to these values:
       | Short name                    | everyonevisible_field |
       | Name                          | everyonevisible_field |
+      | Display on signup page?       | No                    |
       | Who is this field visible to? | Visible to everyone   |
     And I click on "Save changes" "button"
 
@@ -44,6 +50,27 @@ Feature: Custom profile fields should be visible and editable by those with the
     And I click on "Update profile" "button"
     And I log out
 
+  @javascript
+  Scenario: Visible custom profile fields can be part of the sign up form for anonymous users.
+    Given I am on site homepage
+    And I follow "Log in"
+    When I press "Create new account"
+    And I expand all fieldsets
+    Then I should not see "notvisible_field"
+    And I should see "uservisible_field"
+    And I should not see "everyonevisible_field"
+
+  @javascript
+  Scenario: Visible custom profile fields can be part of the sign up form for guest users.
+    Given I log in as "guest"
+    And I am on site homepage
+    And I follow "Log in"
+    When I press "Create new account"
+    And I expand all fieldsets
+    Then I should not see "notvisible_field"
+    And I should see "uservisible_field"
+    And I should not see "everyonevisible_field"
+
   @javascript
   Scenario: User with moodle/user:update but without moodle/user:viewalldetails can only update visible profile fields.
     Given the following "roles" exist: