Merge branch 'master_MDL-28739' of git://github.com/danmarsden/moodle
authorEloy Lafuente (stronk7) <stronk7@moodle.org>
Tue, 16 Aug 2011 01:02:29 +0000 (03:02 +0200)
committerEloy Lafuente (stronk7) <stronk7@moodle.org>
Tue, 16 Aug 2011 01:02:29 +0000 (03:02 +0200)
63 files changed:
cohort/edit.php
course/edit.php
course/editcategory.php
grade/edit/outcome/edit.php
grade/edit/scale/edit.php
grade/import/csv/index.php
lib/blocklib.php
lib/filelib.php
lib/formslib.php
lib/outputrenderers.php
mod/assignment/lib.php
mod/assignment/type/online/assignment.class.php
mod/feedback/item/label/lib.php
mod/lesson/editpage.php
mod/quiz/report/overview/report.php
mod/scorm/api.php
mod/scorm/datamodels/debug.js.php
mod/scorm/datamodels/scorm_12.js.php
mod/scorm/lib.php
mod/scorm/loadSCO.php
mod/scorm/loaddatamodel.php
mod/scorm/locallib.php
mod/scorm/module.js
mod/scorm/report/basic/report.php
mod/scorm/userreport.php
mod/wiki/pagelib.php
mod/workshop/exsubmission.php
mod/workshop/form/accumulative/lib.php
mod/workshop/form/comments/lib.php
mod/workshop/form/numerrors/lib.php
mod/workshop/form/rubric/lib.php
mod/workshop/submission.php
question/format.php
question/format/aiken/format.php
question/format/aiken/simpletest/fixtures/questions.aiken.txt [new file with mode: 0644]
rating/lib.php
rating/simpletest/testrating.php [new file with mode: 0644]
repository/local/lib.php
tag/edit.php
theme/anomaly/style/general.css
theme/arialist/style/core.css
theme/base/pix/horizontal-menu-submenu-indicator.png [new file with mode: 0644]
theme/base/pix/vertical-menu-submenu-indicator.png [new file with mode: 0644]
theme/base/style/blocks.css
theme/base/style/core.css
theme/binarius/style/core.css
theme/boxxie/style/core.css
theme/brick/style/core.css
theme/formfactor/style/core.css
theme/formfactor/style/selected.css
theme/fusion/style/menus.css
theme/leatherbound/style/core.css
theme/magazine/style/core.css
theme/nimble/pix/horizontal-menu-submenu-indicator.png [new file with mode: 0644]
theme/nimble/pix/vertical-menu-submenu-indicator.png [new file with mode: 0644]
theme/nimble/style/colors.css
theme/nimble/style/menu.css
theme/nonzero/style/core.css
theme/sky_high/style/menu.css
theme/splash/style/sl.css
theme/standard/style/blocks.css
user/edit.php
user/editadvanced.php

index 4063e9c..dc1bd08 100644 (file)
@@ -98,12 +98,12 @@ if ($delete and $cohort->id) {
 $editoroptions = array('maxfiles'=>0, 'context'=>$context);
 if ($cohort->id) {
     // edit existing
-    $cohort = file_prepare_standard_editor($cohort, 'description', $editoroptions);
+    $cohort = file_prepare_standard_editor($cohort, 'description', $editoroptions, $context);
     $strheading = get_string('editcohort', 'cohort');
 
 } else {
     // add new
-    $cohort = file_prepare_standard_editor($cohort, 'description', $editoroptions);
+    $cohort = file_prepare_standard_editor($cohort, 'description', $editoroptions, $context);
     $strheading = get_string('addcohort', 'cohort');
 }
 
index b487132..053d8bb 100644 (file)
@@ -77,9 +77,13 @@ if (!empty($course)) {
         }
     }
     $course->allowedmods = $allowedmods;
+    //add context for editor
+    $editoroptions['context'] = $coursecontext;
     $course = file_prepare_standard_editor($course, 'summary', $editoroptions, $coursecontext, 'course', 'summary', 0);
 
 } else {
+    //editor should respect category context if course context is not set.
+    $editoroptions['context'] = $catcontext;
     $course = file_prepare_standard_editor($course, 'summary', $editoroptions, null, 'course', 'summary', null);
 }
 
index 3cff561..ceffc63 100644 (file)
@@ -13,6 +13,8 @@ require_once('editcategory_form.php');
 require_login();
 
 $id = optional_param('id', 0, PARAM_INT);
+$itemid = 0; //initalise itemid, as all files in category description has item id 0
+
 if ($id) {
     if (!$category = $DB->get_record('course_categories', array('id' => $id))) {
         print_error('unknowcategory');
@@ -42,15 +44,21 @@ if ($id) {
     $category->parent = $parent;
     require_capability('moodle/category:manage', $context);
     $strtitle = get_string("addnewcategory");
-    $editorcontext = null;
+    $editorcontext = $context;
+    $itemid = null; //set this explicitly, so files for parent category should not get loaded in draft area.
     $title = "$SITE->shortname: ".get_string('addnewcategory');
     $fullname = $SITE->fullname;
 }
 
 $PAGE->set_pagelayout('admin');
 
-$editoroptions = array('maxfiles' => EDITOR_UNLIMITED_FILES, 'maxbytes'=>$CFG->maxbytes, 'trusttext'=>true);
-$category = file_prepare_standard_editor($category, 'description', $editoroptions, $editorcontext, 'coursecat', 'description', 0);
+$editoroptions = array(
+    'maxfiles'  => EDITOR_UNLIMITED_FILES,
+    'maxbytes'  => $CFG->maxbytes,
+    'trusttext' => true,
+    'context'   => $editorcontext
+);
+$category = file_prepare_standard_editor($category, 'description', $editoroptions, $editorcontext, 'coursecat', 'description', $itemid);
 
 $mform = new editcategory_form('editcategory.php', compact('category', 'editoroptions'));
 $mform->set_data($category);
index d301cfe..1f4d9b7 100644 (file)
@@ -103,7 +103,13 @@ if (!$courseid) {
 // default return url
 $gpr = new grade_plugin_return();
 $returnurl = $gpr->get_return_url('index.php?id='.$courseid);
-$editoroptions = array('maxfiles'=>EDITOR_UNLIMITED_FILES, 'maxbytes'=>$CFG->maxbytes, 'trusttext'=>false, 'noclean'=>true);
+$editoroptions = array(
+    'maxfiles'  => EDITOR_UNLIMITED_FILES,
+    'maxbytes'  => $CFG->maxbytes,
+    'trusttext' => false,
+    'noclean'   => true,
+    'context'   => $systemcontext
+);
 
 if (!empty($outcome_rec->id)) {
     $outcome_rec = file_prepare_standard_editor($outcome_rec, 'description', $editoroptions, $systemcontext, 'grade', 'outcome', $outcome_rec->id);
index 5787ed1..f226139 100644 (file)
@@ -88,7 +88,13 @@ if (!$courseid) {
 // default return url
 $gpr = new grade_plugin_return();
 $returnurl = $gpr->get_return_url('index.php?id='.$courseid);
-$editoroptions = array('maxfiles'=>EDITOR_UNLIMITED_FILES, 'maxbytes'=>$CFG->maxbytes, 'trusttext'=>false, 'noclean'=>true);
+$editoroptions = array(
+    'maxfiles'  => EDITOR_UNLIMITED_FILES,
+    'maxbytes'  => $CFG->maxbytes,
+    'trusttext' => false,
+    'noclean'   => true,
+    'context'   => $systemcontext
+);
 
 if (!empty($scale_rec->id)) {
     $scale_rec = file_prepare_standard_editor($scale_rec, 'description', $editoroptions, $systemcontext, 'grade', 'scale', $scale_rec->id);
index 8681a83..04844b0 100644 (file)
@@ -481,7 +481,7 @@ if ($formdata = $mform->get_data()) {
         fclose($fp);
         unlink($filename);
     } else {
-        print_error('cannotreadfil');
+        print_error('cannotreadfile');
     }
 
 } else {
index d8a1987..86fd35d 100644 (file)
@@ -1007,29 +1007,10 @@ class block_manager {
         $controls = array();
         $actionurl = $this->page->url->out(false, array('sesskey'=> sesskey()));
 
-        // Assign roles icon.
-        if (has_capability('moodle/role:assign', $block->context)) {
-            //TODO: please note it is sloppy to pass urls through page parameters!!
-            //      it is shortened because some web servers (e.g. IIS by default) give
-            //      a 'security' error if you try to pass a full URL as a GET parameter in another URL.
-
-            $return = $this->page->url->out(false);
-            $return = str_replace($CFG->wwwroot . '/', '', $return);
-
-            $controls[] = array('url' => $CFG->wwwroot . '/' . $CFG->admin .
-                    '/roles/assign.php?contextid=' . $block->context->id . '&returnurl=' . urlencode($return),
-                    'icon' => 'i/roles', 'caption' => get_string('assignroles', 'role'));
-        }
-
-        if ($this->page->user_can_edit_blocks() && $block->instance_can_be_hidden()) {
-            // Show/hide icon.
-            if ($block->instance->visible) {
-                $controls[] = array('url' => $actionurl . '&bui_hideid=' . $block->instance->id,
-                        'icon' => 't/hide', 'caption' => get_string('hide'));
-            } else {
-                $controls[] = array('url' => $actionurl . '&bui_showid=' . $block->instance->id,
-                        'icon' => 't/show', 'caption' => get_string('show'));
-            }
+        if ($this->page->user_can_edit_blocks()) {
+            // Move icon.
+            $controls[] = array('url' => $actionurl . '&bui_moveid=' . $block->instance->id,
+                    'icon' => 't/move', 'caption' => get_string('move'));
         }
 
         if ($this->page->user_can_edit_blocks() || $block->user_can_edit()) {
@@ -1048,10 +1029,28 @@ class block_manager {
             }
         }
 
-        if ($this->page->user_can_edit_blocks()) {
-            // Move icon.
-            $controls[] = array('url' => $actionurl . '&bui_moveid=' . $block->instance->id,
-                    'icon' => 't/move', 'caption' => get_string('move'));
+        if ($this->page->user_can_edit_blocks() && $block->instance_can_be_hidden()) {
+            // Show/hide icon.
+            if ($block->instance->visible) {
+                $controls[] = array('url' => $actionurl . '&bui_hideid=' . $block->instance->id,
+                        'icon' => 't/hide', 'caption' => get_string('hide'));
+            } else {
+                $controls[] = array('url' => $actionurl . '&bui_showid=' . $block->instance->id,
+                        'icon' => 't/show', 'caption' => get_string('show'));
+            }
+        }
+
+        // Assign roles icon.
+        if (has_capability('moodle/role:assign', $block->context)) {
+            //TODO: please note it is sloppy to pass urls through page parameters!!
+            //      it is shortened because some web servers (e.g. IIS by default) give
+            //      a 'security' error if you try to pass a full URL as a GET parameter in another URL.
+            $return = $this->page->url->out(false);
+            $return = str_replace($CFG->wwwroot . '/', '', $return);
+
+            $controls[] = array('url' => $CFG->wwwroot . '/' . $CFG->admin .
+                    '/roles/assign.php?contextid=' . $block->context->id . '&returnurl=' . urlencode($return),
+                    'icon' => 'i/roles', 'caption' => get_string('assignroles', 'role'));
         }
 
         return $controls;
index 7d8830b..5cc33d0 100644 (file)
@@ -111,6 +111,20 @@ function file_prepare_standard_editor($data, $field, array $options, $context=nu
         $options['noclean'] = false;
     }
 
+    //sanity check for passed context. This function doesn't expect $option['context'] to be set
+    //But this function is called before creating editor hence, this is one of the best places to check
+    //if context is used properly. This check notify developer that they missed passing context to editor.
+    if (isset($context) && !isset($options['context'])) {
+        //if $context is not null then make sure $option['context'] is also set.
+        debugging('Context for editor is not set in editoroptions. Hence editor will not respect editor filters', DEBUG_DEVELOPER);
+    } else if (isset($options['context']) && isset($context)) {
+        //If both are passed then they should be equal.
+        if ($options['context']->id != $context->id) {
+            $exceptionmsg = 'Editor context ['.$options['context']->id.'] is not equal to passed context ['.$context->id.']';
+            throw new coding_exception($exceptionmsg);
+        }
+    }
+
     if (is_null($itemid) or is_null($context)) {
         $contextid = null;
         $itemid = null;
index 1787b0f..8c529be 100644 (file)
@@ -1731,6 +1731,12 @@ var skipClientValidation = false;
 
 function qf_errorHandler(element, _qfMsg) {
   div = element.parentNode;
+
+  if ((div == undefined) || (element.name == undefined)) {
+    //no checking can be done for undefined elements so let server handle it.
+    return true;
+  }
+
   if (_qfMsg != \'\') {
     var errorSpan = document.getElementById(\'id_error_\'+element.name);
     if (!errorSpan) {
@@ -1780,16 +1786,25 @@ function qf_errorHandler(element, _qfMsg) {
                 $elementName);
             $js .= '
 function validate_' . $this->_formName . '_' . $escapedElementName . '(element) {
+  if (undefined == element) {
+     //required element was not found, then let form be submitted without client side validation
+     return true;
+  }
   var value = \'\';
   var errFlag = new Array();
   var _qfGroups = {};
   var _qfMsg = \'\';
   var frm = element.parentNode;
-  while (frm && frm.nodeName.toUpperCase() != "FORM") {
-    frm = frm.parentNode;
+  if ((undefined != element.name) && (frm != undefined)) {
+      while (frm && frm.nodeName.toUpperCase() != "FORM") {
+        frm = frm.parentNode;
+      }
+    ' . join("\n", $jsArr) . '
+      return qf_errorHandler(element, _qfMsg);
+  } else {
+    //element name should be defined else error msg will not be displayed.
+    return true;
   }
-' . join("\n", $jsArr) . '
-  return qf_errorHandler(element, _qfMsg);
 }
 ';
             $validateJS .= '
index be7eba7..b832df4 100644 (file)
@@ -2427,8 +2427,10 @@ EOD;
         // Increment the menu count. This is used for ID's that get worked with
         // in JavaScript as is essential
         $menucount++;
-        // Initialise this custom menu
-        $this->page->requires->js_init_call('M.core_custom_menu.init', array('custom_menu_'.$menucount));
+        // Initialise this custom menu (the custom menu object is contained in javascript-static
+        $jscode = js_writer::function_call_with_Y('M.core_custom_menu.init', array('custom_menu_'.$menucount));
+        $jscode = "(function(){{$jscode}})";
+        $this->page->requires->yui_module('node-menunav', $jscode);
         // Build the root nodes as required by YUI
         $content = html_writer::start_tag('div', array('id'=>'custom_menu_'.$menucount, 'class'=>'yui3-menu yui3-menu-horizontal javascript-disabled'));
         $content .= html_writer::start_tag('div', array('class'=>'yui3-menu-content'));
index 86c5832..60917e1 100644 (file)
@@ -2372,6 +2372,7 @@ class mod_assignment_grading_form extends moodleform {
         $editoroptions['noclean'] = false;
         $editoroptions['maxfiles'] = 0; //TODO: no files for now, we need to first implement assignment_feedback area, integration with gradebook, files support in quickgrading, etc. (skodak)
         $editoroptions['maxbytes'] = $this->_customdata->maxbytes;
+        $editoroptions['context'] = $this->_customdata->context;
         return $editoroptions;
     }
 
index 54532f7..b705528 100644 (file)
@@ -38,7 +38,12 @@ class assignment_online extends assignment_base {
 
         if ($editmode) {
             // prepare form and process submitted data
-            $editoroptions = array('noclean'=>false, 'maxfiles'=>EDITOR_UNLIMITED_FILES, 'maxbytes'=>$this->course->maxbytes);
+            $editoroptions = array(
+                'noclean'  => false,
+                'maxfiles' => EDITOR_UNLIMITED_FILES,
+                'maxbytes' => $this->course->maxbytes,
+                'context'  => $this->context
+            );
 
             $data = new stdClass();
             $data->id         = $this->cm->id;
index ce9b399..5e5df4c 100644 (file)
@@ -49,6 +49,10 @@ class feedback_item_label extends feedback_item_base {
         //preparing the editor for new file-api
         $item->presentationformat = FORMAT_HTML;
         $item->presentationtrust = 1;
+
+        // Append editor context to presentation options, giving preference to existing context.
+        $this->presentationoptions = array_merge(array('context' => $this->context), $this->presentationoptions);
+
         $item = file_prepare_standard_editor($item,
                                             'presentation', //name of the form element
                                             $this->presentationoptions,
index e9bffb8..f725cae 100644 (file)
@@ -84,6 +84,7 @@ if ($edit) {
     $data = $editpage->properties();
     $data->pageid = $editpage->id;
     $data->id = $cm->id;
+    $editoroptions['context'] = $context;
     $data = file_prepare_standard_editor($data, 'contents', $editoroptions, $context, 'mod_lesson', 'page_contents',  $editpage->id);
     $mform->set_data($data);
     $PAGE->navbar->add(get_string('edit'), new moodle_url('/mod/lesson/edit.php', array('id'=>$id)));
index de70778..aec7809 100644 (file)
@@ -117,11 +117,7 @@ class quiz_overview_report extends quiz_attempt_report {
         }
 
         // Load the required questions.
-        if ($detailedmarks) {
-            $questions = quiz_report_get_significant_questions($quiz);
-        } else {
-            $questions = array();
-        }
+        $questions = quiz_report_get_significant_questions($quiz);
 
         $table = new quiz_report_overview_table($quiz, $this->context, $qmsubselect,
                 $groupstudents, $students, $detailedmarks, $questions, $candelete,
index e67fd70..88875ce 100644 (file)
@@ -60,7 +60,7 @@ require_login($course->id, false, $cm);
 
 if ($usertrack = scorm_get_tracks($scoid, $USER->id, $attempt)) {
     //according to SCORM 2004 spec(RTE V1, 4.2.8), only cmi.exit==suspend should allow previous datamodel elements on re-launch
-    if ($scorm->version != "SCORM_1.3" || (isset($usertrack->{'cmi.exit'}) && ($usertrack->{'cmi.exit'} == 'suspend'))) {
+    if (!scorm_version_check($scorm->version, SCORM_13) || (isset($usertrack->{'cmi.exit'}) && ($usertrack->{'cmi.exit'} == 'suspend'))) {
         foreach ($usertrack as $key => $value) {
             $userdata->$key = addslashes_js($value);
         }
@@ -93,6 +93,9 @@ if ($scodatas = scorm_get_sco($scoid, SCO_DATA)) {
 if (!$sco = scorm_get_sco($scoid)) {
     print_error('cannotfindsco', 'scorm');
 }
+if (scorm_version_check($scorm->version, SCORM_13)) {
+    $userdata->{'cmi.scaled_passing_score'} = $DB->get_field('scorm_seq_objective', 'minnormalizedmeasure', array('scoid'=>$scoid));
+}
 $scorm->version = strtolower(clean_param($scorm->version, PARAM_SAFEDIR));   // Just to be safe
 if (file_exists($CFG->dirroot.'/mod/scorm/datamodels/'.$scorm->version.'.js.php')) {
     include_once($CFG->dirroot.'/mod/scorm/datamodels/'.$scorm->version.'.js.php');
index 6ca2fd0..b84547a 100644 (file)
@@ -85,11 +85,11 @@ var logRow = 0;
 var logPopUpWindow = "N";
 var debugSCORMVersion = '<?php echo $scorm->version; ?>';
 <?php
-   $LMS_prefix = ($scorm->version == 'scorm_12' || $scorm->version == 'SCORM_1.2' || empty($scorm->version)) ? 'LMS' : '';
-   $LMS_api = ($scorm->version == 'scorm_12' || $scorm->version == 'SCORM_1.2' || empty($scorm->version)) ? 'API' : 'API_1484_11';
+   $LMS_prefix = (scorm_version_check($scorm->version, SCORM_12) || empty($scorm->version)) ? 'LMS' : '';
+   $LMS_api = (scorm_version_check($scorm->version, SCORM_12) || empty($scorm->version)) ? 'API' : 'API_1484_11';
 
    $LMS_elements = array();
-   if ($scorm->version == 'scorm_12' || $scorm->version == 'SCORM_1.2' || empty($scorm->version)) {
+   if (scorm_version_check($scorm->version, SCORM_12) || empty($scorm->version)) {
        $LMS_elements = array(   'cmi.core._children',
                                 'cmi.core.student_id',
                                 'cmi.core.student_name',
@@ -653,8 +653,8 @@ function UpdateLog(s) {
         + '             id="commitButton"'
         + '             name="commitButton">'
         + '            <input type="button"'
-        + '             value="<?php echo $scorm->version == 'scorm_12' ? 'LMSFinish' : 'Terminate'; ?>()  "'
-        + '             onclick="try<?php echo $scorm->version == 'scorm_12' ? 'LMSFinish' : 'LMSTerminate'; ?>();"'
+        + '             value="<?php echo scorm_version_check($scorm->version, SCORM_12) ? 'LMSFinish' : 'Terminate'; ?>()  "'
+        + '             onclick="try<?php echo scorm_version_check($scorm->version, SCORM_12) ? 'LMSFinish' : 'LMSTerminate'; ?>();"'
         + '             id="finishButton"'
         + '             name="finishButton">'
         + '         </td>'
index 75481d8..338ae7f 100644 (file)
@@ -586,7 +586,6 @@ function SCORMapi1_2() {
                                 }
                             } else {
                                 datastring += elementstring;
-                                eval('datamodel["'+elementmodel+'"].defaultvalue=data[property];');
                             }
                         }
                     }
index 14690f2..8e3dfb2 100644 (file)
@@ -34,6 +34,11 @@ define('SCORM_TOC_HIDDEN', 1);
 define('SCORM_TOC_POPUP', 2);
 define('SCORM_TOC_DISABLED', 3);
 
+//used to check what SCORM version is being used.
+define('SCORM_12', 1);
+define('SCORM_13', 2);
+define('SCORM_AICC', 3);
+
 /**
  * Given an object containing all the necessary data,
  * (defined by the form in mod_form.php) this function
@@ -1084,3 +1089,38 @@ function scorm_page_type_list($pagetype, $parentcontext, $currentcontext) {
     $module_pagetype = array('mod-scorm-*'=>get_string('page-mod-scorm-x', 'scorm'));
     return $module_pagetype;
 }
+
+/**
+ * Returns the SCORM version used.
+ * @param string $scormversion comes from $scorm->version
+ * @param string $version one of the defined vars SCORM_12, SCORM_13, SCORM_AICC (or empty)
+ * @return Scorm version.
+ */
+function scorm_version_check($scormversion, $version='') {
+    $scormversion = trim(strtolower($scormversion));
+    if (empty($version) || $version==SCORM_12) {
+        if ($scormversion == 'scorm_12' || $scormversion == 'scorm_1.2') {
+            return SCORM_12;
+        }
+        if (!empty($version)) {
+            return false;
+        }
+    }
+    if (empty($version) || $version == SCORM_13) {
+        if ($scormversion == 'scorm_13' || $scormversion == 'scorm_1.3') {
+            return SCORM_13;
+        }
+        if (!empty($version)) {
+            return false;
+        }
+    }
+    if (empty($version) || $version == SCORM_AICC) {
+        if (strpos($scormversion, 'aicc')) {
+            return SCORM_AICC;
+        }
+        if (!empty($version)) {
+            return false;
+        }
+    }
+    return false;
+}
\ No newline at end of file
index 9a1d085..057ea84 100644 (file)
@@ -86,7 +86,7 @@ if (!isset($sco)) {
 
 if ($sco->scormtype == 'asset') {
     $attempt = scorm_get_last_attempt($scorm->id, $USER->id);
-    $element = ($scorm->version == 'scorm_13' || $scorm->version == 'SCORM_1.3') ? 'cmi.completion_status':'cmi.core.lesson_status';
+    $element = (scorm_version_check($scorm->version, SCORM_13)) ? 'cmi.completion_status':'cmi.core.lesson_status';
     $value = 'completed';
     $result = scorm_insert_track($USER->id, $scorm->id, $sco->id, $attempt, $element, $value);
 }
@@ -137,7 +137,7 @@ if (scorm_external_link($sco->launch)) {
 }
 
 // which API are we looking for
-$LMS_api = ($scorm->version == 'scorm_12' || $scorm->version == 'SCORM_1.2' || empty($scorm->version)) ? 'API' : 'API_1484_11';
+$LMS_api = (scorm_version_check($scorm->version, SCORM_12) || empty($scorm->version)) ? 'API' : 'API_1484_11';
 ?>
 <html>
     <head>
index eef5106..fb6e2eb 100644 (file)
@@ -61,7 +61,7 @@ $PAGE->set_url($url);
 require_login($course, false, $cm);
 
 if ($usertrack = scorm_get_tracks($scoid, $USER->id, $attempt)) {
-    if ((isset($usertrack->{'cmi.exit'}) && ($usertrack->{'cmi.exit'} != 'time-out')) || ($scorm->version != "SCORM_1.3")) {
+    if ((isset($usertrack->{'cmi.exit'}) && ($usertrack->{'cmi.exit'} != 'time-out')) || (!scorm_version_check($scorm->version, SCORM_13))) {
         foreach ($usertrack as $key => $value) {
             $userdata->$key = addslashes_js($value);
         }
index 51248fd..ea1dda6 100644 (file)
@@ -886,7 +886,7 @@ function scorm_reconstitute_array_element($sversion, $userdata, $element_name, $
     $count = 0;
     $count_sub = 0;
     $scormseperator = '_';
-    if ($sversion == 'scorm_13') { //scorm 1.3 elements use a . instead of an _
+    if (scorm_version_check($sversion, SCORM_13)) { //scorm 1.3 elements use a . instead of an _
         $scormseperator = '.';
     }
     // filter out the ones we want
@@ -902,7 +902,7 @@ function scorm_reconstitute_array_element($sversion, $userdata, $element_name, $
 
     // generate JavaScript
     foreach ($element_list as $element => $value) {
-        if ($sversion == 'scorm_13') {
+        if (scorm_version_check($sversion, SCORM_13)) {
             $element = preg_replace('/\.(\d+)\./', ".N\$1.", $element);
             preg_match('/\.(N\d+)\./', $element, $matches);
         } else {
@@ -929,7 +929,7 @@ function scorm_reconstitute_array_element($sversion, $userdata, $element_name, $
         }
 
         // now - flesh out the second level elements if there are any
-        if ($sversion == 'scorm_13') {
+        if (scorm_version_check($sversion, SCORM_13)) {
             $element = preg_replace('/(.*?\.N\d+\..*?)\.(\d+)\./', "\$1.N\$2.", $element);
             preg_match('/.*?\.N\d+\.(.*?)\.(N\d+)\./', $element, $matches);
         } else {
@@ -1113,7 +1113,7 @@ function scorm_get_attempt_count($userid, $scorm, $attempts_only=false) {
     if ($scorm->grademethod == GRADESCOES) {
         $element = 'cmi.core.lesson_status';
     }
-    if ($scorm->version == 'scorm_13' || $scorm->version == 'SCORM_1.3') {
+    if (scorm_version_check($scorm->version, SCORM_13)) {
         $element = 'cmi.score.raw';
     }
     $attempts = $DB->get_records_select('scorm_scoes_track', "element=? AND userid=? AND scormid=?", array($element, $userid, $scorm->id), 'attempt', 'DISTINCT attempt AS attemptnumber');
@@ -1288,9 +1288,6 @@ function scorm_get_toc($user,$scorm,$cmid,$toclink=TOCJSLINK,$currentorg='',$sco
         $usertracks = array();
         foreach ($scoes as $sco) {
             if (!empty($sco->launch)) {
-                if (empty($scoid)) {
-                    $scoid = $sco->id;
-                }
                 if ($usertrack = scorm_get_tracks($sco->id,$user->id,$attempt)) {
                     if ($usertrack->status == '') {
                         $usertrack->status = 'notattempted';
@@ -1306,6 +1303,7 @@ function scorm_get_toc($user,$scorm,$cmid,$toclink=TOCJSLINK,$currentorg='',$sco
         $nextid = 0;
         $findnext = false;
         $parents[$level]='/';
+        $prevsco = '';
         foreach ($scoes as $pos => $sco) {
             $isvisible = false;
             $sco->title = $sco->title;
@@ -1384,7 +1382,7 @@ function scorm_get_toc($user,$scorm,$cmid,$toclink=TOCJSLINK,$currentorg='',$sco
                         }
                         $strsuspended = get_string('suspended','scorm');
                         $exitvar = 'cmi.core.exit';
-                        if ($scorm->version == 'SCORM_1.3') {
+                        if (scorm_version_check($scorm->version, SCORM_13)) {
                             $exitvar = 'cmi.exit';
                         }
                         if ($incomplete && isset($usertrack->{$exitvar}) && ($usertrack->{$exitvar} == 'suspend')) {
@@ -1410,8 +1408,7 @@ function scorm_get_toc($user,$scorm,$cmid,$toclink=TOCJSLINK,$currentorg='',$sco
                             $previd = $sco->id;
                         }
                     }
-
-                    if ($scorm->version == 'SCORM_1.3') {
+                    if (scorm_version_check($scorm->version, SCORM_13)) {
                         require_once($CFG->dirroot.'/mod/scorm/datamodels/sequencinglib.php');
                         $prereq = scorm_seq_evaluate($sco->id,$usertracks);
                     } else {
@@ -1422,8 +1419,9 @@ function scorm_get_toc($user,$scorm,$cmid,$toclink=TOCJSLINK,$currentorg='',$sco
                         if ($sco->id == $scoid) {
                             $result->prerequisites = true;
                         }
-
-                        if ($toclink == TOCFULLURL) { //display toc with urls for structure page
+                        if (!empty($prevsco) && scorm_version_check($scorm->version, SCORM_13) && !empty($prevsco->hidecontinue)) {
+                            $result->toc .= '<span>'.$statusicon.'&nbsp;'.format_string($sco->title).'</span>';
+                        } else if ($toclink == TOCFULLURL) { //display toc with urls for structure page
                             $url = $CFG->wwwroot.'/mod/scorm/player.php?a='.$scorm->id.'&amp;currentorg='.$currentorg.$modestr.'&amp;scoid='.$sco->id;
                             $result->toc .= $statusicon.'&nbsp;<a href="'.$url.'">'.format_string($sco->title).'</a>'.$score."\n";
                         } else { //display toc for inside scorm player
@@ -1458,16 +1456,17 @@ function scorm_get_toc($user,$scorm,$cmid,$toclink=TOCJSLINK,$currentorg='',$sco
                     $nextid = $nextsco->id;
                 }
             }
+            $prevsco = $sco;
         }
         for ($i=0;$i<$level;$i++) {
             $result->toc .= "\t\t</ul></li>\n";
         }
 
         if ($play) {
-            if (empty($scoid)) {
-                $scoid = reset($scoes)->id;
+            // it is possible that $scoid is still not set, in this case we don't want an empty object
+            if ($scoid) {
+                $sco = scorm_get_sco($scoid);
             }
-            $sco = scorm_get_sco($scoid);
             $sco->previd = $previd;
             $sco->nextid = $nextid;
             $result->sco = $sco;
index fd14add..ef4d1ef 100644 (file)
@@ -146,11 +146,11 @@ M.mod_scorm.init = function(Y, hide_nav, hide_toc, toc_title, window_name, launc
          * @return void
          */
         var scorm_fixnav = function() {
-            scorm_buttons[0].set('disabled', (scorm_skipprev(scorm_current_node) == null));
-            scorm_buttons[1].set('disabled', (scorm_prev(scorm_current_node) == null));
-            scorm_buttons[2].set('disabled', (scorm_up(scorm_current_node) == null));
-            scorm_buttons[3].set('disabled', (scorm_next(scorm_current_node) == null));
-            scorm_buttons[4].set('disabled', (scorm_skipnext(scorm_current_node) == null));
+            scorm_buttons[0].set('disabled', (scorm_skipprev(scorm_current_node) == null || scorm_skipprev(scorm_current_node).title == null));
+            scorm_buttons[1].set('disabled', (scorm_prev(scorm_current_node) == null || scorm_prev(scorm_current_node).title == null));
+            scorm_buttons[2].set('disabled', (scorm_up(scorm_current_node) == null) || scorm_up(scorm_current_node).title == null);
+            scorm_buttons[3].set('disabled', (scorm_next(scorm_current_node) == null) || scorm_next(scorm_current_node).title == null);
+            scorm_buttons[4].set('disabled', (scorm_skipnext(scorm_current_node) == null || scorm_skipnext(scorm_current_node).title == null));
         };
 
         var scorm_resize_parent = function() {
index 8a4c0b3..700ea4f 100644 (file)
@@ -422,7 +422,7 @@ class scorm_basic_report extends scorm_default_report {
                                     if ($trackdata->score_raw != '') {
                                         $score = $trackdata->score_raw;
                                         // add max score if it exists
-                                        if ($scorm->version == 'SCORM_1.3') {
+                                        if (scorm_version_check($scorm->version, SCORM_13)) {
                                             $maxkey = 'cmi.score.max';
                                         } else {
                                             $maxkey = 'cmi.core.score.max';
index 411001d..b1a415c 100644 (file)
@@ -180,7 +180,7 @@ if (!empty($b)) {
     $table->width = '100%';
     $table->size = array('*', '*');
     $existelements = false;
-    if ($scorm->version == 'SCORM_1.3') {
+    if (scorm_version_check($scorm->version, SCORM_13)) {
         $elements = array(
                 'raw' => 'cmi.score.raw',
                 'min' => 'cmi.score.min',
index 6266308..a81f685 100644 (file)
@@ -535,6 +535,8 @@ class page_wiki_edit extends page_wiki {
         switch ($format) {
         case 'html':
             $data->newcontentformat = FORMAT_HTML;
+            // Append editor context to editor options, giving preference to existing context.
+            page_wiki_edit::$attachmentoptions = array_merge(array('context' => $this->modcontext), page_wiki_edit::$attachmentoptions);
             $data = file_prepare_standard_editor($data, 'newcontent', page_wiki_edit::$attachmentoptions, $this->modcontext, 'mod_wiki', 'attachments', $this->subwiki->id);
             break;
         default:
index 70870e8..486c278 100644 (file)
@@ -103,7 +103,14 @@ if ($edit and $canmanage) {
 
     $maxfiles       = $workshop->nattachments;
     $maxbytes       = $workshop->maxbytes;
-    $contentopts    = array('trusttext' => true, 'subdirs' => false, 'maxfiles' => $maxfiles, 'maxbytes' => $maxbytes);
+    $contentopts    = array(
+                        'trusttext' => true,
+                        'subdirs'   => false,
+                        'maxfiles'  => $maxfiles,
+                        'maxbytes'  => $maxbytes,
+                        'context'   => $workshop->context
+                      );
+
     $attachmentopts = array('subdirs' => true, 'maxfiles' => $maxfiles, 'maxbytes' => $maxbytes);
     $example        = file_prepare_standard_editor($example, 'content', $contentopts, $workshop->context,
                                         'mod_workshop', 'submission_content', $example->id);
index ec04384..1c960e2 100644 (file)
@@ -116,6 +116,9 @@ class workshop_accumulative_strategy implements workshop_strategy {
             $norepeats += self::ADDDIMS;
         }
 
+        // Append editor context to editor options, giving preference to existing context.
+        $this->descriptionopts = array_merge(array('context' => $PAGE->context), $this->descriptionopts);
+
         // prepare the embeded files
         for ($i = 0; $i < $nodimensions; $i++) {
             // prepare all editor elements
index 8fa7735..156eef8 100644 (file)
@@ -116,6 +116,9 @@ class workshop_comments_strategy implements workshop_strategy {
             $norepeats += self::ADDDIMS;
         }
 
+        // Append editor context to editor options, giving preference to existing context.
+        $this->descriptionopts = array_merge(array('context' => $PAGE->context), $this->descriptionopts);
+
         // prepare the embedded files
         for ($i = 0; $i < $nodimensions; $i++) {
             // prepare all editor elements
index 123160b..9fae313 100644 (file)
@@ -120,6 +120,9 @@ class workshop_numerrors_strategy implements workshop_strategy {
             $norepeats += self::ADDDIMS;
         }
 
+        // Append editor context to editor options, giving preference to existing context.
+        $this->descriptionopts = array_merge(array('context' => $PAGE->context), $this->descriptionopts);
+
         // prepare the embeded files
         for ($i = 0; $i < $nodimensions; $i++) {
             // prepare all editor elements
index 995a797..17b54c2 100644 (file)
@@ -126,6 +126,9 @@ class workshop_rubric_strategy implements workshop_strategy {
             $norepeats += self::ADDDIMS;
         }
 
+        // Append editor context to editor options, giving preference to existing context.
+        $this->descriptionopts = array_merge(array('context' => $this->workshop->context), $this->descriptionopts);
+
         // prepare the embeded files
         for ($i = 0; $i < $nodimensions; $i++) {
             // prepare all editor elements
index daf76d1..9e2c2cd 100644 (file)
@@ -124,7 +124,14 @@ if ($edit) {
 
     $maxfiles       = $workshop->nattachments;
     $maxbytes       = $workshop->maxbytes;
-    $contentopts    = array('trusttext' => true, 'subdirs' => false, 'maxfiles' => $maxfiles, 'maxbytes' => $maxbytes);
+    $contentopts    = array(
+                        'trusttext' => true,
+                        'subdirs'   => false,
+                        'maxfiles'  => $maxfiles,
+                        'maxbytes'  => $maxbytes,
+                        'context'   => $workshop->context
+                      );
+
     $attachmentopts = array('subdirs' => true, 'maxfiles' => $maxfiles, 'maxbytes' => $maxbytes);
     $submission     = file_prepare_standard_editor($submission, 'content', $contentopts, $workshop->context,
                                         'mod_workshop', 'submission_content', $submission->id);
index 8cdbfbd..dc3db4a 100644 (file)
@@ -394,6 +394,8 @@ class qformat_default {
 
             $question->createdby = $USER->id;
             $question->timecreated = time();
+            $question->modifiedby = $USER->id;
+            $question->timemodified = time();
 
             $question->id = $DB->insert_record('question', $question);
             if (isset($question->questiontextfiles)) {
@@ -595,7 +597,9 @@ class qformat_default {
         $question->image = "";
         $question->usecase = 0;
         $question->multiplier = array();
+        $question->questiontextformat = FORMAT_MOODLE;
         $question->generalfeedback = '';
+        $question->generalfeedbackformat = FORMAT_MOODLE;
         $question->correctfeedback = '';
         $question->partiallycorrectfeedback = '';
         $question->incorrectfeedback = '';
index d9db4bb..4e64c2f 100644 (file)
@@ -76,12 +76,11 @@ class qformat_aiken extends qformat_default {
                 }
                 if (preg_match('/^[A-Z][).][ \t]/', $nowline)) {
                     // A choice. Trim off the label and space, then save
-                    $question->answer[] = htmlspecialchars(trim(substr($nowline, 2)), ENT_NOQUOTES);
+                    $question->answer[] = $this->text_field(
+                            htmlspecialchars(trim(substr($nowline, 2)), ENT_NOQUOTES));
                     $question->fraction[] = 0;
-                    $question->feedback[] = '';
-                    continue;
-                }
-                if (preg_match('/^ANSWER:/', $nowline)) {
+                    $question->feedback[] = $this->text_field('');
+                } else if (preg_match('/^ANSWER:/', $nowline)) {
                     // The line that indicates the correct answer. This question is finised.
                     $ans = trim(substr($nowline, strpos($nowline, ':') + 1));
                     $ans = substr($ans, 0, 1);
@@ -97,15 +96,31 @@ class qformat_aiken extends qformat_default {
                     // Must be the first line of a new question, since no recognised prefix.
                     $question->qtype = MULTICHOICE;
                     $question->name = shorten_text(s($nowline), 50);
-                    $question->questiontext = s($nowline);
+                    $question->questiontext = htmlspecialchars(trim($nowline), ENT_NOQUOTES);
+                    $question->questiontextformat = FORMAT_HTML;
+                    $question->generalfeedback = '';
+                    $question->generalfeedbackformat = FORMAT_HTML;
                     $question->single = 1;
-                    $question->feedback[] = '';
+                    $question->answer = array();
+                    $question->fraction = array();
+                    $question->feedback = array();
+                    $question->correctfeedback = $this->text_field('');
+                    $question->partiallycorrectfeedback = $this->text_field('');
+                    $question->incorrectfeedback = $this->text_field('');
                 }
             }
         }
         return $questions;
     }
 
+    protected function text_field($text) {
+        return array(
+            'text' => htmlspecialchars(trim($text), ENT_NOQUOTES),
+            'format' => FORMAT_HTML,
+            'files' => array(),
+        );
+    }
+
     public function readquestion($lines) {
         //this is no longer needed but might still be called by default.php
         return;
diff --git a/question/format/aiken/simpletest/fixtures/questions.aiken.txt b/question/format/aiken/simpletest/fixtures/questions.aiken.txt
new file mode 100644 (file)
index 0000000..b8c24d4
--- /dev/null
@@ -0,0 +1,11 @@
+The Moodle project was started by:
+A) Petr Skoda
+B) Martin Dougiamas
+C) Eloy Lafuente
+D) Tim Hunt
+ANSWER: B
+
+Moodle's abilities include handling user input that includes <html class="cool"> & images:
+A) True
+B) False
+ANSWER: A
index f1a511e..f75a548 100644 (file)
@@ -567,22 +567,25 @@ class rating_manager {
         $params['component']    = $options->component;
         $params['ratingarea'] = $options->ratingarea;
 
-        $sql = "SELECT r.itemid, r.component, r.ratingarea, r.contextid,
-                       $aggregatestr(r.rating) AS aggrrating, COUNT(r.rating) AS numratings,
-                       ur.id, ur.userid, ur.scaleid, ur.rating AS usersrating
+        $sql = "SELECT r.id, r.itemid, r.userid, r.scaleid, r.rating AS usersrating
+                  FROM {rating} r
+                 WHERE r.userid = :userid AND
+                       r.contextid = :contextid AND
+                       r.itemid {$itemidtest} AND
+                       r.component = :component AND
+                       r.ratingarea = :ratingarea
+              ORDER BY r.itemid";
+        $userratings = $DB->get_records_sql($sql, $params);
+
+        $sql = "SELECT r.itemid, $aggregatestr(r.rating) AS aggrrating, COUNT(r.rating) AS numratings
                   FROM {rating} r
-             LEFT JOIN {rating} ur ON ur.contextid = r.contextid AND
-                                      ur.itemid = r.itemid AND
-                                      ur.component = r.component AND
-                                      ur.ratingarea = r.ratingarea AND
-                                      ur.userid = :userid
                  WHERE r.contextid = :contextid AND
                        r.itemid {$itemidtest} AND
                        r.component = :component AND
                        r.ratingarea = :ratingarea
-              GROUP BY r.itemid, r.component, r.ratingarea, r.contextid, ur.id, ur.userid, ur.scaleid
+              GROUP BY r.itemid, r.component, r.ratingarea, r.contextid
               ORDER BY r.itemid";
-        $ratingsrecords = $DB->get_records_sql($sql, $params);
+        $aggregateratings = $DB->get_records_sql($sql, $params);
 
         $ratingoptions = new stdClass;
         $ratingoptions->context = $options->context;
@@ -590,25 +593,37 @@ class rating_manager {
         $ratingoptions->ratingarea = $options->ratingarea;
         $ratingoptions->settings = $this->generate_rating_settings_object($options);
         foreach ($options->items as $item) {
-            if (array_key_exists($item->{$itemidcol}, $ratingsrecords)) {
-                // Note: rec->scaleid = the id of scale at the time the rating was submitted
-                // may be different from the current scale id
-                $rec = $ratingsrecords[$item->{$itemidcol}];
+            $founduserrating = false;
+            foreach($userratings as $userrating) {
+                //look for an existing rating from this user of this item
+                if ($item->{$itemidcol} == $userrating->itemid) {
+                    // Note: rec->scaleid = the id of scale at the time the rating was submitted
+                    // may be different from the current scale id
+                    $ratingoptions->scaleid = $userrating->scaleid;
+                    $ratingoptions->userid = $userrating->userid;
+                    $ratingoptions->id = $userrating->id;
+                    $ratingoptions->rating = min($userrating->usersrating, $ratingoptions->settings->scale->max);
+
+                    $founduserrating = true;
+                    break;
+                }
+            }
+            if (!$founduserrating) {
+                $ratingoptions->scaleid = null;
+                $ratingoptions->userid = null;
+                $ratingoptions->id = null;
+                $ratingoptions->rating =  null;
+            }
+
+            if (array_key_exists($item->{$itemidcol}, $aggregateratings)) {
+                $rec = $aggregateratings[$item->{$itemidcol}];
                 $ratingoptions->itemid = $item->{$itemidcol};
-                $ratingoptions->scaleid = $rec->scaleid;
-                $ratingoptions->userid = $rec->userid;
-                $ratingoptions->id = $rec->id;
                 $ratingoptions->aggregate = min($rec->aggrrating, $ratingoptions->settings->scale->max);
                 $ratingoptions->count = $rec->numratings;
-                $ratingoptions->rating = min($rec->usersrating, $ratingoptions->settings->scale->max);
             } else {
                 $ratingoptions->itemid = $item->{$itemidcol};
-                $ratingoptions->scaleid = null;
-                $ratingoptions->userid = null;
-                $ratingoptions->id = null;
                 $ratingoptions->aggregate = null;
                 $ratingoptions->count = 0;
-                $ratingoptions->rating =  null;
             }
 
             $rating = new rating($ratingoptions);
diff --git a/rating/simpletest/testrating.php b/rating/simpletest/testrating.php
new file mode 100644 (file)
index 0000000..910544c
--- /dev/null
@@ -0,0 +1,225 @@
+<?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/>.
+
+/**
+ * Unit tests for rating/lib.php
+ *
+ * @package    moodlecore
+ * @subpackage rating
+ * @copyright  2011 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com}
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+defined('MOODLE_INTERNAL') || die();
+
+// Include all the needed stuff
+require_once($CFG->dirroot . '/rating/lib.php');
+
+/**
+ * Unit test case for all the rating/lib.php requiring DB mockup & manipulation
+ */
+class rating_db_test extends UnitTestCaseUsingDatabase {
+
+    public static $includecoverage = array(
+        'rating/lib.php'
+    );
+
+    protected $testtables = array(
+            'lib' => array(
+                'rating', 'scale'));
+
+    public function setUp() {
+        parent::setUp();
+
+        $this->switch_to_test_db(); // Switch to test DB for all the execution
+
+        foreach ($this->testtables as $dir => $tables) {
+            $this->create_test_tables($tables, $dir); // Create tables
+        }
+    }
+
+    /**
+     * Test the current get_ratings method main sql
+     */
+    function test_get_ratings_sql() {
+
+        // We load 3 items. Each is rated twice. For simplicity itemid == user id of the item owner
+        $ctxid = SYSCONTEXTID;
+        $this->load_test_data('rating',
+                array('contextid', 'component', 'ratingarea', 'itemid', 'scaleid', 'rating', 'userid', 'timecreated', 'timemodified'), array(
+
+                //user 1's items. Average == 2
+                array(    $ctxid , 'mod_forum',       'post',       1 ,       10 ,       1 ,       2 ,            1 ,              1),
+                array(    $ctxid , 'mod_forum',       'post',       1 ,       10 ,       3 ,       3 ,            1 ,              1),
+
+                //user 2's items. Average == 3
+                array(    $ctxid , 'mod_forum',       'post',       2 ,       10 ,       1 ,       1 ,            1 ,              1),
+                array(    $ctxid , 'mod_forum',       'post',       2 ,       10 ,       5 ,       3 ,            1 ,              1),
+
+                //user 3's items. Average == 4
+                array(    $ctxid , 'mod_forum',       'post',       3 ,       10 ,       3 ,       1 ,            1 ,              1),
+                array(    $ctxid , 'mod_forum',       'post',       3 ,       10 ,       5 ,       2 ,            1 ,              1)
+                ));
+
+        // a post (item) by user 1 (rated above by user 2 and 3 with average = 2)
+        $user1posts = array(
+                (object)array('id' => 1, 'userid' => 1, 'message' => 'hello'));
+        // a post (item) by user 2 (rated above by user 1 and 3 with average = 3)
+        $user2posts = array(
+                (object)array('id' => 2, 'userid' => 2, 'message' => 'world'));
+        // a post (item) by user 3 (rated above by user 1 and 2 with average = 4)
+        $user3posts = array(
+                (object)array('id' => 3, 'userid' => 3, 'message' => 'moodle'));
+
+        // Prepare the default options
+        $defaultoptions = array (
+                'context'    => get_context_instance(CONTEXT_SYSTEM),
+                'component'  => 'mod_forum',
+                'ratingarea' => 'post',
+                'scaleid'    => 10,
+                'aggregate'  => RATING_AGGREGATE_AVERAGE);
+
+        $rm = new rating_manager();
+
+        // STEP 1: Retreive ratings using the current user
+
+        // Get results for user 1's item (expected average 1 + 3 / 2 = 2)
+        $toptions = (object)array_merge($defaultoptions, array('items' => $user1posts));
+        $result = $rm->get_ratings($toptions);
+        $this->assertEqual(count($result), count($user1posts));
+        $this->assertEqual($result[0]->id, $user1posts[0]->id);
+        $this->assertEqual($result[0]->userid, $user1posts[0]->userid);
+        $this->assertEqual($result[0]->message, $user1posts[0]->message);
+        $this->assertEqual($result[0]->rating->count, 2);
+        $this->assertEqual($result[0]->rating->aggregate, 2);
+        // Note that $result[0]->rating->rating is somewhat random
+        // We didn't supply a user ID so $USER was used which will vary depending on who runs the tests
+
+        // Get results for items of user 2 (expected average 1 + 5 / 2 = 3)
+        $toptions = (object)array_merge($defaultoptions, array('items' => $user2posts));
+        $result = $rm->get_ratings($toptions);
+        $this->assertEqual(count($result), count($user2posts));
+        $this->assertEqual($result[0]->id, $user2posts[0]->id);
+        $this->assertEqual($result[0]->userid, $user2posts[0]->userid);
+        $this->assertEqual($result[0]->message, $user2posts[0]->message);
+        $this->assertEqual($result[0]->rating->count, 2);
+        $this->assertEqual($result[0]->rating->aggregate, 3);
+        // Note that $result[0]->rating->rating is somewhat random
+        // We didn't supply a user ID so $USER was used which will vary depending on who runs the tests
+
+        // Get results for items of user 3 (expected average 3 + 5 / 2 = 4)
+        $toptions = (object)array_merge($defaultoptions, array('items' => $user3posts));
+        $result = $rm->get_ratings($toptions);
+        $this->assertEqual(count($result), count($user3posts));
+        $this->assertEqual($result[0]->id, $user3posts[0]->id);
+        $this->assertEqual($result[0]->userid, $user3posts[0]->userid);
+        $this->assertEqual($result[0]->message, $user3posts[0]->message);
+        $this->assertEqual($result[0]->rating->count, 2);
+        $this->assertEqual($result[0]->rating->aggregate, 4);
+        // Note that $result[0]->rating->rating is somewhat random
+        // We didn't supply a user ID so $USER was used which will vary depending on who runs the tests
+
+        // Get results for items of user 1 & 2 together (expected averages are 2 and 3, as tested above)
+        $posts = array_merge($user1posts, $user2posts);
+        $toptions = (object)array_merge($defaultoptions, array('items' => $posts));
+        $result = $rm->get_ratings($toptions);
+        $this->assertEqual(count($result), count($posts));
+        $this->assertEqual($result[0]->id, $posts[0]->id);
+        $this->assertEqual($result[0]->userid, $posts[0]->userid);
+        $this->assertEqual($result[0]->message, $posts[0]->message);
+        $this->assertEqual($result[0]->rating->count, 2);
+        $this->assertEqual($result[0]->rating->aggregate, 2);
+        // Note that $result[0]->rating->rating is somewhat random
+        // We didn't supply a user ID so $USER was used which will vary depending on who runs the tests
+
+        $this->assertEqual($result[1]->id, $posts[1]->id);
+        $this->assertEqual($result[1]->userid, $posts[1]->userid);
+        $this->assertEqual($result[1]->message, $posts[1]->message);
+        $this->assertEqual($result[1]->rating->count, 2);
+        $this->assertEqual($result[1]->rating->aggregate, 3);
+        // Note that $result[0]->rating->rating is somewhat random
+        // We didn't supply a user ID so $USER was used which will vary depending on who runs the tests
+
+        // STEP 2: Retrieve ratings by a specified user
+        //         We still expect complete aggregations and counts
+
+        // Get results for items of user 1 rated by user 2 (avg 2, rating 1)
+        $toptions = (object)array_merge($defaultoptions, array('items' => $user1posts, 'userid' => 2));
+        $result = $rm->get_ratings($toptions);
+        $this->assertEqual(count($result), count($user1posts));
+        $this->assertEqual($result[0]->id, $user1posts[0]->id);
+        $this->assertEqual($result[0]->userid, $user1posts[0]->userid);
+        $this->assertEqual($result[0]->message, $user1posts[0]->message);
+        $this->assertEqual($result[0]->rating->count, 2);
+        $this->assertEqual($result[0]->rating->aggregate, 2);
+        $this->assertEqual($result[0]->rating->rating, 1); //user 2 rated user 1 "1"
+        $this->assertEqual($result[0]->rating->userid, $toptions->userid); // Must be the passed userid
+
+        // Get results for items of user 1 rated by user 3
+        $toptions = (object)array_merge($defaultoptions, array('items' => $user1posts, 'userid' => 3));
+        $result = $rm->get_ratings($toptions);
+        $this->assertEqual(count($result), count($user1posts));
+        $this->assertEqual($result[0]->id, $user1posts[0]->id);
+        $this->assertEqual($result[0]->userid, $user1posts[0]->userid);
+        $this->assertEqual($result[0]->message, $user1posts[0]->message);
+        $this->assertEqual($result[0]->rating->count, 2);
+        $this->assertEqual($result[0]->rating->aggregate, 2);
+        $this->assertEqual($result[0]->rating->rating, 3); //user 3 rated user 1 "3"
+        $this->assertEqual($result[0]->rating->userid, $toptions->userid); // Must be the passed userid
+
+        // Get results for items of user 1 & 2 together rated by user 3
+        $posts = array_merge($user1posts, $user2posts);
+        $toptions = (object)array_merge($defaultoptions, array('items' => $posts, 'userid' => 3));
+        $result = $rm->get_ratings($toptions);
+        $this->assertEqual(count($result), count($posts));
+        $this->assertEqual($result[0]->id, $posts[0]->id);
+        $this->assertEqual($result[0]->userid, $posts[0]->userid);
+        $this->assertEqual($result[0]->message, $posts[0]->message);
+        $this->assertEqual($result[0]->rating->count, 2);
+        $this->assertEqual($result[0]->rating->aggregate, 2);
+        $this->assertEqual($result[0]->rating->rating, 3); //user 3 rated user 1 "3"
+        $this->assertEqual($result[0]->rating->userid, $toptions->userid); // Must be the passed userid
+
+        $this->assertEqual($result[1]->id, $posts[1]->id);
+        $this->assertEqual($result[1]->userid, $posts[1]->userid);
+        $this->assertEqual($result[1]->message, $posts[1]->message);
+        $this->assertEqual($result[1]->rating->count, 2);
+        $this->assertEqual($result[1]->rating->aggregate, 3);
+        $this->assertEqual($result[0]->rating->rating, 3); //user 3 rated user 2 "5"
+        $this->assertEqual($result[1]->rating->userid, $toptions->userid); // Must be the passed userid
+
+        // STEP 3: Some special cases
+
+        // Get results for user 1's items (expected average 1 + 3 / 2 = 2)
+        // supplying a non-existent user id so no rating from that user should be found
+        $toptions = (object)array_merge($defaultoptions, array('items' => $user1posts));
+        $toptions->userid = 123456; //non-existent user
+        $result = $rm->get_ratings($toptions);
+        $this->assertNull($result[0]->rating->userid);
+        $this->assertNull($result[0]->rating->rating);
+        $this->assertEqual($result[0]->rating->aggregate, 2);//should still get the aggregate
+
+        // Get results for items of user 2 (expected average 1 + 5 / 2 = 3)
+        // Supplying the user id of the user who owns the items so no rating should be found
+        $toptions = (object)array_merge($defaultoptions, array('items' => $user2posts));
+        $toptions->userid = 2; //user 2 viewing the ratings of their own item
+        $result = $rm->get_ratings($toptions);
+        //these should be null as the user is viewing their own item and thus cannot rate
+        $this->assertNull($result[0]->rating->userid);
+        $this->assertNull($result[0]->rating->rating);
+        $this->assertEqual($result[0]->rating->aggregate, 3);//should still get the aggregate
+    }
+}
index ab374d6..4f36475 100644 (file)
@@ -99,10 +99,6 @@ class repository_local extends repository {
                         continue;
                     }
                     $params = $child->get_params();
-                    $subdir_children = $child->get_children();
-                    //if (empty($subdir_children)) {
-                        //continue;
-                    //}
                     $encodedpath = base64_encode(serialize($params));
                     // hide user_private area from local plugin, user should
                     // use private file plugin to access private files
index 306d557..66fd0fb 100644 (file)
@@ -77,7 +77,12 @@ if (can_use_html_editor()) {
 
 $errorstring = '';
 
-$editoroptions = array('maxfiles'=>EDITOR_UNLIMITED_FILES, 'maxbytes'=>$CFG->maxbytes, 'trusttext'=>false);
+$editoroptions = array(
+    'maxfiles'  => EDITOR_UNLIMITED_FILES,
+    'maxbytes'  => $CFG->maxbytes,
+    'trusttext' => false,
+    'context'   => $systemcontext
+);
 $tag = file_prepare_standard_editor($tag, 'description', $editoroptions, $systemcontext, 'tag', 'description', $tag->id);
 
 $tagform = new tag_edit_form(null, compact('editoroptions'));
index c98d588..671d2ee 100644 (file)
@@ -223,29 +223,25 @@ html, body {background-color:#C8C9C7;}
 .dir-rtl #page-header .navbar .navbutton {float:left;}
 
 /** Custom menu **/
-/*YUI Reset */
-.yui3-skin-sam #page .yui3-menu-horizontal .yui3-menu-content,
-.yui3-skin-sam #page .yui3-menu-horizontal .yui3-menu-label,
-.yui3-skin-sam #page .yui3-menu-horizontal .yui3-menu-label-active,
-.yui3-skin-sam #page .yui3-menu-horizontal .yui3-menuitem-active .yui3-menuitem-content,
-.yui3-skin-sam #page .yui3-menu-horizontal .yui3-menu-label-menuvisible {background-position: -10000px -10000px;}
-.yui3-skin-sam #page .yui3-menu-label,
-.yui3-skin-sam #page .yui3-menu .yui3-menu .yui3-menu-label,
-.yui3-skin-sam #page .yui3-menubuttonnav .yui3-menu-label em { background-position: right center; }
-.yui3-skin-sam #page .yui3-splitbuttonnav .yui3-menu-label .yui3-menu-toggle {background-position: 3px center;}
-.yui3-skin-sam #page .yui3-splitbuttonnav .yui3-menu-label-menuvisible .yui3-menu-toggle {background-position: 0% 50%;}
-#custommenu {clear: both;padding-left: 4px;margin-bottom: 0px;padding-bottom: 2px;}
-.yui3-skin-sam #page .yui3-menu-label,
-.yui3-skin-sam #page .yui3-menuitem-content  {color: #fff;font-weight: 800;line-height: 30px;}
-.yui3-skin-sam #page .custom_menu_submenu .yui3-menu-label,
-.yui3-skin-sam #page .custom_menu_submenu .yui3-menuitem-content {color: #000 !important;text-shadow: none !important;line-height: 25px;}
-.yui3-skin-sam #page .yui3-menu-label.yui3-menu-label-active,
-.yui3-skin-sam #page .yui3-menuitem-active .yui3-menuitem-content {color: #000;background-color: #697F55;}
-.yui3-skin-sam #page .yui3-menu-content,
-.yui3-skin-sam #page .yui3-menu .yui3-menu .yui3-menu-content,
-.yui3-skin-sam #page .yui3-menu-horizontal .yui3-menu-label,
-.yui3-skin-sam #page .yui3-menu-horizontal .yui3-menuitem-content  {border: none !important;}
-.yui3-skin-sam .yui3-menu-horizontal .yui3-menu-label,
-.yui3-skin-sam .yui3-menu-horizontal .yui3-menuitem-content {border-color:#808080;border-style:solid;border-width:0px 0;}
-
-#page .custom_menu_submenu {border: 1px solid #697F55 !important;-webkit-border-bottom-right-radius: 5px;-webkit-border-bottom-left-radius: 5px;-moz-border-radius-bottomright: 5px;-moz-border-radius-bottomleft: 5px;border-bottom-right-radius: 5px;border-bottom-left-radius: 5px;}
+#custommenu {margin-bottom: 0;}
+
+#custommenu .yui3-menu-horizontal .yui3-menu-content,
+#custommenu .yui3-menu-horizontal.javascript-disabled .yui3-menu-content,
+#custommenu .yui3-menu-horizontal .yui3-menu-content ul,
+#custommenu .yui3-menu-horizontal.javascript-disabled .yui3-menu-content ul,
+#custommenu .yui3-menu-horizontal.javascript-disabled .yui3-menu-content li li:hover > a,
+#custommenu .yui3-menu-horizontal .yui3-menu-label,
+#custommenu .yui3-menuitem,
+#custommenu .yui3-menuitem .yui3-menuitem-content {border-width: 0;}
+
+#custommenu .yui3-menu .yui3-menu-label,
+#custommenu .yui3-menu .yui3-menuitem-content {color: #FFF;font-weight: bold;line-height:30px;padding:0 14px;}
+
+#custommenu .custom_menu_submenu .yui3-menu-content{background-color: #3A4D28;}
+
+#custommenu .custom_menu_submenu .yui3-menu-label,
+#custommenu .custom_menu_submenu .yui3-menuitem-content {line-height: 25px;padding:0 20px;}
+
+#custommenu .yui3-menu-label-active,
+#custommenu .yui3-menu-label-menuvisible,
+#custommenu .yui3-menu .yui3-menu .yui3-menuitem-active .yui3-menuitem-content {background-color: #697F55;}
\ No newline at end of file
index 87037cf..c2b442a 100644 (file)
@@ -245,78 +245,57 @@ h2.headingblock {
     margin-top:30px;
 }
 
-/*YUI Reset */
-/*full menu bar */
-.yui3-skin-sam .yui3-menu-horizontal .yui3-menu-content {
-    background: none !important;
-}
-/*single items */
-.yui3-skin-sam .yui3-menu-horizontal .yui3-menu-label {
-    background: none !important;
-}
-/*active items */
-.yui3-skin-sam .yui3-menu-horizontal .yui3-menu-label-active, .yui3-skin-sam .yui3-menu-horizontal .yui3-menuitem-active .yui3-menuitem-content, .yui3-skin-sam .yui3-menu-horizontal .yui3-menu-label-menuvisible {
-    background: #f9f9f9 !important;
-    border-color:inherit;
-}
-
-#custommenu .yui3-menu-horizontal,
-#custommenu .yui3-menu-horizontal.javascript-disabled {
-    padding-left:100px;
-    border-bottom:1px solid #DDD;
-    background-color:#EEE;
-}
-
 .has-custom-menu #wrapper,
 #custommenu .yui3-menu-horizontal .yui3-menu-content,
 #custommenu .yui3-menu-horizontal.javascript-disabled .yui3-menu-content,
 #custommenu .yui3-menu-horizontal .yui3-menu-content ul,
 #custommenu .yui3-menu-horizontal.javascript-disabled .yui3-menu-content ul,
-#custommenu .yui3-menu-horizontal.javascript-disabled .yui3-menu-content li li:hover > a {
-    border-width:0;
+#custommenu .yui3-menu-horizontal.javascript-disabled .yui3-menu-content li li:hover > a,
+#custommenu .yui3-menu-horizontal .yui3-menu-label,
+#custommenu .yui3-menuitem,
+#custommenu .yui3-menuitem .yui3-menuitem-content {
+    border-width: 0;
 }
 
-#custommenu .yui3-menu-horizontal .yui3-menu-content ul ul,
-#custommenu .yui3-menu-horizontal.javascript-disabled .yui3-menu-content ul ul {
-    background-color:#F9F9F9;
-    border:1px solid #DDD;
-    border-top-width:0;
+#custommenu {
+    padding-left:100px;
+    border-bottom:1px solid #DDD;
+    background-color:#EEE;
 }
 
-#custommenu .yui3-menu-horizontal .yui3-menu-content li a {
-    display:block;
-    height:24px;
-    vertical-align: bottom;
-    padding:5px 10px 0 10px;
-    cursor:pointer;
+#custommenu .yui3-menu-content {
+    background-color: transparent;
 }
 
-#custommenu .yui3-menu-horizontal .yui3-menu-content li:hover,
-#custommenu .yui3-menu-horizontal .yui3-menu-content .yui3-menu-label-active {
-    background-color:#F9F9F9;
+#custommenu .yui3-menu .yui3-menu-label,
+#custommenu .yui3-menu .yui3-menuitem-content {
+    color:#F25F0F;
+    line-height:24px;
+    padding: 5px 10px;
 }
 
-#custommenu .yui3-menu-horizontal.javascript-disabled .yui3-menu-content li:hover > a {
-    border-left:1px solid #DDD;
-    border-right:1px solid #DDD;
-    padding:5px 9px 0 9px;
+#custommenu .custom_menu_submenu .yui3-menu-label,
+#custommenu .custom_menu_submenu .yui3-menuitem-content {
+    padding: 5px 20px;
 }
 
-.yui3-skin-sam #custommenu .yui3-menu-label,
-.yui3-skin-sam #custommenu .yui3-menu .yui3-menu .yui3-menu-label,
-.yui3-skin-sam #custommenu  .yui3-menuitem-content,
-.yui3-skin-sam #custommenu .yui3-menu .yui3-menu .yui3-menuitem-content {
-    color:#F25F0F;
-    border-width:0;
-    padding-right: 25px;
+#custommenu .custom_menu_submenu .yui3-menu-content,
+#custommenu .yui3-menu-label-active,
+#custommenu .yui3-menu-label-menuvisible {
+    background-color: #f9f9f9;
 }
 
-.yui3-skin-sam #custommenu .yui3-menu-content,
-.yui3-skin-sam #custommenu .yui3-menu .yui3-menu .yui3-menu-content {
-    padding:0;
+#custommenu .custom_menu_submenu .yui3-menu-label-active,
+#custommenu .custom_menu_submenu .yui3-menu-label-menuvisible,
+#custommenu .yui3-menu .yui3-menu .yui3-menuitem-active .yui3-menuitem-content {
+    background-color: #fefefe;
 }
 
-#custommenu .yui3-menu-horizontal.javascript-disabled .yui3-menu-content li li:hover,
-.yui3-skin-sam #custommenu .yui3-menu .custom_menu_submenu .yui3-menuitem.yui3-menuitem-active .yui3-menuitem-content, #custommenu .yui3-menu-horizontal .custom_menu_submenu .yui3-menu-content .yui3-menu-label-active {
-    background-color:#FFF !important;
+#custommenu .custom_menu_submenu .yui3-menu-content {
+    border-left:1px solid #DDD;
+    border-right:1px solid #DDD;
+    border-bottom:1px solid #DDD;
+}
+#custommenu .custom_menu_submenu .custom_menu_submenu .yui3-menu-content {
+    border-top:1px solid #DDD;
 }
\ No newline at end of file
diff --git a/theme/base/pix/horizontal-menu-submenu-indicator.png b/theme/base/pix/horizontal-menu-submenu-indicator.png
new file mode 100644 (file)
index 0000000..2ef3454
Binary files /dev/null and b/theme/base/pix/horizontal-menu-submenu-indicator.png differ
diff --git a/theme/base/pix/vertical-menu-submenu-indicator.png b/theme/base/pix/vertical-menu-submenu-indicator.png
new file mode 100644 (file)
index 0000000..4f4cf99
Binary files /dev/null and b/theme/base/pix/vertical-menu-submenu-indicator.png differ
index 3984fbd..c238b19 100644 (file)
@@ -2,6 +2,8 @@
 .block .header h2 {margin:4px;}
 .block .header .block_action {float:right;margin:0 4px;vertical-align:top;}
 .block .header .block_action input {margin-right:2px;}
+.block .header .commands {margin-left:4px;}
+.block .header .commands .icon img {width:11px;height:11px;margin-right:1px;}
 .block .content {padding:4px;}
 .block.hidden .content {display: none;}
 .block .content .userpicture {width:16px;height:16px;margin-right:4px;}
index 30f86c0..62a5bfe 100644 (file)
@@ -572,6 +572,7 @@ body.tag .managelink {padding: 5px;}
 #custommenu .yui3-menu-horizontal.javascript-disabled .yui3-menu-content .ul {border:1px solid #000;}
 #custommenu .yui3-menu-horizontal.javascript-disabled ul {margin:0;padding:0;}
 #custommenu .yui3-menu-horizontal.javascript-disabled li {margin:0;padding:0;list-style:none;width:auto;position:relative;}
+#custommenu .yui3-menu-horizontal.javascript-disabled .yui3-menu .yui3-menu-label {padding-right:20px;}
 #custommenu .yui3-menu-horizontal.javascript-disabled>.yui3-menu-content>ul>li {float:left;}
 #custommenu .yui3-menu-horizontal.javascript-disabled li a {padding:0 10px;}
 #custommenu .yui3-menu-horizontal.javascript-disabled .yui3-menu {position:absolute;top:-10000px;left:-10000px;visibility:hidden;white-space: nowrap;max-width: 250px;background-color:#FFF;}
@@ -581,6 +582,20 @@ body.tag .managelink {padding: 5px;}
 #custommenu .yui3-menu-horizontal.javascript-disabled .yui3-menu-content {font-size:93%;line-height:2;padding:0;}
 #custommenu .yui3-menu-horizontal.javascript-disabled .yui3-menu-content .yui3-menu-content {font-size:100%;}
 
+/**
+ * Fix for broken YUI images in the menunav component
+ */
+#custommenu .yui3-menu-label,
+#custommenu .yui3-menuitem-content {cursor:pointer;}
+#custommenu .yui3-menuitem-active {background-color:#B3D4FF;}
+#custommenu .yui3-menuitem-active,
+#custommenu .yui3-menuitem-active .yui3-menuitem-content,
+#custommenu .yui3-menu-horizontal .yui3-menu-label,
+#custommenu .yui3-menu-horizontal .yui3-menu-content {background-image:none;background-position:right center;background-repeat:no-repeat;}
+#custommenu .yui3-menu-label,
+#custommenu .yui3-menu .yui3-menu .yui3-menu-label {background-image:url([[pix:theme|vertical-menu-submenu-indicator]]);}
+#custommenu .yui3-menu .yui3-menu .yui3-menu-label-menuvisible {background-image:url([[pix:theme|horizontal-menu-submenu-indicator]]);}
+
 /**
  * Smart Select Element
  */
@@ -694,12 +709,6 @@ body.tag .managelink {padding: 5px;}
  */
 .ie.dir-rtl .mform .fitem .felement {margin-right:0;text-align:right;float:right;}
 
-/**
- * Fix for broken YUI images in the menunav component
- */
-.yui3-skin-sam .yui3-menu-horizontal .yui3-menu-label,
-.yui3-skin-sam .yui3-menu-horizontal .yui3-menu-content {background-image:none;}
-
 .mod-indent-1 {margin-left:20px;}
 .mod-indent-2 {margin-left:40px;}
 .mod-indent-3 {margin-left:60px;}
@@ -800,4 +809,4 @@ ul li,
 .course-content ul.topics .content .summary ul li {list-style: disc outside none;}
 ol li,
 .course-content ul.weeks .content .summary ol li,
-.course-content ul.topics .content .summary ol li {list-style: decimal outside none;}
\ No newline at end of file
+.course-content ul.topics .content .summary ol li {list-style: decimal outside none;}
index fba723d..1f175ec 100644 (file)
@@ -275,67 +275,49 @@ body.has_dock {
 #custommenu .yui3-menu-horizontal .yui3-menu-content ul,
 #custommenu .yui3-menu-horizontal.javascript-disabled .yui3-menu-content ul,
 #custommenu .yui3-menu-horizontal.javascript-disabled .yui3-menu-content li li:hover > a,
-#custommenu .yui3-menu-horizontal .yui3-menu-label, .yui3-skin-sam .yui3-menu-horizontal .yui3-menuitem-content {
-    border-width:0;
+#custommenu .yui3-menu-horizontal .yui3-menu-label,
+#custommenu .yui3-menuitem,
+#custommenu .yui3-menuitem .yui3-menuitem-content {
+    border-width: 0;
 }
 
-/*YUI Reset */
-/*full menu bar */
-.yui3-skin-sam .yui3-menu-horizontal .yui3-menu-content {
-    background: none !important;
-}
-/*single items */
-.yui3-skin-sam .yui3-menu-horizontal .yui3-menu-label {
-    background: none !important;
-}
-/*active items */
-.yui3-skin-sam .yui3-menu-horizontal .yui3-menu-label-active, .yui3-skin-sam .yui3-menu-horizontal .yui3-menuitem-active .yui3-menuitem-content, .yui3-skin-sam .yui3-menu-horizontal .yui3-menu-label-menuvisible {
-    background: none !important;
-    border-color:inherit;
-}
 
-.yui3-menuitem, .yui3-menuitem .yui3-menuitem-content {
-    border: none !important;
-}
+#custommenu .yui3-menu .yui3-menu {background-color:#F9F9F9;border:1px solid #F14E16;}
 
-#custommenu .yui3-menu-horizontal .yui3-menu-content ul ul,
-#custommenu .yui3-menu-horizontal.javascript-disabled .yui3-menu-content ul ul {
-    background-color:#F9F9F9;
-    border:1px solid #F14E16;
-    border-top-width:0;
+#custommenu .yui3-menu .yui3-menu-label,
+#custommenu .yui3-menu .yui3-menuitem-content {
+    color: #FFF;
 }
-
-#custommenu .yui3-menu-horizontal .yui3-menu-content .yui3-menu-label, .yui3-menuitem .yui3-menuitem-content, .yui3-menuitem {
-    color:#FFF !important;
+#custommenu .yui3-menu .yui3-menu .yui3-menu-label,
+#custommenu .yui3-menu .yui3-menu .yui3-menuitem-content {
+    color: #000;
+}
+#custommenu .yui3-menuitem-active .yui3-menuitem-content {
+    color: #F14E16
 }
 
-.yui3-skin-sam #custommenu .yui3-menu-content,
-.yui3-skin-sam #custommenu .yui3-menu .yui3-menu .yui3-menu-content {
+#custommenu .yui3-menu-content,
+#custommenu .yui3-menu .yui3-menu .yui3-menu-content {
     padding:0;
 }
 
-#custommenu .custom_menu_submenu .yui3-menu-content .yui3-menu-label, .custom_menu_submenu .yui3-menuitem .yui3-menuitem-content {
-    color: #000 !important;
+#custommenu .yui3-menu-label-active,
+#custommenu .yui3-menu-label-menuvisible,
+#custommenu .yui3-menu .yui3-menu .yui3-menuitem-active .yui3-menuitem-content {
+    background-color:#F14E16;
+    color:#FFF;
 }
 
-#custommenu .yui3-menu-horizontal.javascript-disabled .yui3-menu-content li li:hover,
-#custommenu .yui3-menu-horizontal.javascript-disabled .yui3-menu-content li li:hover a,
-.yui3-skin-sam #custommenu .yui3-menu .custom_menu_submenu .yui3-menuitem.yui3-menuitem-active .yui3-menuitem-content {
-    background-color:#F14E16 !important;
-    color:#FFF !important;
+#custommenu .yui3-menuitem-active .yui3-menuitem-content {
+    background-color: #F9F9F9;
 }
 
-.yui3-skin-sam .yui3-menu-label-active,
-.yui3-skin-sam .yui3-menu-label-menuvisible,
-.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu-label-active,
-.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu-label-menuvisible, #custommenu .custom_menu_submenu .yui3-menu-content .yui3-menu-label-active, #custommenu .custom_menu_submenu .yui3-menu-content .yui3-menu-label-menuvisible {
-    background-color:#F14E16 !important;
-    color:#FFF !important;
-}
 
-#custommenu .yui3-menu-horizontal .yui3-menu-content li a {
-    cursor:pointer;
+#custommenu .yui3-menu-horizontal.javascript-disabled .yui3-menu-content li li:hover,
+#custommenu .yui3-menu-horizontal.javascript-disabled .yui3-menu-content li li:hover a {
+    background-color:#F14E16;
+    color:#FFF;
 }
 
 .pagelayout-redirect #content p,
-.pagelayout-redirect #content div {color:#FFF;}
\ No newline at end of file
+.pagelayout-redirect #content div {color:#FFF;}
index 448e676..a5b9c57 100644 (file)
@@ -1053,9 +1053,12 @@ h2.headingblock {
 }
 
 .myclear {
-       clear: both;
+    clear: both;
 }
 
+#custommenu {
+    overflow:hidden;
+}
 #custommenu .yui3-menu-horizontal .yui3-menu-content,
 #custommenu .yui3-menu-horizontal.javascript-disabled .yui3-menu-content,
 #custommenu .yui3-menu-horizontal .yui3-menu-content ul,
@@ -1072,24 +1075,23 @@ h2.headingblock {
 
 #custommenu .yui3-menu-horizontal.javascript-disabled .yui3-menu-content li li:hover,
 #custommenu .yui3-menu-horizontal.javascript-disabled .yui3-menu-content li li:hover a,
-.yui3-skin-sam #custommenu .yui3-menu .yui3-menuitem.yui3-menuitem-active .yui3-menuitem-content {
+#custommenu .yui3-menu .yui3-menuitem.yui3-menuitem-active .yui3-menuitem-content {
     background-color:#4E6632;
 }
 
-.yui3-skin-sam .yui3-menu-label-active,
-.yui3-skin-sam .yui3-menu-label-menuvisible,
-.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu-label-active,
-.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu-label-menuvisible {
-       background-color:#4E6632;
+#custommenu .yui3-menu-label-active,
+#custommenu .yui3-menu-label-menuvisible,
+#custommenu .yui3-menu .yui3-menu .yui3-menu-label-active,
+#custommenu .yui3-menu .yui3-menu .yui3-menu-label-menuvisible {
+     background-color:#4E6632;
     
 }
 
-
-#custommenu .yui3-menu-horizontal .yui3-menu-content li a {
-    cursor:pointer;
+#custommenu .yui3-menu-content,
+#custommenu .yui3-menu .yui3-menu .yui3-menu-content {
+    padding:0;
 }
 
-.yui3-skin-sam #custommenu .yui3-menu-content,
-.yui3-skin-sam #custommenu .yui3-menu .yui3-menu .yui3-menu-content {
-    padding:0;
+#custommenu .yui3-menuitem .yui3-menuitem-content {
+    border-width:0;
 }
\ No newline at end of file
index 34d7109..3a32b7d 100644 (file)
 ---------------------------*/
 
 html, body {
-       background: #eee;
+    background: #eee;
 }
 
 #mypagewrapper {
-       width: 100%;
-       border-top: 1px solid #fff;
+    width: 100%;
+    border-top: 1px solid #fff;
 }
 
 #page {
-       margin-top: 15px;
-       width: 90%;
-       min-width: 960px;
-       margin-left: auto;
-       margin-right: auto;
-       clear: both;
-       border: 1px solid #dadada;
-       background: #fff;
+    margin-top: 15px;
+    width: 90%;
+    min-width: 960px;
+    margin-left: auto;
+    margin-right: auto;
+    clear: both;
+    border: 1px solid #dadada;
+    background: #fff;
 }
 
 #wrapper {
-       padding: 20px;
-       padding-left: 20px;
-       padding-right: 17px;
+    padding: 20px;
+    padding-left: 20px;
+    padding-right: 17px;
 }
 
 #wrapper.notathome {
-       padding-top: 15px;
+    padding-top: 15px;
 }
 .content-only #wrapper {
-       padding-right: 0px;
+    padding-right: 0px;
 }
 
 /* Header
 ----------------------------*/
 
 #page-header {
-       width: 100%;
-       top: 0px;
-       height: 140px;
-       float: none;
+    width: 100%;
+    top: 0px;
+    height: 140px;
+    float: none;
 }
 
 #header {
-       width: 90%;
-       min-width: 960px;
-       margin-left: auto;
-       margin-right: auto;
+    width: 90%;
+    min-width: 960px;
+    margin-left: auto;
+    margin-right: auto;
 }
 
 #logo {
-       background-position: 0% 40%;
-       width: 300px;
-       height: 70px;
-       float: left;
+    background-position: 0% 40%;
+    width: 300px;
+    height: 70px;
+    float: left;
 }
 #nologo {
-       width: 590px;
-       height: 70px;
-       float: left;
-       margin-left: 6px;
-       overflow: hidden;
+    width: 590px;
+    height: 70px;
+    float: left;
+    margin-left: 6px;
+    overflow: hidden;
 }
 #nologo a, #nologo {
-       font-family: Georgia, Palatino, serif;
-       line-height: 70px;
-       font-size: 28px;
-       font-weight: 600;
-       letter-spacing: -1px;
+    font-family: Georgia, Palatino, serif;
+    line-height: 70px;
+    font-size: 28px;
+    font-weight: 600;
+    letter-spacing: -1px;
 }
 #loggedinas {
-       min-width: 300px;
-       height: 65px;
-       float: right;
-       text-align: right;
-       line-height: 65px;
-       font-size: 10px;
+    min-width: 300px;
+    height: 65px;
+    float: right;
+    text-align: right;
+    line-height: 65px;
+    font-size: 10px;
 }
 
 #loggedinas a {
-       color: #fff;
+    color: #fff;
 }
 
 #headerbottom {
-       clear: both;
+    clear: both;
 }
 
 #headingtitle {
-       float: right;
-       width: 280px;
-       padding-right: 5px;
-       text-align: right;
-       height: 70px;
-       overflow: hidden;
-       background: url([[pix:theme|youare]]) no-repeat;
-       background-position: 95% 110%;
-       position: relative;
-       bottom: -2px;
+    float: right;
+    width: 280px;
+    padding-right: 5px;
+    text-align: right;
+    height: 70px;
+    overflow: hidden;
+    background: url([[pix:theme|youare]]) no-repeat;
+    background-position: 95% 110%;
+    position: relative;
+    bottom: -2px;
 }
 
 #headingtitle h1 {
-       line-height: 67px;
-       font-weight: 200;
-       font-size: 13px;
-       text-transform: uppercase;
-       color: #fff;
+    line-height: 67px;
+    font-weight: 200;
+    font-size: 13px;
+    text-transform: uppercase;
+    color: #fff;
 }
 /* end Header
 ----------------------------*/
 
 #region-post2 .region-content div.navbutton {
-       display: inline-block !important;
-       width: 100%;
-       float: none;
-       margin-bottom: 5px;
-       margin-top: 5px;
-       clear: both;
+    display: inline-block !important;
+    width: 100%;
+    float: none;
+    margin-bottom: 5px;
+    margin-top: 5px;
+    clear: both;
 }
 
 body,h1,h2,h3,h4,h5,h6,p,ul,ol,dl,input,textarea {
-       font-family: Georgia, Palatino, serif;
-       line-height: 1.5;
-       color: #333;
+    font-family: Georgia, Palatino, serif;
+    line-height: 1.5;
+    color: #333;
 }
 
 h1, h2, h3, h4 {
-       font-family: Georgia, Times, "Times New Roman", serif !important;
+    font-family: Georgia, Times, "Times New Roman", serif !important;
 }
 
 h2,h3,h4,h5,h6 {
-       color: #999;
-       font-weight: normal;
+    color: #999;
+    font-weight: normal;
 }
 
 blockquote {
-       border-left: 1px solid #eee;
-       padding-left: 15px;
-       color: #666;
+    border-left: 1px solid #eee;
+    padding-left: 15px;
+    color: #666;
 }
 
 .mform fieldset {
-       border-color: #eee;
+    border-color: #eee;
 }
 
 .mform fieldset legend {
-       color: #555;
-       font-weight: normal;
-       font-size: 1.2em;
-       border: 1px solid #eee;
-       padding: 2px 5px;
-       background: #fff;
+    color: #555;
+    font-weight: normal;
+    font-size: 1.2em;
+    border: 1px solid #eee;
+    padding: 2px 5px;
+    background: #fff;
 }
 
 
 div.navbar {
-       border-bottom: 1px solid #eee;
-       border-top: 1px solid #eee;
-       background: #fafafa url([[pix:theme|block]]) no-repeat;
-       background-position: 100% 0%;
-       font-size: 0.85em;
-       font-style: italic;
-       font-weight: 200;
-       padding:0 10px;
-       margin-bottom: 7px;
+    border-bottom: 1px solid #eee;
+    border-top: 1px solid #eee;
+    background: #fafafa url([[pix:theme|block]]) no-repeat;
+    background-position: 100% 0%;
+    font-size: 0.85em;
+    font-style: italic;
+    font-weight: 200;
+    padding:0 10px;
+    margin-bottom: 7px;
 }
 
 div.breadcrumb li {
-       line-height: 30px;
-       font-family: Georgia, serif;
+    line-height: 30px;
+    font-family: Georgia, serif;
 }
 
 .breadcrumb li img {
-       vertical-align: middle;
+    vertical-align: middle;
 }
 
 /** breadcrumb image replacement **/
 
 div.navbar span.arrow.sep {
-       font-size: 1px;
-       color: #fafafa;
-       background: url([[pix:theme|crumber]]) no-repeat;
-       background-position: 50% 25%;
-       display: inline-block;
-       width: 16px;
-       height: 30px;
+    font-size: 1px;
+    color: #fafafa;
+    background: url([[pix:theme|crumber]]) no-repeat;
+    background-position: 50% 25%;
+    display: inline-block;
+    width: 16px;
+    height: 30px;
 }
 
 .navbutton {
-       float: none;
-       width: 100%;
-       padding: 5px 0 15px;
-       text-align: center;
+    float: none;
+    width: 100%;
+    padding: 5px 0 15px;
+    text-align: center;
 }
 
 /* Blocks
 ----------------------------*/
 
 .block {
-       border: none;
+    border: none;
 }
 
 div.block {
-       padding: 2px;
-       border: 1px solid #dadada;
-       margin-left: -10px;
+    padding: 2px;
+    border: 1px solid #dadada;
+    margin-left: -10px;
 }
 
 #region-main div.block {
-       margin-left: 0px;
-       background-image: none;
+    margin-left: 0px;
+    background-image: none;
 }
 
 .block div.header {
-       min-height: 33px;
-       padding-top: 3px;
-       padding-left: 3px;
+    min-height: 33px;
+    padding-top: 3px;
+    padding-left: 3px;
 }
 
 div.block.hidden div.header {
-       border-bottom: none;
+    border-bottom: none;
 }
 
 .block .header h2 {
-       font-size: 13px;
-       font-weight: 200;
-       text-transform: uppercase;
+    font-size: 13px;
+    font-weight: 200;
+    text-transform: uppercase;
 }
 
 .block div.content {
-       background: #fff;
-       border: 1px solid #dadada;
-       border-top: none;
-       padding: 4px;
+    background: #fff;
+    border: 1px solid #dadada;
+    border-top: none;
+    padding: 4px;
 }
 
 .block div.content h1, .block div.content h2.main, .block div.content h3.main {
-       font-size: 13px;
-       background-image: none;
+    font-size: 13px;
+    background-image: none;
 }
 
 .block_calendar_month table.minicalendar.calendartable td,.block_calendar_month table.minicalendar.calendartable th {
-       border: none !important;
+    border: none !important;
 }
 
 .block_calendar_month table.minicalendar {
-       margin-bottom: 0px !important;
+    margin-bottom: 0px !important;
 }
 
 .block_calendar_month table.minicalendar.calendartable th abbr {
-       border: none !important;
-       text-decoration: none;
+    border: none !important;
+    text-decoration: none;
 }
 
 
 /** main headings **/
 
 .generalbox h2,h3.sectionname, h2.headingblock,h2.main,h3.main, h2.main a, h3.main a, div.loginpanel h2, div.signuppanel h2 {
-       font-weight: 600;
-       letter-spacing: -1px;
-       line-height: 1.3em;
-       font-size: 28px;
-       border-bottom: 0px solid #eee;
-       padding-bottom: 2px;
-       background: url([[pix:theme|mainbar]]) repeat-x;
-       background-position: 0% 100%;
+    font-weight: 600;
+    letter-spacing: -1px;
+    line-height: 1.3em;
+    font-size: 28px;
+    border-bottom: 0px solid #eee;
+    padding-bottom: 2px;
+    background: url([[pix:theme|mainbar]]) repeat-x;
+    background-position: 0% 100%;
 }
 
 .generalbox h2, #page-course-info h2.main, h3.sectionname, h2.main a, h3.main a, div.loginpanel h2, div.signuppanel h2, div.hd h3.main {
-       font-size: 22px;
-       background: none;
+    font-size: 22px;
+    background: none;
 }
 
 
@@ -281,263 +281,266 @@ div.block.hidden div.header {
 ----------------------------*/
 
 .coursebox {
-       border-color: #eee;
+    border-color: #eee;
 }
 
 .coursebox .info {
-       width: 35%;
+    width: 35%;
 }
 
 .coursebox .info .name {
-       margin-bottom: 0;
+    margin-bottom: 0;
 }
 
 .coursebox .info .teachers {
-       font-size: 0.9em;
-       color: #888;
+    font-size: 0.9em;
+    color: #888;
 }
 
 .coursebox .summary {
-       width: 63%;
+    width: 63%;
 }
 
 .course-content .section.main {
-       border-bottom: 1px solid #eee;
+    border-bottom: 1px solid #eee;
 }
 
 .course-content .section.main .content {
-       padding: 5px 5px 10px;
+    padding: 5px 5px 10px;
 }
 
 .course-content .weeks .section.main .content {
-       margin-left: 0;
+    margin-left: 0;
 }
 
 .course-content .weeks .section.main .left {
-       display: none;
+    display: none;
 }
 
 .course-content .section.main.current {
-       background: #fffcdc;
+    background: #fffcdc;
 }
 
 .course-content .weeks .section.main h3.weekdates {
-       color: #999;
+    color: #999;
 }
 
 .course-content .current .left,
 .course-content .current h3.weekdates {
-       color: #92310c !important;
+    color: #92310c !important;
 }
 
 span.completionprogress {
-       font-size: 11px;
-       color: #666666;
+    font-size: 11px;
+    color: #666666;
 }
 
 /* Forum 
 --------------------------*/
 
 .forumpost .topic {
-       background: #eee url([[pix:theme|block]]) no-repeat;
-       background-position: 100% 0%;
-       border-width: 0;
-       border: 1px solid #dadada;
-       padding: 0 10px 0;
+    background: #eee url([[pix:theme|block]]) no-repeat;
+    background-position: 100% 0%;
+    border-width: 0;
+    border: 1px solid #dadada;
+    padding: 0 10px 0;
 }
 
 .forumpost .subject {
-       font-size: 1.45em;
-       font-family: Georgia, serif;
+    font-size: 1.45em;
+    font-family: Georgia, serif;
 }
 
 .forumpost .author {
-       font-size: 0.9em;
-       font-style: italic;
+    font-size: 0.9em;
+    font-style: italic;
 }
 
 td.picture.left img {
-       background: #fafafa;
-       padding: 4px;
-       padding-bottom: 9px;
-       border: 1px solid #dadada;
+    background: #fafafa;
+    padding: 4px;
+    padding-bottom: 9px;
+    border: 1px solid #dadada;
 }
 
 .forumpost .content {
-       border-width: 0 1px 1px;
-       border-style: solid;
-       border-color: #aaa #dadada #dadada;
-       padding: 5px 10px 10px;
+    border-width: 0 1px 1px;
+    border-style: solid;
+    border-color: #aaa #dadada #dadada;
+    padding: 5px 10px 10px;
 }
 
 /* Footer 
 ----------------------------*/
 
 #page-footer .helplink {
-       margin: 1em 0;
+    margin: 1em 0;
 }
 
 /* Dock */
 
 body.has_dock {
-       margin: 0px;
+    margin: 0px;
 }
 
 .has_dock #page, .has_dock #header {
-       margin-left: 5%;
+    margin-left: 5%;
 }
 
 #dock {
-       left: 5%;
-       top: 107px;
-       margin-left: -29px;
-       border-width: 0;
-       background-color: transparent;
-       position: absolute;
+    left: 5%;
+    top: 107px;
+    margin-left: -29px;
+    border-width: 0;
+    background-color: transparent;
+    position: absolute;
 }
 
 #dock .controls {
-       bottom: auto;
-       -webkit-border-bottom-left-radius: 3px;
-       -moz-border-radius-bottomleft: 3px;
-       border-bottom-left-radius: 3px;
+    bottom: auto;
+    -webkit-border-bottom-left-radius: 3px;
+    -moz-border-radius-bottomleft: 3px;
+    border-bottom-left-radius: 3px;
 }
 
 #dock .dockeditem_container {
-       position: relative;
+    position: relative;
 }
 
 #dock .dockeditem.firstdockitem {
-       margin-top: 50px;
-       border-top: 1px solid #dadada;
-       -webkit-border-top-left-radius: 3px;
-       -moz-border-radius-topleft: 3px;
-       border-top-left-radius: 3px;
+    margin-top: 50px;
+    border-top: 1px solid #dadada;
+    -webkit-border-top-left-radius: 3px;
+    -moz-border-radius-topleft: 3px;
+    border-top-left-radius: 3px;
 }
 
 #dock .dockeditem {
-       background-color: #fff;
-       padding: 2px;
-       padding-right: 0px;
-       border-left: 1px solid #dadada;
-       border-right: 0px solid #fafafa;
-       border-top: 1px solid #fafafa;
+    background-color: #fff;
+    padding: 2px;
+    padding-right: 0px;
+    border-left: 1px solid #dadada;
+    border-right: 0px solid #fafafa;
+    border-top: 1px solid #fafafa;
 }
 
 #dock .dockedtitle {
-       border-width: 0;
+    border-width: 0;
 }
 
 #dock .dockedtitle h2 {
-       margin: 0;
-       padding: 10px 3px;
+    margin: 0;
+    padding: 10px 3px;
 }
 
 #dock .dockedtitle.activeitem {
-       color: #fff !important;
-       width: 35px;
-       -webkit-border-top-left-radius: 3px;
-       -moz-border-radius-topleft: 3px;
-       border-top-left-radius: 3px;
-       -webkit-border-bottom-left-radius: 3px;
-       -moz-border-radius-bottomleft: 3px;
-       border-bottom-left-radius: 3px;
+    color: #fff !important;
+    width: 35px;
+    -webkit-border-top-left-radius: 3px;
+    -moz-border-radius-topleft: 3px;
+    border-top-left-radius: 3px;
+    -webkit-border-bottom-left-radius: 3px;
+    -moz-border-radius-bottomleft: 3px;
+    border-bottom-left-radius: 3px;
 }
 
 #dock .dockedtitle.activeitem h2 {
-       color: #fff !important;
+    color: #fff !important;
 }
 
 #dockeditempanel {
-       margin-left: 0px;
+    margin-left: 0px;
 }
 
 #dockeditempanel .dockeditempanel_content {
-       background-color: #fff;
-       margin: 0 3px;
-       position: relative;
-       min-height: 100px;
-       -webkit-border-radius: 3px;
-       -webkit-border-top-left-radius: 0;
-       -moz-border-radius: 3px;
-       -moz-border-radius-topleft: 0;
-       border-radius: 3px;
-       border-top-left-radius: 0;
+    background-color: #fff;
+    margin: 0 3px;
+    position: relative;
+    min-height: 100px;
+    -webkit-border-radius: 3px;
+    -webkit-border-top-left-radius: 0;
+    -moz-border-radius: 3px;
+    -moz-border-radius-topleft: 0;
+    border-radius: 3px;
+    border-top-left-radius: 0;
 }
 
 #dockeditempanel .dockeditempanel_hd {
-       border-width: 0;
-       padding: 2px;
+    border-width: 0;
+    padding: 2px;
 }
 
 #dockeditempanel .dockeditempanel_hd h2 {
-       font-size: 0.9em;
-       color: #fff;
+    font-size: 0.9em;
+    color: #fff;
 }
 
 /** yui menu styles **/
 
 #menustuff {
-       width: 600px;
-       float: left;
-       clear: left;
-       height: 65px;
+    width: 600px;
+    float: left;
+    clear: left;
+    height: 65px;
 }
 
-#custommenu {
-       border: none !important;
+#custommenu,
+#custommenu .yui3-menu-content {
+    border-width:0;
 }
 
-div.yui3-menu-content {
-       border: none !important;
+#custommenu .yui3-menu-content li a {
+    font-size: 14px;
+    font-family: Georgia, serif;
+    font-weight: 200;
+    text-transform: lowercase;
+    line-height: 70px;
+    cursor: pointer;
+    border-width:0;
 }
 
-.yui3-menu-content li a {
-       font-size: 14px;
-       font-family: Georgia, serif !important;
-       font-weight: 200;
-       text-transform: lowercase;
-       line-height: 70px;
-       cursor: pointer;
-       border-right: none !important;
-       border-top: none !important;
-       border-bottom: none !important;
+#custommenu .yui3-menu-content li li a {
+    line-height: 30px;
+    text-shadow:none;
 }
 
-.yui3-menu-content li a:hover {
-       text-decoration: underline;
+#custommenu .yui3-menu-content li a:hover {
+    text-decoration: underline;
 }
 
-div.custom_menu_submenu li a {
-       line-height: 30px;
-       text-shadow: none !important;
+#custommenu .yui3-menu-content .yui3-menu-content {
+    background-image: url([[pix:theme|youare]]);
+    background-position: 30px 0;
+    background-repeat: no-repeat;
+    background-color:transparent;
+    margin-top:-10px;
+    min-width: 200px;
 }
 
-div.yui3-menu.custom_menu_submenu {
-       background: url([[pix:theme|youare]]) no-repeat;
-       background-position: 30px 10px;
-       top: 120px !important;
-       border: none;
-       min-width: 100px;
-       z-index: 99998;
+#custommenu .yui3-menu-content .yui3-menu-content ul {
+    margin-top:10px;
+    background-color:#FFF;
+    border: 1px solid #dadada
 }
 
-div.yui3-menu.custom_menu_submenu div.yui3-menu-content {
-       margin-top: 22px;
-       border: 1px solid #dadada !important;
-       border-top: none !important;
+#custommenu .yui3-menu-content .yui3-menu-content .yui3-menu-content,
+#custommenu .yui3-menu-content .yui3-menu-content .yui3-menu-content ul {
+    margin-top:0;
+    background-image:none;
 }
 
-/** below style to move sub subs to the left to keep from going off the page **/
+#custommenu .yui3-menuitem-active,
+#custommenu .yui3-menuitem-active .yui3-menuitem-content {
+    background-color:transparent;
+}
 
-div.yui3-menu.custom_menu_submenu div.yui3-menu-content div.yui3-menu.custom_menu_submenu div.yui3-menu-content {
-       background-image: none !important;
-       min-width: 200px;
-       position: relative;
-       margin-top: -50px;
-       border-top: 1px solid #dadada !important;
+#custommenu .yui3-menu .yui3-menu .yui3-menu-label-active,
+#custommenu .yui3-menu .yui3-menu .yui3-menu-label-menuvisible,
+#custommenu .yui3-menu .yui3-menu .yui3-menuitem-active,
+#custommenu .yui3-menu .yui3-menu .yui3-menuitem-active .yui3-menuitem-content {
+    background-color: #FFF0A5;
 }
 
 .logininfo a {
-       color: #fff;
+    color: #fff;
 }
\ No newline at end of file
index 69128eb..da7ca5d 100644 (file)
@@ -55,38 +55,63 @@ body,h1,h2,h3,h4,h5,h6,p,ul,ol,dl,input,textarea { font-family: "Trebuchet MS",
 #page-footer .logininfo  { margin: 1em 0; }
 
 /* custum menu */
-#custommenu { margin:0 50px; }
+#custommenu {
+    margin:0 50px;
+}
 
-#custommenu, div.yui3-menu, div.yui3-menu-content {
-       border: none !important;
+#custommenu,
+#custommenu .yui3-menu,
+#custommenu .yui3-menu-content {
+    border-width:0;
 }
 
 #custommenu {
-       background:url([[pix:theme|gradient-sb]]) repeat-x 0 30%;
-       padding-top: 4px;
-       padding-bottom: 4px;
-       border-bottom: 1px solid #ccc !important;
-       border-left: 1px solid #eee !important;
-       border-right: 1px solid #eee !important;
-       
+    background:url([[pix:theme|gradient-sb]]) repeat-x 0 30%;
+    padding-top: 4px;
+    padding-bottom: 4px;
+    border-bottom: 1px solid #ccc;
+    border-left: 1px solid #eee;
+    border-right: 1px solid #eee;
+}
+
+#custommenu .yui3-menu-label,
+#custommenu .yui3-menuitem-content {
+    border-width:0;
+}
+
+#custommenu .yui3-menu-content .yui3-menu-content {
+    border: 1px solid #ccc;
+    border-top-width: 0;
+    margin-top: 3px;
 }
 
-a.yui3-menu-label {
-       border: none !important;
+#custommenu .yui3-menu-content .yui3-menu-content .yui3-menu-content {
+    border-top: 1px solid #ccc;
 }
 
-div.yui3-menu-content .yui3-menu-content {
-       border: 1px solid #ccc !important;
-       border-top: none !important;
-       margin-top: 3px;
-       padding: 10px;
+#custommenu .yui3-menu-content .yui3-menu-content .yui3-menuitem-content,
+#custommenu .yui3-menu-content .yui3-menu-content .yui3-menu-label {
+    padding-top: 5px;
 }
 
-div.yui3-menu-content .yui3-menu-content .yui3-menu-content {
-       border-top: 1px solid #ccc !important;
+#custommenu .yui3-menu-label,
+#custommenu .yui3-menuitem-content {
+    color:#BF3503;
 }
 
-div.yui3-menu-content .yui3-menu-content .yui3-menuitem-content, div.yui3-menu-content .yui3-menu-content .yui3-menu-label{
-       padding-top: 5px !important;
-       
-}
\ No newline at end of file
+#custommenu .yui3-menu .yui3-menuitem-active,
+#custommenu .yui3-menu-label-menuvisible,
+#custommenu .yui3-menu-label-active,
+#custommenu .yui3-menuitem-active .yui3-menuitem-content {
+    background-color: #BF3503;
+}
+
+#custommenu .yui3-menu-label-active,
+#custommenu .yui3-menu-label-menuvisible,
+#custommenu .yui3-menuitem-active .yui3-menuitem-content {
+    color:#FFF;
+}
+
+#custommenu .yui3-menu-horizontal.javascript-disabled .yui3-menu-content {
+    border-width:0;
+}
index 5d0dc62..a7aca20 100644 (file)
@@ -1,8 +1,6 @@
 a:link,
 a:visited { color: #bf3503; }
 
-a.yui3-menu-label, div.yui3-menu-content .yui3-menu-content .yui3-menuitem-content { color: #bf3503 !important; }
-
 a:hover,
 a:active {     color:#3f5c10; }
 
index 33e1749..f5b7d70 100644 (file)
-#custommenu {
-       font-size: 1.2em;
-       line-height: 1.2;
-       float: left;
-       width:60%;
-}
-
-.yui3-skin-sam .yui3-menu-content, 
-.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu-content {
-       border: none;
-       padding: 0 !important;
-}
-
-.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu-content {
-       background: #fff;
-       filter:alpha(opacity=95);
-       -moz-opacity:0.95;
-       -khtml-opacity: 0.95;
-       opacity: 0.95;
-    padding: 5px 0;
-}
-
-
-/* Horizontal menus */
-
-.yui3-skin-sam .yui3-menu-horizontal .yui3-menu-content {
-
-
-}
-
-
-.yui3-skin-sam .yui3-menu ul,
-.yui3-skin-sam .yui3-menu ul ul {
-
-}
-
-.yui3-skin-sam .yui3-menu ul.first-of-type {
-}
-
-.yui3-skin-sam .yui3-menu-horizontal ul {
-}
-
-
-.yui3-skin-sam .yui3-menu li,
-.yui3-skin-sam .yui3-menu .yui3-menu li {
-
-}
-
-.yui3-skin-sam .yui3-menu-horizontal li {
-
-}
-
-.yui3-skin-sam .yui3-menubuttonnav li {
-
-}
-
-.yui3-skin-sam .yui3-splitbuttonnav li {
-
-}
-
-.yui3-skin-sam .yui3-menubuttonnav li li,
-.yui3-skin-sam .yui3-splitbuttonnav li li {
-
-}
-
-
-/* Menuitems and menu labels */
-.yui3-skin-sam .yui3-menu .yui3-menu {
-       padding-top: 5px;
-       background: url([[pix:theme|menu-top]]) no-repeat 20px 0;
-       filter:alpha(opacity=95);
-       -moz-opacity:0.95;
-       -khtml-opacity: 0.95;
-       opacity: 0.95;  
-}
-
-.custom_menu_submenu .custom_menu_submenu {
-       
-       filter:alpha(opacity=100);
-       -moz-opacity:1 !important;
-       -khtml-opacity: 1 !important;
-       opacity: 1 !important;
-}
-
-
-.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu {
-       padding-top: 0;
-       background: none;
-}
-
-.yui3-skin-sam .yui3-menuitem-content,
-.yui3-skin-sam .yui3-menu-label {
-       color: #a2a3a6;
-}
-
-.yui3-skin-sam .yui3-menuitem-content,
-.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menuitem-content {
-       padding-top: 3px;
-       padding-bottom: 4px;
-}
-
-.yui3-skin-sam .yui3-menu-horizontal .yui3-menu-label,
-.yui3-skin-sam .yui3-menu-horizontal .yui3-menuitem-content {
-       border: none;
-       padding: 0 20px 0 0;
-}
-
-.yui3-skin-sam .yui3-menu-label,
-.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu-label {
-       padding-top: 3px;
-       padding-bottom: 4px;
-
-}
-
-.yui3-skin-sam .yui3-menu-horizontal .yui3-menu-label {
-
-
-}
-
-.yui3-skin-sam .yui3-menubuttonnav .yui3-menu-label,
-.yui3-skin-sam .yui3-splitbuttonnav .yui3-menu-label {
-
-
-}
-
-.yui3-skin-sam .yui3-menubuttonnav .yui3-menu-label {
-
-
-}
-
-.yui3-skin-sam .yui3-menubuttonnav .yui3-menu-label em {
-
-
-}
-
-
-.yui3-skin-sam .yui3-splitbuttonnav .yui3-menu-label {
-
-
-}
-
-.yui3-skin-sam .yui3-splitbuttonnav .yui3-menu-label a {
-
-
-}
-
-.yui3-skin-sam .yui3-splitbuttonnav .yui3-menu-label .yui3-menu-toggle {
-       
-       
-}
-
-
-/* Selected menuitem */
-
-.yui3-skin-sam .yui3-menu-label-active,
-.yui3-skin-sam .yui3-menu-label-menuvisible,
-.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu-label-active,
-.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu-label-menuvisible {
- color: #fff;
-       background-color: #2d83d5;
-}
-
-.yui3-skin-sam .yui3-menuitem-active .yui3-menuitem-content,
-.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menuitem-active .yui3-menuitem-content {
-       color: #fff;
-       background-color: #2d83d5;
-
-}
-
-.yui3-skin-sam .yui3-menu-horizontal .yui3-menu-label-active,
-.yui3-skin-sam .yui3-menu-horizontal .yui3-menuitem-active .yui3-menuitem-content,
-.yui3-skin-sam .yui3-menu-horizontal .yui3-menu-label-menuvisible {
-}
-
-.yui3-skin-sam .yui3-menubuttonnav .yui3-menu-label-active,
-.yui3-skin-sam .yui3-menubuttonnav .yui3-menuitem-active .yui3-menuitem-content,
-.yui3-skin-sam .yui3-menubuttonnav .yui3-menu-label-menuvisible,
-.yui3-skin-sam .yui3-splitbuttonnav .yui3-menu-label-active,
-.yui3-skin-sam .yui3-splitbuttonnav .yui3-menuitem-active .yui3-menuitem-content,
-.yui3-skin-sam .yui3-splitbuttonnav .yui3-menu-label-menuvisible {
-
-
-}
-
-.yui3-skin-sam .yui3-splitbuttonnav .yui3-menu-label-menuvisible {
-
-
-}
-
-.yui3-skin-sam .yui3-splitbuttonnav .yui3-menu-label-menuvisible .yui3-menu-toggle {
-
-
-}
-
-#custommenu .yui3-menu-horizontal.javascript-disabled .yui3-menu-content,
-#custommenu .yui3-menu-horizontal.javascript-disabled .yui3-menu-content .ul {border:none !important;}
-#custommenu .yui3-menu-horizontal.javascript-disabled li a {padding:0 20px 0 0;}
+#custommenu {font-size: 1.2em;line-height: 1.2;float: left;width:60%;}
+
+#custommenu .yui3-menu .yui3-menuitem {padding-right:20px;}
+#custommenu .yui3-menu .yui3-menu .yui3-menuitem {padding-right:0;}
+#custommenu .yui3-menu .yui3-menu .yui3-menu-content {border-width: 0;background-color: #fff;padding: 5px 0;}
+
+#custommenu .yui3-menu .yui3-menu {padding-top: 5px;background-image: url([[pix:theme|menu-top]]);background-repeat: no-repeat;background-position: 20px 0;}
+#custommenu .yui3-menu .yui3-menu .yui3-menu {padding-top: 0;background-image: none;}
+
+#custommenu .yui3-menuitem-content,
+#custommenu .yui3-menu-label {color: #a2a3a6;}
+
+#custommenu .yui3-menu-label,
+#custommenu .yui3-menuitem-content,
+#custommenu .yui3-menu .yui3-menu .yui3-menu-label,
+#custommenu .yui3-menu .yui3-menu .yui3-menuitem-content {padding-top: 3px;padding-bottom: 4px;}
+
+#custommenu .yui3-menu-content,
+#custommenu .yui3-menu-horizontal .yui3-menu-label,
+#custommenu .yui3-menu-horizontal .yui3-menuitem-content {border-width: 0;}
+
+#custommenu .yui3-menuitem-active {background-color: transparent;}
+
+#custommenu .yui3-menu-label-active,
+#custommenu .yui3-menu-label-menuvisible,
+#custommenu .yui3-menu .yui3-menu .yui3-menu-label-menuvisible,
+#custommenu .yui3-menuitem-active .yui3-menuitem-content,
+#custommenu .yui3-menu .yui3-menu .yui3-menuitem-active .yui3-menuitem-content {color: #fff;background-color: #2d83d5;}
+
+/**
+ * Don't set opacity in IE it prevents level 3+ submenu's from displaying due to
+ * a bug with the way IE applies opacity to children
+ */
+#custommenu .yui3-menu .yui3-menu {-moz-opacity:0.95;-khtml-opacity: 0.95;opacity: 0.95;}
+#custommenu .yui3-menu .yui3-menu .yui3-menu {-moz-opacity:1;-khtml-opacity: 1;opacity: 1;}
+
+#custommenu .yui3-menu.javascript-disabled .yui3-menu-content,
+#custommenu .yui3-menu.javascript-disabled .yui3-menu-content .ul {border:none;}
+#custommenu .yui3-menu.javascript-disabled .yui3-menuitem {padding-right:20px;}
+#custommenu .yui3-menu.javascript-disabled .yui3-menu .yui3-menuitem {padding-right:0;}
\ No newline at end of file
index 9a42ec5..672d824 100644 (file)
@@ -301,69 +301,42 @@ h2.headingblock {
 }    
 
 #custommenu {
-    border: none !important;
-    border: 0px solid #fff !important;
+    border-width: 0;
     margin: 0 25px;
 }
 
-#custommenu * {
-    border: none !important;
-}
-
 /*YUI Reset */
-.yui3-skin-sam #page .yui3-menu-horizontal .yui3-menu-content{ 
-   background-position: -10000px -10000px; 
-}
-
-.yui3-skin-sam #page .yui3-menu-horizontal .yui3-menu-label{ 
-    background-position: -10000px -10000px; 
-}
-
-.yui3-skin-sam #page .yui3-menu-horizontal .yui3-menu-label-active,.yui3-skin-sam #page .yui3-menu-horizontal .yui3-menuitem-active .yui3-menuitem-content,.yui3-skin-sam #page .yui3-menu-horizontal .yui3-menu-label-menuvisible{
-    background-position: -10000px -10000px; 
-}
-
-.yui3-skin-sam #page .yui3-menu-label,
-.yui3-skin-sam #page .yui3-menu .yui3-menu .yui3-menu-label {
-    background-position: right center; 
-}
-
-.yui3-skin-sam #page .yui3-menubuttonnav .yui3-menu-label em {
-    background-position: right center; 
-}
-
-.yui3-skin-sam #page .yui3-splitbuttonnav .yui3-menu-label .yui3-menu-toggle { 
-    background-position: 3px center;
-}
-
-.yui3-skin-sam #page .yui3-splitbuttonnav .yui3-menu-label-menuvisible .yui3-menu-toggle {
-    background-position: 0% 50%; 
-}
-
-.yui3-skin-sam #page .yui3-menu-label, .yui3-skin-sam #page .yui3-menuitem-content  {
+#custommenu .yui3-menu-label,
+#custommenu .yui3-menuitem-content {
     color: #35251B;
     font-weight: 400;
+    border-width: 0;
 }
 
-.custom_menu_submenu .yui3-menu-label, .custom_menu_submenu .yui3-menuitem-content {
-    color: #35251B !important;
+#custommenu .custom_menu_submenu .yui3-menu-label,
+#custommenu .custom_menu_submenu .yui3-menuitem-content {
+    color: #35251B;
 }
 
-.yui3-skin-sam #page .yui3-menu-label.yui3-menu-label-active, .yui3-skin-sam #page .yui3-menuitem-active .yui3-menuitem-content {
+#custommenu .yui3-menu-label.yui3-menu-label-active,
+#custommenu .yui3-menuitem-active .yui3-menuitem-content {
     color: #DA5013;
 }
 
-.yui3-skin-sam #page .yui3-menu-content, .yui3-skin-sam #page .yui3-menu-content, .yui3-skin-sam #page .yui3-menu .yui3-menu .yui3-menu-content, .yui3-skin-sam #page .yui3-menu-horizontal .yui3-menu-label, .yui3-skin-sam #page .yui3-menu-horizontal .yui3-menuitem-content  {
-    border: none;
+#custommenu .yui3-menu-content,
+#custommenu .yui3-menu .yui3-menu .yui3-menu-content,
+#custommenu .yui3-menu-horizontal .yui3-menu-label,
+#custommenu .yui3-menu-horizontal .yui3-menuitem-content  {
+    border-width: 0;
 }
 
-.yui3-skin-sam .yui3-menu-horizontal .yui3-menu-label, .yui3-skin-sam .yui3-menu-horizontal .yui3-menuitem-content {
-    border-color:#808080;
-    border-style:solid;
-    border-width:0px 0;
+#custommenu .yui3-menu-label-active,
+#custommenu .yui3-menu-label-menuvisible,
+#custommenu .yui3-menu .yui3-menu .yui3-menuitem-active .yui3-menuitem-content {
+    background-color:#F6F6F6;
 }
 
-#page .custom_menu_submenu {
+#custommenu .custom_menu_submenu {
     border: 2px solid #DA5013 !important;
     background: #fff;
     -webkit-border-radius: 2px;
@@ -373,3 +346,8 @@ h2.headingblock {
     -moz-box-shadow: 0px 1px 3px #ccc;
     box-shadow: 0px 1px 3px #ccc;
 }
+
+#custommenu .yui3-menu.javascript-disabled .yui3-menu-content,
+#custommenu .yui3-menu.javascript-disabled .yui3-menu-content .ul {
+    border-width:0;
+}
index 80b0b27..176c598 100644 (file)
@@ -463,105 +463,106 @@ div.yui3-widget-bd h1.helpheading {
     height: 45px;
 }
 
-div.yui3-menu.yui3-menu-horizontal {
-    background: #fafafa url([[pix:theme|menubarback]]) repeat-x !important;
-    border-bottom: 1px solid #cccccc !important;
-    border-top: 1px solid #dadada !important;
+#custommenu .yui3-menu.yui3-menu-horizontal {
+    background: #fafafa url([[pix:theme|menubarback]]) repeat-x;
+    border-bottom: 1px solid #cccccc;
+    border-top: 1px solid #dadada;
     border-left: none;
     border-right: 1px solid #cccccc;
     float: right;
 }
 
-div.yui3-menu-content {
-    border: none !important;
+#custommenu .yui3-menu-content {
+    border-width: 0;
 }
 
-.yui3-menu-content li a {
+#custommenu .yui3-menu-content li a {
     font-size: 12px;
     font-weight: 600;
     text-transform: lowercase;
     line-height: 45px;
     cursor: pointer;
-    border-right: none !important;
-    border-top: none !important;
-    border-bottom: none !important;
+    border-right-width: 0;
+    border-top-width: 0;
+    border-bottom-width: 0;
 }
 
-.yui3-menu-horizontal .yui3-menu-label {
+#custommenu .yui3-menu-label {
     padding-left: 16px !important;
-    background: url([[pix:theme|yuiarrows]]) no-repeat 7px 17px !important;
-    }
+    background: url([[pix:theme|yuiarrows]]) no-repeat 7px 17px;
+}
 
-.yui3-menu-horizontal .yui3-menu-label-menuvisible {
-    background-position: 5px -23px !important;
+#custommenu .yui3-menu-label-menuvisible {
+    background-position: 5px -23px;
 }
 
-.yui3-menu-content li {
+#custommenu .yui3-menu-content li {
     border-left: 1px solid #dadada;
-    border-top: none !important;
+    border-top-width: 0;
 }
 
-.yui3-menu-content li:hover {
+#custommenu .yui3-menu-content li:hover {
     background: #eee;
 }
 
-div.yui3-menu.custom_menu_submenu {
+#custommenu .yui3-menu.custom_menu_submenu {
     background: url([[pix:theme|yuiarrow]]) no-repeat 40px 0;
     border: none;
     min-width: 100px;
     z-index: 99998;
 }
 
-div.yui3-menu.custom_menu_submenu div.yui3-menu.custom_menu_submenu {
-    background: none !important;
+#custommenu .yui3-menu.custom_menu_submenu .yui3-menu.custom_menu_submenu {
+    background-image: none;
+    background-color: transparent;
     min-width: 100px;
 }
 
-div.yui3-menu.custom_menu_submenu div.yui3-menu-content {
+#custommenu .yui3-menu.custom_menu_submenu .yui3-menu-content {
     background: #fff;
     z-index: 99999;
     min-width: 200px;
-    padding-top: 0 !important;
-    padding-bottom: 0 !important;
+    padding-top: 0;
+    padding-bottom: 0;
     margin: 20px 0px 0px -40px;
 }
 
 /** below style to move sub subs to the left to keep from going off the page **/
 
-div.yui3-menu.custom_menu_submenu div.yui3-menu-content div.yui3-menu.custom_menu_submenu div.yui3-menu-content {
+#custommenu .yui3-menu.custom_menu_submenu .yui3-menu-content .yui3-menu.custom_menu_submenu .yui3-menu-content {
     margin-left: -400px !important;
     /** double the width of the menu item **/
     position: absolute;
     top: -15px;
 }
 
-div.yui3-menu.custom_menu_submenu .yui3-menu-content li {
+#custommenu .yui3-menu.custom_menu_submenu .yui3-menu-content li {
     border-left: none;
 }
 
-div.yui3-menu.custom_menu_submenu .yui3-menu-content li a {
+#custommenu .yui3-menu.custom_menu_submenu .yui3-menu-content li a {
     font-size: 11px;
-    border-bottom: 1px solid #cccccc !important;
-    border-top: 0px solid #fff !important;
+    border-bottom: 1px solid #cccccc;
+    border-top-width: 0;
     text-transform: none;
-    background: #eee !important;
-    text-decoration: none !important;
+    background: #eee;
+    text-decoration: none;
     text-transform: lowercase;
 }
 
-div.yui3-menu.custom_menu_submenu .yui3-menu-content li a:hover {
-    background: #cccccc !important;
+#custommenu .yui3-menu.custom_menu_submenu .yui3-menu-content li a:hover {
+    background: #cccccc;
     cursor: pointer;
-    color: black !important;
-    text-decoration: none !important;
+    color: #000;
+    text-decoration: none;
 }
 
-div.yui3-menu.custom_menu_submenu li a.yui3-menu-label {
-    background: #eee url([[pix:theme|yuiarrows]]) no-repeat 7px -72px !important;
+#custommenu .yui3-menu.custom_menu_submenu li a.yui3-menu-label {
+    background: #eee url([[pix:theme|yuiarrows]]) no-repeat 7px -72px;
 }
 
-div.yui3-menu.custom_menu_submenu li a.yui3-menu-label:hover {
-    background: #ccc url([[pix:theme|yuiarrows]]) no-repeat !important 7px -72px;
+#custommenu .yui3-menu.custom_menu_submenu li a.yui3-menu-label:hover {
+    background: #ccc url([[pix:theme|yuiarrows]]) no-repeat 7px -72px;
 }
 
 /** yui moodle dock bar **/
diff --git a/theme/nimble/pix/horizontal-menu-submenu-indicator.png b/theme/nimble/pix/horizontal-menu-submenu-indicator.png
new file mode 100644 (file)
index 0000000..62a2772
Binary files /dev/null and b/theme/nimble/pix/horizontal-menu-submenu-indicator.png differ
diff --git a/theme/nimble/pix/vertical-menu-submenu-indicator.png b/theme/nimble/pix/vertical-menu-submenu-indicator.png
new file mode 100644 (file)
index 0000000..2081588
Binary files /dev/null and b/theme/nimble/pix/vertical-menu-submenu-indicator.png differ
index 34029f1..c0883be 100644 (file)
@@ -1,40 +1,31 @@
 #page-header-wrapper {
-       background: [[setting:backgroundcolor]];
+    background: [[setting:backgroundcolor]];
 }
 
 a {
-       color: [[setting:linkcolor]];
+    color: [[setting:linkcolor]];
 }
 
 a:hover {
-       color: #000;
+    color: #000;
 }
 
-.yui3-skin-sam .yui3-menu-label-active,
-.yui3-skin-sam .yui3-menu-label-menuvisible {
-       color: #fff;
-       background: [[setting:linkhover]] !important;
-}
-
-.yui3-skin-sam .yui3-menu .yui3-menu {
-       padding-top: 5px;
-       background: [[setting:linkhover]];
-       
-}
-
-
-
-.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu .yui3-menu-label-active,
-.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu .yui3-menu-label-menuvisible {
- color: #fff;
-       background-color: [[setting:linkhover]] !important;
+#custommenu .yui3-menu-content .yui3-menu-content,
+#custommenu .yui3-menu-label.yui3-menu-label-active,
+#custommenu .yui3-menuitem.yui3-menuitem-active .yui3-menuitem-content,
+#custommenu .yui3-menu .yui3-menu .yui3-menu-label,
+#custommenu .yui3-menu .yui3-menu .yui3-menuitem .yui3-menuitem-content {
+    background-color: [[setting:linkhover]];
+    background-image:none;
 }
 
 
-.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu-content {
-       background: [[setting:linkhover]];
+#custommenu .yui3-menu .yui3-menu .yui3-menu-label-active,
+#custommenu .yui3-menu .yui3-menu .yui3-menuitem-active .yui3-menuitem-content {
+    background-color:#333;
+    background-image:none;
 }
 
-.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu .yui3-menu-content {
-       background: [[setting:linkhover]];
+#custommenu .yui3-menu-horizontal.javascript-disabled li:hover a {
+    background-color: [[setting:linkhover]];
 }
\ No newline at end of file
index 76ea418..e76ed12 100644 (file)
+/**
+ * These are the styles for the custom menu in the nimble theme.
+ * Please note there are settings to alter the active menu background colour.
+ * The CSS for these settings is in colors.css
+ */
 #custommenu {
-       font-size: 1.2em;
-       line-height: 1.2;
-       float: left;
-       width:60%;
+    font-size: 1.2em;
+    line-height:2em;
+    float: left;
+    width:60%;
+    border-bottom:1px solid #454545;
 }
 
-.yui3-skin-sam .yui3-menu-content, 
-.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu-content {
-       border: none;
-       padding: 0 !important;
+#custommenu .yui3-menu-label {
+    margin-right:10px;
+    padding: 0 20px;
 }
 
-.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu-content {
-       
-    padding: 5px 0;
-    color: #fff;
+#custommenu .yui3-menu-label,
+#custommenu .yui3-menuitem-content {
+    border: 1px solid #555;
+    border-bottom-width: 0;
+    color:#FFF;
+    background-color:#333;
+    border-radius: 10px 10px 0 0;
+    -moz-border-radius: 10px 10px 0 0;
+    -webkit-border-radius: 10px 10px 0 0;
 }
 
-
-/* Horizontal menus */
-
-.yui3-skin-sam .yui3-menu-horizontal .yui3-menu-content {
-
-
-}
-
-
-.yui3-skin-sam .yui3-menu ul,
-.yui3-skin-sam .yui3-menu ul ul {
-
-}
-
-.yui3-skin-sam .yui3-menu ul.first-of-type {
-}
-
-.yui3-skin-sam .yui3-menu-horizontal ul {
-}
-
-
-.yui3-skin-sam .yui3-menu li,
-.yui3-skin-sam .yui3-menu .yui3-menu li {
-
-}
-
-.yui3-skin-sam .yui3-menu-horizontal li {
-
-}
-
-.yui3-skin-sam .yui3-menubuttonnav li {
-
-}
-
-.yui3-skin-sam .yui3-splitbuttonnav li {
-
-}
-
-.yui3-skin-sam .yui3-menubuttonnav li li,
-.yui3-skin-sam .yui3-splitbuttonnav li li {
-
-}
-
-
-/* Menuitems and menu labels */
-
-
-.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu {
-       background: #333 !important;
-}
-.custom_menu_submenu .custom_menu_submenu {
-       
-}
-
-
-.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu {
-       padding-top: 0;
-       background: none;
-}
-
-.yui3-skin-sam .yui3-menuitem-content,
-.yui3-skin-sam .yui3-menu-label {
-       color: #fff !important;
-}
-
-.yui3-skin-sam .yui3-menuitem-content,
-.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menuitem-content {
-       padding-top: 3px;
-       padding-bottom: 4px;
-       color: #fff !important;
-
-}
-
-.yui3-skin-sam .yui3-menu-horizontal .yui3-menu-label,
-.yui3-skin-sam .yui3-menu-horizontal .yui3-menuitem-content {
-       color: #fff !important;
-}
-
-.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu .yui3-menuitem-active .yui3-menuitem-content {
-       color: #fff;
-       background-color: #333;
-
+#custommenu .yui3-menu .yui3-menu .yui3-menu-label,
+#custommenu .yui3-menu .yui3-menu .yui3-menuitem-content {
+    margin-right:0;
+    border-width:0;
+    padding:3px 20px 4px;
+    border-radius:0;
+    -moz-border-radius: 0;
+    -webkit-border-radius: 0;
 }
 
-.yui3-skin-sam .yui3-menu-label,
-.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu-label {
-       padding-top: 3px;
-       padding-bottom: 4px;
-       border-radius:0;
-       -moz-border-radius: 0;
-       -webkit-border-radius: 0;
-       color: #fff !important;
-
-}
-
-.yui3-skin-sam .yui3-menu-horizontal .yui3-menu-label {
-       border: solid #555;
-       border-width: 1px 1px 0 1px;
-       padding: 0 20px 0 20px;
-       margin: 0 10px 0 0;
-       background: #333;
-       border-radius: 10px 10px 0 0;
-       -moz-border-radius: 10px 10px 0 0;
-       -webkit-border-radius: 10px 10px 0 0;   
-
-}
-
-.yui3-skin-sam .yui3-menubuttonnav .yui3-menu-label,
-.yui3-skin-sam .yui3-splitbuttonnav .yui3-menu-label {
-
-
-}
-
-.yui3-skin-sam .yui3-menubuttonnav .yui3-menu-label {
-
-
+#custommenu .yui3-menu-content {
+    border-width:0;
+    padding:0;
 }
 
-.yui3-skin-sam .yui3-menubuttonnav .yui3-menu-label em {
-
-
+#custommenu .yui3-menu-content .yui3-menu-content {
+    padding-top:5px;
 }
 
-
-.yui3-skin-sam .yui3-splitbuttonnav .yui3-menu-label {
-
-
+#custommenu .yui3-menu-content .yui3-menu-content .yui3-menu-content {
+    padding-top:0;
 }
 
-.yui3-skin-sam .yui3-splitbuttonnav .yui3-menu-label a {
-
-
+#custommenu .yui3-menuitem-active {
+    background-color: transparent;
 }
 
-.yui3-skin-sam .yui3-splitbuttonnav .yui3-menu-label .yui3-menu-toggle {
-       
-       
-}
-
-
-/* Selected menuitem */
-
-
-
-.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu-label-active,
-.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu-label-menuvisible {
- color: #fff;
-       background-color: #333 !important;
-}
-
-.yui3-skin-sam .yui3-menuitem-active .yui3-menuitem-content,
-.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menuitem-active .yui3-menuitem-content {
-       color: #fff;
-       background-color: #333;
-
-}
-
-
-
-
-
-.yui3-skin-sam .yui3-menu-horizontal .yui3-menu-label-active,
-.yui3-skin-sam .yui3-menu-horizontal .yui3-menuitem-active .yui3-menuitem-content,
-.yui3-skin-sam .yui3-menu-horizontal .yui3-menu-label-menuvisible {
-}
-
-.yui3-skin-sam .yui3-menubuttonnav .yui3-menu-label-active,
-.yui3-skin-sam .yui3-menubuttonnav .yui3-menuitem-active .yui3-menuitem-content,
-.yui3-skin-sam .yui3-menubuttonnav .yui3-menu-label-menuvisible,
-.yui3-skin-sam .yui3-splitbuttonnav .yui3-menu-label-active,
-.yui3-skin-sam .yui3-splitbuttonnav .yui3-menuitem-active .yui3-menuitem-content,
-.yui3-skin-sam .yui3-splitbuttonnav .yui3-menu-label-menuvisible {
-
-
-}
-
-.yui3-skin-sam .yui3-splitbuttonnav .yui3-menu-label-menuvisible {
-
-
-}
-
-.yui3-skin-sam .yui3-splitbuttonnav .yui3-menu-label-menuvisible .yui3-menu-toggle {
-
-
+#custommenu .yui3-menu-horizontal.javascript-disabled li a {
+    padding:3px 20px 4px;
 }
 
 #custommenu .yui3-menu-horizontal.javascript-disabled .yui3-menu-content,
-#custommenu .yui3-menu-horizontal.javascript-disabled .yui3-menu-content .ul {border:none !important;}
-#custommenu .yui3-menu-horizontal.javascript-disabled li a {padding:0 20px 0 0;}
+#custommenu .yui3-menu-horizontal.javascript-disabled .yui3-menu-content .ul {
+    border-width:0;
+}
index e431fee..fa3b2e1 100644 (file)
@@ -121,7 +121,6 @@ a:active {
        font-size: 0.95em;
 }
 
-.
 /* Forums
 ---------------------------*/
 
@@ -164,83 +163,47 @@ a:active {
 }
 
 /* Custom Menu */
-/*custom menu styles */
 #custommenuwrap {
     clear: both;
     padding-top: 4px;
 }    
 
 #custommenu {
-    border: none !important;
-    border: 0px solid #fff !important;
+    border-width: 0;
 }
 
-#custommenu * {
-    border: none !important;
-}
-
-/*YUI Reset */
-.yui3-skin-sam #page .yui3-menu-horizontal .yui3-menu-content{ 
-   background-position: -10000px -10000px; 
-}
-
-.yui3-skin-sam #page .yui3-menu-horizontal .yui3-menu-label{ 
-    background-position: -10000px -10000px; 
-}
-
-.yui3-skin-sam #page .yui3-menu-horizontal .yui3-menu-label-active,.yui3-skin-sam #page .yui3-menu-horizontal .yui3-menuitem-active .yui3-menuitem-content,.yui3-skin-sam #page .yui3-menu-horizontal .yui3-menu-label-menuvisible{
-    background-position: -10000px -10000px; 
-}
-
-.yui3-skin-sam #page .yui3-menu-label,
-.yui3-skin-sam #page .yui3-menu .yui3-menu .yui3-menu-label {
-    background-position: right center; 
-}
-
-.yui3-skin-sam #page .yui3-menubuttonnav .yui3-menu-label em {
-    background-position: right center; 
-}
-
-.yui3-skin-sam #page .yui3-splitbuttonnav .yui3-menu-label .yui3-menu-toggle { 
-    background-position: 3px center;
-}
-
-.yui3-skin-sam #page .yui3-splitbuttonnav .yui3-menu-label-menuvisible .yui3-menu-toggle {
-    background-position: 0% 50%; 
-}
-
-.yui3-skin-sam #page .yui3-menu-label, .yui3-skin-sam #page .yui3-menuitem-content  {
+#page-header #custommenu .yui3-menu-label,
+#page-header #custommenu .yui3-menuitem-content  {
     color: #fff;
     font-weight: 600;
     text-decoration: none;
     padding-left: 0px;
-    padding-right: 20px !important;
+    padding-right: 20px ;
     text-shadow: 0 -1px 1px #000;
+    margin: -2px 0;
 }
 
-.custom_menu_submenu .yui3-menu-label, .custom_menu_submenu .yui3-menuitem-content {
-    color: #333 !important;
-    padding-left: 5px !important;
-    text-shadow:none !important;
+#page-header #custommenu .custom_menu_submenu .yui3-menu-label,
+#page-header #custommenu .custom_menu_submenu .yui3-menuitem-content {
+    color: #333;
+    padding-left: 5px;
+    text-shadow: none;
 }
 
-.yui3-skin-sam #page .yui3-menu-label.yui3-menu-label-active, .yui3-skin-sam #page .yui3-menuitem-active .yui3-menuitem-content {
+#custommenu .yui3-menu-label-active,
+#custommenu .yui3-menuitem-active .yui3-menuitem-content {
     color: #ccc;
 }
 
-.yui3-skin-sam #page .yui3-menu-content, .yui3-skin-sam #page .yui3-menu-content, .yui3-skin-sam #page .yui3-menu .yui3-menu .yui3-menu-content, .yui3-skin-sam #page .yui3-menu-horizontal .yui3-menu-label, .yui3-skin-sam #page .yui3-menu-horizontal .yui3-menuitem-content  {
-    border: none;
+#custommenu .yui3-menu-content,
+#custommenu .yui3-menu-label,
+#custommenu .yui3-menuitem-content  {
+    border-width: 0;
 }
 
-.yui3-skin-sam .yui3-menu-horizontal .yui3-menu-label, .yui3-skin-sam .yui3-menu-horizontal .yui3-menuitem-content {
-    border-color:#808080;
-    border-style:solid;
-    border-width:0px 0;
-}
-
-#page .custom_menu_submenu {
-    border: 1px solid #27608d !important;
-    border-top: none !important;
+#custommenu .custom_menu_submenu {
+    border: 1px solid #27608d;
+    border-top-width: 0;
     background: #fff;
     -webkit-border-radius: 2px;
     -moz-border-radius: 2px;
@@ -250,5 +213,13 @@ a:active {
     box-shadow: 0px 1px 3px #ccc;
 }
 
+#custommenu .custom_menu_submenu .custom_menu_submenu .yui3-menu-content {
+    border-top:1px solid #333;
+}
+
+#custommenu .yui3-menu-horizontal.javascript-disabled .yui3-menu-content {
+    border-width:0;
+}
+
 /** Custom CSS **/
 [[setting:customcss]]
index 556884a..b3a4ff6 100644 (file)
@@ -1,37 +1,37 @@
 
-.yui3-skin-sam .yui3-menu-content,
-.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu-content,
-.yui3-skin-sam .yui3-menu-horizontal .yui3-menu-label,.yui3-skin-sam .yui3-menu-horizontal .yui3-menuitem-content{
-       border: 0px none;
+#custommenu .yui3-menu-content,
+#custommenu .yui3-menu-label,
+#custommenu .yui3-menuitem-content {
+    border-width: 0;
 }
 
-.yui3-menu ul{
+#custommenu .yui3-menu ul{
        background:url([[pix:theme|sprite]]) repeat-x 0 0;
 }
 
-.yui3-menu ul li ul{
+#custommenu .yui3-menu ul li ul{
        background:#fff;
 }
 
-.yui3-menu ul li{
+#custommenu .yui3-menu ul li{
        border-right: 1px solid #ccc;
 }
 
-.yui3-menu ul li ul li{
+#custommenu .yui3-menu ul li ul li{
        border-right: none;
        border-bottom: 1px dashed #ccc;
        padding: 3px;
 }
-div.yui3-menu-content {
+#custommenu .yui3-menu-content {
        border: none !important;
 }
 
-ul.first-of-type li a {
-       border-top: none !important;
-       border-bottom: none !important;
+#custommenu ul.first-of-type li a {
+    border-top-width: 0;
+    border-bottom-width: 0;
 }
 
-ul.first-of-type li a:hover {
+#custommenu ul.first-of-type li a:hover {
        color: #003466;
 
-}
\ No newline at end of file
+}
index 69b95f4..eadc4ff 100644 (file)
@@ -277,37 +277,37 @@ a:active {
     padding-left: 6px;
     height: 33px;
     font-size: 1.2em;
-    margin-top: 0px !important;
-    padding-top: 0px !important;
-
-}
-
-#custommenu * { 
-    border:none;
+    margin-top: 0;
+    padding-top: 0;
 }
 
-#custommenu a:link, #custommenu a:visited { 
+#custommenu .yui3-menu-label,
+#custommenu .yui3-menuitem-content {
     text-decoration:none;
-    color: #666;
 }
 
-#custommenu a:active, #custommenu a:hover { 
+#custommenu .yui3-menu-label-active,
+#custommenu .yui3-menu-label-menuvisible,
+#custommenu .yui3-menuitem-active .yui3-menuitem-content {
     text-decoration:underline;
-    color: #666;
-    background: none;
+    background-color: transparent;
 }
 
+#custommenu .yui3-menu-content,
+#custommenu .yui3-menu-horizontal .yui3-menu-label,
+#custommenu .yui3-menu-horizontal .yui3-menuitem-content {border-width: 0;}
+
 #custommenu .yui3-menu-content ul.first-of-type li {
     border-right: 1px solid #e6d0d4;
 }
 
-#custommenu div.yui3-menu.custom_menu_submenu .yui3-menu-content {
+#custommenu .yui3-menu.custom_menu_submenu .yui3-menu-content {
     background:#6d1523;
     border:1px solid #fff;
     color: #fff;
 }
 
-#custommenu div.yui3-menu.custom_menu_submenu .yui3-menu-content a {
+#custommenu .yui3-menu.custom_menu_submenu .yui3-menu-content a {
     color: #fff;
 }
 
@@ -316,11 +316,11 @@ a:active {
     border-width:0;
 }
 
-.yui3-skin-sam .yui3-menu-label-active, 
-.yui3-skin-sam .yui3-menu-label-menuvisible, 
-.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu-label-active, 
-.yui3-skin-sam .yui3-menu .yui3-menu .yui3-menu-label-menuvisible {
+#custommenu .yui3-menu-label-active,
+#custommenu .yui3-menu-label-menuvisible,
+#custommenu .yui3-menuitem-active .yui3-menuitem-content {
     background-color: #605f5f;
+    color: #FFF;
 }
 
 /* Breadcrumb Navbar
@@ -624,4 +624,4 @@ ul.topics li#section-0, ul.weeks li#section-0 {
 
 /* Splash Theme Specific settings for Administrators to customise css.
 ---------------------------*/
-[[setting:customcss]]
\ No newline at end of file
+[[setting:customcss]]
index 20e52ed..8283217 100644 (file)
@@ -8,7 +8,7 @@
 .block .content {border-color: #dddddd;background-color:#FCFCFC;}
 .block .content hr {border-top-color:#999999;}
 .block .header .commands {font-size:0.9em;clear:both;}
-.block .header .commands .icon { padding-left:2px;padding-right:2px;margin-right:2px;}
+.block .header .commands .icon {margin-right:2px;}
 .block .footer {font-size:0.9em;text-align:center;clear:both;}
 .block.beingmoved {border-color: #f88;}
 
@@ -85,4 +85,4 @@
 .block_rss_client .list li .description {color:#555555;font-size:0.8em;padding-left:1em;}
 
 /** Site main menu **/
-.block_site_main_menu .footer select {font-size: 0.8em;}
+.block_site_main_menu .footer select {font-size: 0.8em;}
\ No newline at end of file
index 5e82835..2e4be71 100644 (file)
@@ -143,7 +143,14 @@ profile_load_data($user);
 
 
 // Prepare the editor and create form
-$editoroptions = array('maxfiles'=>EDITOR_UNLIMITED_FILES, 'maxbytes'=>$CFG->maxbytes, 'trusttext'=>false, 'forcehttps'=>false);
+$editoroptions = array(
+    'maxfiles'   => EDITOR_UNLIMITED_FILES,
+    'maxbytes'   => $CFG->maxbytes,
+    'trusttext'  => false,
+    'forcehttps' => false,
+    'context'    => $personalcontext
+);
+
 $user = file_prepare_standard_editor($user, 'description', $editoroptions, $personalcontext, 'user', 'profile', 0);
 $userform = new user_edit_form(null, array('editoroptions'=>$editoroptions));
 if (empty($user->country)) {
index b547dbb..e376086 100644 (file)
@@ -113,12 +113,25 @@ if (!empty($CFG->usetags)) {
 
 if ($user->id !== -1) {
     $usercontext = get_context_instance(CONTEXT_USER, $user->id);
-    $editoroptions = array('maxfiles'=>EDITOR_UNLIMITED_FILES, 'maxbytes'=>$CFG->maxbytes, 'trusttext'=>false, 'forcehttps'=>false);
+    $editoroptions = array(
+        'maxfiles'   => EDITOR_UNLIMITED_FILES,
+        'maxbytes'   => $CFG->maxbytes,
+        'trusttext'  => false,
+        'forcehttps' => false,
+        'context'    => $usercontext
+    );
+
     $user = file_prepare_standard_editor($user, 'description', $editoroptions, $usercontext, 'user', 'profile', 0);
 } else {
     $usercontext = null;
     // This is a new user, we don't want to add files here
-    $editoroptions = array('maxfiles'=>0, 'maxbytes'=>0, 'trusttext'=>false, 'forcehttps'=>false);
+    $editoroptions = array(
+        'maxfiles'=>0,
+        'maxbytes'=>0,
+        'trusttext'=>false,
+        'forcehttps'=>false,
+        'context' => $coursecontext
+    );
 }
 
 //create form