ÿØÿà JFIF    ÿÛ „  ( %"1!%)+...383,7(-.+  -+++--++++---+-+-----+---------------+---+-++7-----ÿÀ  ß â" ÿÄ     ÿÄ H    !1AQaq"‘¡2B±ÁÑð#R“Ò Tbr‚²á3csƒ’ÂñDS¢³$CÿÄ   ÿÄ %  !1AQa"23‘ÿÚ   ? ôÿ ¨pŸªáÿ —åYõõ\?àÒü©ŠÄï¨pŸªáÿ —åYõõ\?àÓü©ŠÄá 0Ÿªáÿ Ÿå[úƒ ú®ði~TÁbqÐ8OÕpÿ ƒOò¤Oè`–RÂáœá™êi€ßÉ< FtŸI“öÌ8úDf´°å}“¾œ6  öFá°y¥jñÇh†ˆ¢ã/ÃÐ:ªcÈ "Y¡ðÑl>ÿ ”ÏËte:qž\oäŠe÷󲍷˜HT4&ÿ ÓÐü6ö®¿øþßèô Ÿ•7Ñi’•j|“ñì>b…þS?*Óôÿ ÓÐü*h¥£ír¶ü UãS炟[AÐaè[ûª•õ&õj?†Éö+EzP—WeÒírJFt ‘BŒ†Ï‡%#tE Øz ¥OÛ«!1›üä±Í™%ºÍãö]°î(–:@<‹ŒÊö×òÆt¦ãº+‡¦%ÌÁ²h´OƒJŒtMÜ>ÀÜÊw3Y´•牋4ǍýʏTì>œú=Íwhyë,¾Ôò×õ¿ßÊa»«þˆѪQ|%6ž™A õ%:øj<>É—ÿ Å_ˆCbõ¥š±ý¯Ýƒï…¶|RëócÍf溪“t.СøTÿ *Ä¿-{†çàczůŽ_–^XþŒ±miB[X±d 1,é”zEù»& î9gœf™9Ð'.;—™i}!ôšåîqêÛ٤ёý£½ÆA–àôe"A$˝Úsäÿ ÷Û #°xŸëí(l »ý3—¥5m! rt`†0~'j2(]S¦¦kv,ÚÇ l¦øJA£Šƒ J3E8ÙiŽ:cÉžúeZ°€¯\®kÖ(79«Ž:¯X”¾³Š&¡* ….‰Ž(ÜíŸ2¥ª‡×Hi²TF¤ò[¨íÈRëÉ䢍mgÑ.Ÿ<öäS0í„ǹÁU´f#Vß;Õ–…P@3ío<ä-±»Ž.L|kªÀê›fÂ6@»eu‚|ÓaÞÆŸ…¨ááå>åŠ?cKü6ùTÍÆ”†sĤÚ;H2RÚ†õ\Ö·Ÿn'¾ ñ#ºI¤Å´%çÁ­‚â7›‹qT3Iï¨ÖÚ5I7Ë!ÅOóŸ¶øÝñØôת¦$Tcö‘[«Ö³šÒ';Aþ ¸èíg A2Z"i¸vdÄ÷.iõ®§)¿]¤À†–‡É&ä{V¶iŽ”.Ó×Õÿ û?h¬Mt–íª[ÿ Ñÿ ÌV(í}=ibÔ¡›¥¢±b Lô¥‡piη_Z<‡z§èŒ)iÖwiÇ 2hÙ3·=’d÷8éŽ1¦¸c¤µ€7›7Ø ð\á)} ¹fËí›pAÃL%âc2 í§æQz¿;T8sæ°qø)QFMð‰XŒÂ±N¢aF¨…8¯!U  Z©RÊ ÖPVÄÀÍin™Ì-GˆªÅËŠ›•zË}º±ŽÍFò¹}Uw×#ä5B¤{î}Ð<ÙD é©¤&‡ïDbàÁôMÁ.. /** * Advance grading form element * * Element-container for advanced grading custom input * * @package core_form * @copyright 2011 Marina Glancy * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ global $CFG; require_once("HTML/QuickForm/element.php"); require_once($CFG->dirroot.'/grade/grading/form/lib.php'); require_once('templatable_form_element.php'); if (class_exists('HTML_QuickForm')) { HTML_QuickForm::registerRule('gradingvalidated', 'callback', '_validate', 'MoodleQuickForm_grading'); } /** * Advance grading form element * * HTML class for a grading element. This is a wrapper for advanced grading plugins. * When adding the 'grading' element to the form, developer must pass an object of * class gradingform_instance as $attributes['gradinginstance']. Otherwise an exception will be * thrown. * This object is responsible for implementing functions to render element html and validate it * * @package core_form * @category form * @copyright 2011 Marina Glancy * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class MoodleQuickForm_grading extends HTML_QuickForm_input implements templatable { use templatable_form_element { export_for_template as export_for_template_base; } /** @var string html for help button, if empty then no help */ var $_helpbutton=''; /** @var array Stores attributes passed to the element */ private $gradingattributes; /** * Class constructor * * @param string $elementName Input field name attribute * @param mixed $elementLabel Label(s) for the input field * @param mixed $attributes Either a typical HTML attribute string or an associative array */ public function __construct($elementName=null, $elementLabel=null, $attributes=null) { parent::__construct($elementName, $elementLabel, $attributes); $this->_type = 'grading'; $this->gradingattributes = $attributes; } /** * Old syntax of class constructor. Deprecated in PHP7. * * @deprecated since Moodle 3.1 */ public function MoodleQuickForm_grading($elementName=null, $elementLabel=null, $attributes=null) { debugging('Use of class name as constructor is deprecated', DEBUG_DEVELOPER); self::__construct($elementName, $elementLabel, $attributes); } /** * Helper function to retrieve gradingform_instance passed in element attributes * * @return gradingform_instance */ public function get_gradinginstance() { if (is_array($this->gradingattributes) && array_key_exists('gradinginstance', $this->gradingattributes)) { return $this->gradingattributes['gradinginstance']; } else { return null; } } /** * Returns the input field in HTML * * @return string */ public function toHtml(){ global $PAGE; return $this->get_gradinginstance()->render_grading_element($PAGE, $this); } /** * get html for help button * * @return string html for help button */ public function getHelpButton(){ return $this->_helpbutton; } /** * The renderer of gradingform_instance will take care itself about different display * in normal and frozen states * * @return string */ public function getElementTemplateType(){ return 'default'; } /** * Called by HTML_QuickForm whenever form event is made on this element. * Adds necessary rules to the element and checks that coorenct instance of gradingform_instance * is passed in attributes * * @param string $event Name of event * @param mixed $arg event arguments * @param object $caller calling object * @return bool * @throws moodle_exception */ public function onQuickFormEvent($event, $arg, &$caller) { if ($event == 'createElement') { $attributes = $arg[2]; if (!is_array($attributes) || !array_key_exists('gradinginstance', $attributes) || !($attributes['gradinginstance'] instanceof gradingform_instance)) { throw new moodle_exception('exc_gradingformelement', 'grading'); } } $name = $this->getName(); if ($name && $caller->elementExists($name)) { $caller->addRule($name, $this->get_gradinginstance()->default_validation_error_message(), 'gradingvalidated', $this->gradingattributes); } return parent::onQuickFormEvent($event, $arg, $caller); } /** * Function registered as rule for this element and is called when this element is being validated. * This is a wrapper to pass the validation to the method gradingform_instance::validate_grading_element * * @param mixed $elementvalue value of element to be validated * @param array $attributes element attributes * @return MoodleQuickForm_grading */ public static function _validate($elementvalue, $attributes = null) { if (!$attributes['gradinginstance']->is_empty_form($elementvalue)) { return $attributes['gradinginstance']->validate_grading_element($elementvalue); } return true; } public function export_for_template(renderer_base $output) { $context = $this->export_for_template_base($output); $context['html'] = $this->toHtml(); return $context; } }