MDL-46116 mod_imscp: Don't create links on items without content.
authorDavid Balch <david.balch@conted.ox.ac.uk>
Tue, 28 Oct 2014 16:55:10 +0000 (16:55 +0000)
committerDavid Balch <david.balch@conted.ox.ac.uk>
Tue, 11 Nov 2014 18:05:03 +0000 (18:05 +0000)
mod/imscp/locallib.php
mod/imscp/module.js

index 3ebd106..2604bc0 100644 (file)
@@ -60,15 +60,19 @@ function imscp_print_content($imscp, $cm, $course) {
 function imscp_htmllize_item($item, $imscp, $cm) {
     global $CFG;
 
-    if (preg_match('|^https?://|', $item['href'])) {
-        $url = $item['href'];
+    if ($item['href']) {
+        if (preg_match('|^https?://|', $item['href'])) {
+            $url = $item['href'];
+        } else {
+            $context = context_module::instance($cm->id);
+            $urlbase = "$CFG->wwwroot/pluginfile.php";
+            $path = '/'.$context->id.'/mod_imscp/content/'.$imscp->revision.'/'.$item['href'];
+            $url = file_encode_url($urlbase, $path, false);
+        }
+        $result = "<li><a href=\"$url\">".$item['title'].'</a>';
     } else {
-        $context = context_module::instance($cm->id);
-        $urlbase = "$CFG->wwwroot/pluginfile.php";
-        $path = '/'.$context->id.'/mod_imscp/content/'.$imscp->revision.'/'.$item['href'];
-        $url = file_encode_url($urlbase, $path, false);
+        $result = '<li>'.$item['title'];
     }
-    $result = "<li><a href=\"$url\">".$item['title'].'</a>';
     if ($item['subitems']) {
         $result .= '<ul>';
         foreach ($item['subitems'] as $subitem) {
index 8933d56..364fdfe 100644 (file)
@@ -41,20 +41,22 @@ M.mod_imscp.init = function(Y) {
             imscp_current_node.highlight();
 
             var content = new Y.YUI2.util.Element('imscp_content');
-            try {
-                // first try IE way - it can not set name attribute later
-                // and also it has some restrictions on DOM access from object tag
-                var obj = document.createElement('<iframe id="imscp_object" src="'+node.href+'">');
-            } catch (e) {
-                var obj = document.createElement('object');
-                obj.setAttribute('id', 'imscp_object');
-                obj.setAttribute('type', 'text/html');
-                obj.setAttribute('data', node.href);
+            if (node.href) {
+                try {
+                    // First try IE way - it can not set name attribute later
+                    // and also it has some restrictions on DOM access from object tag.
+                    var obj = document.createElement('<iframe id="imscp_object" src="' + node.href + '">');
+                } catch (e) {
+                    var obj = document.createElement('object');
+                    obj.setAttribute('id', 'imscp_object');
+                    obj.setAttribute('type', 'text/html');
+                    obj.setAttribute('data', node.href);
+                }
             }
             var old = Y.YUI2.util.Dom.get('imscp_object');
             if (old) {
                 content.replaceChild(obj, old);
-            } else {
+            } else if (obj) {
                 content.appendChild(obj);
             }
             imscp_resize_frame();