Merge branch 'MDL-65094-master' of git://github.com/rezaies/moodle
authorEloy Lafuente (stronk7) <stronk7@moodle.org>
Thu, 4 Apr 2019 20:32:52 +0000 (22:32 +0200)
committerEloy Lafuente (stronk7) <stronk7@moodle.org>
Thu, 4 Apr 2019 20:32:52 +0000 (22:32 +0200)
admin/renderer.php
lib/classes/hub/registration.php
lib/moodlelib.php

index 257f825..3bc74ec 100644 (file)
@@ -843,8 +843,7 @@ class core_admin_renderer extends plugin_renderer_base {
      */
     protected function registration_warning($registered) {
 
-        if (!$registered) {
-
+        if (!$registered && site_is_public()) {
             if (has_capability('moodle/site:config', context_system::instance())) {
                 $registerbutton = $this->single_button(new moodle_url('/admin/registration/index.php'),
                     get_string('register', 'admin'));
index 805434f..d2a8672 100644 (file)
@@ -524,13 +524,10 @@ class registration {
             $markasviewed = true;
         } else {
             $showregistration = !empty($CFG->registrationpending);
-            if ($showregistration) {
-                $host = parse_url($CFG->wwwroot, PHP_URL_HOST);
-                if ($host === 'localhost' || preg_match('|^127\.\d+\.\d+\.\d+$|', $host)) {
-                    // If it's a localhost, don't redirect to registration, it won't work anyway.
-                    $showregistration = false;
-                    $markasviewed = true;
-                }
+            if ($showregistration && !site_is_public()) {
+                // If it's not a public site, don't redirect to registration, it won't work anyway.
+                $showregistration = false;
+                $markasviewed = true;
             }
         }
         if ($markasviewed !== null) {
index 003ca15..88cdff0 100644 (file)
@@ -10284,3 +10284,28 @@ function get_callable_name($callable) {
         return $name;
     }
 }
+
+/**
+ * Tries to guess if $CFG->wwwroot is publicly accessible or not.
+ * Never put your faith on this function and rely on its accuracy as there might be false positives.
+ * It just performs some simple checks, and mainly is used for places where we want to hide some options
+ * such as site registration when $CFG->wwwroot is not publicly accessible.
+ * Good thing is there is no false negative.
+ *
+ * @return bool
+ */
+function site_is_public() {
+    global $CFG;
+
+    $host = parse_url($CFG->wwwroot, PHP_URL_HOST);
+
+    if ($host === 'localhost' || preg_match('|^127\.\d+\.\d+\.\d+$|', $host)) {
+        $ispublic = false;
+    } else if (\core\ip_utils::is_ip_address($host) && !ip_is_public($host)) {
+        $ispublic = false;
+    } else {
+        $ispublic = true;
+    }
+
+    return $ispublic;
+}