MDL-62233 portfolio: check caller parent class
authorMarina Glancy <marina@moodle.com>
Mon, 7 May 2018 04:53:40 +0000 (12:53 +0800)
committerJun Pataleta <jun@moodle.com>
Thu, 10 May 2018 01:13:03 +0000 (09:13 +0800)
lib/portfolio/exporter.php
lib/portfoliolib.php

index 29e5e69..4aded62 100644 (file)
@@ -117,9 +117,9 @@ class portfolio_exporter {
      * @param portfolio_caller_base $caller portfolio caller (passed by reference)
      * @param string $callercomponent the name of the callercomponent
      */
-    public function __construct(&$instance, &$caller, $callercomponent) {
-        $this->instance =& $instance;
-        $this->caller =& $caller;
+    public function __construct($instance, portfolio_caller_base $caller, $callercomponent) {
+        $this->instance = $instance;
+        $this->caller = $caller;
         if ($instance) {
             $this->instancefile = 'portfolio/' . $instance->get('plugin') . '/lib.php';
             $this->instance->set('exporter', $this);
index e484432..68fcf86 100644 (file)
@@ -1358,8 +1358,11 @@ function portfolio_include_callback_file($component, $class = null) {
         throw new portfolio_button_exception('nocallbackfile', 'portfolio', '', $component);
     }
 
-    if (!is_null($class) && !class_exists($class)) {
-        throw new portfolio_button_exception('nocallbackclass', 'portfolio', '', $class);
+    if (!is_null($class)) {
+        // If class is specified, check it exists and extends portfolio_caller_base.
+        if (!class_exists($class) || !is_subclass_of($class, 'portfolio_caller_base')) {
+            throw new portfolio_button_exception('nocallbackclass', 'portfolio', '', $class);
+        }
     }
 }